Skip to content

Commit 3b9d157

Browse files
committed
Added data sources
1 parent 7299367 commit 3b9d157

8 files changed

Lines changed: 166 additions & 9 deletions

File tree

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using NTestDataBuilder.DataSources;
4+
using NTestDataBuilder.DataSources.Generators;
5+
using Shouldly;
6+
using Xunit;
7+
8+
namespace NTestDataBuilder.Tests.DataSources
9+
{
10+
public class DataSourceTests
11+
{
12+
[Fact]
13+
public void WhenCreatingADataSource_ThenListShouldContainAllTheValues()
14+
{
15+
var sut = new DummyDataSource();
16+
17+
var result = sut.List;
18+
19+
result.Count.ShouldBe(3);
20+
result.ShouldBe(new List<string> { "Value 1", "Value 2", "Value 3" });
21+
}
22+
23+
[Fact]
24+
public void WhenGeneratingValuesFromDefaultDataSource_ThenShouldGenerateItemFromList()
25+
{
26+
var sut = new DummyDataSource();
27+
var result = sut.Next();
28+
sut.List.ShouldContain(result);
29+
}
30+
31+
[Fact]
32+
public void WhenGeneratingValuesFromDefaultDataSource_ThenShouldGenerateRandomItemsFromList()
33+
{
34+
var sut = new DummyDataSource();
35+
36+
var results = new List<string>();
37+
for (int i = 0; i < 10; i++)
38+
{
39+
results.Add(sut.Next());
40+
}
41+
42+
foreach (var item in sut.List)
43+
{
44+
results.ShouldContain(item);
45+
}
46+
}
47+
48+
[Fact]
49+
public void WhenGeneratingValuesFromSequentialDataSource_ThenShouldGenerateSequentialItems()
50+
{
51+
var sut = new DummyDataSource(new SequentialGenerator());
52+
53+
sut.Next().ShouldBe(sut.List[0]);
54+
sut.Next().ShouldBe(sut.List[1]);
55+
sut.Next().ShouldBe(sut.List[2]);
56+
sut.Next().ShouldBe(sut.List[0]);
57+
}
58+
59+
[Fact]
60+
public void WhenGeneratingValuesFromUniqueSequentialDataSource_ThenShouldThrowWhenCollectionExceeded()
61+
{
62+
var sut = new DummyDataSource(new SequentialGenerator(0,1,true));
63+
64+
sut.Next().ShouldBe(sut.List[0]);
65+
sut.Next().ShouldBe(sut.List[1]);
66+
sut.Next().ShouldBe(sut.List[2]);
67+
Should.Throw<InvalidOperationException>(() => sut.Next());
68+
}
69+
70+
}
71+
72+
public class DummyDataSource : DataSource<string>
73+
{
74+
public DummyDataSource(IGenerator generator)
75+
: base(generator) { }
76+
77+
public DummyDataSource()
78+
: this(new RandomGenerator()) { }
79+
80+
protected override IList<string> InitializeList()
81+
{
82+
return new List<string>{"Value 1", "Value 2", "Value 3"};
83+
}
84+
}
85+
}

NTestDataBuilder.Tests/DataSources/Generators/RandomGeneratorTests.cs

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Collections.Generic;
23
using NTestDataBuilder.DataSources.Generators;
34
using Shouldly;
45
using Xunit;
@@ -9,9 +10,6 @@ namespace NTestDataBuilder.Tests.DataSources.Generators
910
public class RandomGeneratorTests
1011
{
1112
[Theory,
12-
InlineData(0,0),
13-
InlineData(0,-1),
14-
InlineData(-1,-2),
1513
InlineData(5,4),
1614
InlineData(5,5)]
1715
public void WhenCreatingRandomGenerator_ThenStartIndexMustBeLessThanListSize(int startIndex, int listSize)
@@ -37,5 +35,32 @@ public void WhenGeneratingRandomIntegers_ThenShouldAlwaysGenerateIntegerBetweenS
3735
result.ShouldBeLessThanOrEqualTo(maximumValue);
3836
}
3937
}
38+
39+
[Fact]
40+
public void WhenGeneratingRandomIntegers_ThenShouldBeAbleToGenerateLowerBoundaryValue()
41+
{
42+
var results = new List<int>();
43+
var sut = new RandomGenerator(0, 3);
44+
for (int i = 0; i < 10; i++)
45+
{
46+
results.Add(sut.Generate());
47+
}
48+
results.ShouldContain(0);
49+
}
50+
51+
[Fact]
52+
public void WhenGeneratingRandomIntegers_ThenShouldBeAbleToGenerateUpperBoundaryValue()
53+
{
54+
var results = new List<int>();
55+
var sut = new RandomGenerator(0, 3);
56+
for (int i = 0; i < 10; i++)
57+
{
58+
results.Add(sut.Generate());
59+
}
60+
results.ShouldContain(2);
61+
results.ShouldNotContain(3);
62+
}
63+
64+
4065
}
4166
}

