File tree Expand file tree Collapse file tree 7 files changed +143
-0
lines changed Expand file tree Collapse file tree 7 files changed +143
-0
lines changed Original file line number Diff line number Diff line change
1
+ using System . Linq ;
2
+ using Shouldly ;
3
+ using TestStack . Dossier . DataSources . Picking ;
4
+ using TestStack . Dossier . Lists ;
5
+ using TestStack . Dossier . Tests . TestHelpers . Objects . Entities ;
6
+ using Xunit ;
7
+
8
+ namespace TestStack . Dossier . Tests . DataSources . Picking
9
+ {
10
+ public class PickingTests
11
+ {
12
+ [ Fact ]
13
+ public void RandomItemFrom_should_add_items_from_list_randomly ( )
14
+ {
15
+ var addresses = Builder < Address > . CreateListOfSize ( 15 ) . BuildList ( ) ;
16
+ var customers = Builder < Customer >
17
+ . CreateListOfSize ( 15 )
18
+ . All ( )
19
+ . Set ( x => x . PostalAddress , Pick . RandomItemFrom ( addresses ) . Next )
20
+ . BuildList ( ) ;
21
+
22
+ var uniqueAddresses = customers . Select ( x => x . PostalAddress ) . Distinct ( ) . Count ( ) ;
23
+ uniqueAddresses . ShouldBeGreaterThan ( 3 ) ;
24
+ uniqueAddresses . ShouldBeLessThan ( 15 ) ;
25
+ }
26
+
27
+ [ Fact ]
28
+ public void RepeatingSequenceFrom_should_add_items_from_list_sequentially_and_repeat_when_list_completes ( )
29
+ {
30
+ var addresses = Builder < Address > . CreateListOfSize ( 3 ) . BuildList ( ) ;
31
+ var customers = Builder < Customer >
32
+ . CreateListOfSize ( 9 )
33
+ . All ( )
34
+ . Set ( x => x . PostalAddress , Pick . RepeatingSequenceFrom ( addresses ) . Next )
35
+ . BuildList ( ) ;
36
+
37
+ for ( int i = 0 ; i < 2 ; i ++ )
38
+ {
39
+ var address = customers [ i ] . PostalAddress ;
40
+ address . ShouldBeSameAs ( customers [ i + 3 ] . PostalAddress ) ;
41
+ address . ShouldBeSameAs ( customers [ i + 6 ] . PostalAddress ) ;
42
+
43
+ address . ShouldNotBeSameAs ( customers [ i + 1 ] . PostalAddress ) ;
44
+ address . ShouldNotBeSameAs ( customers [ i + 2 ] . PostalAddress ) ;
45
+ }
46
+ }
47
+ }
48
+ }
Original file line number Diff line number Diff line change 58
58
<Compile Include =" Builder_CreateListTests.cs" />
59
59
<Compile Include =" Builder_CreateNewTests.cs" />
60
60
<Compile Include =" Builder_SetUsingBuilderTests.cs" />
61
+ <Compile Include =" DataSources\Picking\PickingTests.cs" />
61
62
<Compile Include =" TestHelpers\Builders\AddressViewModelBuilder.cs" />
62
63
<Compile Include =" TestHelpers\Builders\AutoConstructorCustomerBuilder.cs" />
63
64
<Compile Include =" ChildBuilderTests.cs" />
119
120
<Name >TestStack.Dossier</Name >
120
121
</ProjectReference >
121
122
</ItemGroup >
123
+ <ItemGroup />
122
124
<Import Project =" $(MSBuildToolsPath)\Microsoft.CSharp.targets" />
123
125
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
124
126
Other similar extension points exist, see Microsoft.Common.targets.
Original file line number Diff line number Diff line change @@ -40,6 +40,7 @@ public IList<T> Data
40
40
}
41
41
return _list ;
42
42
}
43
+ internal set { _list = value ; }
43
44
}
44
45
45
46
/// <summary>
Original file line number Diff line number Diff line change
1
+ using System . Collections . Generic ;
2
+
3
+ namespace TestStack . Dossier . DataSources . Picking
4
+ {
5
+ /// <summary>
6
+ /// Pick a sequence of items from a collection of items according to different selection strategies.
7
+ /// </summary>
8
+ public class Pick
9
+ {
10
+ /// <summary>
11
+ /// Selects a random item from the list each time it is called.
12
+ /// </summary>
13
+ /// <typeparam name="T"></typeparam>
14
+ /// <param name="list">The list.</param>
15
+ /// <returns>The RandomItemSource class.</returns>
16
+ public static RandomItemSource < T > RandomItemFrom < T > ( IList < T > list )
17
+ {
18
+ return new RandomItemSource < T > ( list ) ;
19
+ }
20
+
21
+ /// <summary>
22
+ /// Selects each item sequentially from the list and starts again from the beginning when the list is exhausted.
23
+ /// </summary>
24
+ /// <typeparam name="T"></typeparam>
25
+ /// <param name="list">The list.</param>
26
+ /// <returns></returns>
27
+ public static RepeatingSequenceSource < T > RepeatingSequenceFrom < T > ( IList < T > list )
28
+ {
29
+ return new RepeatingSequenceSource < T > ( list ) ;
30
+ }
31
+ }
32
+ }
Original file line number Diff line number Diff line change
1
+ using System ;
2
+ using System . Collections . Generic ;
3
+
4
+ namespace TestStack . Dossier . DataSources . Picking
5
+ {
6
+ /// <summary>
7
+ /// Implements the random item strategy
8
+ /// </summary>
9
+ public class RandomItemSource < T > : DataSource < T >
10
+ {
11
+ /// <inheritdoc />
12
+ public RandomItemSource ( IList < T > list )
13
+ {
14
+ Data = list ;
15
+ Generator . StartIndex = 0 ;
16
+ Generator . ListSize = Data . Count ;
17
+ }
18
+
19
+ /// <inheritdoc />
20
+ protected override IList < T > InitializeDataSource ( )
21
+ {
22
+ // This method will never be called as the list is set in the constructor.
23
+ throw new NotImplementedException ( ) ;
24
+ }
25
+ }
26
+ }
Original file line number Diff line number Diff line change
1
+ using System ;
2
+ using System . Collections . Generic ;
3
+ using TestStack . Dossier . DataSources . Generators ;
4
+
5
+ namespace TestStack . Dossier . DataSources . Picking
6
+ {
7
+ /// <summary>
8
+ /// Implements the repeatable sequence strategy
9
+ /// </summary>
10
+ public class RepeatingSequenceSource < T > : DataSource < T >
11
+ {
12
+ /// <inheritdoc />
13
+ public RepeatingSequenceSource ( IList < T > list )
14
+ : base ( new SequentialGenerator ( ) )
15
+ {
16
+ Data = list ;
17
+ Generator . StartIndex = 0 ;
18
+ Generator . ListSize = Data . Count ;
19
+ }
20
+
21
+ /// <inheritdoc />
22
+ protected override IList < T > InitializeDataSource ( )
23
+ {
24
+ // This method will never be called as the list is set in the constructor.
25
+ throw new NotImplementedException ( ) ;
26
+ }
27
+ }
28
+ }
Original file line number Diff line number Diff line change 52
52
<ItemGroup >
53
53
<Compile Include =" AnonymousValueFixture.cs" />
54
54
<Compile Include =" Builder.cs" />
55
+ <Compile Include =" DataSources\Picking\Pick.cs" />
56
+ <Compile Include =" DataSources\Picking\RandomItemSource.cs" />
57
+ <Compile Include =" DataSources\Picking\RepeatingSequenceSource.cs" />
55
58
<Compile Include =" ITestDataBuilder.cs" />
56
59
<Compile Include =" DataSources\Dictionaries\Cache.cs" />
57
60
<Compile Include =" DataSources\Dictionaries\IDictionaryRepository.cs" />
179
182
<EmbeddedResource Include =" DataSources\Dictionaries\Resources\PersonUsername.txt" />
180
183
<EmbeddedResource Include =" DataSources\Dictionaries\Resources\ShirtSize.txt" />
181
184
</ItemGroup >
185
+ <ItemGroup >
186
+ <Folder Include =" Picking\" />
187
+ </ItemGroup >
182
188
<Import Project =" $(MSBuildToolsPath)\Microsoft.CSharp.targets" />
183
189
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
184
190
Other similar extension points exist, see Microsoft.Common.targets.
You can’t perform that action at this time.
0 commit comments