Пример #1
0
        public void Condition_Closure_Variable(bool isMapped)
        {
            bool captured = isMapped;

            var config = new HappyConfig(cfg =>
            {
                cfg.CreateMap <A, B>().ForMember(dest => dest.P1, opt => opt.Condition((ps, pd) => captured));
            });

            var mapper = config.CompileMapper();

            int newValue    = 1;
            int originValue = 5;
            var a           = new A {
                P1 = newValue
            };
            var b = new B {
                P1 = originValue
            };

            mapper.Map(a, b);

            int expected = isMapped ? newValue : originValue;

            Assert.AreEqual(expected, b.P1);
        }
Пример #2
0
        public void Condition_SatisfiedWithMapFrom_MemberIsMapped()
        {
            var config = new HappyConfig(cfg =>
            {
                cfg.CreateMap <A, X>().ForMember(d => d.P2, opt =>
                {
                    opt.MapFrom(s => s.P1);
                    opt.Condition((s, d) => s.P1 + d.P2 < 0);
                });
            });

            var mapper = config.CompileMapper();

            int newValue    = -10;
            int originValue = 5;
            var a           = new A {
                P1 = newValue
            };
            var x = new X {
                P2 = originValue
            };

            mapper.Map(a, x);

            Assert.AreEqual(newValue, x.P2);
        }
        public void Map_ListIsTarget_Success()
        {
            var config = new HappyConfig(cfg => cfg.CreateMap <Src, Dest>());

            config.AssertConfigurationIsValid();
            var mapper = config.CompileMapper();


            var srcList = new List <Src>();

            srcList.Add(new Src {
                Value1 = Gen.Int()
            });
            srcList.Add(new Src {
                Value1 = Gen.Int()
            });
            srcList.Add(new Src {
                Value1 = Gen.Int()
            });

            List <Dest> destList = new List <Dest>();

            destList.Add(new Dest());
            destList.Add(new Dest());
            destList.Add(new Dest());

            mapper.Map(srcList, destList);

            ObjectComparer.AreEqualCollections(srcList, destList);
        }
Пример #4
0
        public void Condition_NotSatisfiedOnASubClass_SubclassIsNotMapped()
        {
            var config = new HappyConfig(cfg =>
            {
                cfg.CreateMap <A, B>().ForMember(dest => dest.P1, opt => opt.Condition((ps, pd) => ps.P1 + pd.P1 < 0));
                cfg.CreateMap <C, D>();
            });

            var mapper = config.CompileMapper();

            int newValue    = 1;
            int originValue = 5;
            var a           = new A {
                P1 = newValue
            };
            var b = new B {
                P1 = originValue
            };
            var c = new C {
                A = a
            };
            var d = new D {
                B = b
            };

            mapper.Map(c, d);

            Assert.AreEqual(originValue, b.P1);
        }
        public void Map_ListIsMappedProperty_Success()
        {
            var config = new HappyConfig(cfg =>
            {
                cfg.CreateMap <Src, Dest>();
                cfg.CreateMap <SrcWrap, DestWrap>();
            });

            config.AssertConfigurationIsValid();
            var mapper = config.CompileMapper();

            var srcList = new List <Src>();

            srcList.Add(new Src {
                Value1 = 1
            });

            List <Dest> destList = new List <Dest>();

            destList.Add(new Dest());

            SrcWrap srcWrap = new SrcWrap {
                P1 = srcList
            };
            DestWrap destWrap = new DestWrap {
                P1 = destList
            };

            mapper.Map(srcWrap, destWrap);

            Assert.AreEqual(srcWrap.P1[0].Value1, destWrap.P1[0].Value1);
        }
Пример #6
0
        public void Ignore_IgnoreNotMappedDestinationMember_ConfigurationIsValid()
        {
            var config = new HappyConfig(cfg =>
            {
                cfg.CreateMap <A, C>().ForMember(d => d.P2, opt => opt.Ignore());
            });

            Assert.DoesNotThrow(() => config.AssertConfigurationIsValid());
        }
Пример #7
0
        private static void PrintPropertyMaps(HappyConfig config)
        {
            var propertyMaps = config.TypeMaps.Values.SelectMany(tm => tm.PropertyMaps).ToList();

            foreach (var propertyMap in propertyMaps)
            {
                Console.WriteLine(propertyMap.ToString());
            }
        }
