public void RequestForEnumTypeReturnsResultAsString(
            Type enumType, int requestCount, string expectedResult)
        {
            // Arrange
            var enumDataTypeAttribute = new EnumDataTypeAttribute(enumType);
            var providedAttribute     = new ProvidedAttribute(enumDataTypeAttribute, true);
            var request      = new FakeMemberInfo(providedAttribute);
            var dummyContext = new DelegatingSpecimenContext();

            var sut = new EnumDataTypeAttributeRelay
            {
                RequestMemberTypeResolver = new DelegatingRequestMemberTypeResolver
                {
                    OnTryGetMemberType = _ => typeof(string)
                }
            };

            // Act
            var result = Enumerable
                         .Repeat <Func <object> >(() => sut.Create(request, dummyContext), requestCount)
                         .Select(f => f()).ToArray().Last();

            // Assert
            Assert.Equal(expectedResult, result);
        }
        public void CanCorrectlyInterleaveDifferentEnumTypes(Type enumType, string expectedResult)
        {
            // Arrange
            var enumDataTypeAttribute = new EnumDataTypeAttribute(enumType);
            var providedAttribute     = new ProvidedAttribute(enumDataTypeAttribute, true);
            var request      = new FakeMemberInfo(providedAttribute);
            var dummyContext = new DelegatingSpecimenContext();

            var sut = new EnumDataTypeAttributeRelay
            {
                RequestMemberTypeResolver = new DelegatingRequestMemberTypeResolver
                {
                    OnTryGetMemberType = _ => typeof(string)
                }
            };

            var triStateEnumDataTypeAttribute  = new EnumDataTypeAttribute(typeof(TriState));
            var triStateProvidedAttribute      = new ProvidedAttribute(triStateEnumDataTypeAttribute, true);
            var dayOfWeekEnumDataTypeAttribute = new EnumDataTypeAttribute(typeof(DayOfWeek));
            var dayOfWeekProvidedAttribute     = new ProvidedAttribute(dayOfWeekEnumDataTypeAttribute, true);

            sut.Create(new FakeMemberInfo(triStateProvidedAttribute), dummyContext);
            sut.Create(new FakeMemberInfo(triStateProvidedAttribute), dummyContext);
            sut.Create(new FakeMemberInfo(dayOfWeekProvidedAttribute), dummyContext);

            // Act
            var result = sut.Create(request, dummyContext);

            // Assert
            Assert.Equal(expectedResult, result);
        }
Пример #3
0
        private DataTypeRegistration BuildEnumRegistration(Type type)
        {
            _locks.TakeOrWait(type);
            DataTypeRegistration dataTypeRegistration;

            if (_register.TryGetRegistration(type, out dataTypeRegistration))
            {
                _locks.Release(type);
                return(dataTypeRegistration);
            }

            var attr = type.GetCodeFirstAttribute <DataTypeAttribute>();

            if (attr == null)
            {
                attr = new EnumDataTypeAttribute();
                attr.Initialise(type);
            }

            dataTypeRegistration = new DataTypeRegistration()
            {
                ClrType              = type,
                ConverterType        = attr.ConverterType,
                PropertyEditorAlias  = attr.PropertyEditorAlias,
                DataTypeInstanceName = attr.Name,
                UmbracoDatabaseType  = attr.DbType,
                CodeFirstControlled  = true
            };

            _registerController.Register(type, dataTypeRegistration);
            _locks.Release(type);
            return(dataTypeRegistration);
        }
        public static void Ctor(Type enumType)
        {
            var attribute = new EnumDataTypeAttribute(enumType);
            Assert.Equal(DataType.Custom, attribute.DataType);
            Assert.Equal("Enumeration", attribute.CustomDataType);

            Assert.Equal(enumType, attribute.EnumType);
        }
Пример #5
0
        public static void Ctor(Type enumType)
        {
            var attribute = new EnumDataTypeAttribute(enumType);

            Assert.Equal(DataType.Custom, attribute.DataType);
            Assert.Equal("Enumeration", attribute.CustomDataType);

            Assert.Equal(enumType, attribute.EnumType);
        }
Пример #6
0
        public void Constructor()
        {
            var attr = new EnumDataTypeAttribute(typeof(string));

            Assert.AreEqual(DataType.Custom, attr.DataType, "#A1-1");
            Assert.AreEqual(typeof(string), attr.EnumType, "#A1-2");

            attr = new EnumDataTypeAttribute(typeof(TestEnum));
            Assert.AreEqual(DataType.Custom, attr.DataType, "#B1-1");
            Assert.AreEqual(typeof(TestEnum), attr.EnumType, "#B1-2");

            attr = new EnumDataTypeAttribute(null);
            Assert.AreEqual(DataType.Custom, attr.DataType, "#C1-1");
            Assert.AreEqual(null, attr.EnumType, "#C1-2");
        }
