public void ConstructorAndGetTypeDescriptor() {
            AssociatedMetadataTypeTypeDescriptionProvider provider1 = new AssociatedMetadataTypeTypeDescriptionProvider(typeof(TestTable));
            Assert.IsTrue(provider1.GetTypeDescriptor(typeof(TestTable)).GetProperties().Find("Number", true).Attributes.ContainsEquivalent(new RangeAttribute(0, 10)));

            AssociatedMetadataTypeTypeDescriptionProvider provider2 = new AssociatedMetadataTypeTypeDescriptionProvider(typeof(TestTable), typeof(TestTable_MetadataAlternative));
            Assert.IsTrue(provider2.GetTypeDescriptor(typeof(TestTable)).GetProperties().Find("Number", true).Attributes.ContainsEquivalent(new RequiredAttribute()));
        }
        public void AddProviderToTypeAndInstance() {
            var instance = new Base();

            // Before adding TDPs
            var props = TypeDescriptor.GetProperties(instance).Cast<PropertyDescriptor>().
                Select(p => p.Name).ToArray();
            CollectionAssert.AreEquivalent(new[] { "A", "B" }, props);

            TypeDescriptionProvider typeProvider = null;
            TypeDescriptionProvider instanceProvider = null;
            try {
                typeProvider = new AssociatedMetadataTypeTypeDescriptionProvider(typeof(Base));
                TypeDescriptor.AddProvider(typeProvider, typeof(Base));

                instanceProvider = new TestTypeDescriptionProvider(instance);
                TypeDescriptor.AddProvider(instanceProvider, instance);

                // After adding TDPs
                props = TypeDescriptor.GetProperties(instance).Cast<PropertyDescriptor>().
                    Select(p => p.Name).ToArray();
                CollectionAssert.AreEquivalent(new[] { "A", "B", "CustomProperty1", "CustomProperty2" }, props);
            }
            finally {
                // Ensure we remove the providers we attached.
                TypeDescriptor.RemoveProvider(typeProvider, typeof(Base));
                TypeDescriptor.RemoveProvider(instanceProvider, instance);
            }
        }
        public void AddProviderToBaseType_GetPropertiesOfDerivedType() {
            // Before adding TDP
            var props = TypeDescriptor.GetProperties(typeof(Base)).Cast<PropertyDescriptor>().
                Select(p => p.Name).ToArray();
            CollectionAssert.AreEquivalent(new[] { "A", "B" }, props);

            props = TypeDescriptor.GetProperties(typeof(Derived)).Cast<PropertyDescriptor>().
                Select(p => p.Name).ToArray();
            CollectionAssert.AreEquivalent(new[] { "A", "B", "C" }, props);

            TypeDescriptionProvider provider = null;
            try {
                provider = new AssociatedMetadataTypeTypeDescriptionProvider(typeof(Base));
                TypeDescriptor.AddProvider(provider, typeof(Base));

                // After adding TDP
                props = TypeDescriptor.GetProperties(typeof(Base)).Cast<PropertyDescriptor>().
                    Select(p => p.Name).ToArray();
                CollectionAssert.AreEquivalent(new[] { "A", "B" }, props);

                props = TypeDescriptor.GetProperties(typeof(Derived)).Cast<PropertyDescriptor>().
                    Select(p => p.Name).ToArray();
                CollectionAssert.AreEquivalent(new[] { "A", "B", "C" }, props);
            }
            finally {
                // Ensure we remove the provider we attached.
                TypeDescriptor.RemoveProvider(provider, typeof(Base));
            }
        }
        public void AddMultipleProvidersToType() {
            // Before adding TDPs
            var props = TypeDescriptor.GetProperties(typeof(Base)).Cast<PropertyDescriptor>().
                Select(p => p.Name).ToArray();
            CollectionAssert.AreEquivalent(new[] { "A", "B" }, props);

            TypeDescriptionProvider associatedMetadataProvider = null;
            TypeDescriptionProvider testProvider = null;
            
            try {
                associatedMetadataProvider = new AssociatedMetadataTypeTypeDescriptionProvider(typeof(Base));
                TypeDescriptor.AddProvider(associatedMetadataProvider, typeof(Base));
                testProvider = new TestTypeDescriptionProvider(typeof(Base));
                TypeDescriptor.AddProvider(testProvider, typeof(Base));

                // After adding TDPs
                props = TypeDescriptor.GetProperties(typeof(Base)).Cast<PropertyDescriptor>().
                    Select(p => p.Name).ToArray();
                CollectionAssert.AreEquivalent(new[] { "A", "B", "CustomProperty1", "CustomProperty2" }, props);
            }
            finally {
                // Ensure we remove the providers we attached.
                TypeDescriptor.RemoveProvider(associatedMetadataProvider, typeof(Base));
                TypeDescriptor.RemoveProvider(testProvider, typeof(Base));
            }

            // Add providers in reverse order
            try {
                testProvider = new TestTypeDescriptionProvider(typeof(Base));
                TypeDescriptor.AddProvider(testProvider, typeof(Base));
                associatedMetadataProvider = new AssociatedMetadataTypeTypeDescriptionProvider(typeof(Base));
                TypeDescriptor.AddProvider(associatedMetadataProvider, typeof(Base));

                props = TypeDescriptor.GetProperties(typeof(Base)).Cast<PropertyDescriptor>().
                    Select(p => p.Name).ToArray();
                CollectionAssert.AreEquivalent(new[] { "A", "B", "CustomProperty1", "CustomProperty2" }, props);
            }
            finally {
                // Ensure we remove the providers we attached.
                TypeDescriptor.RemoveProvider(associatedMetadataProvider, typeof(Base));
                TypeDescriptor.RemoveProvider(testProvider, typeof(Base));
            }
        }
        public void MetadataInheritance() {
            TypeDescriptionProvider baseProvider = null;
            TypeDescriptionProvider derivedProvider = null;
            TypeDescriptionProvider derivedNoMetadataProvider = null;
            try {
                baseProvider = new AssociatedMetadataTypeTypeDescriptionProvider(typeof(Base));
                TypeDescriptor.AddProvider(baseProvider, typeof(Base));
                derivedProvider = new AssociatedMetadataTypeTypeDescriptionProvider(typeof(Derived));
                TypeDescriptor.AddProvider(derivedProvider, typeof(Derived));
                derivedNoMetadataProvider = new AssociatedMetadataTypeTypeDescriptionProvider(typeof(DerivedNoMetadata));
                TypeDescriptor.AddProvider(derivedNoMetadataProvider, typeof(DerivedNoMetadata));

                var attrs = TypeDescriptor.GetProperties(typeof(Base))["A"].Attributes.Cast<Attribute>().
                    Select(a => a.GetType().Name).ToArray();
                CollectionAssert.IsSubsetOf(new[] { "DescriptionAttribute" }, attrs);

                attrs = TypeDescriptor.GetProperties(typeof(Derived))["A"].Attributes.Cast<Attribute>().
                    Select(a => a.GetType().Name).ToArray();
                CollectionAssert.IsSubsetOf(new[] { "DescriptionAttribute", "CategoryAttribute" }, attrs);

                attrs = TypeDescriptor.GetProperties(typeof(DerivedNoMetadata))["A"].Attributes.Cast<Attribute>().
                    Select(a => a.GetType().Name).ToArray();
                CollectionAssert.IsSubsetOf(new[] { "DescriptionAttribute" }, attrs);
            }
            finally {
                // Ensure we remove the providers we attached.
                TypeDescriptor.RemoveProvider(baseProvider, typeof(Base));
                TypeDescriptor.RemoveProvider(derivedProvider, typeof(Derived));
                TypeDescriptor.RemoveProvider(derivedNoMetadataProvider, typeof(DerivedNoMetadata));
            }
        }
 public void Constructors_Null_Type()
 {
     var v = new AssociatedMetadataTypeTypeDescriptionProvider(null);
 }
        public void GetTypeDescriptor_MetadataHasFieldsNotPresentOnClass_ThrowsInvalidOperationException()
        {
            var provider = new AssociatedMetadataTypeTypeDescriptionProvider(typeof(ClassWithInvalidMetadata));

            Assert.Throws <InvalidOperationException>(() => provider.GetTypeDescriptor(typeof(ClassWithInvalidMetadata), null));
        }
Exemple #8
0
 public void Constructors_Null_AssociatedMetadataType_2()
 {
     var v = new AssociatedMetadataTypeTypeDescriptionProvider(typeof(string), null);
 }