public void TestTesterClassesWithMultipleConstructors()
        {
            GenericObjectBuilder.ClearConstructorDelegatesCache();
            var obj1 = GenericObjectBuilder.Build <TesterClass>(10);
            var obj2 = GenericObjectBuilder.Build <TesterClass>(20);

            Assert.AreEqual(10, obj1.A);
            Assert.AreEqual(20, obj2.A);
            Assert.AreEqual(1, GenericObjectBuilder.CachedConstructorDelegatesCount);
            var obj3 = GenericObjectBuilder.Build <TesterClass2>(10);
            var obj4 = GenericObjectBuilder.Build <TesterClass2>(20);

            Assert.AreEqual(10, obj3.A);
            Assert.AreEqual(20, obj4.A);
            Assert.AreEqual(2, GenericObjectBuilder.CachedConstructorDelegatesCount);
            obj1 = GenericObjectBuilder.Build <TesterClass>(10, 20);
            obj2 = GenericObjectBuilder.Build <TesterClass>(20, 30);
            Assert.AreEqual(30, obj1.A);
            Assert.AreEqual(50, obj2.A);
            Assert.AreEqual(3, GenericObjectBuilder.CachedConstructorDelegatesCount);
            obj3 = GenericObjectBuilder.Build <TesterClass2>(10, 20);
            obj4 = GenericObjectBuilder.Build <TesterClass2>(20, 30);
            Assert.AreEqual(30, obj3.A);
            Assert.AreEqual(50, obj4.A);
            Assert.AreEqual(4, GenericObjectBuilder.CachedConstructorDelegatesCount);
        }
        public void TestObjectConstructorsSameClass()
        {
            GenericObjectBuilder.ClearConstructorDelegatesCache();
            var sourceArray = new List <string> {
                "hello"
            };

            GenericObjectBuilder.Build <List <string> >(sourceArray);
            GenericObjectBuilder.Build <List <string> >(1);
            Assert.AreEqual(2, GenericObjectBuilder.CachedConstructorDelegatesCount);
        }
        public void TestCreateMultipleObjects()
        {
            GenericObjectBuilder.ClearConstructorDelegatesCache();
            var sourceQueue = new Queue <string>();

            sourceQueue.Enqueue("hello");
            var newQueue   = GenericObjectBuilder.Build <Queue <string> >(sourceQueue);
            var thirdQueue = GenericObjectBuilder.Build <Queue <string> >(sourceQueue);
            var firstItem  = sourceQueue.Dequeue();
            var secondItem = newQueue.Dequeue();
            var thirdItem  = thirdQueue.Dequeue();

            Assert.AreEqual(firstItem, secondItem);
            Assert.AreEqual(firstItem, thirdItem);
            Assert.AreEqual(1, GenericObjectBuilder.CachedConstructorDelegatesCount);
        }
 public void TestObjectConstructorFailsPassingNullParam()
 {
     GenericObjectBuilder.ClearConstructorDelegatesCache();
     Assert.ThrowsException <ArgumentException>(() => GenericObjectBuilder.Build <Queue <string> >(new object[] { null }));
 }