Пример #7
0
        public static EnumDataTypeAttribute CreateEnumDataTypeAttribute(this XElement annotation)
        {
            const string NAME = "EnumDataType";
            string       name = annotation.Attribute(SchemaVocab.Name).Value;

            if (name != NAME)
            {
                throw new ArgumentException(string.Format(SchemaMessages.ExpectedBut, NAME, name));
            }

            string enumType = annotation.GetArgumentValue("EnumType");
            Type   type     = GetType(enumType);
            EnumDataTypeAttribute attribute = new EnumDataTypeAttribute(type);

            FillValidationAttribute(attribute, annotation);
            return(attribute);
        }
        public void ReturnsNoSpecimenWhenEnumGeneratorReturnsNoSpecimen(Type enumType)
        {
            // Arrange
            var enumDataTypeAttribute = new EnumDataTypeAttribute(enumType);
            var providedAttribute     = new ProvidedAttribute(enumDataTypeAttribute, true);
            var request       = new FakeMemberInfo(providedAttribute);
            var enumGenerator = new DelegatingSpecimenBuilder
            {
                OnCreate = (_, _) => new NoSpecimen()
            };
            var sut = new EnumDataTypeAttributeRelay(enumGenerator);

            // Act
            var actual = sut.Create(request, null);

            // Assert
            Assert.IsType <NoSpecimen>(actual);
        }
        public void RequestForEnumWithNoValuesThrows()
        {
            // Arrange
            var enumDataTypeAttribute = new EnumDataTypeAttribute(typeof(EmptyEnum));
            var providedAttribute     = new ProvidedAttribute(enumDataTypeAttribute, true);
            var request      = new FakeMemberInfo(providedAttribute);
            var dummyContext = new DelegatingSpecimenContext();

            var sut = new EnumDataTypeAttributeRelay
            {
                RequestMemberTypeResolver = new DelegatingRequestMemberTypeResolver
                {
                    OnTryGetMemberType = _ => typeof(string)
                }
            };

            // Act & assert
            Assert.Throws <ObjectCreationException>(() => sut.Create(request, dummyContext));
        }
        public void ReturnsNoSpecimenWhenResolverReturnsNoSpecimen(Type enumType)
        {
            // Arrange
            var enumDataTypeAttribute = new EnumDataTypeAttribute(enumType);
            var providedAttribute     = new ProvidedAttribute(enumDataTypeAttribute, true);
            var request = new FakeMemberInfo(providedAttribute);
            var sut     = new EnumDataTypeAttributeRelay
            {
                RequestMemberTypeResolver = new DelegatingRequestMemberTypeResolver
                {
                    OnTryGetMemberType = _ => null
                }
            };

            // Act
            var actual = sut.Create(request, null);

            // Assert
            Assert.IsType <NoSpecimen>(actual);
        }
        public void RequestReturnsExpectedResultForEnumMemberType(Type enumType, Type memberType, object expectedResult)
        {
            // Arrange
            var enumDataTypeAttribute = new EnumDataTypeAttribute(enumType);
            var providedAttribute     = new ProvidedAttribute(enumDataTypeAttribute, true);
            var request      = new FakeMemberInfo(providedAttribute);
            var dummyContext = new DelegatingSpecimenContext();

            var sut = new EnumDataTypeAttributeRelay
            {
                RequestMemberTypeResolver = new DelegatingRequestMemberTypeResolver
                {
                    OnTryGetMemberType = _ => memberType
                }
            };

            // Act
            var actual = sut.Create(request, dummyContext);

            // Assert
            Assert.Equal(expectedResult, actual);
        }
        public void ReturnsNoSpecimenResultForCustomClassMemberType(Type enumType, Type memberType)
        {
            // Arrange
            var enumDataTypeAttribute = new EnumDataTypeAttribute(enumType);
            var providedAttribute     = new ProvidedAttribute(enumDataTypeAttribute, true);
            var request      = new FakeMemberInfo(providedAttribute);
            var dummyContext = new DelegatingSpecimenContext();

            var sut = new EnumDataTypeAttributeRelay
            {
                RequestMemberTypeResolver = new DelegatingRequestMemberTypeResolver
                {
                    OnTryGetMemberType = _ => memberType
                }
            };

            // Act
            var actual = sut.Create(request, dummyContext);

            // Assert
            Assert.IsType <NoSpecimen>(actual);
        }
        private static void AddEnumFacet(EnumDataTypeAttribute attribute, ISpecification holder, Type typeOfEnum)
        {
            if (attribute != null)
            {
                FacetUtils.AddFacet(Create(attribute, holder));
                return;
            }

            Type typeOrNulledType = TypeUtils.GetNulledType(typeOfEnum);

            if (TypeUtils.IsEnum(typeOrNulledType))
            {
                FacetUtils.AddFacet(new EnumFacet(holder, typeOrNulledType));
                return;
            }

            if (CollectionUtils.IsGenericOfEnum(typeOfEnum))
            {
                Type enumInstanceType = typeOfEnum.GetGenericArguments().First();
                FacetUtils.AddFacet(new EnumFacet(holder, enumInstanceType));
            }
        }
        public void RequestReturnsCorrectTypeForDifferentMemberTypes(
            Type enumType, Type memberType)
        {
            // Arrange
            var enumDataTypeAttribute = new EnumDataTypeAttribute(enumType);
            var providedAttribute     = new ProvidedAttribute(enumDataTypeAttribute, true);
            var request      = new FakeMemberInfo(providedAttribute);
            var dummyContext = new DelegatingSpecimenContext();

            var sut = new EnumDataTypeAttributeRelay
            {
                RequestMemberTypeResolver = new DelegatingRequestMemberTypeResolver
                {
                    OnTryGetMemberType = _ => memberType
                }
            };

            // Act
            var result = sut.Create(request, dummyContext);

            // Assert
            Assert.IsType(memberType, result);
        }
