예제 #1
0
        public void MustUseStrategyWhenCopying()
        {
            // Arrange
            var testClassParentOriginal = new ParentTestClass();

            testClassParentOriginal.AddChild(new ChildTestClass()
            {
                TestValue = 1, Parent = testClassParentOriginal
            });
            testClassParentOriginal.AddChild(new ChildTestClass()
            {
                TestValue = 2, Parent = testClassParentOriginal
            });
            testClassParentOriginal.AddChild(new ChildTestClass()
            {
                TestValue = 3, Parent = testClassParentOriginal
            });

            var testClassParentCopy = new ParentTestClass();

            // Act
            this.testCandidate.Copy(
                testClassParentOriginal,
                testClassParentCopy,
                new List <IBaseAdditionalProcessing>());

            var testClassParentCopyChildren   = testClassParentCopy.Children.Cast <ChildTestClass>().ToList();
            var testClassParentOriginchildren = testClassParentOriginal.Children.Cast <ChildTestClass>().ToList();

            // Assert
            // Make sure original and copy of the parent object are not the same.
            testClassParentCopy.Should().NotBeSameAs(testClassParentOriginal);

            testClassParentCopyChildren.Count.Should().Be(3);

            testClassParentCopyChildren.ElementAt(0).TestValue.Should().Be(testClassParentOriginchildren.ElementAt(0).TestValue * 2);
            testClassParentCopyChildren.ElementAt(1).TestValue.Should().Be(testClassParentOriginchildren.ElementAt(1).TestValue * 2);
            testClassParentCopyChildren.ElementAt(2).TestValue.Should().Be(testClassParentOriginchildren.ElementAt(2).TestValue * 2);

            foreach (var copiedChild in testClassParentCopyChildren)
            {
                foreach (var originalChild in testClassParentOriginal.Children)
                {
                    originalChild.Should().NotBeSameAs(copiedChild);
                }
            }

            // Check for the correct referential reverse relation copy.
            foreach (var child in testClassParentCopyChildren)
            {
                child.Parent.Should().BeSameAs(testClassParentCopy);
            }
        }
예제 #2
0
        public void Copy_MustCopyInheritedChildrenWhenIntercepted()
        {
            // Arrange
            var testClassParentOriginal = new ParentTestClass();

            testClassParentOriginal.AddChild(new ChildTestClass()
            {
                ParentReference = testClassParentOriginal,
            });
            testClassParentOriginal.AddChild(new ChildTestClass2()
            {
                ParentReference = testClassParentOriginal,
            });
            testClassParentOriginal.AddChild(new ChildTestClass()
            {
                ParentReference = testClassParentOriginal,
            });

            var testClassParentCopy = new ParentTestClass();

            // Act
            this.testCandidate.Copy(
                testClassParentOriginal,
                testClassParentCopy,
                new List <IBaseAdditionalProcessing>
            {
                new GenericContinueCopyInterception <IChildTestClass2>(obj => false),
            });

            var testClassParentCopyChildren = testClassParentCopy.Children.Cast <ChildTestClass>().ToList();

            // Assert
            // Make sure original and copy of the parent object are not the same.
            testClassParentCopy.Should().NotBeSameAs(testClassParentOriginal);

            testClassParentOriginal.Children.Count.Should().Be(3);

            foreach (var childhild in testClassParentCopyChildren)
            {
                childhild.ParentReference.Should().BeSameAs(testClassParentCopy);
            }
        }
        public void Copy_MustCopyParentReference()
        {
            // Arrange
            var testClassParentOriginal = new ParentTestClass();

            testClassParentOriginal.AddChild(new ChildTestClass()
            {
                ParentReference = testClassParentOriginal,
            });
            testClassParentOriginal.AddChild(new ChildTestClass()
            {
                ParentReference = testClassParentOriginal,
            });
            testClassParentOriginal.AddChild(new ChildTestClass()
            {
                ParentReference = testClassParentOriginal,
            });

            var testClassParentCopy = new ParentTestClass();

            // Act
            this.testCandidate.Copy(
                testClassParentOriginal,
                testClassParentCopy,
                new List <IBaseAdditionalProcessing>());

            var testClassParentCopyChildren = testClassParentCopy.Children.OfType <ChildTestClass>().ToList();

            // Assert
            // Make sure original and copy of the parent object are not the same.
            testClassParentCopy.Should().NotBeSameAs(testClassParentOriginal);

            // Don't forget to do this! Since the Children are a Collection the above wy of
            // retrieving the ist is not typesafe and some objects could fall between chairs and table.
            testClassParentCopyChildren.Count.Should().Be(3);

            foreach (var child in testClassParentCopyChildren)
            {
                child.ParentReference.Should().BeSameAs(testClassParentCopy);
            }
        }