Пример #1
0
        public void MultiUseEnums()
        {
            var c = AllPublicDescriber <MultiEnum> .GetForUse(true);

            Assert.AreEqual(typeof(ClassTypeDescription), c.GetType());

            var asClass = (ClassTypeDescription)c;

            Assert.AreEqual(3, asClass.Members.Count);
            Assert.AreEqual(typeof(EnumTypeDescription), asClass.Members["Foo"].GetType());
            Assert.AreEqual(typeof(BackReferenceTypeDescription), asClass.Members["Bar"].GetType());
            Assert.AreEqual(typeof(ClassTypeDescription), asClass.Members["Fizz"].GetType());

            var sub = (ClassTypeDescription)asClass.Members["Fizz"];
            var bar = (BackReferenceTypeDescription)asClass.Members["Bar"];

            Assert.AreEqual(2, sub.Members.Count);
            Assert.AreEqual(typeof(BackReferenceTypeDescription), sub.Members["Outer"].GetType());
            Assert.AreEqual(typeof(NullableTypeDescription), sub.Members["Buzz"].GetType());

            var buzz = (NullableTypeDescription)sub.Members["Buzz"];

            Assert.AreEqual(typeof(BackReferenceTypeDescription), buzz.InnerType.GetType());

            var buzzInner = (BackReferenceTypeDescription)buzz.InnerType;
        }
Пример #2
0
        public void List()
        {
            var ints = AllPublicDescriber <List <int> > .Get();

            Assert.AreEqual(typeof(ListTypeDescription), ints.GetType());
            Assert.AreEqual(SimpleTypeDescription.Int, (ints as ListTypeDescription).Contains);

            var chars = AllPublicDescriber <char[]> .Get();

            Assert.AreEqual(typeof(ListTypeDescription), chars.GetType());
            Assert.AreEqual(SimpleTypeDescription.Char, (chars as ListTypeDescription).Contains);
        }
Пример #3
0
        public void Dictionary()
        {
            var strToStr = AllPublicDescriber <Dictionary <string, string> > .Get();

            Assert.AreEqual(typeof(DictionaryTypeDescription), strToStr.GetType());
            Assert.AreEqual(SimpleTypeDescription.String, (strToStr as DictionaryTypeDescription).KeyType);
            Assert.AreEqual(SimpleTypeDescription.String, (strToStr as DictionaryTypeDescription).ValueType);

            var strToInt = AllPublicDescriber <Dictionary <string, int> > .Get();

            Assert.AreEqual(typeof(DictionaryTypeDescription), strToInt.GetType());
            Assert.AreEqual(SimpleTypeDescription.String, (strToInt as DictionaryTypeDescription).KeyType);
            Assert.AreEqual(SimpleTypeDescription.Int, (strToInt as DictionaryTypeDescription).ValueType);
        }
Пример #4
0
        public void Class()
        {
            var c = AllPublicDescriber <Dummy> .Get();

            Assert.AreEqual(typeof(ClassTypeDescription), c.GetType());
            var asClass = c as ClassTypeDescription;

            Assert.AreEqual(3, asClass.Members.Count);
            Assert.IsTrue(asClass.Members.ContainsKey("Str"));
            Assert.IsTrue(asClass.Members.ContainsKey("Int"));
            Assert.IsTrue(asClass.Members.ContainsKey("Double"));

            Assert.AreEqual(SimpleTypeDescription.String, asClass.Members["Str"]);
            Assert.AreEqual(SimpleTypeDescription.Int, asClass.Members["Int"]);
            Assert.AreEqual(SimpleTypeDescription.Double, asClass.Members["Double"]);
        }
Пример #5
0
 public void Simple()
 {
     Assert.AreEqual(SimpleTypeDescription.Long, AllPublicDescriber <long> .Get());
     Assert.AreEqual(SimpleTypeDescription.ULong, AllPublicDescriber <ulong> .Get());
     Assert.AreEqual(SimpleTypeDescription.Int, AllPublicDescriber <int> .Get());
     Assert.AreEqual(SimpleTypeDescription.UInt, AllPublicDescriber <uint> .Get());
     Assert.AreEqual(SimpleTypeDescription.Short, AllPublicDescriber <short> .Get());
     Assert.AreEqual(SimpleTypeDescription.UShort, AllPublicDescriber <ushort> .Get());
     Assert.AreEqual(SimpleTypeDescription.Byte, AllPublicDescriber <byte> .Get());
     Assert.AreEqual(SimpleTypeDescription.SByte, AllPublicDescriber <sbyte> .Get());
     Assert.AreEqual(SimpleTypeDescription.Char, AllPublicDescriber <char> .Get());
     Assert.AreEqual(SimpleTypeDescription.String, AllPublicDescriber <string> .Get());
     Assert.AreEqual(SimpleTypeDescription.Decimal, AllPublicDescriber <decimal> .Get());
     Assert.AreEqual(SimpleTypeDescription.Double, AllPublicDescriber <double> .Get());
     Assert.AreEqual(SimpleTypeDescription.Float, AllPublicDescriber <float> .Get());
 }