Пример #15
0
        public static void AddEnumValidation(ExcelWorksheet workSheet, string address, string errorTitle,
                                             string promptTitle, EnumDataTypeAttribute enumDataType)
        {
            //var enumDataType = cfg.GetCustomAttributes(typeof(EnumDataTypeAttribute), true).Cast<EnumDataTypeAttribute>().FirstOrDefault();
            if (enumDataType != null)
            {
                var validation = workSheet.DataValidations.AddListValidation(address);
                validation.ErrorTitle       = $"Enum Validation";
                validation.ErrorStyle       = ExcelDataValidationWarningStyle.stop;
                validation.PromptTitle      = $"Select item from the list";
                validation.ShowInputMessage = true;
                validation.ShowErrorMessage = true;

                List <string> values = new List <string>();
                foreach (var v in Enum.GetValues(enumDataType.EnumType))
                {
                    validation.Formula.Values.Add(v.ToString());
                    values.Add(v.ToString());
                }
                string value = String.Join(",", values);
                validation.Error  = $"Please select data from a list: {value}";
                validation.Prompt = $"Please select data from a list: {value}";
            }
        }
 public static void Validate_InvalidEnumType_ThrowsInvalidOperationException(Type enumType)
 {
     var attribute = new EnumDataTypeAttribute(enumType);
     Assert.Throws<InvalidOperationException>(() => attribute.Validate("AnyValue", new ValidationContext(new object())));
 }
Пример #17
0
        /// <summary>
        /// Verify whether is enum data
        /// </summary>
        /// <param name="value">Value</param>
        /// <param name="enumType">enum type</param>
        /// <returns>Return whether the verification has passed</returns>
        public static bool IsEnumData(this object value, Type enumType)
        {
            var enumDataAttribute = new EnumDataTypeAttribute(enumType);

            return(enumDataAttribute.IsValid(value));
        }
Пример #18
0
 private static IEnumFacet Create(EnumDataTypeAttribute attribute, ISpecification holder) => attribute is null ? null : new EnumFacet(holder, attribute.EnumType);
Пример #19
0
 public NomenclatureDataTypeValidator(Type nomenclatureType)
     : base("", "0006-000016", false)
 {
     endt = new EnumDataTypeAttribute(nomenclatureType);
     this._nomenclatureName = nomenclatureType.GetDisplayString();
 }
 /// <summary>
 /// コンストラクタ。
 /// </summary>
 /// <param name="enumType">列挙。</param>
 /// <param name="enums">許可される値の一覧。</param>
 public EnumContainsAttribute(Type enumType, params object[] enums)
 {
     _enumDataType = new EnumDataTypeAttribute(enumType);
     Enums         = enums;
 }
Пример #21
0
        public static void Validate_InvalidEnumType_ThrowsInvalidOperationException(Type enumType)
        {
            var attribute = new EnumDataTypeAttribute(enumType);

            Assert.Throws <InvalidOperationException>(() => attribute.Validate("AnyValue", new ValidationContext(new object())));
        }
Пример #22
0
        private void IsValidHelper <T>(bool expected, object value)
        {
            EnumDataTypeAttribute attribute = new EnumDataTypeAttribute(typeof(T));

            Assert.AreEqual(expected, attribute.IsValid(value), "Value = {0} ; Type = {1}", value, value.GetType());
        }
 /// <summary>
 ///     Create new instance.
 /// </summary>
 public ArrayEnumDataTypeAttribute(Type enumType)
 {
     validator = new EnumDataTypeAttribute(enumType);
     EnumType  = enumType;
 }
