예제 #1
0
        public void Map_MockedInternalMappers_Redirects()
        {
            BaseMapper <TestClassB, TestClassD>[] mapperMocks =
                A.CollectionOfFake <BaseMapper <TestClassB, TestClassD> >(5).ToArray();
            var results = new List <IEnumerable <MemberMappingInfo <TestClassB, TestClassD> > >();

            for (int i = 0; i < mapperMocks.Length; ++i)
            {
                var res = new[]
                {
                    A.Fake <MemberMappingInfo <TestClassB, TestClassD> >(
                        o => o.WithArgumentsForConstructor(
                            new object[]
                    {
                        Guid.NewGuid().ToString(),
                        Guid.NewGuid().ToString()
                    }))
                };

                results.Add(res);
                A.CallTo(() => mapperMocks[i].GetMappings())
                .Returns(res);
            }

            var target = new CompositeMapper <TestClassB, TestClassD>(mapperMocks);
            var source = new TestClassB();
            var result = new TestClassD();

            target.Map(source, result);

            foreach (var m in results.SelectMany(e => e))
            {
                A.CallTo(() => m.Map(source, result)).MustHaveHappened();
            }
        }
예제 #2
0
        public void AddMapping_MockedInternalMappers_Redirects()
        {
            BaseMapper <TestClassB, TestClassD>[] mapperMocks =
                A.CollectionOfFake <BaseMapper <TestClassB, TestClassD> >(5).ToArray();
            var extMock = A.Fake <BaseMapper <TestClassB, TestClassD> >(
                o => o.Implements(typeof(IExtensibleMapper <TestClassB, TestClassD>)));
            var        results = new List <IEnumerable <MemberMappingInfo <TestClassB, TestClassD> > >();
            Randomizer rnd     = Randomizer.GetRandomizer(typeof(CompositeMapper <,>).GetMethod("AddMapping"));
            int        extPos  = rnd.Next(mapperMocks.Length);

            for (int i = 0; i < mapperMocks.Length; ++i)
            {
                var res = new[]
                {
                    A.Fake <MemberMappingInfo <TestClassB, TestClassD> >(
                        o => o.WithArgumentsForConstructor(
                            new object[]
                    {
                        Guid.NewGuid().ToString(),
                        Guid.NewGuid().ToString()
                    }))
                };

                if (i == extPos)
                {
                    mapperMocks[i] = extMock;
                }

                results.Add(res);
                A.CallTo(() => mapperMocks[i].GetMappings())
                .Returns(res);
            }

            var target = new CompositeMapper <TestClassB, TestClassD>(mapperMocks);
            var source = new TestClassB();
            var result = new TestClassD();
            MappingAction <TestClassB, TestClassD> action = (s, t) => t.SomeOtherName = s.Name;

            target.AddMappingAction("foo", "bar", action);

            target.ExtensibleMapper.ShouldBeSameAs(extMock);
            A.CallTo(() =>
                     ((IExtensibleMapper <TestClassB, TestClassD>)extMock).AddMappingAction("foo", "bar", action))
            .MustHaveHappened();
        }
예제 #3
0
        public void AddMapping_MockedInternalMappers_Redirects()
        {
            var mapperMocks = A.CollectionOfFake<BaseMapper<TestClassB, TestClassD>>(5).ToArray();
            var extMock = A.Fake<BaseMapper<TestClassB, TestClassD>>(
                o => o.Implements(typeof(IExtensibleMapper<TestClassB, TestClassD>)));
            var results = new List<IEnumerable<MemberMappingInfo<TestClassB, TestClassD>>>();
            var rnd = NUnit.Framework.Randomizer.GetRandomizer(typeof(CompositeMapper<,>).GetMethod("AddMapping"));
            var extPos = rnd.Next(mapperMocks.Length);
            for (int i = 0; i < mapperMocks.Length; ++i)
            {
                var res = new MemberMappingInfo<TestClassB, TestClassD>[]
                {
                    A.Fake<MemberMappingInfo<TestClassB, TestClassD>>(
                        o => o.WithArgumentsForConstructor(
                            new object[]
                            {
                                Guid.NewGuid().ToString(),
                                Guid.NewGuid().ToString()
                            }))
                };

                if (i == extPos)
                {
                    mapperMocks[i] = extMock;
                }

                results.Add(res);
                A.CallTo(() => mapperMocks[i].GetMappings())
                    .Returns(res);
            }

            var target = new CompositeMapper<TestClassB, TestClassD>(mapperMocks);
            var source = new TestClassB();
            var result = new TestClassD();
            MappingAction<TestClassB, TestClassD> action = (s, t) => t.SomeOtherName = s.Name;
            target.AddMappingAction("foo", "bar", action);

            target.ExtensibleMapper.ShouldBeSameAs(extMock);
            A.CallTo(() =>
                ((IExtensibleMapper<TestClassB, TestClassD>)extMock).AddMappingAction("foo", "bar", action))
                .MustHaveHappened();
        }
예제 #4
0
        public IExtensibleMapper <TSource, TTarget> ResolveMapper <TSource, TTarget>()
        {
            var res = TryGetMapper <TSource, TTarget>();

            if (res == null)
            {
                lock (this.options)
                {
                    var innerMappers = new List <IMapper <TSource, TTarget> >();

                    var mapperTypes = this.options.MapperOrder;

                    foreach (var t in mapperTypes)
                    {
                        var targetType = t;
                        if (targetType.IsGenericType)
                        {
                            targetType = targetType.GetGenericTypeDefinition();
                            targetType = targetType.MakeGenericType(new Type[] { typeof(TSource), typeof(TTarget) });
                        }

                        var m = this.CreateMapper <TSource, TTarget>(targetType);

                        innerMappers.Add(m);
                    }

                    res = new CompositeMapper <TSource, TTarget>(
                        new MapperConstructionInfo(this),
                        innerMappers.ToArray());

                    AddMapper(res);
                }
            }

            return(res);
        }
예제 #5
0
        public void Map_MockedInternalMappers_Redirects()
        {
            BaseMapper<TestClassB, TestClassD>[] mapperMocks =
                A.CollectionOfFake<BaseMapper<TestClassB, TestClassD>>(5).ToArray();
            var results = new List<IEnumerable<MemberMappingInfo<TestClassB, TestClassD>>>();
            for (int i = 0; i < mapperMocks.Length; ++i)
            {
                var res = new[]
                {
                    A.Fake<MemberMappingInfo<TestClassB, TestClassD>>(
                        o => o.WithArgumentsForConstructor(
                            new object[]
                            {
                                Guid.NewGuid().ToString(),
                                Guid.NewGuid().ToString()
                            }))
                };

                results.Add(res);
                A.CallTo(() => mapperMocks[i].GetMappings())
                    .Returns(res);
            }

            var target = new CompositeMapper<TestClassB, TestClassD>(mapperMocks);
            var source = new TestClassB();
            var result = new TestClassD();

            target.Map(source, result);

            foreach (var m in results.SelectMany(e => e))
            {
                A.CallTo(() => m.Map(source, result)).MustHaveHappened();
            }
        }