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); }
public FakeParameterInfo(Type parameterType, Attribute attribute) { ClassImpl = parameterType; _attribute = attribute; AttrsImpl = ParameterAttributes.In; NameImpl = "?"; MemberImpl = new FakeMemberInfo(); }
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); }
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); }
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))); }
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)); }
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); }
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); }
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); }