Пример #24
0
        /// <summary>
        /// コンストラクタ
        /// </summary>
        public CheckEnumDataTypeAttribute(Type enumType) : base()
        {
            this.SetupErrorMessageResource();

            Attr = new EnumDataTypeAttribute(enumType);
        }
Пример #25
0
 public ValidEnumAttribute(Type enumType) : base("Enumeration")
 {
     this.enumType = enumType;
     enumValidator = (enumType == null) ? null : new EnumDataTypeAttribute(enumType);
     ErrorMessage  = CoreMessages.OpenApi.RequestMalFormatted;
 }
 private static IEnumFacet Create(EnumDataTypeAttribute attribute, ISpecification holder)
 {
     return(attribute == null ? null : new EnumFacet(holder, attribute.EnumType));
 }
Пример #27
0
        public void EnumDataTypeAttribute_Null()
        {
            EnumDataTypeAttribute target = new EnumDataTypeAttribute(null);

            ExceptionHelper.ExpectInvalidOperationException(delegate() { target.IsValid("any value"); }, Resources.DataAnnotationsResources.EnumDataTypeAttribute_TypeCannotBeNull);
        }
Пример #28
0
        public void IsValid()
        {
            var attr = new EnumDataTypeAttribute(typeof(string));

            try {
                attr.IsValid(null);
                Assert.Fail("#A1-1");
            } catch (InvalidOperationException) {
                // success
            }

            try {
                attr.IsValid("stuff");
                Assert.Fail("#A1-2");
            } catch (InvalidOperationException) {
                // success
            }

            attr = new EnumDataTypeAttribute(typeof(TestEnum));
            Assert.IsTrue(attr.IsValid(null), "#A2-1");
            Assert.IsTrue(attr.IsValid(1), "#A2-2");
            Assert.IsFalse(attr.IsValid(0), "#A2-3");
            Assert.IsTrue(attr.IsValid(TestEnum.Two), "#A2-4");
            Assert.IsFalse(attr.IsValid(AnotherEnum.Five), "#A2-5");
            Assert.IsFalse(attr.IsValid("stuff"), "#A2-5");

            AnotherEnum val = AnotherEnum.Six;

            Assert.IsFalse(attr.IsValid(val), "#A2-6");

            Assert.IsTrue(attr.IsValid(String.Empty), "#A2-7");
            Assert.IsTrue(attr.IsValid("Three"), "#A2-8");
            Assert.IsFalse(attr.IsValid("Four"), "#A2-9");
            Assert.IsFalse(attr.IsValid(true), "#A2-10");
            Assert.IsFalse(attr.IsValid(' '), "#A2-11");
            Assert.IsFalse(attr.IsValid(0.12F), "#A2-12");
            Assert.IsTrue(attr.IsValid((short)1), "#A2-13");
            Assert.IsFalse(attr.IsValid(12.3M), "#A2-14");
            Assert.IsFalse(attr.IsValid(12.3D), "#A2-15");
            Assert.IsTrue(attr.IsValid((long)1), "#A2-16");

            attr = new EnumDataTypeAttribute(typeof(AnotherEnum));
            Assert.IsTrue(attr.IsValid(null), "#A3-1");
            Assert.IsTrue(attr.IsValid(4), "#A3-2");
            Assert.IsFalse(attr.IsValid(0), "#A3-3");
            Assert.IsTrue(attr.IsValid(AnotherEnum.Five), "#A3-4");
            Assert.IsFalse(attr.IsValid(TestEnum.One), "#A3-5");
            Assert.IsFalse(attr.IsValid("stuff"), "#A3-5");

            val = AnotherEnum.Four;
            Assert.IsTrue(attr.IsValid(val), "#A3-6");

            Assert.IsTrue(attr.IsValid(String.Empty), "#A3-7");
            Assert.IsTrue(attr.IsValid("Four"), "#A3-8");
            Assert.IsFalse(attr.IsValid("Three"), "#A3-9");
            Assert.IsTrue(attr.IsValid(12), "#A3-10");
            Assert.IsTrue(attr.IsValid("Five, Six"), "#A3-11");
            Assert.IsFalse(attr.IsValid(true), "#A3-12");
            Assert.IsFalse(attr.IsValid(' '), "#A3-13");
            Assert.IsFalse(attr.IsValid(0.12), "#A3-14");
        }
Пример #29
0
        public void EnumDataTypeAttribute_NotEnum()
        {
            EnumDataTypeAttribute target = new EnumDataTypeAttribute(typeof(string));

            ExceptionHelper.ExpectInvalidOperationException(delegate() { target.IsValid("any value"); }, String.Format(CultureInfo.CurrentCulture, Resources.DataAnnotationsResources.EnumDataTypeAttribute_TypeNeedsToBeAnEnum, typeof(string).FullName));
        }