public void ShouldUseInitialRequestAndReturnedRandomNumberForFiniteSequenceRequest() { // Arrange var request = new object(); var rsr = new RangedSequenceRequest(request, minLength: 10, maxLength: 20); var sequenceLength = 42; FiniteSequenceRequest capturedSequenceRequest = null; var context = new DelegatingSpecimenContext { OnResolve = r => { if (r is RangedNumberRequest) { return(sequenceLength); } if (r is FiniteSequenceRequest fsr) { capturedSequenceRequest = fsr; } return(new NoSpecimen()); } }; var sut = new RangedSequenceRelay(); // Act sut.Create(rsr, context); // Assert var expectedSequenceRequest = new FiniteSequenceRequest(request, sequenceLength); Assert.Equal(expectedSequenceRequest, capturedSequenceRequest); }
public void ShouldEmitRandomNumberRequestWithCorrectBoundaries() { // Arrange var min = 10; var max = 20; var rsr = new RangedSequenceRequest(typeof(object), min, max); RangedNumberRequest capturedNumberRequest = null; var context = new DelegatingSpecimenContext { OnResolve = r => { if (r is RangedNumberRequest rnr) { capturedNumberRequest = rnr; } return(new NoSpecimen()); } }; var sut = new RangedSequenceRelay(); // Act sut.Create(rsr, context); // Assert Assert.NotNull(capturedNumberRequest); Assert.Equal(min, capturedNumberRequest.Minimum); Assert.Equal(max, capturedNumberRequest.Maximum); }
public void ShouldUseFiniteSequenceRequestResultForResult() { // Arrange var rsr = new RangedSequenceRequest(typeof(object), minLength: 10, maxLength: 20); var expectedResult = new object(); var context = new DelegatingSpecimenContext { OnResolve = r => { if (r is RangedNumberRequest) { return(42); } if (r is FiniteSequenceRequest) { return(expectedResult); } return(new NoSpecimen()); } }; var sut = new RangedSequenceRelay(); // Act var actualResult = sut.Create(rsr, context); // Assert Assert.Equal(expectedResult, actualResult); }
public void SutIsEquatable() { // Act var sut = new RangedSequenceRequest(new object(), 10, 20); // Assert Assert.IsAssignableFrom <IEquatable <RangedSequenceRequest> >(sut); }
public void SutDoesNotEqualAnonymousObject() { // Arrange var sut = new RangedSequenceRequest(new object(), 10, 20); object anonymousObject = new ConcreteType(); // Act var result = sut.Equals(anonymousObject); // Assert Assert.False(result, "Equals"); }
public void SutDoesNotEqualNullSut() { // Arrange var sut = new RangedSequenceRequest(new object(), 10, 20); RangedSequenceRequest other = null; // Act var result = sut.Equals(other); // Assert Assert.False(result, "Equals"); }
public void GetHashCodeChangesWhenAnyMemberDiffers(object request, int minLength, int maxLength) { // Arrange var etalonHashCode = new RangedSequenceRequest(typeof(object), 10, 20).GetHashCode(); var sut = new RangedSequenceRequest(request, minLength, maxLength); // Act var result = sut.GetHashCode(); // Assert Assert.NotEqual(etalonHashCode, result); }
public void SutDoesNotEqualOtherObjectWhenRangeDifferButRequestMatches() { // Arrange var request = new object(); var sut = new RangedSequenceRequest(request, 10, 20); object other = new RangedSequenceRequest(request, 1, 30); // Act var result = sut.Equals(other); // Assert Assert.False(result, "Equals"); }
public void SutDoesNotEqualOtherObjectWhenRequestsDifferButRangeMatches() { // Arrange var min = 10; var max = 10; var sut = new RangedSequenceRequest(new object(), min, max); object other = new RangedSequenceRequest(new object(), min, max); // Act var result = sut.Equals(other); // Assert Assert.False(result, "Equals"); }
public void ShouldExposeTheValuesPassedToConstructor() { // Arrange var request = new object(); var min = 100; var max = 200; // Act var sut = new RangedSequenceRequest(request, min, max); // Assert Assert.Equal(request, sut.Request); Assert.Equal(min, sut.MinLength); Assert.Equal(max, sut.MaxLength); }
public void SutEqualsOtherSutWhenBothRequestsAndRangeMatch() { // Arrange var request = new object(); var min = 10; var max = 20; var sut = new RangedSequenceRequest(request, min, max); var other = new RangedSequenceRequest(request, min, max); // Act var result = sut.Equals(other); // Assert Assert.True(result, "Equals"); }
public void CreateWithRangedSequenceRequestConstrainedByMinAndMaxLengthReturnsCorrectResult(int min, int max) { // Arrange var memberType = typeof(string[]); var minLengthAttribute = new MinLengthAttribute(min); var maxLengthAttribute = new MaxLengthAttribute(max); var request = new FakeMemberInfo( new ProvidedAttribute(minLengthAttribute, true), new ProvidedAttribute(maxLengthAttribute, true)); var expectedRangedSequenceRequest = new RangedSequenceRequest(typeof(string), min, 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 ShouldReturnNoSpecimenIfUnableToGetRandomLength() { // Arrange var rsr = new RangedSequenceRequest(typeof(object), minLength: 10, maxLength: 20); var context = new DelegatingSpecimenContext { OnResolve = r => { if (r is RangedNumberRequest) { return(new NoSpecimen()); } return(42); } }; var sut = new RangedSequenceRelay(); // Act var result = sut.Create(rsr, context); // Assert Assert.IsType <NoSpecimen>(result); }