Example #1
0
        [Test] public void PartialCloning()
        {
            Random     rnd          = new Random();
            TestObject sourceStatic = new TestObject {
                DictField = new Dictionary <string, TestObject>
                {
                    { "A", new TestObject() },
                    { "B", new TestObject() },
                    { "C", new TestObject() },
                }
            };
            TestObject sourceDynamic = new TestObject {
                DictField = new Dictionary <string, TestObject>
                {
                    { "A", sourceStatic.DictField["A"] },
                    { "B", sourceStatic.DictField["B"] },
                    { "C", sourceStatic.DictField["C"] },
                    { "Root", sourceStatic },
                    { "Local", new TestObject() },
                }
            };

            // Copy only the static source objects
            CloneProvider provider     = new CloneProvider();
            TestObject    targetStatic = provider.CloneObject(sourceStatic, true);

            // When copying them again, they shouldn't actually be copied because they're still in the cache
            TestObject targetStatic2 = provider.CloneObject(sourceStatic, true);

            Assert.AreSame(targetStatic, targetStatic2);

            // Now copy the dynamic source objects and expect all static references to be resolved correctly
            TestObject targetDynamic = provider.CloneObject(sourceDynamic, true);

            Assert.AreSame(targetStatic, targetDynamic.DictField["Root"]);
            Assert.AreSame(targetStatic.DictField["A"], targetDynamic.DictField["A"]);
            Assert.AreSame(targetStatic.DictField["B"], targetDynamic.DictField["B"]);
            Assert.AreSame(targetStatic.DictField["C"], targetDynamic.DictField["C"]);

            // Now clear the cache and expect new objects from clone operations
            provider.ClearCachedMapping();
            TestObject targetStatic3 = provider.CloneObject(sourceStatic, true);

            Assert.AreNotSame(targetStatic, targetStatic3);

            // Expect an exception when attempting to clone the old results without clearing the cache
            Assert.Throws <InvalidOperationException>(() => provider.CloneObject(targetStatic3, true));

            // It should work fine after clearing the cache though.
            provider.ClearCachedMapping();
            Assert.DoesNotThrow(() => provider.CloneObject(targetStatic3, true));
        }
Example #2
0
		[Test] public void PartialCloning()
		{
			Random rnd = new Random();
			TestObject sourceStatic = new TestObject { DictField = new Dictionary<string,TestObject>
			{
				{ "A", new TestObject() },
				{ "B", new TestObject() },
				{ "C", new TestObject() },
			}};
			TestObject sourceDynamic = new TestObject { DictField = new Dictionary<string,TestObject>
			{
				{ "A", sourceStatic.DictField["A"] },
				{ "B", sourceStatic.DictField["B"] },
				{ "C", sourceStatic.DictField["C"] },
				{ "Root", sourceStatic },
				{ "Local", new TestObject() },
			}};

			// Copy only the static source objects
			CloneProvider provider = new CloneProvider();
			TestObject targetStatic = provider.CloneObject(sourceStatic, true);

			// When copying them again, they shouldn't actually be copied because they're still in the cache
			TestObject targetStatic2 = provider.CloneObject(sourceStatic, true);
			Assert.AreSame(targetStatic, targetStatic2);

			// Now copy the dynamic source objects and expect all static references to be resolved correctly
			TestObject targetDynamic = provider.CloneObject(sourceDynamic, true);
			Assert.AreSame(targetStatic, targetDynamic.DictField["Root"]);
			Assert.AreSame(targetStatic.DictField["A"], targetDynamic.DictField["A"]);
			Assert.AreSame(targetStatic.DictField["B"], targetDynamic.DictField["B"]);
			Assert.AreSame(targetStatic.DictField["C"], targetDynamic.DictField["C"]);

			// Now clear the cache and expect new objects from clone operations
			provider.ClearCachedMapping();
			TestObject targetStatic3 = provider.CloneObject(sourceStatic, true);
			Assert.AreNotSame(targetStatic, targetStatic3);

			// Expect an exception when attempting to clone the old results without clearing the cache
			Assert.Throws<InvalidOperationException>(() => provider.CloneObject(targetStatic3, true));

			// It should work fine after clearing the cache though.
			provider.ClearCachedMapping();
			Assert.DoesNotThrow(() => provider.CloneObject(targetStatic3, true));
		}