예제 #1
0
        public static void TestInheritedEoIndirectConstruction()
        {
            var obj = new Dummy.ConstructibleObject();

            Test.AssertEquals(obj.NativeConstructionCount, 1);
            Test.AssertEquals(obj.DefaultConstructionCount, 0);
            Test.AssertEquals(obj.SpecialConstructionCount, 0);
            Test.AssertEquals(obj.MultiplyIntegerValue(21), 42);

            var obj2 = (InheritedConstructibleObject)obj.ConstructTypeAndStore(typeof(InheritedConstructibleObject));

            Test.AssertEquals(obj2.IsInheritedClass, true);
            Test.AssertEquals(obj2.NativeConstructionCount, 1);
            Test.AssertEquals(obj2.DefaultConstructionCount, 0);
            Test.AssertEquals(obj2.SpecialConstructionCount, 1);
            Test.AssertEquals(obj2.DefaultConstrutorCallCount, 0);
            Test.AssertEquals(obj2.SpecialConstrutorCallCount, 1);
            Test.AssertEquals(obj2.MultiplyIntegerValue(21), 63);

            var internalObj = obj.InternalObject;

            Test.Assert(ReferenceEquals(obj2, internalObj));      // Ensure it always use the same object instance
            Test.AssertEquals(obj2.NativeConstructionCount, 1);   // And that constructors are not called again
            Test.AssertEquals(obj2.MultiplyIntegerValue(32), 96); // And that it is still usable

            obj.Dispose();
            obj2.Dispose();
        }
예제 #2
0
        public static void TestGeneratedEoDirectConstruction()
        {
            var obj = new Dummy.ConstructibleObject();

            Test.AssertEquals(obj.NativeConstructionCount, 1);
            Test.AssertEquals(obj.DefaultConstructionCount, 0);
            Test.AssertEquals(obj.SpecialConstructionCount, 0);
            Test.AssertEquals(obj.MultiplyIntegerValue(21), 42);
            obj.Dispose();
        }