1
- using System . Threading ;
1
+ using System ;
2
+ using System . Threading ;
2
3
using FluentAssertions ;
3
4
using GitHub . Unity ;
4
5
using NSubstitute ;
@@ -18,8 +19,10 @@ public void ShouldDetectFileChanges()
18
19
19
20
var repositoryWatcher = CreateRepositoryWatcher ( TestRepoMasterCleanSynchronized ) ;
20
21
22
+ var watcherAutoResetEvent = new RepositoryWatcherAutoResetEvent ( ) ;
23
+
21
24
var repositoryWatcherListener = Substitute . For < IRepositoryWatcherListener > ( ) ;
22
- repositoryWatcherListener . AttachListener ( repositoryWatcher ) ;
25
+ repositoryWatcherListener . AttachListener ( repositoryWatcher , watcherAutoResetEvent ) ;
23
26
24
27
repositoryWatcher . Initialize ( ) ;
25
28
repositoryWatcher . Start ( ) ;
@@ -29,7 +32,8 @@ public void ShouldDetectFileChanges()
29
32
var foobarTxt = TestRepoMasterCleanSynchronized . Combine ( "foobar.txt" ) ;
30
33
foobarTxt . WriteAllText ( "foobar" ) ;
31
34
32
- Thread . Sleep ( ThreadSleepTimeout ) ;
35
+ watcherAutoResetEvent . IndexChanged . WaitOne ( TimeSpan . FromSeconds ( 2 ) ) ;
36
+ watcherAutoResetEvent . RepositoryChanged . WaitOne ( TimeSpan . FromSeconds ( 2 ) ) ;
33
37
34
38
repositoryWatcherListener . DidNotReceive ( ) . ConfigChanged ( ) ;
35
39
repositoryWatcherListener . DidNotReceive ( ) . HeadChanged ( Args . String ) ;
@@ -55,8 +59,10 @@ public void ShouldDetectBranchChange()
55
59
56
60
var repositoryWatcher = CreateRepositoryWatcher ( TestRepoMasterCleanSynchronized ) ;
57
61
62
+ var watcherAutoResetEvent = new RepositoryWatcherAutoResetEvent ( ) ;
63
+
58
64
var repositoryWatcherListener = Substitute . For < IRepositoryWatcherListener > ( ) ;
59
- repositoryWatcherListener . AttachListener ( repositoryWatcher ) ;
65
+ repositoryWatcherListener . AttachListener ( repositoryWatcher , watcherAutoResetEvent ) ;
60
66
61
67
repositoryWatcher . Initialize ( ) ;
62
68
repositoryWatcher . Start ( ) ;
@@ -65,7 +71,9 @@ public void ShouldDetectBranchChange()
65
71
{
66
72
SwitchBranch ( "feature/document" ) ;
67
73
68
- Thread . Sleep ( ThreadSleepTimeout ) ;
74
+ watcherAutoResetEvent . HeadChanged . WaitOne ( TimeSpan . FromSeconds ( 2 ) ) ;
75
+ watcherAutoResetEvent . IndexChanged . WaitOne ( TimeSpan . FromSeconds ( 2 ) ) ;
76
+ watcherAutoResetEvent . RepositoryChanged . WaitOne ( TimeSpan . FromSeconds ( 2 ) ) ;
69
77
70
78
repositoryWatcherListener . DidNotReceive ( ) . ConfigChanged ( ) ;
71
79
repositoryWatcherListener . Received ( 1 ) . HeadChanged ( "ref: refs/heads/feature/document" ) ;
@@ -91,8 +99,10 @@ public void ShouldDetectBranchDelete()
91
99
92
100
var repositoryWatcher = CreateRepositoryWatcher ( TestRepoMasterCleanSynchronized ) ;
93
101
102
+ var watcherAutoResetEvent = new RepositoryWatcherAutoResetEvent ( ) ;
103
+
94
104
var repositoryWatcherListener = Substitute . For < IRepositoryWatcherListener > ( ) ;
95
- repositoryWatcherListener . AttachListener ( repositoryWatcher ) ;
105
+ repositoryWatcherListener . AttachListener ( repositoryWatcher , watcherAutoResetEvent ) ;
96
106
97
107
repositoryWatcher . Initialize ( ) ;
98
108
repositoryWatcher . Start ( ) ;
@@ -101,7 +111,8 @@ public void ShouldDetectBranchDelete()
101
111
{
102
112
DeleteBranch ( "feature/document" ) ;
103
113
104
- Thread . Sleep ( ThreadSleepTimeout ) ;
114
+ watcherAutoResetEvent . ConfigChanged . WaitOne ( TimeSpan . FromSeconds ( 2 ) ) ;
115
+ watcherAutoResetEvent . LocalBranchDeleted . WaitOne ( TimeSpan . FromSeconds ( 2 ) ) ;
105
116
106
117
repositoryWatcherListener . Received ( 1 ) . ConfigChanged ( ) ;
107
118
repositoryWatcherListener . DidNotReceive ( ) . HeadChanged ( Args . String ) ;
@@ -127,8 +138,10 @@ public void ShouldDetectBranchCreate()
127
138
128
139
var repositoryWatcher = CreateRepositoryWatcher ( TestRepoMasterCleanSynchronized ) ;
129
140
141
+ var watcherAutoResetEvent = new RepositoryWatcherAutoResetEvent ( ) ;
142
+
130
143
var repositoryWatcherListener = Substitute . For < IRepositoryWatcherListener > ( ) ;
131
- repositoryWatcherListener . AttachListener ( repositoryWatcher ) ;
144
+ repositoryWatcherListener . AttachListener ( repositoryWatcher , watcherAutoResetEvent ) ;
132
145
133
146
repositoryWatcher . Initialize ( ) ;
134
147
repositoryWatcher . Start ( ) ;
@@ -137,7 +150,7 @@ public void ShouldDetectBranchCreate()
137
150
{
138
151
CreateBranch ( "feature/document2" , "feature/document" ) ;
139
152
140
- Thread . Sleep ( ThreadSleepTimeout ) ;
153
+ watcherAutoResetEvent . LocalBranchCreated . WaitOne ( TimeSpan . FromSeconds ( 2 ) ) ;
141
154
142
155
repositoryWatcherListener . DidNotReceive ( ) . ConfigChanged ( ) ;
143
156
repositoryWatcherListener . DidNotReceive ( ) . HeadChanged ( Args . String ) ;
@@ -154,7 +167,7 @@ public void ShouldDetectBranchCreate()
154
167
155
168
CreateBranch ( "feature2/document2" , "feature/document" ) ;
156
169
157
- Thread . Sleep ( ThreadSleepTimeout ) ;
170
+ watcherAutoResetEvent . LocalBranchCreated . WaitOne ( TimeSpan . FromSeconds ( 2 ) ) ;
158
171
159
172
repositoryWatcherListener . DidNotReceive ( ) . ConfigChanged ( ) ;
160
173
repositoryWatcherListener . DidNotReceive ( ) . HeadChanged ( Args . String ) ;
@@ -182,8 +195,10 @@ public void ShouldDetectChangesToRemotes()
182
195
183
196
var repositoryWatcher = CreateRepositoryWatcher ( TestRepoMasterCleanSynchronized ) ;
184
197
198
+ var watcherAutoResetEvent = new RepositoryWatcherAutoResetEvent ( ) ;
199
+
185
200
var repositoryWatcherListener = Substitute . For < IRepositoryWatcherListener > ( ) ;
186
- repositoryWatcherListener . AttachListener ( repositoryWatcher ) ;
201
+ repositoryWatcherListener . AttachListener ( repositoryWatcher , watcherAutoResetEvent ) ;
187
202
188
203
repositoryWatcher . Initialize ( ) ;
189
204
repositoryWatcher . Start ( ) ;
@@ -192,7 +207,10 @@ public void ShouldDetectChangesToRemotes()
192
207
{
193
208
GitRemoteRemove ( "origin" ) ;
194
209
195
- Thread . Sleep ( ThreadSleepTimeout ) ;
210
+ watcherAutoResetEvent . ConfigChanged . WaitOne ( TimeSpan . FromSeconds ( 2 ) ) ;
211
+ watcherAutoResetEvent . RemoteBranchDeleted . WaitOne ( TimeSpan . FromSeconds ( 2 ) ) ;
212
+ watcherAutoResetEvent . RemoteBranchDeleted . WaitOne ( TimeSpan . FromSeconds ( 2 ) ) ;
213
+ watcherAutoResetEvent . RemoteBranchDeleted . WaitOne ( TimeSpan . FromSeconds ( 2 ) ) ;
196
214
197
215
repositoryWatcherListener . Received ( ) . ConfigChanged ( ) ;
198
216
repositoryWatcherListener . DidNotReceive ( ) . HeadChanged ( Args . String ) ;
@@ -209,7 +227,7 @@ public void ShouldDetectChangesToRemotes()
209
227
210
228
GitRemoteAdd ( "origin" , "https://github.com/EvilStanleyGoldman/IOTestsRepo.git" ) ;
211
229
212
- Thread . Sleep ( ThreadSleepTimeout ) ;
230
+ watcherAutoResetEvent . ConfigChanged . WaitOne ( TimeSpan . FromSeconds ( 2 ) ) ;
213
231
214
232
repositoryWatcherListener . Received ( ) . ConfigChanged ( ) ;
215
233
repositoryWatcherListener . DidNotReceive ( ) . HeadChanged ( Args . String ) ;
@@ -235,8 +253,10 @@ public void ShouldDetectGitPull()
235
253
236
254
var repositoryWatcher = CreateRepositoryWatcher ( TestRepoMasterCleanSynchronized ) ;
237
255
256
+ var watcherAutoResetEvent = new RepositoryWatcherAutoResetEvent ( ) ;
257
+
238
258
var repositoryWatcherListener = Substitute . For < IRepositoryWatcherListener > ( ) ;
239
- repositoryWatcherListener . AttachListener ( repositoryWatcher ) ;
259
+ repositoryWatcherListener . AttachListener ( repositoryWatcher , watcherAutoResetEvent ) ;
240
260
241
261
repositoryWatcher . Initialize ( ) ;
242
262
repositoryWatcher . Start ( ) ;
@@ -245,7 +265,9 @@ public void ShouldDetectGitPull()
245
265
{
246
266
GitPull ( "origin" , "master" ) ;
247
267
248
- Thread . Sleep ( ThreadSleepTimeout ) ;
268
+ watcherAutoResetEvent . IndexChanged . WaitOne ( TimeSpan . FromSeconds ( 2 ) ) ;
269
+ watcherAutoResetEvent . LocalBranchChanged . WaitOne ( TimeSpan . FromSeconds ( 2 ) ) ;
270
+ watcherAutoResetEvent . RepositoryChanged . WaitOne ( TimeSpan . FromSeconds ( 2 ) ) ;
249
271
250
272
repositoryWatcherListener . DidNotReceive ( ) . ConfigChanged ( ) ;
251
273
repositoryWatcherListener . DidNotReceive ( ) . HeadChanged ( Args . String ) ;
@@ -271,8 +293,10 @@ public void ShouldDetectGitFetch()
271
293
272
294
var repositoryWatcher = CreateRepositoryWatcher ( TestRepoMasterCleanUnsynchronized ) ;
273
295
296
+ var watcherAutoResetEvent = new RepositoryWatcherAutoResetEvent ( ) ;
297
+
274
298
var repositoryWatcherListener = Substitute . For < IRepositoryWatcherListener > ( ) ;
275
- repositoryWatcherListener . AttachListener ( repositoryWatcher ) ;
299
+ repositoryWatcherListener . AttachListener ( repositoryWatcher , watcherAutoResetEvent ) ;
276
300
277
301
repositoryWatcher . Initialize ( ) ;
278
302
repositoryWatcher . Start ( ) ;
@@ -281,7 +305,8 @@ public void ShouldDetectGitFetch()
281
305
{
282
306
GitFetch ( "origin" ) ;
283
307
284
- Thread . Sleep ( ThreadSleepTimeout ) ;
308
+ watcherAutoResetEvent . RemoteBranchCreated . WaitOne ( TimeSpan . FromSeconds ( 2 ) ) ;
309
+ watcherAutoResetEvent . RemoteBranchCreated . WaitOne ( TimeSpan . FromSeconds ( 2 ) ) ;
285
310
286
311
repositoryWatcherListener . DidNotReceive ( ) . ConfigChanged ( ) ;
287
312
repositoryWatcherListener . DidNotReceive ( ) . HeadChanged ( Args . String ) ;
@@ -417,18 +442,67 @@ public interface IRepositoryWatcherListener
417
442
418
443
static class RepositoryWatcherListenerExtensions
419
444
{
420
- public static void AttachListener ( this IRepositoryWatcherListener listener , IRepositoryWatcher repositoryWatcher )
445
+ public static void AttachListener ( this IRepositoryWatcherListener listener , IRepositoryWatcher repositoryWatcher , RepositoryWatcherAutoResetEvent autoResetEvent = null )
421
446
{
422
- repositoryWatcher . HeadChanged += listener . HeadChanged ;
423
- repositoryWatcher . ConfigChanged += listener . ConfigChanged ;
424
- repositoryWatcher . IndexChanged += listener . IndexChanged ;
425
- repositoryWatcher . LocalBranchChanged += listener . LocalBranchChanged ;
426
- repositoryWatcher . LocalBranchCreated += listener . LocalBranchCreated ;
427
- repositoryWatcher . LocalBranchDeleted += listener . LocalBranchDeleted ;
428
- repositoryWatcher . RemoteBranchChanged += listener . RemoteBranchChanged ;
429
- repositoryWatcher . RemoteBranchCreated += listener . RemoteBranchCreated ;
430
- repositoryWatcher . RemoteBranchDeleted += listener . RemoteBranchDeleted ;
431
- repositoryWatcher . RepositoryChanged += listener . RepositoryChanged ;
447
+ repositoryWatcher . HeadChanged += s =>
448
+ {
449
+ listener . HeadChanged ( s ) ;
450
+ autoResetEvent ? . HeadChanged . Set ( ) ;
451
+ } ;
452
+
453
+ repositoryWatcher . ConfigChanged += ( ) =>
454
+ {
455
+ listener . ConfigChanged ( ) ;
456
+ autoResetEvent ? . ConfigChanged . Set ( ) ;
457
+ } ;
458
+
459
+ repositoryWatcher . IndexChanged += ( ) =>
460
+ {
461
+ listener . IndexChanged ( ) ;
462
+ autoResetEvent ? . IndexChanged . Set ( ) ;
463
+ } ;
464
+
465
+ repositoryWatcher . LocalBranchChanged += s =>
466
+ {
467
+ listener . LocalBranchChanged ( s ) ;
468
+ autoResetEvent ? . LocalBranchChanged . Set ( ) ;
469
+ } ;
470
+
471
+ repositoryWatcher . LocalBranchCreated += s =>
472
+ {
473
+ listener . LocalBranchCreated ( s ) ;
474
+ autoResetEvent ? . LocalBranchCreated . Set ( ) ;
475
+ } ;
476
+
477
+ repositoryWatcher . LocalBranchDeleted += s =>
478
+ {
479
+ listener . LocalBranchDeleted ( s ) ;
480
+ autoResetEvent ? . LocalBranchDeleted . Set ( ) ;
481
+ } ;
482
+
483
+ repositoryWatcher . RemoteBranchChanged += ( s , s1 ) =>
484
+ {
485
+ listener . RemoteBranchChanged ( s , s1 ) ;
486
+ autoResetEvent ? . RemoteBranchChanged . Set ( ) ;
487
+ } ;
488
+
489
+ repositoryWatcher . RemoteBranchCreated += ( s , s1 ) =>
490
+ {
491
+ listener . RemoteBranchCreated ( s , s1 ) ;
492
+ autoResetEvent ? . RemoteBranchCreated . Set ( ) ;
493
+ } ;
494
+
495
+ repositoryWatcher . RemoteBranchDeleted += ( s , s1 ) =>
496
+ {
497
+ listener . RemoteBranchDeleted ( s , s1 ) ;
498
+ autoResetEvent ? . RemoteBranchDeleted . Set ( ) ;
499
+ } ;
500
+
501
+ repositoryWatcher . RepositoryChanged += ( ) =>
502
+ {
503
+ listener . RepositoryChanged ( ) ;
504
+ autoResetEvent ? . RepositoryChanged . Set ( ) ;
505
+ } ;
432
506
}
433
507
434
508
public static void AssertDidNotReceiveAnyCalls ( this IRepositoryWatcherListener repositoryWatcherListener )
@@ -445,4 +519,18 @@ public static void AssertDidNotReceiveAnyCalls(this IRepositoryWatcherListener r
445
519
repositoryWatcherListener . DidNotReceive ( ) . RepositoryChanged ( ) ;
446
520
}
447
521
}
522
+
523
+ class RepositoryWatcherAutoResetEvent
524
+ {
525
+ public AutoResetEvent HeadChanged { get ; } = new AutoResetEvent ( false ) ;
526
+ public AutoResetEvent ConfigChanged { get ; } = new AutoResetEvent ( false ) ;
527
+ public AutoResetEvent IndexChanged { get ; } = new AutoResetEvent ( false ) ;
528
+ public AutoResetEvent LocalBranchChanged { get ; } = new AutoResetEvent ( false ) ;
529
+ public AutoResetEvent LocalBranchCreated { get ; } = new AutoResetEvent ( false ) ;
530
+ public AutoResetEvent LocalBranchDeleted { get ; } = new AutoResetEvent ( false ) ;
531
+ public AutoResetEvent RemoteBranchChanged { get ; } = new AutoResetEvent ( false ) ;
532
+ public AutoResetEvent RemoteBranchCreated { get ; } = new AutoResetEvent ( false ) ;
533
+ public AutoResetEvent RemoteBranchDeleted { get ; } = new AutoResetEvent ( false ) ;
534
+ public AutoResetEvent RepositoryChanged { get ; } = new AutoResetEvent ( false ) ;
535
+ }
448
536
}
0 commit comments