public void Cloner_Collection_Collection()
        {
            //Arrange

            ICollection <Test2> test2List = new Collection <Test2>
            {
                new Test2 {
                    Name = "Name11"
                },
                new Test2 {
                    Name = "Name12"
                }
            };


            //Act

            var cloner = ClonerBase.Create(test2List.GetType());
            var clone  = (Collection <Test2>)cloner.Clone(test2List);

            //Assert

            Assert.IsTrue(clone != null &&
                          clone != test2List &&
                          clone.GetType() == test2List.GetType() &&
                          clone.Count == 2 &&
                          clone[0].Name == "Name11" &&
                          clone[1].Name == "Name12");
        }
        public void Cloner_Collection_HashSet()
        {
            //Arrange

            IEnumerable <Test2> test2List = new HashSet <Test2>
            {
                new Test2 {
                    Name = "Name11"
                },
                new Test2 {
                    Name = "Name12"
                }
            };


            //Act

            var cloner = ClonerBase.Create(test2List.GetType());
            var clone  = (HashSet <Test2>)cloner.Clone(test2List);

            //Assert

            Assert.IsTrue(clone != null &&
                          clone != test2List &&
                          clone.GetType() == test2List.GetType() &&
                          clone.Count == 2 &&
                          clone.Any(x => x.Name == "Name11") &&
                          clone.Any(x => x.Name == "Name12"));
        }
        public void Cloner_Collection_Array()
        {
            //Arrange

            var test2List = new[]
            {
                new Test2 {
                    Name = "Name11"
                },
                new Test2 {
                    Name = "Name12"
                }
            };


            //Act

            var cloner = ClonerBase.Create(test2List.GetType());
            var clone  = (Test2[])cloner.Clone(test2List);

            //Assert

            Assert.IsTrue(clone != null &&
                          clone != test2List &&
                          clone.GetType() == test2List.GetType() &&
                          clone.Length == 2 &&
                          clone[0].Name == "Name11" &&
                          clone[1].Name == "Name12");
        }
예제 #4
0
        public void Cloner_Dictionary_IDict()
        {
            //Arrange

            IDictionary <int, Test3> test3Dict = new Dictionary <int, Test3>()
            {
                { 1, new Test3 {
                      Name = "Name11"
                  } },
                { 2, new Test3 {
                      Name = "Name12"
                  } }
            };


            //Act

            var cloner = ClonerBase.Create(typeof(IDictionary <int, Test3>));
            var clone  = (Dictionary <int, Test3>)cloner.Clone(test3Dict);

            //Assert

            Assert.IsTrue(clone != null &&
                          clone != test3Dict &&
                          clone.GetType() == test3Dict.GetType() &&
                          clone.Count == 2 &&
                          clone[1].Name == "Name11" &&
                          clone[2].Name == "Name12");
        }
예제 #5
0
        public void Cloner_Instance()
        {
            //Arrange

            var x = new X
            {
                Name   = "Name1",
                Number = 1,
                Double = 2,
                Y      = new Y()
            };

            //Act

            var cloner = ClonerBase.Create(typeof(X));
            var clone  = (X)cloner.Clone(x);

            //Assert

            Assert.IsNotNull(clone);
            Assert.AreNotEqual(x, clone);
            Assert.AreEqual("Name1", clone.Name);
            Assert.AreEqual(1, clone.Number);
            Assert.AreEqual(2, clone.Double);
            Assert.IsNull(clone.Y);
        }
예제 #6
0
        public CollectionVisitor(Type ownerType,
                                 Type collectionType,
                                 string elementName   = null,
                                 PropertyGuard guard  = null,
                                 bool supportsCloning = true) : base(guard, supportsCloning)
        {
            ElementName = elementName;

            if (!string.IsNullOrWhiteSpace(elementName))
            {
                _elementAccessor = ExpressAccessor.Create(ownerType, collectionType, elementName);
            }

            if (SupportsCloning)
            {
                _elementCloner = ClonerBase.Create(collectionType);
            }
        }
        public void Cloner_Collection_ArrayList()
        {
            //Arrange

            var test2List = new ArrayList(new[]
            {
                new Test2 {
                    Name = "Name11"
                },
                new Test2 {
                    Name = "Name12"
                }
            });


            //Act

            var cloner = ClonerBase.Create(test2List.GetType());
            var clone  = (ArrayList)cloner.Clone(test2List);
        }
예제 #8
0
        public DictionaryVisitor(Type ownerType,
                                 Type dictionaryType,
                                 string elementName   = null,
                                 PropertyGuard guard  = null,
                                 bool supportsCloning = true) : base(guard, supportsCloning)
        {
            ElementName = elementName;

            if (!string.IsNullOrWhiteSpace(elementName))
            {
                _elementAccessor = ExpressAccessor.Create(ownerType, dictionaryType, elementName);
            }

            if (SupportsCloning)
            {
                _elementCloner = ClonerBase.Create(dictionaryType);
            }

            var keyType   = dictionaryType.GenericTypeArguments[0];
            var valueType = dictionaryType.GenericTypeArguments[1];
            var kvpType   = typeof(KeyValuePair <,>).MakeGenericType(keyType, valueType);

            KeyValueAccessor = ExpressAccessor.Create(kvpType, valueType, "Value");
        }