public void Read_Write_Nested_Property()
        {
            var source = new SourceClass
            {
                Value  = "Hello World",
                Nested = new SourceClass
                {
                    Value = "Hello Nested"
                }
            };
            var target = new TargetClass();

            var reader = new ObjectDataModelReader <SourceClass>(source);
            var writer = new ObjectDataModelWriter <TargetClass>(target);

            Assert.IsNotNull(reader.ReadField <SourceClass>(reader.Model[nameof(SourceClass.Nested)]));
            reader.EnterMember(reader.Model[nameof(SourceClass.Nested)]);
            writer.EnterMember(writer.Model[nameof(TargetClass.Nested)]);

            writer.WriteField(
                writer.Model[nameof(TargetClass.Value)],
                reader.ReadField <string>(reader.Model[nameof(SourceClass.Value)])
                );

            writer.LeaveMember();
            reader.LeaveMember();

            Assert.IsNotNull(target.Nested);
            Assert.AreEqual(source.Nested.Value, target.Nested.Value);
        }
Exemple #2
0
        public void InjectSingle(QueryResult queryResult, TView instance)
        {
            var entity       = _objectFactory.CreateInstance <TEntity>();
            var entityReader = new QueryResultModelReader <TEntity>(_storageModel, queryResult);
            var entityWriter = new ObjectDataModelWriter <TEntity>(entity, _objectFactory);

            _toEntityMapping.Run(entityReader, entityWriter);

            var viewReader = new ObjectDataModelReader <TEntity>(entity);
            var viewWriter = new ObjectDataModelWriter <TView>(instance, _objectFactory);

            _toViewMapping.Run(viewReader, viewWriter);
        }
        public void Read_Write_Top_Level_Property()
        {
            var source = new SourceClass {
                Value = "Hello World"
            };
            var target = new TargetClass();

            var reader = new ObjectDataModelReader <SourceClass>(source);
            var writer = new ObjectDataModelWriter <TargetClass>(target);

            writer.WriteField(
                writer.Model[nameof(SourceClass.Value)],
                reader.ReadField <string>(reader.Model[nameof(TargetClass.Value)])
                );

            Assert.AreEqual(source.Value, target.Value);
        }
Exemple #4
0
        public void Can_Map_Top_Value_To_Deep_Value_Between_Objects()
        {
            var mapping = new TypeBindingBuilder <Source, Target>()
                          .Bind(t => t.Nested.FlatValue, s => s.FlatValue)
                          .BuildBinding()
                          .BuildMapping();

            var source = new Source {
                FlatValue = "Hello World"
            };
            var target = new Target();

            var sourceReader = new ObjectDataModelReader <Source>(source);
            var targetWriter = new ObjectDataModelWriter <Target>(target);

            mapping.Run(sourceReader, targetWriter);

            Assert.AreEqual(source.FlatValue, target.Nested.FlatValue);
        }
Exemple #5
0
        public void Converts_Field_Values()
        {
            var mapping = new TypeBindingBuilder <Source, Target>()
                          .Bind(t => t.ValueType, s => s.ValueType, value => value + 10)
                          .BuildBinding()
                          .BuildMapping();

            var source = new Source {
                ValueType = 10
            };
            var target = new Target();

            var sourceReader = new ObjectDataModelReader <Source>(source);
            var targetWriter = new ObjectDataModelWriter <Target>(target);

            mapping.Run(sourceReader, targetWriter);

            Assert.AreEqual(source.ValueType + 10, target.ValueType);
        }
        public void Read_Write_Enumerable()
        {
            var source = new SourceClass
            {
                Enumerable = new[]
                {
                    new SourceClass {
                        Value = "Value 1"
                    },
                    new SourceClass {
                        Value = "Value 2"
                    }
                }
            };
            var target = new TargetClass();

            var reader = new ObjectDataModelReader <SourceClass>(source);
            var writer = new ObjectDataModelWriter <TargetClass>(target);

            reader.EnterMember(reader.Model[nameof(SourceClass.Enumerable)]);
            reader.EnterEnumerable();
            writer.EnterMember(writer.Model[nameof(TargetClass.Enumerable)]);
            writer.EnterEnumerable();

            while (reader.MoveNext())
            {
                writer.MoveNext();
                writer.WriteField(
                    writer.Model[nameof(target.Value)],
                    reader.ReadField <string>(reader.Model[nameof(SourceClass.Value)])
                    );
            }

            writer.LeaveEnumerable();
            writer.LeaveMember();
            reader.LeaveEnumerable();
            reader.LeaveMember();

            Assert.IsNotNull(target.Enumerable);
            Assert.IsTrue(source.Enumerable.Select(q => q.Value).SequenceEqual(target.Enumerable.Select(q => q.Value)));
        }
Exemple #7
0
        public void Can_Map_With_Nulls_And_Leave_Defaults()
        {
            var mapping = new TypeBindingBuilder <Source, Target>()
                          .Bind(t => t.Nested.FlatValue, s => s.Nested.FlatValue) // will be null when mapped
                          .Bind(t => t.ValueType, s => s.ValueType)               // will be mapped after the null is hit
                          .BuildBinding()
                          .BuildMapping();

            var source = new Source {
                ValueType = 5
            };
            var target = new Target();

            var sourceReader = new ObjectDataModelReader <Source>(source);
            var targetWriter = new ObjectDataModelWriter <Target>(target);

            mapping.Run(sourceReader, targetWriter);

            Assert.IsNull(target.Nested);
            Assert.AreEqual(source.ValueType, target.ValueType);
        }
Exemple #8
0
        public void Ignores_Conversion_Failure()
        {
            var mapping = new TypeBindingBuilder <Source, Target>()
                          .Bind(
                t => t.ValueType,
                s => s.ValueType,
                (int @in, out int @out) => { @out = @in; return(false); }
                )
                          .BuildBinding()
                          .BuildMapping();

            var source = new Source {
                ValueType = 10
            };
            var target = new Target();

            var sourceReader = new ObjectDataModelReader <Source>(source);
            var targetWriter = new ObjectDataModelWriter <Target>(target);

            mapping.Run(sourceReader, targetWriter);

            Assert.AreEqual(default, target.ValueType);