public void GathersPropertiesInCtor()
        {
            var testee = new TypeMappingSpec <Target, Source>()
                         as ITypeMappingSpecProperties <Target, Source>
            ;

            Assert.That(
                testee.SourceProperties.Count(),
                Is.EqualTo(2),
                "Expected two SourceProperties.");
            Assert.That(
                testee.SourceProperties.All(x => x.DeclaringType == typeof(Source)),
                "Expected SourceProperties to all have DeclaringType of Source."
                );
            Assert.That(
                testee.SourceProperties.Select(x => x.Name),
                Is.EquivalentTo(new[] { "Prop1", "Prop2" })
                );
            Assert.That(
                testee.TargetProperties.Count(),
                Is.EqualTo(2),
                "Expected two TargetProperties.");
            Assert.That(
                testee.TargetProperties.All(x => x.DeclaringType == typeof(Target)),
                "Expected TargetProperties to all have DeclaringType of Target."
                );
            Assert.That(
                testee.TargetProperties.Select(x => x.Name),
                Is.EquivalentTo(new[] { "Prop3", "Prop4" })
                );
        }
        public void UnmatchedCustomITargetValueExceptionText()
        {
            var targetValue = new Mock <ITargetValue <SimpleTarget> >(MockBehavior.Strict);

            targetValue.Setup(x => x.Description).Returns("DESC");
            targetValue.Setup(x => x.PropertyName).Returns("Derp");

            var mapper = FluentMapper
                         .ThatMaps <SimpleTarget>().From <SimpleSource>()
                         .ThatSets(tgt => tgt.B).From(src => src.A)
            ;

            mapper = new TypeMappingSpec <SimpleTarget, SimpleSource>(
                mapper.TargetValues.Concat(new[] { targetValue.Object }).ToArray(),
                mapper.SourceValues.ToArray(),
                mapper.CustomMappings.ToArray(),
                mapper.ConstructorFunc,
                mapper.Assembler
                );

            Assert.That(() => mapper.Create(), Throws.Exception);

            try
            {
                mapper.Create();
            }
            catch (Exception ex)
            {
                Assert.AreEqual("Target DESC is unmatched.", ex.Message);
            }
        }
示例#3
0
        public void Ctor()
        {
            var spec = new TypeMappingSpec <Target, Source>();

            var testee = spec.ThatSets(tgt => tgt.TargetProp)
                         as ISetterSpecProperties <Target, Source>
            ;

            Assert.That(testee.Spec, Is.SameAs(spec));
            Assert.That(testee.TargetProperty, Is.Not.Null);
            Assert.That(testee.TargetProperty.Name, Is.EqualTo(nameof(Target.TargetProp)));
            Assert.That(testee.TargetProperty.DeclaringType, Is.EqualTo(typeof(Target)));
        }
 WithTargetValues <TTarget, TSource>(
     this TypeMappingSpec <TTarget, TSource> spec,
     IEnumerable <ITargetValue <TTarget> > targetValues)
     where TTarget : class
     where TSource : class
 {
     return(new TypeMappingSpec <TTarget, TSource>(
                targetValues.ToArray(),
                spec.SourceValues.ToArray(),
                spec.CustomMappings.ToArray(),
                spec.ConstructorFunc,
                spec.Assembler
                ));
 }
