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 CreateWithStringRequestConstrainedbyMinLengthReturnsCorrectResult(int min)
        {
            // Arrange
            var minLengthAttribute = new MinLengthAttribute(min);

            var request = new FakeMemberInfo(
                new ProvidedAttribute(minLengthAttribute, true));

            var expectedRequest = new ConstrainedStringRequest(min, int.MaxValue);
            var expectedResult  = new object();
            var context         = new DelegatingSpecimenContext
            {
                OnResolve = r => expectedRequest.Equals(r) ? expectedResult : new NoSpecimen()
            };

            var sut = new MinAndMaxLengthAttributeRelay
            {
                RequestMemberTypeResolver = new DelegatingRequestMemberTypeResolver
                {
                    OnTryGetMemberType = r => typeof(string)
                }
            };

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

            // 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);
        }
Пример #4
0
 public FakeParameterInfo(Type parameterType, Attribute attribute)
 {
     ClassImpl  = parameterType;
     _attribute = attribute;
     AttrsImpl  = ParameterAttributes.In;
     NameImpl   = "?";
     MemberImpl = new FakeMemberInfo();
 }
Пример #5
0
        public void Equals_False_DifferentModules()
        {
            var one = new FakeMemberInfo(typeof(object), 1, typeof(object).Module);
            var two = new FakeMemberInfo(one.DeclaringType, one.MetadataToken, typeof(MemberInfoEqualityComparerTest).Module);

            var result = MemberInfoEqualityComparer <FakeMemberInfo> .Instance.Equals(one, two);

            Assert.That(result, Is.False);
        }
Пример #6
0
        public void Equals_False_DifferentTypes()
        {
            var one = typeof(ClassWithMethods).GetMethod("SimpleMethod1");
            var two = new FakeMemberInfo(typeof(string), one.MetadataToken, one.Module);

            var result = MemberInfoEqualityComparer <MemberInfo> .Instance.Equals(one, two);

            Assert.That(result, Is.False);
        }
Пример #7
0
        public void GetHashcode_NullDeclaringType()
        {
            var one = new FakeMemberInfo(null, 1, typeof(object).Module);
            var two = new FakeMemberInfo(null, 1, typeof(object).Module);

            Assert.That(one.DeclaringType, Is.SameAs(two.DeclaringType));
            Assert.That(
                MemberInfoEqualityComparer <FakeMemberInfo> .Instance.GetHashCode(one),
                Is.EqualTo(MemberInfoEqualityComparer <FakeMemberInfo> .Instance.GetHashCode(two)));
        }
Пример #8
0
        public void Equals_True_NullDeclaringType()
        {
            var one = new FakeMemberInfo(null, 1, typeof(object).Module);
            var two = new FakeMemberInfo(null, 1, typeof(object).Module);

            Assert.That(one.DeclaringType, Is.SameAs(two.DeclaringType));

            var result = MemberInfoEqualityComparer <FakeMemberInfo> .Instance.Equals(one, two);

            Assert.That(result, Is.True);
        }
        public void CreateWithFiniteSequenceRequestConstrainedbyMinAndMaxLengthReturnsCorrectResult(int min, int max)
        {
            // Arrange
            var memberType = typeof(string[]);
            var randomNumberWithinRange = (min + max) / 2;

            var minLengthAttribute = new MinLengthAttribute(min);
            var maxLengthAttribute = new MaxLengthAttribute(max);

            var request = new FakeMemberInfo(
                new ProvidedAttribute(minLengthAttribute, true),
                new ProvidedAttribute(maxLengthAttribute, true));

            var expectedRangedNumberRequest   = new RangedNumberRequest(typeof(int), min, max);
            var expectedFiniteSequenceRequest = new FiniteSequenceRequest(
                memberType.GetElementType(),
                randomNumberWithinRange);

            var expectedResult = new List <string>();

            var context = new DelegatingSpecimenContext
            {
                OnResolve = r =>
                {
                    if (r.Equals(expectedRangedNumberRequest))
                    {
                        return(randomNumberWithinRange);
                    }
                    if (r.Equals(expectedFiniteSequenceRequest))
                    {
                        return(expectedResult);
                    }
                    return(new NoSpecimen());
                }
            };

            var sut = new MinAndMaxLengthAttributeRelay
            {
                RequestMemberTypeResolver = new DelegatingRequestMemberTypeResolver
                {
                    OnTryGetMemberType = r => memberType
                }
            };

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

            // Assert
            Assert.Equal(expectedResult, result);
        }
        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 CreateWithRegularExpressionAttributeRequestReturnsCorrectResult(string pattern)
        {
            // Arrange
            var regularExpressionAttribute = new RegularExpressionAttribute(pattern);
            var providedAttribute          = new ProvidedAttribute(regularExpressionAttribute, true);
            var request         = new FakeMemberInfo(providedAttribute);
            var expectedRequest = new RegularExpressionRequest(regularExpressionAttribute.Pattern);
            var expectedResult  = new object();
            var context         = new DelegatingSpecimenContext
            {
                OnResolve = r => expectedRequest.Equals(r) ? expectedResult : new NoSpecimen()
            };
            var sut = new RegularExpressionAttributeRelay();
            // Act
            var result = sut.Create(request, context);

            // Assert
            Assert.Equal(expectedResult, result);
        }
        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));
        }