Пример #8
0
        public void MapperConfiguration_CreateMap()
        {
            var config = new HappyConfig(cfg =>
            {
                cfg.CreateMap <A, B>().ForMember(d => d.MyProperty, opt => opt.Ignore());
                cfg.CreateMap <C, D>().ForMember(d => d.MyProperty, opt => opt.MapFrom(s => s.MyProperty));
                cfg.CreateMap <X, A>().ForMember(d => d.MyProperty, opt => opt.MapFrom(s => s.Foo));
            });

            PrintPropertyMaps(config);
        }
        private static SingleMapper <Src, Dest> CreateSingleMapper()
        {
            var config = new HappyConfig(cfg =>
            {
                cfg.CreateMap <Src, Dest>();
            });
            var mapper = config.CompileMapper();

            var singleMapper = mapper.GetSingleMapper <Src, Dest>();

            return(singleMapper);
        }
 public void GetSingleMapper_NoMap_ThrowsEx()
 {
     Assert.Throws(Is.TypeOf <HappyMapperException>()
                   , () =>
     {
         var config = new HappyConfig(cfg =>
         {
             cfg.CreateMap <NestedSrc, NestedDest>();
         });
         var mapper       = config.CompileMapper();
         var singleMapper = mapper.GetSingleMapper <Src, Dest>();
     });
 }
Пример #11
0
        public Action <TSrc, TDest> CreateMapMethod <TSrc, TDest>()
            where TSrc : class, new() where TDest : class, new()
        {
            var config = new HappyConfig(cfg =>
            {
                cfg.CreateMap <TSrc, TDest>();
            });

            var mapper = config.CompileMapper();

            Action <TSrc, TDest> action = (src, dest) => mapper.Map(src, dest);

            return(action);
        }
Пример #12
0
        public TDest Map <TSrc, TDest>(TSrc src) where TSrc : class, new() where TDest : class, new()
        {
            var config = new HappyConfig(cfg =>
                                         cfg.CreateMap <TSrc, TDest>());

            config.AssertConfigurationIsValid();

            var mapper = config.CompileMapper();

            TDest dest = new TDest();

            mapper.Map(src, dest);

            return(dest);
        }
        public void CreateCodeFiles_Success()
        {
            var config = new HappyConfig(cfg =>
            {
                cfg.CreateMap <A, B>();
                cfg.CreateMap <A1, B1>().ForMember(d => d.Id, opt => opt.Ignore());
                cfg.CreateMap <A2, B2>();
            });

            var typeMaps = config.TypeMaps;
            var mtb      = new SingleFileBuilder(typeMaps, config.Configuration);

            var files = mtb.Build().Files;

            Print(files);
        }
Пример #14
0
        public void Before_and_After_should_be_called()
        {
            var beforeMapCalled = false;
            var afterMapCalled  = false;

            var config = new HappyConfig(cfg => cfg.CreateMap <Source, Destination>()
                                         .BeforeMap((src, dest) => beforeMapCalled = true)
                                         //.AfterMap((src, dest) => afterMapCalled = true)
                                         );

            var mapper = config.CompileMapper();

            mapper.Map(new Source(), new Destination());

            Assert.IsTrue(beforeMapCalled);
            //Assert.IsTrue(afterMapCalled);
        }
Пример #15
0
        public void Mapper_MapSimpleReferenceTypes_Success()
        {
            var config = new HappyConfig(cfg =>
            {
                cfg.CreateMap <Src, Dest>();
            });
            var mapper = config.CompileMapper();

            var src  = new Src();
            var dest = new Dest();

            mapper.Map(src, dest);

            var result = ObjectComparer.AreEqual(src, dest);

            Assert.IsTrue(result.Success);
        }
        public void Map_ListToLinkedList_Success()
        {
            var config = new HappyConfig(cfg => cfg.CreateMap <Src, Dest>());

            config.AssertConfigurationIsValid();
            var mapper = config.CompileMapper();

            var src = new List <Src>();

            src.Add(new Src {
                Id = 1
            });

            var dest = mapper.Map <List <Src>, LinkedList <Dest> >(src);

            ObjectComparer.AreEqualCollections(src, dest);
        }