示例#5
0
        public void MappingAction_Ctor()
        {
            var action = new Action <Target, Source>((tgt, src) => { /* no-op */ });

            var testee = new TypeMappingSpec <Target, Source>()
                         .Transforms().WithSourceProperties(new PropertyInfo[0])
                         .Transforms().WithTargetProperties(new PropertyInfo[0])
                         .Transforms().WithMappingActions(new [] { action })
                         .Properties();

            Assert.That(testee.MappingActions, Is.EqualTo(new[] { action }));
            Assert.That(testee.SourceProperties, Is.Empty);
            Assert.That(testee.TargetProperties, Is.Empty);
        }
        public void MappingActionOnly_Usage()
        {
            var called = false;
            var action = new Action <Target, Source>((tgt, src) => called = true);

            var testee = new TypeMappingSpec <Target, Source>()
                         .Transforms().WithTargetProperties(new PropertyInfo[0])
                         .Transforms().WithSourceProperties(new PropertyInfo[0])
                         .Transforms().WithMappingActions(new[] { action })
            ;
            var mapper = testee.Create();

            mapper.Map(new Source());

            Assert.That(called, Is.True);
        }
        IgnoringNestedSourceProperty <TTarget, TSource>(
            this TypeMappingSpec <TTarget, TSource> spec,
            Expression sourceExpression)
            where TTarget : class
            where TSource : class
        {
            var visitor = new MemberVisitor <TSource>();

            visitor.Visit(sourceExpression);

            foreach (var expression in visitor.MemberExpressions)
            {
                spec = spec.IgnoringSourceProperty(expression.Member.Name);
            }

            return(spec);
        }
 WithCustomMapper <TTarget, TSource>(
     this TypeMappingSpec <TTarget, TSource> spec,
     Expression customMapper)
     where TTarget : class
     where TSource : class
 {
     return(new TypeMappingSpec <TTarget, TSource>(
                spec.TargetValues.ToArray(),
                spec.SourceValues.ToArray(),
                new List <Expression>(spec.CustomMappings)
     {
         customMapper
     }.ToArray(),
                spec.ConstructorFunc,
                spec.Assembler
                ));
 }
        public void PropertiesSubset_ViaCtor()
        {
            var testee =
                new TypeMappingSpec <Target, Source>().Transforms()
                .WithTargetProperties(
                    typeof(Target).GetProperties().Where(x => x.Name != "Prop3")
                    ).Transforms()
                .WithSourceProperties(
                    typeof(Source).GetProperties().Where(x => x.Name != "Prop1")
                    ).Properties();

            Assert.That(testee.SourceProperties.Count(), Is.EqualTo(1));
            Assert.That(testee.TargetProperties.Count(), Is.EqualTo(1));
            Assert.That(
                testee.TargetProperties,
                Has.Some.Matches <PropertyInfo>(x => x.Name == "Prop4"));
            Assert.That(
                testee.SourceProperties,
                Has.Some.Matches <PropertyInfo>(x => x.Name == "Prop2"));
        }
示例#10
0
        public void From_Creates_Mapping()
        {
            var result = new TypeMappingSpec <Target, Source>()
                         .ThatSets(tgt => tgt.TargetProp).From(src => src.SourceProp)
                         as ITypeMappingSpecProperties <Target, Source>
            ;

            Assert.That(
                result.SourceProperties,
                Is.EqualTo(new[] { typeof(Source).GetProperty(nameof(Source.MatchingProp)) }));
            Assert.That(
                result.TargetProperties,
                Is.EqualTo(new[] { typeof(Target).GetProperty(nameof(Target.MatchingProp)) }));
            Assert.That(result.MappingActions.Count(), Is.EqualTo(1));

            var target = new Target();
            var source = new Source {
                SourceProp = "value"
            };

            result.MappingActions.Single()(target, source);
            Assert.That(target.TargetProp, Is.EqualTo(source.SourceProp));
        }
示例#11
0
        public void MultipleMappings()
        {
            var result = new TypeMappingSpec <Target, Source>()
                         .ThatSets(tgt => tgt.TargetProp).From(src => src.SourceProp)
                         .ThatSets(tgt => tgt.MatchingProp).From(src => src.MatchingProp)
                         as ITypeMappingSpecProperties <Target, Source>
            ;

            Assert.That(result.SourceProperties, Is.Empty);
            Assert.That(result.TargetProperties, Is.Empty);
            Assert.That(result.MappingActions.Count(), Is.EqualTo(2));

            var source = new Source {
                MatchingProp = 7
            };
            var target = new Target();

            foreach (var action in result.MappingActions)
            {
                action(target, source);
            }

            Assert.That(target.MatchingProp, Is.EqualTo(7));
        }
 Properties <TTgt, TSrc>(this TypeMappingSpec <TTgt, TSrc> spec)
 {
     return(spec);
 }
 Transforms <TTgt, TSrc>(this TypeMappingSpec <TTgt, TSrc> spec)
 {
     return(spec);
 }
示例#14
0
 protected override TypeMappingSpec <Target, Source> Configure(TypeMappingSpec <Target, Source> mappingSpec)
 {
     return(mappingSpec
            .ThatSets(tgt => tgt.Bar).From(src => 11));
 }