public void KnownType_Utilities_Import_MethodName_Arg()
        {
            // Presence of [KnownType] using Type[] returning method works
            IEnumerable <Type> knownTypes = KnownTypeUtil.ImportKnownTypes(typeof(KTU_Type_With_Array_Method), false /* inherit */);

            Assert.IsNotNull(knownTypes);
            Assert.AreEqual(2, knownTypes.Count());
            Assert.IsTrue(knownTypes.Contains(typeof(KTU_2)));
            Assert.IsTrue(knownTypes.Contains(typeof(KTU_3)));

            // Presence of [KnownType] using IEnumerable<Type> returning method works
            knownTypes = KnownTypeUtil.ImportKnownTypes(typeof(KTU_Type_With_Enumerable_Method), false /* inherit */);
            Assert.IsNotNull(knownTypes);
            Assert.AreEqual(2, knownTypes.Count());
            Assert.IsTrue(knownTypes.Contains(typeof(KTU_3)));
            Assert.IsTrue(knownTypes.Contains(typeof(KTU_4)));

            // Presence of [KnownType] using all known forms works
            knownTypes = KnownTypeUtil.ImportKnownTypes(typeof(KTU_Type_With_Enumerable_All_Forms), false /* inherit */);
            Assert.IsNotNull(knownTypes);
            Assert.AreEqual(4, knownTypes.Count());
            Assert.IsTrue(knownTypes.Contains(typeof(KTU_1)));
            Assert.IsTrue(knownTypes.Contains(typeof(KTU_2)));
            Assert.IsTrue(knownTypes.Contains(typeof(KTU_3)));
            Assert.IsTrue(knownTypes.Contains(typeof(KTU_4)));
        }
        public void KnownType_Utilities_Import_Inherit()
        {
            // ----------------
            // Inherit = false
            // ----------------
            IEnumerable <Type> knownTypes = KnownTypeUtil.ImportKnownTypes(typeof(KTU_Simple), false /* inherit */);

            Assert.IsNotNull(knownTypes);
            Assert.AreEqual(2, knownTypes.Count());
            Assert.IsFalse(knownTypes.Contains(typeof(KTU_00)));    // declared on base-most type -- should not be seen
            Assert.IsFalse(knownTypes.Contains(typeof(KTU_0)));     // declared on base type -- should not be seen
            Assert.IsTrue(knownTypes.Contains(typeof(KTU_1)));
            Assert.IsTrue(knownTypes.Contains(typeof(KTU_2)));

            // ----------------
            // Inherit = true
            // ----------------
            knownTypes = KnownTypeUtil.ImportKnownTypes(typeof(KTU_Simple), true /* inherit */);
            Assert.IsNotNull(knownTypes);
            Assert.AreEqual(4, knownTypes.Count());
            Assert.IsTrue(knownTypes.Contains(typeof(KTU_00)));
            Assert.IsTrue(knownTypes.Contains(typeof(KTU_0)));
            Assert.IsTrue(knownTypes.Contains(typeof(KTU_1)));
            Assert.IsTrue(knownTypes.Contains(typeof(KTU_2)));
        }
        public void KnownType_Utilities_Import_Type_Arg()
        {
            // Absence of [KnownTypes] returns empty list
            IEnumerable <Type> knownTypes = KnownTypeUtil.ImportKnownTypes(typeof(KTU_1), false /* inherit */);

            Assert.IsNotNull(knownTypes);
            Assert.AreEqual(0, knownTypes.Count());

            // Presence of [KnownType] using Type member works
            knownTypes = KnownTypeUtil.ImportKnownTypes(typeof(KTU_Simple), false);
            Assert.IsNotNull(knownTypes);
            Assert.AreEqual(2, knownTypes.Count());
            Assert.IsTrue(knownTypes.Contains(typeof(KTU_1)));
            Assert.IsTrue(knownTypes.Contains(typeof(KTU_2)));
        }