public void CanTraverseAndWriteProperties() { //-- Arrange DeriveClassFrom <object>() .DefaultConstructor() .ImplementInterface <AncestorRepository.IPropertyContainersWriter>() .Method <AncestorRepository.IPropertyContainerOne, AncestorRepository.IPropertyContainerTwo, int>(intf => intf.SetAll).Implement( (m, container1, container2, value) => { container1.Prop(x => x.One).Prop(x => x.PropertyOne).Assign(value); container2.Prop(x => x.Two).Prop(x => x.PropertyOne).Assign(value); container2.Prop(x => x.Two).Prop(x => x.PropertyTwo).Assign(value); }); //-- Act var obj = CreateClassInstanceAs <AncestorRepository.IPropertyContainersWriter>().UsingDefaultConstructor(); var c1 = new PropertyContainerOneImpl() { One = new OnePropertyImpl() }; var c2 = new PropertyContainerTwoImpl() { Two = new TwoPropertiesImpl() }; obj.SetAll(c1, c2, 999); //-- Assert Assert.That(c1.One.PropertyOne, Is.EqualTo(999)); Assert.That(c2.Two.PropertyOne, Is.EqualTo(999)); Assert.That(c2.Two.PropertyTwo, Is.EqualTo(999)); }
public void CanTraverseAndReadAndWriteProperties() { //-- Arrange DeriveClassFrom <object>() .DefaultConstructor() .ImplementInterface <AncestorRepository.IPropertyContainersWriter>() .Method <AncestorRepository.IPropertyContainerOne, AncestorRepository.IPropertyContainerTwo, int>(intf => intf.SetAll).Implement( (m, container1, container2, value) => { var temp = m.Local <int>(); // int temp; temp.Assign(container1.Prop(x => x.One).Prop(x => x.PropertyOne)); // temp = container1.One.PropertyOne; container1.Prop(x => x.One).Prop(x => x.PropertyOne).Assign( // container1.One.PropertyOne = container2.Prop(x => x.Two).Prop(x => x.PropertyOne)); // container2.Two.PropertyOne; container2.Prop(x => x.Two).Prop(x => x.PropertyOne).Assign(temp); // container2.Two.PropertyOne = temp; container2.Prop(x => x.Two).Prop(x => x.PropertyTwo).Assign( // container2.Two.PropertyTwo = container1.Prop(x => x.One).Prop(x => x.PropertyOne) + // container1.One.PropertyOne + container2.Prop(x => x.Two).Prop(x => x.PropertyOne) + // container2.Two.PropertyOne + value); // value; }); //-- Act var obj = CreateClassInstanceAs <AncestorRepository.IPropertyContainersWriter>().UsingDefaultConstructor(); var c1 = new PropertyContainerOneImpl() { One = new OnePropertyImpl() }; var c2 = new PropertyContainerTwoImpl() { Two = new TwoPropertiesImpl() }; c1.One.PropertyOne = 111; c2.Two.PropertyOne = 222; c2.Two.PropertyTwo = -1; obj.SetAll(c1, c2, 1000); //-- Assert Assert.That(c1.One.PropertyOne, Is.EqualTo(222)); Assert.That(c2.Two.PropertyOne, Is.EqualTo(111)); Assert.That(c2.Two.PropertyTwo, Is.EqualTo(1333)); }
public void CanTraverseAndReadProperties() { //-- Arrange DeriveClassFrom <object>() .DefaultConstructor() .ImplementInterface <AncestorRepository.IPropertyContainersReader>() .Method <AncestorRepository.IPropertyContainerOne, AncestorRepository.IPropertyContainerTwo, int>(intf => intf.SumAll) .Implement( (m, container1, container2) => { var sum = m.Local <int>(initialValue: m.Const(0)); sum.Assign(sum + container1.Prop(x => x.One).Prop(x => x.PropertyOne)); sum.Assign(sum + container2.Prop(x => x.Two).Prop(x => x.PropertyOne)); sum.Assign(sum + container2.Prop(x => x.Two).Prop(x => x.PropertyTwo)); m.Return(sum); }); //-- Act var obj = CreateClassInstanceAs <AncestorRepository.IPropertyContainersReader>().UsingDefaultConstructor(); var c1 = new PropertyContainerOneImpl() { One = new OnePropertyImpl() }; var c2 = new PropertyContainerTwoImpl() { Two = new TwoPropertiesImpl() }; c1.One.PropertyOne = 100; c2.Two.PropertyOne = 11; c2.Two.PropertyTwo = 22; var sumA = obj.SumAll(c1, c2); //-- Assert Assert.That(sumA, Is.EqualTo(133)); }