public void CreateWithNonLambdaExpressionTypeRequestReturnsNoSpecimen() { var nonExpressionRequest = typeof(object); var dummyContainer = new DelegatingSpecimenContext(); var sut = new LambdaExpressionGenerator(); var result = sut.Create(nonExpressionRequest, dummyContainer); Assert.IsType<NoSpecimen>(result); }
public void CreateWithLambdaExpressionTypeRequestReturnsCorrectResult() { var expressionRequest = typeof(Expression<Func<object>>); var dummyContainer = new DelegatingSpecimenContext(); var sut = new LambdaExpressionGenerator(); var result = sut.Create(expressionRequest, dummyContainer); Assert.IsType<Expression<Func<object>>>(result); }
public void CreateReturnsNumberInCorrectRangeForInt64OnMultipleCall(long[] limits) { // Arrange var dummyContext = new DelegatingSpecimenContext(); long expectedMin = limits.Min(); long expectedMax = limits.Max(); int repeatCount = 300; var sut = new RandomNumericSequenceGenerator(expectedMin, expectedMax); // Act var result = Enumerable .Range(0, repeatCount) .Select(i => sut.Create(typeof(long), dummyContext)) .Cast <long>(); // Assert Assert.True( result.All(x => x >= expectedMin && x <= expectedMax)); }
public void CreateReturnsStringReceivedFromContext() { // Fixture setup var request = new ConstrainedStringRequest(1, 10); object expectedValue = Guid.NewGuid().ToString(); var context = new DelegatingSpecimenContext { #pragma warning disable 618 OnResolve = r => typeof(string).Equals(r) ? expectedValue : new NoSpecimen(r) #pragma warning restore 618 }; var sut = new ConstrainedStringGenerator(); // Exercise system and verify outcome var result = (string)sut.Create(request, context); Assert.True(expectedValue.ToString().Contains(result)); // Teardown }
public void CreateWithLazyRequestReturnsCorrectResult() { // Fixture setup var sut = new LazyRelay(); var @delegate = new Func <T>(() => default(T)); var contextStub = new DelegatingSpecimenContext { OnResolve = t => @delegate }; // Exercise system var result = sut.Create(typeof(Lazy <T>), contextStub); var actual = Assert.IsAssignableFrom <Lazy <T> >(result); // Verify outcome var expected = new Lazy <T>(@delegate); Assert.Equal(expected.Value, actual.Value); // Teardown }
public void CreateMultipleWithRegularExpressionRequestReturnsDifferentResults(string pattern) { // This test exposes an issue with Xeger/Random. // Xeger(pattern) internally creates an instance of Random with the default seed. // This means that the RegularExpressionGenerator might create identical strings // if called multiple times within a short time. // Arrange var sut = new RegularExpressionGenerator(); var request = new RegularExpressionRequest(pattern); var dummyContext = new DelegatingSpecimenContext(); // Repeat a few times to make the test more robust. // Use ToArray to iterate the IEnumerable at this point. var result = Enumerable.Range(0, 10).Select(_ => sut.Create(request, dummyContext)).ToArray(); Assert.Equal(result.Distinct(), result); }
public void CreateWithDateTimeRequestsTwiceWithinMillisecondsReturnsDatesExactlyOneDayApart() { // Fixture setup var nowResolution = TimeSpan.FromMilliseconds(10); // see http://msdn.microsoft.com/en-us/library/system.datetime.now.aspx var request = typeof(DateTime); var seed = DateTime.Now; var sut = new StrictlyMonotonicallyIncreasingDateTimeGenerator(seed); // Exercise system var dummyContainer = new DelegatingSpecimenContext(); var firstResult = (DateTime)sut.Create(request, dummyContainer); Thread.Sleep(nowResolution + nowResolution); var secondResult = (DateTime)sut.Create(request, dummyContainer); // Verify outcome Assert.Equal(firstResult.AddDays(1), secondResult); // Teardown }
public void CreateReturnsNoSpecimenWhenRequestContainsNonNumericValues() { // Fixture setup var request = new RangedNumberRequest(typeof(string), "1/1/2001", "1/1/2011"); var context = new DelegatingSpecimenContext { OnResolve = r => { Assert.Equal(request.OperandType, r); return("14/12/1984"); } }; var loopTest = new LoopTest <RangedNumberGenerator, object>(sut => (object)sut.Create(request, context)); // Exercise system and verify outcome loopTest.Execute(2, new NoSpecimen(request)); // Teardown }
public void CreateSeededManyOnContainerReturnsCorrectResult() { // Fixture setup var seed = new Version(1, 1); var expectedResult = Enumerable.Range(1, 5).Select(i => new Version(i, i)); var container = new DelegatingSpecimenContext { OnResolve = r => r.Equals(new MultipleRequest(new SeededRequest(typeof(Version), seed))) ? (object)expectedResult.Cast <object>() : new NoSpecimen(r) }; // Exercise system var result = container.CreateMany(seed); // Verify outcome Assert.True(expectedResult.SequenceEqual(result)); // Teardown }
public void CreateCountedManyOnContainerReturnsCorrectResult() { // Fixture setup var count = 19; var expectedResult = Enumerable.Range(1, count).Select(i => new DateTime(i)); var container = new DelegatingSpecimenContext { OnResolve = r => r.Equals(new FiniteSequenceRequest(new SeededRequest(typeof(DateTime), default(DateTime)), count)) ? (object)expectedResult.Cast <object>() : new NoSpecimen(r) }; // Exercise system var result = container.CreateMany <DateTime>(count); // Verify outcome Assert.True(expectedResult.SequenceEqual(result)); // Teardown }
public void CreateReturnsResultWithCorrectType() { // Fixture setup var request = new ConstrainedStringRequest(1, 10); Type expectedType = typeof(string); object contextValue = Guid.NewGuid().ToString(); var context = new DelegatingSpecimenContext { OnResolve = r => expectedType.Equals(r) ? contextValue : new NoSpecimen(r) }; var sut = new ConstrainedStringGenerator(); // Exercise system var result = sut.Create(request, context); // Verify outcome Assert.IsAssignableFrom(expectedType, result); // Teardown }
public void AddManyFillsDictionary() { // Fixture setup var dictionary = new Dictionary <int, string>(); var expectedRequest = new MultipleRequest(typeof(KeyValuePair <int, string>)); var expectedResult = Enumerable.Range(1, 3).Select(i => new KeyValuePair <int, string>(i, i.ToString())); var context = new DelegatingSpecimenContext { OnResolve = r => expectedRequest.Equals(r) ? (object)expectedResult : new NoSpecimen() }; // Exercise system DictionaryFiller.AddMany(dictionary, context); // Verify outcome Assert.True(expectedResult.SequenceEqual(dictionary)); // Teardown }
public void CreateReturnsCorrectResultOnMultipleCallWhenRunOutOfChars( int expected, int repeatCount) { // Fixture setup var dummyContext = new DelegatingSpecimenContext(); var sut = new RandomCharSequenceGenerator(); // Exercise system var result = Enumerable .Range(1, repeatCount) .Select(x => sut.Create(typeof(char), dummyContext)) .Cast <char>() .Distinct() .Count(); // Verify outcome Assert.Equal(expected, result); // Teardown }
public void ExecuteFillsDictionary() { // Arrange var dictionary = new Dictionary <int, string>(); var expectedRequest = new MultipleRequest(typeof(KeyValuePair <int, string>)); var expectedResult = Enumerable.Range(1, 3).Select(i => new KeyValuePair <int, string>(i, i.ToString())); var context = new DelegatingSpecimenContext { OnResolve = r => expectedRequest.Equals(r) ? (object)expectedResult : new NoSpecimen() }; var sut = new DictionaryFiller(); // Act sut.Execute(dictionary, context); // Assert Assert.True(expectedResult.SequenceEqual(dictionary)); }
public void CreateWithDifferentOperandTypeDoesNotThrowOnMultipleCall(object minimum, object maximum) { // Fixture setup var numbers = new Random(); var request = new[] { new RangedNumberRequest( typeof(decimal), Convert.ChangeType(minimum, typeof(decimal)), Convert.ChangeType(maximum, typeof(decimal)) ), new RangedNumberRequest( typeof(double), Convert.ChangeType(minimum, typeof(double)), Convert.ChangeType(maximum, typeof(double)) ), new RangedNumberRequest( typeof(decimal), Convert.ChangeType(minimum, typeof(decimal)), Convert.ChangeType(maximum, typeof(decimal)) ) }; var context = new DelegatingSpecimenContext { OnResolve = r => { if (r.Equals(typeof(double))) { return(numbers.NextDouble()); } if (r.Equals(typeof(decimal))) { return(Convert.ToDecimal(numbers.Next())); } return(new NoSpecimen(r)); } }; var sut = new RangedNumberGenerator(); // Exercise system and verify outcome Array.ForEach(request, r => Assert.DoesNotThrow(() => sut.Create(r, context))); // Teardown }
public void DoesNotThrowWithDuplicateEntries() { // Fixture setup var dictionary = new Dictionary <int, string>(); var request = new MultipleRequest(typeof(KeyValuePair <int, string>)); var sequence = Enumerable.Repeat(0, 3).Select(i => new KeyValuePair <int, string>(i, i.ToString())); #pragma warning disable 618 var context = new DelegatingSpecimenContext { OnResolve = r => request.Equals(r) ? (object)sequence : new NoSpecimen(r) }; #pragma warning restore 618 var sut = new DictionaryFiller(); // Exercise system & Verify outcome Assert.DoesNotThrow(() => sut.Execute(dictionary, context)); // Teardown }
public void CreateReturnsCorrectResult() { // Arrange var request = new object(); var context = new DelegatingSpecimenContext(); var expected = new object(); var builder = new DelegatingSpecimenBuilder { OnCreate = (r, c) => r == request && c == context ? expected : new NoSpecimen() }; var sut = new NodeComposer <object>(builder); // Act var actual = sut.Create(request, context); // Assert Assert.Equal(expected, 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 ShouldDelegateCreateRequestToInnerBuilder() { // Arrange var request = new object(); var context = new DelegatingSpecimenContext(); var expectedResult = new object(); var builder = new DelegatingSpecimenBuilder { OnCreate = (r, ctx) => r == request ? expectedResult : new NoSpecimen() }; var sut = new DataAnnotationsSupportNode(builder); // Act var actualResult = sut.Create(request, context); // Assert Assert.Equal(expectedResult, actualResult); }
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 CreateReturnsStringWithCorrectLength(int expectedMinimumLength, int expectedMaximumLength) { // Fixture setup var request = new ConstrainedStringRequest(expectedMinimumLength, expectedMaximumLength); object contextValue = Guid.NewGuid().ToString(); var context = new DelegatingSpecimenContext { #pragma warning disable 618 OnResolve = r => typeof(string).Equals(r) ? contextValue : new NoSpecimen(r) #pragma warning restore 618 }; var sut = new ConstrainedStringGenerator(); // Exercise system var result = (string)sut.Create(request, context); // Verify outcome Assert.True(expectedMinimumLength < result.Length && expectedMaximumLength >= result.Length); // Teardown }
public void CreateWithStringSeedWhenContainerCanCreateStringsWillReturnCorrectResult() { // Fixture setup var seedString = Guid.NewGuid().ToString(); var containerString = Guid.NewGuid().ToString(); var sut = new StringSeedRelay(); var stringSeed = new SeededRequest(typeof(string), seedString); var container = new DelegatingSpecimenContext { OnResolve = r => containerString }; // Exercise system var result = sut.Create(stringSeed, container); // Verify outcome var expectedString = seedString + containerString; Assert.Equal(expectedString, result); // Teardown }
public void ShouldReturnNoSpecimenIfUnableToSatisfyRangedRequest() { // Arrange var sut = new TimeSpanRangedRequestRelay(); var request = new RangedRequest(memberType: typeof(TimeSpan), operandType: typeof(TimeSpan), minimum: "00:00:00", maximum: "01:00:00"); var context = new DelegatingSpecimenContext { OnResolve = _ => new NoSpecimen() }; // Act var actualResult = sut.Create(request, context); // Assert Assert.Equal(new NoSpecimen(), actualResult); }
public void ShouldHandleRequestOfTimeSpanType() { // Arrange var sut = new TimeSpanRangedRequestRelay(); var request = new RangedRequest(memberType: typeof(TimeSpan), operandType: typeof(TimeSpan), minimum: "00:00:00", maximum: "01:00:00"); var context = new DelegatingSpecimenContext { OnResolve = _ => 30 * 60 * 1000.0 // 30 (chosen randomly) minutes in miliseconds }; // Act var actualResult = sut.Create(request, context); // Assert Assert.Equal(TimeSpan.FromMinutes(30), actualResult); }
public void CreateReturnsCorrectResult(Type operandType, object minimum, object maximum, object contextValue, object expectedResult) { // Arrange var sut = new RangedNumberGenerator(); var request = new RangedNumberRequest(operandType, minimum, maximum); var context = new DelegatingSpecimenContext { OnResolve = r => { Assert.Equal(request.OperandType, r); return(contextValue); } }; // Act var result = sut.Create(request, context); // Assert Assert.Equal(expectedResult, result); }
public void CreateReturnsNumberInCorrectRangeOnMultipleCall(long[] limits) { // Arrange var request = typeof(int); var dummyContext = new DelegatingSpecimenContext(); var expectedMin = (int)limits.Min(); var expectedMax = (int)limits.Max(); int repeatCount = (expectedMax - expectedMin) + 1; var sut = new RandomNumericSequenceGenerator(limits); // Act var result = Enumerable .Range(0, repeatCount) .Select(i => sut.Create(request, dummyContext)) .Cast <int>(); // Assert Assert.True( result.All(x => x >= expectedMin && x <= expectedMax)); }
#pragma warning disable xUnit1026 // Theory methods should use all of their parameters - the minLength is needed to access the maxLength. public void CreateReturnsStringWithCorrectLengthMultipleCall(int minimumLength, int maximumLength) #pragma warning restore xUnit1026 // Theory methods should use all of their parameters { // Arrange var request = new ConstrainedStringRequest(maximumLength); object contextValue = Guid.NewGuid().ToString(); var context = new DelegatingSpecimenContext { OnResolve = r => typeof(string).Equals(r) ? contextValue : new NoSpecimen() }; var sut = new ConstrainedStringGenerator(); // Act var result = from s in Enumerable.Range(1, 30).Select(i => (string)sut.Create(request, context)) where s.Length <= request.MinimumLength || s.Length > request.MaximumLength select s; // Assert Assert.False(result.Any()); }
public void CreateReturnsUniqueNumbersOnMultipleCall(long[] limits) { // Arrange var dummyContext = new DelegatingSpecimenContext(); var min = (int)limits.Min(); var max = (int)limits.Max(); int repeatCount = (max - min) + 1; var sut = new RandomNumericSequenceGenerator(limits); // Act var result = Enumerable .Range(0, repeatCount) .Select(i => sut.Create(typeof(int), dummyContext)) .Cast <int>() .OrderBy(x => x); // Assert var expectedResult = Enumerable.Range(min, repeatCount); Assert.True(expectedResult.SequenceEqual(result)); }
public void CreateWithDifferentOperandTypeDoesNotThrowOnMultipleCall(object minimum, object maximum) { // Arrange var numbers = new Random(); var request = new[] { new RangedNumberRequest( typeof(decimal), Convert.ChangeType(minimum, typeof(decimal)), Convert.ChangeType(maximum, typeof(decimal))), new RangedNumberRequest( typeof(double), Convert.ChangeType(minimum, typeof(double)), Convert.ChangeType(maximum, typeof(double))), new RangedNumberRequest( typeof(decimal), Convert.ChangeType(minimum, typeof(decimal)), Convert.ChangeType(maximum, typeof(decimal))) }; var context = new DelegatingSpecimenContext { OnResolve = r => { if (r.Equals(typeof(double))) { return(numbers.NextDouble()); } if (r.Equals(typeof(decimal))) { return(Convert.ToDecimal(numbers.Next())); } return(new NoSpecimen()); } }; var sut = new RangedNumberGenerator(); // Act & assert foreach (var r in request) { Assert.Null(Record.Exception(() => sut.Create(r, context))); } }
public void CreateReturnsStringWithCorrectLengthMultipleCall(int minimumLength, int maximumLength) { // Fixture setup var request = new ConstrainedStringRequest(maximumLength); object contextValue = Guid.NewGuid().ToString(); var context = new DelegatingSpecimenContext { OnResolve = r => typeof(string).Equals(r) ? contextValue : new NoSpecimen(r) }; var sut = new ConstrainedStringGenerator(); // Exercise system var result = (from s in Enumerable.Range(1, 30).Select(i => (string)sut.Create(request, context)) where (s.Length <= request.MinimumLength || s.Length > request.MaximumLength) select s); // Verify outcome Assert.False(result.Any()); // Teardown }
public void CreateReturnsCorrectResultOnMultipleCall(object maximum, int loopCount) { // Fixture setup var numbers = new Random(); var request = new RangedNumberRequest(typeof(int), 1, maximum); var context = new DelegatingSpecimenContext { OnResolve = r => { Assert.Equal(request.OperandType, r); return(numbers.Next()); } }; var loopTest = new LoopTest <RangedNumberGenerator, int>(sut => (int)sut.Create(request, context)); // Exercise system and verify outcome loopTest.Execute(loopCount); // Teardown }
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)); }