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); }
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); }
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); }
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))); }
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); }
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);