Пример #1
0
        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));
        }
Пример #2
0
        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));
        }
Пример #3
0
        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));
        }