NTestDataBuilder.Tests/NTestDataBuilder.Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
</Reference>
5353
</ItemGroup>
5454
<ItemGroup>
55+
<Compile Include="DataSources\DataSourceTests.cs" />
5556
<Compile Include="DataSources\Generators\RandomGeneratorTests.cs" />
5657
<Compile Include="DataSources\Generators\SequentiaGeneratorTests.cs" />
5758
<Compile Include="EquivalenceClasses\StringEquivalenceClassesTests.cs" />
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
using System.Collections.Generic;
2+
using NTestDataBuilder.DataSources.Generators;
3+
4+
namespace NTestDataBuilder.DataSources
5+
{
6+
//public interface IDataSource<T>
7+
//{
8+
// T Next();
9+
//}
10+
public abstract class DataSource<T> //: IDataSource<T>
11+
{
12+
public IList<T> List { get; private set; }
13+
public IGenerator Generator { get; private set; }
14+
15+
public DataSource(IGenerator generator)
16+
{
17+
Generator = generator;
18+
List = InitializeList();
19+
Generator.ListSize = List.Count;
20+
}
21+
22+
public DataSource()
23+
: this(new RandomGenerator()) { }
24+
25+
protected abstract IList<T> InitializeList();
26+
27+
public virtual T Next()
28+
{
29+
return List[Generator.Generate()];
30+
}
31+
}
32+
}

NTestDataBuilder/DataSources/Generators/IGenerator.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,7 @@ namespace NTestDataBuilder.DataSources.Generators
33
public interface IGenerator
44
{
55
int Generate();
6+
int StartIndex { get; set; }
7+
int ListSize { get; set; }
68
}
79
}

NTestDataBuilder/DataSources/Generators/RandomGenerator.cs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,17 @@ namespace NTestDataBuilder.DataSources.Generators
55
public class RandomGenerator : IGenerator
66
{
77
private readonly Random _random;
8-
public int StartIndex { get; private set; }
9-
public int ListSize { get; private set; }
8+
public int StartIndex { get; set; }
9+
public int ListSize { get; set; }
10+
11+
public RandomGenerator() : this(0,1)
12+
{
13+
}
1014

1115
public RandomGenerator(int startIndex, int listSize)
1216
{
17+
Guard.Against(startIndex < 0, "startIndex must be zero or more");
18+
Guard.Against(listSize < 1, "listSize must be greater than zero");
1319
Guard.Against(startIndex >= listSize, "startIndex must be less than listSize");
1420

1521
StartIndex = startIndex;
@@ -19,7 +25,7 @@ public RandomGenerator(int startIndex, int listSize)
1925

2026
public int Generate()
2127
{
22-
return _random.Next(StartIndex, ListSize-1);
28+
return _random.Next(StartIndex, ListSize);
2329
}
2430
}
2531
}

NTestDataBuilder/DataSources/Generators/SequentialGenerator.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,14 @@ namespace NTestDataBuilder.DataSources.Generators
55
public class SequentialGenerator : IGenerator
66
{
77
private int _currentListIndex;
8-
public int StartIndex { get; private set; }
9-
public int ListSize { get; private set; }
8+
public int StartIndex { get; set; }
9+
public int ListSize { get; set; }
1010
public bool ListShouldBeUnique { get; private set; }
1111

12+
public SequentialGenerator() : this(0,1)
13+
{
14+
}
15+
1216
public SequentialGenerator(int startIndex, int listSize, bool listShouldBeUnique = false)
1317
{
1418
Guard.Against(startIndex < 0, "startIndex must be zero or more");
@@ -44,7 +48,6 @@ private void CheckForEndOfList()
4448
{
4549
_currentListIndex = StartIndex;
4650
}
47-
4851
}
4952
}
5053
}

NTestDataBuilder/NTestDataBuilder.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,9 @@
5252
</ItemGroup>
5353
<ItemGroup>
5454
<Compile Include="AnonymousValueFixture.cs" />
55+
<Compile Include="DataSources\CalendarDaySource.cs" />
56+
<Compile Include="DataSources\CalendarUkSeasonSource.cs" />
57+
<Compile Include="DataSources\DataSource.cs" />
5558
<Compile Include="Guard.cs" />
5659
<Compile Include="DataSources\Generators\IGenerator.cs" />
5760
<Compile Include="DataSources\Generators\RandomGenerator.cs" />

0 commit comments

Comments
 (0)