Пример #17
0
        public void Mapper_MapNestedReferenceTypes_Success()
        {
            var config = new HappyConfig(cfg =>
            {
                cfg.CreateMap <NestedSrc, NestedDest>();
            });
            var mapper = config.CompileMapper();

            var src  = new NestedSrc();
            var dest = new NestedDest();

            mapper.Map(src, dest);

            var result = ObjectComparer.AreEqual(src, dest);

            result.Errors.ForEach(Console.WriteLine);
            Assert.IsTrue(result.Success);
        }
        public void CompileMapper_NoDestChildCtor_ThrowsEx()
        {
            Assert.Throws(Is.TypeOf <HappyMapperException>()
                          .And.Message.ContainsSubstring("parameterless ctor"),
                          delegate
            {
                var config = new HappyConfig(cfg =>
                {
                    cfg.CreateMap <Src, Dest>();
                });
                var mapper = config.CompileMapper();

                //var src = new Src();
                //var dest = new Dest();

                //mapper.Map(src, dest);
            });
        }
        public void Mapper_MapSimpleTypes_Success()
        {
            var config = new HappyConfig(cfg =>
            {
                cfg.CreateMap <Src, Dest>();
            });
            var mapper = config.CompileMapper();

            var src = new Src {
                Id = 1
            };

            var dest = mapper.Map <Dest>(src);

            var result = ObjectComparer.AreEqual(src, dest);

            result.Errors.ForEach(Console.WriteLine);
            Assert.IsTrue(result.Success);
        }
Пример #20
0
        public void Mapper_MapNullDestChild_CreatesObject()
        {
            var config = new HappyConfig(cfg =>
            {
                cfg.CreateMap <Src, Dest>();
            });
            var mapper = config.CompileMapper();

            var src = new Src {
                Child = new SrcChild()
            };
            var dest = new Dest();

            Assert.IsNull(dest.Child);

            mapper.Map(src, dest);

            Assert.IsNotNull(dest.Child);
        }
Пример #21
0
        public void MapFrom_SetMemberWithDifferentName_MemberIsMapped()
        {
            var config = new HappyConfig(cfg =>
            {
                cfg.CreateMap <A, B>().ForMember(d => d.P2, opt => opt.MapFrom(s => s.P1));
            });

            var mapper = config.CompileMapper();

            var a = new A {
                P1 = 1
            };
            var b = new B {
                P2 = 2
            };

            mapper.Map(a, b);

            Assert.AreEqual(1, b.P2);
        }
Пример #22
0
        public void Ignore_IgnoreMappableDestinationMember_MemberIsNotMapped()
        {
            var config = new HappyConfig(cfg =>
            {
                cfg.CreateMap <A, B>().ForMember(d => d.P1, opt => opt.Ignore());
            });

            var mapper = config.CompileMapper();

            var a = new A {
                P1 = 1
            };
            var b = new B {
                P1 = 2
            };

            mapper.Map(a, b);

            Assert.AreEqual(2, b.P1);
        }
        public void CreateText_RootLevelOnlyMapped()
        {
            var config = new HappyConfig(cfg =>
            {
                cfg.CreateMap <A, B>();
            });

            var typeMaps = config.TypeMaps;

            foreach (var kvp in typeMaps)
            {
                TypePair typePair = kvp.Key;
                TypeMap  map      = kvp.Value;

                var    mtb  = new MethodInnerCodeBuilder(typeMaps, config.Configuration);
                string text = mtb.GetAssignment(map).RelativeTemplate;

                Console.WriteLine(typePair.ToString());
                Console.WriteLine(text);
                Console.WriteLine();
            }
        }
Пример #24
0
            public void Before_and_After_should_be_called()
            {
                var beforeMapCount = 0;
                var afterMapCount  = 0;

                var config = new HappyConfig(cfg =>
                {
                    cfg.CreateMap <Source, Destination>()
                    .BeforeMap((src, dest) => beforeMapCount++)
                    .BeforeMap((src, dest) => beforeMapCount++)
                    //.AfterMap((src, dest) => afterMapCount++)
                    //.AfterMap((src, dest) => afterMapCount++)
                    ;
                });

                var mapper = config.CompileMapper();

                mapper.Map(new Source(), new Destination());

                Assert.AreEqual(2, beforeMapCount);
                //afterMapCount.ShouldEqual(2);
            }
