public void GenericTypeGettingRequiredAttributeTest()
        {
            var type = typeof(NormalWithAttrClass);

            TypeReflections.GetAttributeRequired <ModelOneAttribute>(type).ShouldNotBeNull();
            Assert.Throws <ArgumentException>(() => TypeReflections.GetAttributeRequired <ModelTwoAttribute>(type));
            TypeReflections.GetAttributeRequired <ModelThreeAttribute>(type).ShouldNotBeNull();
        }
        public void DirectTypeGettingRequiredAttributeTest()
        {
            var type  = typeof(NormalWithAttrClass);
            var one   = typeof(ModelOneAttribute);
            var two   = typeof(ModelTwoAttribute);
            var three = typeof(ModelThreeAttribute);

            TypeReflections.GetAttributeRequired(type, one).ShouldNotBeNull();
            Assert.Throws <ArgumentException>(() => TypeReflections.GetAttributeRequired(type, two).ShouldBeNull());
            TypeReflections.GetAttributeRequired(type, three).ShouldNotBeNull();
        }
        public void GenericTypeGettingRequiredAttributeInheritTest()
        {
            var type = typeof(NormalWithAttrClassWrapper2);

            Assert.Throws <ArgumentException>(() => TypeReflections.GetAttributeRequired <ModelOneAttribute>(type));
            Assert.Throws <ArgumentException>(() => TypeReflections.GetAttributeRequired <ModelTwoAttribute>(type));
            Assert.Throws <ArgumentException>(() => TypeReflections.GetAttributeRequired <ModelThreeAttribute>(type));
            Assert.Throws <AmbiguousMatchException>(() => TypeReflections.GetAttributeRequired <ModelOneAttribute>(type, ReflectionOptions.Inherit).ShouldNotBeNull());
            TypeReflections.GetAttributeRequired <ModelOneAttribute>(type, ReflectionOptions.Inherit, ReflectionAmbiguousOptions.IgnoreAmbiguous).ShouldNotBeNull();
            TypeReflections.GetAttributeRequired <ModelThreeAttribute>(type, ReflectionOptions.Inherit).ShouldNotBeNull();
            TypeReflections.GetAttributeRequired <ModelFourAttribute>(type).ShouldNotBeNull();
        }
        public void DirectTypeGettingRequiredAttributeInheritTest()
        {
            var type  = typeof(NormalWithAttrClassWrapper2);
            var one   = typeof(ModelOneAttribute);
            var two   = typeof(ModelTwoAttribute);
            var three = typeof(ModelThreeAttribute);
            var four  = typeof(ModelFourAttribute);

            Assert.Throws <ArgumentException>(() => TypeReflections.GetAttributeRequired(type, one));
            Assert.Throws <ArgumentException>(() => TypeReflections.GetAttributeRequired(type, two).ShouldBeNull());
            Assert.Throws <ArgumentException>(() => TypeReflections.GetAttributeRequired(type, three).ShouldBeNull());
            Assert.Throws <AmbiguousMatchException>(() => TypeReflections.GetAttributeRequired(type, one, ReflectionOptions.Inherit));
            TypeReflections.GetAttributeRequired(type, one, ReflectionOptions.Inherit, ReflectionAmbiguousOptions.IgnoreAmbiguous).ShouldNotBeNull();
            TypeReflections.GetAttributeRequired(type, three, ReflectionOptions.Inherit).ShouldNotBeNull();
            TypeReflections.GetAttributeRequired(type, four).ShouldNotBeNull();
        }