1
- using System . Collections . Generic ;
1
+ using System ;
2
+ using System . Collections . Generic ;
2
3
using System . Threading ;
3
4
using FluentAssertions ;
4
5
using GitHub . Unity ;
@@ -16,8 +17,10 @@ public void ShouldDetectFileChanges()
16
17
{
17
18
InitializeEnvironment ( TestRepoMasterCleanSynchronized ) ;
18
19
20
+ var managerAutoResetEvent = new RepositoryManagerAutoResetEvent ( ) ;
21
+
19
22
var repositoryManagerListener = Substitute . For < IRepositoryManagerListener > ( ) ;
20
- repositoryManagerListener . AttachListener ( RepositoryManager ) ;
23
+ repositoryManagerListener . AttachListener ( RepositoryManager , managerAutoResetEvent ) ;
21
24
22
25
var expected = new GitStatus {
23
26
Behind = 1 ,
@@ -38,7 +41,7 @@ public void ShouldDetectFileChanges()
38
41
var foobarTxt = TestRepoMasterCleanSynchronized . Combine ( "foobar.txt" ) ;
39
42
foobarTxt . WriteAllText ( "foobar" ) ;
40
43
41
- Thread . Sleep ( 4000 ) ;
44
+ managerAutoResetEvent . OnRepositoryChanged . WaitOne ( TimeSpan . FromSeconds ( 2 ) ) . Should ( ) . BeTrue ( ) ;
42
45
43
46
Logger . Trace ( "Continue test" ) ;
44
47
@@ -53,17 +56,17 @@ public void ShouldDetectFileChanges()
53
56
repositoryManagerListener . DidNotReceive ( ) . OnRemoteBranchListChanged ( ) ;
54
57
repositoryManagerListener . DidNotReceive ( ) . OnRemoteOrTrackingChanged ( ) ;
55
58
repositoryManagerListener . DidNotReceive ( ) . OnLocksUpdated ( Args . EnumerableGitLock ) ;
56
-
57
- //Assert.AreEqual(3, repositoryManagerListener.ReceivedCalls().Count());
58
59
}
59
60
60
61
[ Test ]
61
62
public void ShouldAddAndCommitFiles ( )
62
63
{
63
64
InitializeEnvironment ( TestRepoMasterCleanSynchronized ) ;
64
65
66
+ var managerAutoResetEvent = new RepositoryManagerAutoResetEvent ( ) ;
67
+
65
68
var repositoryManagerListener = Substitute . For < IRepositoryManagerListener > ( ) ;
66
- repositoryManagerListener . AttachListener ( RepositoryManager ) ;
69
+ repositoryManagerListener . AttachListener ( RepositoryManager , managerAutoResetEvent ) ;
67
70
68
71
var expectedAfterChanges = new GitStatus {
69
72
Behind = 1 ,
@@ -87,11 +90,9 @@ public void ShouldAddAndCommitFiles()
87
90
Entries = new List < GitStatusEntry > ( )
88
91
} ;
89
92
90
- ManualResetEvent evt = new ManualResetEvent ( false ) ;
91
93
var result = new GitStatus ( ) ;
92
94
RepositoryManager . OnRepositoryChanged += status => {
93
95
result = status ;
94
- evt . Set ( ) ;
95
96
} ;
96
97
97
98
Logger . Trace ( "Issuing Changes" ) ;
@@ -102,8 +103,7 @@ public void ShouldAddAndCommitFiles()
102
103
var testDocumentTxt = TestRepoMasterCleanSynchronized . Combine ( "Assets" , "TestDocument.txt" ) ;
103
104
testDocumentTxt . WriteAllText ( "foobar" ) ;
104
105
105
- Assert . True ( evt . WaitOne ( 5000 ) ) ;
106
- evt . Reset ( ) ;
106
+ managerAutoResetEvent . OnRepositoryChanged . WaitOne ( TimeSpan . FromSeconds ( 5 ) ) . Should ( ) . BeTrue ( ) ;
107
107
108
108
Logger . Trace ( "Continue test" ) ;
109
109
@@ -126,13 +126,10 @@ public void ShouldAddAndCommitFiles()
126
126
RepositoryManager . CommitFiles ( new TaskResultDispatcher < string > ( s => { } ) ,
127
127
new List < string > ( ) { "Assets\\ TestDocument.txt" , "foobar.txt" } , "IntegrationTest Commit" , string . Empty ) ;
128
128
129
- Assert . True ( evt . WaitOne ( 5000 ) ) ;
130
- evt . Reset ( ) ;
129
+ managerAutoResetEvent . OnActiveBranchChanged . WaitOne ( TimeSpan . FromSeconds ( 5 ) ) . Should ( ) . BeTrue ( ) ;
131
130
132
131
Logger . Trace ( "Continue test" ) ;
133
132
134
- result . AssertEqual ( expectedAfterCommit ) ;
135
-
136
133
repositoryManagerListener . Received ( 1 ) . OnActiveBranchChanged ( ) ;
137
134
repositoryManagerListener . DidNotReceive ( ) . OnActiveRemoteChanged ( ) ;
138
135
repositoryManagerListener . DidNotReceive ( ) . OnHeadChanged ( ) ;
@@ -147,8 +144,10 @@ public void ShouldDetectBranchChange()
147
144
{
148
145
InitializeEnvironment ( TestRepoMasterCleanSynchronized ) ;
149
146
147
+ var managerAutoResetEvent = new RepositoryManagerAutoResetEvent ( ) ;
148
+
150
149
var repositoryManagerListener = Substitute . For < IRepositoryManagerListener > ( ) ;
151
- repositoryManagerListener . AttachListener ( RepositoryManager ) ;
150
+ repositoryManagerListener . AttachListener ( RepositoryManager , managerAutoResetEvent ) ;
152
151
153
152
var expected = new GitStatus {
154
153
LocalBranch = "feature/document" ,
@@ -163,7 +162,9 @@ public void ShouldDetectBranchChange()
163
162
164
163
RepositoryManager . SwitchBranch ( new TaskResultDispatcher < string > ( s => { } ) , "feature/document" ) ;
165
164
166
- Thread . Sleep ( 3000 ) ;
165
+ managerAutoResetEvent . OnRepositoryChanged . WaitOne ( TimeSpan . FromSeconds ( 3 ) ) . Should ( ) . BeTrue ( ) ;
166
+ managerAutoResetEvent . OnActiveBranchChanged . WaitOne ( TimeSpan . FromSeconds ( 3 ) ) . Should ( ) . BeTrue ( ) ;
167
+ managerAutoResetEvent . OnHeadChanged . WaitOne ( TimeSpan . FromSeconds ( 3 ) ) . Should ( ) . BeTrue ( ) ;
167
168
168
169
Logger . Trace ( "Continue test" ) ;
169
170
@@ -184,14 +185,17 @@ public void ShouldDetectBranchDelete()
184
185
{
185
186
InitializeEnvironment ( TestRepoMasterCleanSynchronized ) ;
186
187
188
+ var managerAutoResetEvent = new RepositoryManagerAutoResetEvent ( ) ;
189
+
187
190
var repositoryManagerListener = Substitute . For < IRepositoryManagerListener > ( ) ;
188
- repositoryManagerListener . AttachListener ( RepositoryManager ) ;
191
+ repositoryManagerListener . AttachListener ( RepositoryManager , managerAutoResetEvent ) ;
189
192
190
193
Logger . Trace ( "Issuing Command" ) ;
191
194
192
195
RepositoryManager . DeleteBranch ( new TaskResultDispatcher < string > ( s => { } ) , "feature/document" , true ) ;
193
196
194
- Thread . Sleep ( 2000 ) ;
197
+ managerAutoResetEvent . OnLocalBranchListChanged . WaitOne ( TimeSpan . FromSeconds ( 2 ) ) . Should ( ) . BeTrue ( ) ;
198
+ managerAutoResetEvent . OnRemoteOrTrackingChanged . WaitOne ( TimeSpan . FromSeconds ( 2 ) ) . Should ( ) . BeTrue ( ) ;
195
199
196
200
Logger . Trace ( "Continue test" ) ;
197
201
@@ -211,15 +215,17 @@ public void ShouldDetectBranchCreate()
211
215
{
212
216
InitializeEnvironment ( TestRepoMasterCleanSynchronized ) ;
213
217
218
+ var managerAutoResetEvent = new RepositoryManagerAutoResetEvent ( ) ;
219
+
214
220
var repositoryManagerListener = Substitute . For < IRepositoryManagerListener > ( ) ;
215
- repositoryManagerListener . AttachListener ( RepositoryManager ) ;
221
+ repositoryManagerListener . AttachListener ( RepositoryManager , managerAutoResetEvent ) ;
216
222
217
223
Logger . Trace ( "Issuing Command" ) ;
218
224
219
225
RepositoryManager . CreateBranch ( new TaskResultDispatcher < string > ( s => { } ) , "feature/document2" ,
220
226
"feature/document" ) ;
221
227
222
- Thread . Sleep ( 2000 ) ;
228
+ managerAutoResetEvent . OnLocalBranchListChanged . WaitOne ( TimeSpan . FromSeconds ( 2 ) ) . Should ( ) . BeTrue ( ) ;
223
229
224
230
Logger . Trace ( "Continue test" ) ;
225
231
@@ -240,7 +246,7 @@ public void ShouldDetectBranchCreate()
240
246
RepositoryManager . CreateBranch ( new TaskResultDispatcher < string > ( s => { } ) , "feature2/document2" ,
241
247
"feature/document" ) ;
242
248
243
- Thread . Sleep ( 1000 ) ;
249
+ managerAutoResetEvent . OnLocalBranchListChanged . WaitOne ( TimeSpan . FromSeconds ( 2 ) ) . Should ( ) . BeTrue ( ) ;
244
250
245
251
Logger . Trace ( "Continue test" ) ;
246
252
@@ -261,14 +267,18 @@ public void ShouldDetectChangesToRemotes()
261
267
{
262
268
InitializeEnvironment ( TestRepoMasterCleanSynchronized ) ;
263
269
270
+ var managerAutoResetEvent = new RepositoryManagerAutoResetEvent ( ) ;
271
+
264
272
var repositoryManagerListener = Substitute . For < IRepositoryManagerListener > ( ) ;
265
- repositoryManagerListener . AttachListener ( RepositoryManager ) ;
273
+ repositoryManagerListener . AttachListener ( RepositoryManager , managerAutoResetEvent ) ;
266
274
267
275
Logger . Trace ( "Issuing Command" ) ;
268
276
269
277
RepositoryManager . RemoteRemove ( new TaskResultDispatcher < string > ( s => { } ) , "origin" ) ;
270
278
271
- Thread . Sleep ( 2000 ) ;
279
+ managerAutoResetEvent . OnActiveBranchChanged . WaitOne ( TimeSpan . FromSeconds ( 2 ) ) . Should ( ) . BeTrue ( ) ;
280
+ managerAutoResetEvent . OnActiveRemoteChanged . WaitOne ( TimeSpan . FromSeconds ( 2 ) ) . Should ( ) . BeTrue ( ) ;
281
+ managerAutoResetEvent . OnRemoteOrTrackingChanged . WaitOne ( TimeSpan . FromSeconds ( 2 ) ) . Should ( ) . BeTrue ( ) ;
272
282
273
283
Logger . Trace ( "Continue test" ) ;
274
284
@@ -289,7 +299,8 @@ public void ShouldDetectChangesToRemotes()
289
299
RepositoryManager . RemoteAdd ( new TaskResultDispatcher < string > ( s => { } ) , "origin" ,
290
300
"https://github.com/EvilStanleyGoldman/IOTestsRepo.git" ) ;
291
301
292
- Thread . Sleep ( 2000 ) ;
302
+ managerAutoResetEvent . OnActiveRemoteChanged . WaitOne ( TimeSpan . FromSeconds ( 2 ) ) . Should ( ) . BeTrue ( ) ;
303
+ managerAutoResetEvent . OnRemoteOrTrackingChanged . WaitOne ( TimeSpan . FromSeconds ( 2 ) ) . Should ( ) . BeTrue ( ) ;
293
304
294
305
Logger . Trace ( "Continue test" ) ;
295
306
@@ -309,8 +320,10 @@ public void ShouldDetectGitPull()
309
320
{
310
321
InitializeEnvironment ( TestRepoMasterCleanSynchronized ) ;
311
322
323
+ var managerAutoResetEvent = new RepositoryManagerAutoResetEvent ( ) ;
324
+
312
325
var repositoryManagerListener = Substitute . For < IRepositoryManagerListener > ( ) ;
313
- repositoryManagerListener . AttachListener ( RepositoryManager ) ;
326
+ repositoryManagerListener . AttachListener ( RepositoryManager , managerAutoResetEvent ) ;
314
327
315
328
var expected = new GitStatus {
316
329
LocalBranch = "master" ,
@@ -325,16 +338,20 @@ public void ShouldDetectGitPull()
325
338
326
339
RepositoryManager . Pull ( new TaskResultDispatcher < string > ( s => { } ) , "origin" , "master" ) ;
327
340
328
- Thread . Sleep ( 7000 ) ;
341
+ managerAutoResetEvent . OnRepositoryChanged . WaitOne ( TimeSpan . FromSeconds ( 7 ) ) . Should ( ) . BeTrue ( ) ;
342
+ managerAutoResetEvent . OnActiveBranchChanged . WaitOne ( TimeSpan . FromSeconds ( 7 ) ) . Should ( ) . BeTrue ( ) ;
329
343
330
- Logger . Trace ( "Continue test" ) ;
344
+ WaitForNotBusy ( managerAutoResetEvent , 3 ) ;
345
+ WaitForNotBusy ( managerAutoResetEvent , 3 ) ;
331
346
332
- repositoryManagerListener . Received ( ) . OnRepositoryChanged ( Args . GitStatus ) ;
333
- result . AssertEqual ( expected ) ;
347
+ Logger . Trace ( "Continue test" ) ;
334
348
335
349
repositoryManagerListener . ReceivedWithAnyArgs ( ) . OnIsBusyChanged ( Args . Bool ) ;
336
350
RepositoryManager . IsBusy . Should ( ) . BeFalse ( ) ;
337
351
352
+ repositoryManagerListener . Received ( ) . OnRepositoryChanged ( Args . GitStatus ) ;
353
+ result . AssertEqual ( expected ) ;
354
+
338
355
repositoryManagerListener . Received ( 1 ) . OnActiveBranchChanged ( ) ;
339
356
repositoryManagerListener . DidNotReceive ( ) . OnActiveRemoteChanged ( ) ;
340
357
repositoryManagerListener . DidNotReceive ( ) . OnHeadChanged ( ) ;
@@ -349,14 +366,17 @@ public void ShouldDetectGitFetch()
349
366
{
350
367
InitializeEnvironment ( TestRepoMasterCleanUnsynchronized ) ;
351
368
369
+ var managerAutoResetEvent = new RepositoryManagerAutoResetEvent ( ) ;
370
+
352
371
var repositoryManagerListener = Substitute . For < IRepositoryManagerListener > ( ) ;
353
- repositoryManagerListener . AttachListener ( RepositoryManager ) ;
372
+ repositoryManagerListener . AttachListener ( RepositoryManager , managerAutoResetEvent ) ;
354
373
355
374
Logger . Trace ( "Issuing Command" ) ;
356
375
357
376
RepositoryManager . Fetch ( new TaskResultDispatcher < string > ( s => { } ) , "origin" ) ;
358
377
359
- Thread . Sleep ( 3000 ) ;
378
+ managerAutoResetEvent . OnRemoteBranchListChanged . WaitOne ( TimeSpan . FromSeconds ( 3 ) ) . Should ( ) . BeTrue ( ) ;
379
+ managerAutoResetEvent . OnRemoteBranchListChanged . WaitOne ( TimeSpan . FromSeconds ( 3 ) ) . Should ( ) . BeTrue ( ) ;
360
380
361
381
Logger . Trace ( "Continue test" ) ;
362
382
@@ -370,5 +390,14 @@ public void ShouldDetectGitFetch()
370
390
repositoryManagerListener . DidNotReceive ( ) . OnRemoteOrTrackingChanged ( ) ;
371
391
repositoryManagerListener . DidNotReceive ( ) . OnLocksUpdated ( Args . EnumerableGitLock ) ;
372
392
}
393
+
394
+ private void WaitForNotBusy ( RepositoryManagerAutoResetEvent managerAutoResetEvent , int seconds = 1 )
395
+ {
396
+ if ( RepositoryManager . IsBusy )
397
+ {
398
+ Logger . Trace ( "Waiting for activity" , seconds ) ;
399
+ managerAutoResetEvent . OnIsBusyChanged . WaitOne ( TimeSpan . FromSeconds ( seconds ) ) ;
400
+ }
401
+ }
373
402
}
374
403
}
0 commit comments