@@ -176,26 +176,20 @@ public void ExceptionRefreshingRepositories_ReturnsEmptyList()
176176 }
177177
178178 [ Test ]
179- public async Task ThreadingStressTest ( )
179+ public async Task ActiveRepositoriesChangedOrderingShouldBeCorrectAcrossThreads ( )
180180 {
181- for ( var i = 0 ; i < 100 ; ++ i )
182- {
183- var gitExt = new MockGitExt ( ) ;
184- var repoFactory = new MockRepositoryFactory ( ) ;
185- var target = CreateVSGitExt ( gitExt : gitExt , repoFactory : repoFactory ) ;
186- var activeRepositories1 = CreateActiveRepositories ( "repo1" ) ;
187- var activeRepositories2 = CreateActiveRepositories ( "repo2" ) ;
188- var task1 = Task . Run ( ( ) => gitExt . ActiveRepositories = activeRepositories1 ) ;
189- await Task . Delay ( 1 ) ;
190- var task2 = Task . Run ( ( ) => gitExt . ActiveRepositories = activeRepositories2 ) ;
191-
192- await Task . WhenAll ( task1 , task2 ) ;
193-
194- Assert . That (
195- target . ActiveRepositories . Single ( ) . LocalPath ,
196- Is . EqualTo ( "repo2" ) ,
197- $ "Failed at iteration { i } ") ;
198- }
181+ var gitExt = new MockGitExt ( ) ;
182+ var repoFactory = new MockRepositoryFactory ( ) ;
183+ var target = CreateVSGitExt ( gitExt : gitExt , repoFactory : repoFactory ) ;
184+ var activeRepositories1 = CreateActiveRepositories ( "repo1" ) ;
185+ var activeRepositories2 = CreateActiveRepositories ( "repo2" ) ;
186+ var task1 = Task . Run ( ( ) => gitExt . ActiveRepositories = activeRepositories1 ) ;
187+ await Task . Delay ( 1 ) ;
188+ var task2 = Task . Run ( ( ) => gitExt . ActiveRepositories = activeRepositories2 ) ;
189+
190+ await Task . WhenAll ( task1 , task2 ) ;
191+
192+ Assert . That ( target . ActiveRepositories . Single ( ) . LocalPath , Is . EqualTo ( "repo2" ) ) ;
199193 }
200194 }
201195
@@ -270,6 +264,15 @@ public ILocalRepositoryModel Create(string localPath)
270264 {
271265 var result = Substitute . For < ILocalRepositoryModel > ( ) ;
272266 result . LocalPath . Returns ( localPath ) ;
267+
268+ if ( localPath == "repo1" )
269+ {
270+ // Trying to force #1493 here by introducing a a delay on the first
271+ // ActiveRepositories changed notification so that the second completes
272+ // first.
273+ Thread . Sleep ( 10 ) ;
274+ }
275+
273276 return result ;
274277 }
275278 }
0 commit comments