Пример #13
0
        public void CreateWithConstrainedStringRequestReturnsCorrectResult(int maximum)
        {
            // Arrange
            var stringLengthAttribute = new StringLengthAttribute(maximum);
            var providedAttribute     = new ProvidedAttribute(stringLengthAttribute, true);
            var request         = new FakeMemberInfo(providedAttribute);
            var expectedRequest = new ConstrainedStringRequest(stringLengthAttribute.MaximumLength);
            var expectedResult  = new object();
            var context         = new DelegatingSpecimenContext
            {
                OnResolve = r => expectedRequest.Equals(r) ? expectedResult : new NoSpecimen()
            };
            var sut = new StringLengthAttributeRelay();
            // Act
            var result = sut.Create(request, context);

            // Assert
            Assert.Equal(expectedResult, result);
        }
Пример #14
0
        public void CreateWithRegularExpressionAttributeRequestReturnsCorrectResult(string pattern)
        {
            // Fixture setup
            var regularExpressionAttribute = new RegularExpressionAttribute(pattern);
            var providedAttribute          = new ProvidedAttribute(regularExpressionAttribute, true);
            var request         = new FakeMemberInfo(providedAttribute);
            var expectedRequest = new RegularExpressionRequest(regularExpressionAttribute.Pattern);
            var expectedResult  = new object();
            var context         = new DelegatingSpecimenContext
            {
                OnResolve = r => expectedRequest.Equals(r) ? expectedResult : new NoSpecimen()
            };
            var sut = new RegularExpressionAttributeRelay();
            // Exercise system
            var result = sut.Create(request, context);

            // Verify outcome
            Assert.Equal(expectedResult, result);
            // Teardown
        }
        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);
        }
Пример #16
0
        public void CreateWithRangeAttributeRequestReturnsCorrectResult(Type type, object minimum, object maximum)
        {
            // Arrange
            var  rangeAttribute    = new RangeAttribute(type, minimum.ToString(), maximum.ToString());
            var  providedAttribute = new ProvidedAttribute(rangeAttribute, true);
            var  request           = new FakeMemberInfo(providedAttribute);
            Type conversionType    = rangeAttribute.OperandType;
            var  expectedRequest   = new RangedRequest(conversionType, conversionType, rangeAttribute.Minimum,
                                                       rangeAttribute.Maximum);
            var expectedResult = new object();
            var context        = new DelegatingSpecimenContext
            {
                OnResolve = r => expectedRequest.Equals(r) ? expectedResult : new NoSpecimen()
            };
            var sut = new RangeAttributeRelay();
            // Act
            var result = sut.Create(request, context);

            // Assert
            Assert.Equal(expectedResult, result);
        }
        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);
        }
        public void CreateWithRangedSequenceRequestConstrainedByMaxLengthReturnsCorrectResult(int max)
        {
            // Arrange
            var memberType = typeof(string[]);

            var maxLengthAttribute = new MaxLengthAttribute(max);
            var request            = new FakeMemberInfo(
                new ProvidedAttribute(maxLengthAttribute, true));

            var expectedRangedSequenceRequest = new RangedSequenceRequest(typeof(string), 1, max);
            var expectedResult = new List <string>();

            var context = new DelegatingSpecimenContext
            {
                OnResolve = r =>
                {
                    if (expectedRangedSequenceRequest.Equals(r))
                    {
                        return(expectedResult);
                    }
                    return(new NoSpecimen());
                }
            };

            var sut = new MinAndMaxLengthAttributeRelay
            {
                RequestMemberTypeResolver = new DelegatingRequestMemberTypeResolver
                {
                    OnTryGetMemberType = r => memberType
                }
            };

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

            // Assert
            Assert.Equal(expectedResult, result);
        }
        public void CreateWithStringRequestConstrainedbyMinimunLengthReturnsCorrectResult(int maximum)
        {
            // Fixture setup
            var stringLengthAttribute = new StringLengthAttribute(maximum)
            {
                MinimumLength = 1
            };
            var providedAttribute = new ProvidedAttribute(stringLengthAttribute, true);
            var request           = new FakeMemberInfo(providedAttribute);
            var expectedRequest   = new ConstrainedStringRequest(stringLengthAttribute.MinimumLength, stringLengthAttribute.MaximumLength);
            var expectedResult    = new object();
            var context           = new DelegatingSpecimenContext
            {
                OnResolve = r => expectedRequest.Equals(r) ? expectedResult : new NoSpecimen()
            };
            var sut = new StringLengthAttributeRelay();
            // Exercise system
            var result = sut.Create(request, context);

            // Verify outcome
            Assert.Equal(expectedResult, result);
            // Teardown
        }
        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);
        }
        public void WhenMaxValueIsGreaterThen0MinShouldBeEqualToAtLeast1(int min, int max, int expectedMin)
        {
            // Arrange
            var minLengthAttribute = new MinLengthAttribute(min);
            var maxLengthAttribute = new MaxLengthAttribute(max);

            var request = new FakeMemberInfo(
                new ProvidedAttribute(minLengthAttribute, true),
                new ProvidedAttribute(maxLengthAttribute, true));

            ConstrainedStringRequest actualRequest = null;

            var context = new DelegatingSpecimenContext
            {
                OnResolve = r =>
                {
                    actualRequest = (ConstrainedStringRequest)r;
                    return(new object());
                }
            };

            var sut = new MinAndMaxLengthAttributeRelay
            {
                RequestMemberTypeResolver = new DelegatingRequestMemberTypeResolver
                {
                    OnTryGetMemberType = r => typeof(string)
                }
            };

            // Act
            sut.Create(request, context);

            // Assert
            var expectedRequest = new ConstrainedStringRequest(expectedMin, max);

            Assert.Equal(expectedRequest, actualRequest);
        }