Пример #6
0
        public void CircularClass()
        {
            var c = AllPublicDescriber <Circular> .GetForUse(true);

            Assert.AreEqual(typeof(ClassTypeDescription), c.GetType());
            var asClass = c as ClassTypeDescription;

            Assert.AreEqual(2, asClass.Members.Count);
            Assert.IsTrue(asClass.Members.ContainsKey("Str"));
            Assert.IsTrue(asClass.Members.ContainsKey("Next"));

            Assert.AreEqual(SimpleTypeDescription.String, asClass.Members["Str"]);

            var backRef = asClass.Members["Next"] as BackReferenceTypeDescription;

            Assert.IsNotNull(backRef);
            Assert.AreEqual(asClass.Id, backRef.Id);
        }
Пример #7
0
        internal static void GetDescriptionAndBuilder <T>(IncludedMembers members, IncludedVisibility visibility, out TypeDescription description, out POCOBuilder builder)
        {
            if (visibility == IncludedVisibility.Public)
            {
                if (members == (IncludedMembers.Properties | IncludedMembers.Fields))
                {
                    description = AllPublicDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, AllPublicDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Fields)
                {
                    description = FieldsPublicDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, FieldsPublicDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Properties)
                {
                    description = PropertiesPublicDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, PropertiesPublicDescriber <T> > .GetMapper();

                    return;
                }

                throw new ArgumentOutOfRangeException("members");
            }

            if (visibility == (IncludedVisibility.Public | IncludedVisibility.Internal))
            {
                if (members == (IncludedMembers.Properties | IncludedMembers.Fields))
                {
                    description = AllPublicInternalDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, AllPublicInternalDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Fields)
                {
                    description = FieldsPublicInternalDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, FieldsPublicInternalDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Properties)
                {
                    description = PropertiesPublicInternalDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, PropertiesPublicInternalDescriber <T> > .GetMapper();

                    return;
                }

                throw new ArgumentOutOfRangeException("members");
            }

            if (visibility == (IncludedVisibility.Public | IncludedVisibility.Protected))
            {
                if (members == (IncludedMembers.Properties | IncludedMembers.Fields))
                {
                    description = AllPublicProtectedDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, AllPublicProtectedDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Fields)
                {
                    description = FieldsPublicProtectedDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, FieldsPublicProtectedDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Properties)
                {
                    description = PropertiesPublicProtectedDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, PropertiesPublicProtectedDescriber <T> > .GetMapper();

                    return;
                }

                throw new ArgumentOutOfRangeException("members");
            }

            if (visibility == (IncludedVisibility.Public | IncludedVisibility.Private))
            {
                if (members == (IncludedMembers.Properties | IncludedMembers.Fields))
                {
                    description = AllPublicPrivateDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, AllPublicPrivateDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Fields)
                {
                    description = FieldsPublicPrivateDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, FieldsPublicPrivateDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Properties)
                {
                    description = PropertiesPublicPrivateDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, PropertiesPublicPrivateDescriber <T> > .GetMapper();

                    return;
                }

                throw new ArgumentOutOfRangeException("members");
            }

            if (visibility == (IncludedVisibility.Public | IncludedVisibility.Protected | IncludedVisibility.Internal))
            {
                if (members == (IncludedMembers.Properties | IncludedMembers.Fields))
                {
                    description = AllPublicProtectedInternalDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, AllPublicProtectedInternalDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Fields)
                {
                    description = FieldsPublicProtectedInternalDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, FieldsPublicProtectedInternalDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Properties)
                {
                    description = PropertiesPublicProtectedInternalDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, PropertiesPublicProtectedInternalDescriber <T> > .GetMapper();

                    return;
                }

                throw new ArgumentOutOfRangeException("members");
            }

            if (visibility == (IncludedVisibility.Public | IncludedVisibility.Protected | IncludedVisibility.Private))
            {
                if (members == (IncludedMembers.Properties | IncludedMembers.Fields))
                {
                    description = AllPublicProtectedPrivateDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, AllPublicProtectedPrivateDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Fields)
                {
                    description = FieldsPublicProtectedPrivateDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, FieldsPublicProtectedPrivateDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Properties)
                {
                    description = PropertiesPublicProtectedPrivateDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, PropertiesPublicProtectedPrivateDescriber <T> > .GetMapper();

                    return;
                }

                throw new ArgumentOutOfRangeException("members");
            }

            if (visibility == (IncludedVisibility.Public | IncludedVisibility.Internal | IncludedVisibility.Private))
            {
                if (members == (IncludedMembers.Properties | IncludedMembers.Fields))
                {
                    description = AllPublicInternalPrivateDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, AllPublicInternalPrivateDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Fields)
                {
                    description = FieldsPublicInternalPrivateDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, FieldsPublicInternalPrivateDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Properties)
                {
                    description = PropertiesPublicInternalPrivateDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, PropertiesPublicInternalPrivateDescriber <T> > .GetMapper();

                    return;
                }

                throw new ArgumentOutOfRangeException("members");
            }

            if (visibility == (IncludedVisibility.Public | IncludedVisibility.Internal | IncludedVisibility.Protected | IncludedVisibility.Private))
            {
                if (members == (IncludedMembers.Properties | IncludedMembers.Fields))
                {
                    description = AllAllDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, AllAllDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Fields)
                {
                    description = FieldsAllDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, FieldsAllDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Properties)
                {
                    description = PropertiesAllDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, PropertiesAllDescriber <T> > .GetMapper();

                    return;
                }

                throw new ArgumentOutOfRangeException("members");
            }

            if (visibility == IncludedVisibility.Protected)
            {
                if (members == (IncludedMembers.Properties | IncludedMembers.Fields))
                {
                    description = AllProtectedDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, AllProtectedDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Fields)
                {
                    description = FieldsProtectedDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, FieldsProtectedDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Properties)
                {
                    description = PropertiesProtectedDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, PropertiesProtectedDescriber <T> > .GetMapper();

                    return;
                }

                throw new ArgumentOutOfRangeException("members");
            }

            if (visibility == (IncludedVisibility.Protected | IncludedVisibility.Internal))
            {
                if (members == (IncludedMembers.Properties | IncludedMembers.Fields))
                {
                    description = AllProtectedInternalDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, AllProtectedInternalDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Fields)
                {
                    description = FieldsProtectedInternalDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, FieldsProtectedInternalDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Properties)
                {
                    description = PropertiesProtectedInternalDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, PropertiesProtectedInternalDescriber <T> > .GetMapper();

                    return;
                }

                throw new ArgumentOutOfRangeException("members");
            }

            if (visibility == (IncludedVisibility.Protected | IncludedVisibility.Private))
            {
                if (members == (IncludedMembers.Properties | IncludedMembers.Fields))
                {
                    description = AllProtectedPrivateDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, AllProtectedPrivateDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Fields)
                {
                    description = FieldsProtectedPrivateDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, FieldsProtectedPrivateDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Properties)
                {
                    description = PropertiesProtectedPrivateDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, PropertiesProtectedPrivateDescriber <T> > .GetMapper();

                    return;
                }

                throw new ArgumentOutOfRangeException("members");
            }

            if (visibility == (IncludedVisibility.Protected | IncludedVisibility.Internal | IncludedVisibility.Private))
            {
                if (members == (IncludedMembers.Properties | IncludedMembers.Fields))
                {
                    description = AllProtectedInternalPrivateDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, AllProtectedInternalPrivateDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Fields)
                {
                    description = FieldsProtectedInternalPrivateDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, FieldsProtectedInternalPrivateDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Properties)
                {
                    description = PropertiesProtectedInternalPrivateDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, PropertiesProtectedInternalPrivateDescriber <T> > .GetMapper();

                    return;
                }

                throw new ArgumentOutOfRangeException("members");
            }

            if (visibility == IncludedVisibility.Internal)
            {
                if (members == (IncludedMembers.Properties | IncludedMembers.Fields))
                {
                    description = AllInternalDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, AllInternalDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Fields)
                {
                    description = FieldsInternalDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, FieldsInternalDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Properties)
                {
                    description = PropertiesInternalDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, PropertiesInternalDescriber <T> > .GetMapper();

                    return;
                }

                throw new ArgumentOutOfRangeException("members");
            }

            if (visibility == (IncludedVisibility.Internal | IncludedVisibility.Private))
            {
                if (members == (IncludedMembers.Properties | IncludedMembers.Fields))
                {
                    description = AllInternalPrivateDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, AllInternalPrivateDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Fields)
                {
                    description = FieldsInternalPrivateDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, FieldsInternalPrivateDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Properties)
                {
                    description = PropertiesInternalPrivateDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, PropertiesInternalPrivateDescriber <T> > .GetMapper();

                    return;
                }

                throw new ArgumentOutOfRangeException("members");
            }

            if (visibility == IncludedVisibility.Private)
            {
                if (members == (IncludedMembers.Properties | IncludedMembers.Fields))
                {
                    description = AllPrivateDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, AllPrivateDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Fields)
                {
                    description = FieldsPrivateDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, FieldsPrivateDescriber <T> > .GetMapper();

                    return;
                }

                if (members == IncludedMembers.Properties)
                {
                    description = PropertiesPrivateDescriber <T> .GetForUse(true);

                    builder = POCOBuilder <T, PropertiesPrivateDescriber <T> > .GetMapper();

                    return;
                }

                throw new ArgumentOutOfRangeException("members");
            }

            throw new ArgumentOutOfRangeException("visibility");
        }