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);
        }
Beispiel #3
0
        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
        }
Beispiel #5
0
        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
        }
Beispiel #6
0
        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);
        }
Beispiel #7
0
        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
        }
Beispiel #8
0
        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
        }
Beispiel #11
0
        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
        }
Beispiel #12
0
            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
            }
Beispiel #13
0
        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
        }
Beispiel #14
0
        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));
        }
Beispiel #15
0
        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
        }
Beispiel #16
0
        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);
        }
Beispiel #20
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);
        }
        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
        }
Beispiel #22
0
        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
        }
Beispiel #23
0
        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);
        }
Beispiel #24
0
        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);
        }
Beispiel #26
0
        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());
        }
Beispiel #28
0
        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)));
            }
        }
Beispiel #30
0
        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
        }
Beispiel #31
0
        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));
        }