Пример #25
0
        public void Condition_Satisfied_MemberIsMapped()
        {
            var config = new HappyConfig(cfg =>
            {
                cfg.CreateMap <A, B>().ForMember(d => d.P1, opt => opt.Condition((s, d) => s.P1 + d.P1 < 0));
            });

            var mapper = config.CompileMapper();


            int newValue    = -10;
            int originValue = 5;
            var a           = new A {
                P1 = newValue
            };
            var b = new B {
                P1 = originValue
            };

            mapper.Map(a, b);

            Assert.AreEqual(newValue, b.P1);
        }
        public void CreateText_IgnoreAtSubLevel()
        {
            var config = new HappyConfig(cfg =>
            {
                cfg.CreateMap <A, B>();
                cfg.CreateMap <A1, B1>().ForMember(d => d.Id, opt => opt.Ignore());
                cfg.CreateMap <A2, B2>();
            });

            var typeMaps = config.TypeMaps;
            var mtb      = new MethodInnerCodeBuilder(typeMaps, config.Configuration);

            foreach (var kvp in typeMaps)
            {
                TypePair typePair = kvp.Key;
                TypeMap  map      = kvp.Value;

                string text = mtb.GetAssignment(map).RelativeTemplate;

                Console.WriteLine(typePair.ToString());
                Console.WriteLine(text);
                Console.WriteLine();
            }
        }
Пример #27
0
        public void Condition_Closure_AnotherAssembly()
        {
            var config = new HappyConfig(cfg =>
            {
                cfg.CreateMap <A, B>().ForMember(dest => dest.P1, opt => opt.Condition((ps, pd) => GlobalContext.NegativeFlag));
            });

            var mapper = config.CompileMapper();

            int newValue    = 1;
            int originValue = 5;
            var a           = new A {
                P1 = newValue
            };
            var b = new B {
                P1 = originValue
            };

            mapper.Map(a, b);

            int expected = GlobalContext.NegativeFlag ? newValue : originValue;

            Assert.AreEqual(expected, b.P1);
        }
Пример #28
0
        public void Mapper_MapNullDestList_CreatesList()
        {
            var config = new HappyConfig(cfg =>
            {
                cfg.CreateMap <SrcWrap, DestWrap>();
                cfg.CreateMap <SrcChild, DestChild>();
            });
            var mapper = config.CompileMapper();

            var src = new SrcWrap {
                List = new List <SrcChild> {
                    new SrcChild {
                        P1 = 1
                    }
                }
            };
            var dest = new DestWrap();

            Assert.IsNull(dest.List);

            mapper.Map(src, dest);

            Assert.IsTrue(dest.List.Count > 0);
        }
        public void Map_ListOfLists_Success()
        {
            var config = new HappyConfig(cfg =>
            {
                cfg.CreateMap <Src, Dest>();
                cfg.CreateMap <SrcWrapLevel2, DestWrapLevel2>();
            });

            config.AssertConfigurationIsValid();
            var mapper = config.CompileMapper();

            var srcListA = new List <Src>();

            srcListA.Add(new Src {
                Value1 = Gen.Int()
            });
            srcListA.Add(new Src {
                Value1 = Gen.Int()
            });
            srcListA.Add(new Src {
                Value1 = Gen.Int()
            });

            var srcListB = new List <Src>();

            srcListB.Add(new Src {
                Value1 = Gen.Int()
            });
            srcListB.Add(new Src {
                Value1 = Gen.Int()
            });

            var srcListL2 = new List <List <Src> >();

            srcListL2.Add(srcListA);
            srcListL2.Add(srcListB);


            var destList   = new List <Dest>();
            var destListL2 = new List <List <Dest> >();

            destList.Add(new Dest());
            destListL2.Add(destList);

            var srcWrap = new SrcWrapLevel2 {
                P1 = srcListL2
            };
            var destWrap = new DestWrapLevel2 {
                P1 = destListL2
            };

            mapper.Map(srcWrap, destWrap);
            //Mapper_SrcWrapLevel2_DestWrapLevel2_8bae.Map(srcWrap, destWrap);

            for (int i = 0; i < srcWrap.P1.Count; i++)
            {
                for (int j = 0; j < srcWrap.P1[i].Count; j++)
                {
                    var src  = srcWrap.P1[i][j];
                    var dest = destWrap.P1[i][j];

                    var result = ObjectComparer.AreEqual(src, dest);

                    Assert.IsTrue(result.Success);
                }
            }
        }