@@ -862,7 +862,7 @@ type ClientController(client: MailboxProcessor<ClientEvent>, testDataDir: Direct
862862 file
863863
864864
865- let setupServerClient ( clientProfile : ClientProfile ) ( testDataDirName : string ) ( sharedFixture : bool ) =
865+ let setupFixture ( clientProfile : ClientProfile ) ( testDataDirName : string ) ( sharedFixture : bool ) =
866866 let initialState =
867867 { defaultClientState with
868868 LoggingEnabled = clientProfile.LoggingEnabled }
@@ -882,32 +882,32 @@ let setupServerClient (clientProfile: ClientProfile) (testDataDirName: string) (
882882 new ClientController( clientActor, actualTestDataDir, sharedFixture)
883883
884884
885- module TextEdit =
886- let normalizeNewText ( s : TextEdit ) =
887- { s with
888- NewText = s.NewText.ReplaceLineEndings( " \n " ) }
885+ let sharedFixtures = ConcurrentDictionary< string, Lazy< ClientController>>()
889886
890- module Fixtures =
891- let private sharedFixtures = ConcurrentDictionary < string , Lazy < ClientController >>( )
887+ let numCpus = Environment.ProcessorCount
888+ let private setupSemaphore = new SemaphoreSlim ( numCpus , numCpus )
892889
893- let numCpus = Environment.ProcessorCount
894- let private setupSemaphore = new SemaphoreSlim ( numCpus , numCpus )
890+ let private loadFixture sharedFixture fixtureName =
891+ setupSemaphore.Wait ( )
895892
896- let private loadFixture sharedFixture fixtureName =
897- setupSemaphore.Wait()
893+ try
894+ let projectDir = " Fixtures/" + fixtureName
895+ let client = setupFixture defaultClientProfile projectDir sharedFixture
896+ client.StartAndWaitForSolutionLoad()
897+ client
898+ finally
899+ setupSemaphore.Release() |> ignore
898900
899- try
900- let projectDir = " Fixtures/" + fixtureName
901- let client = setupServerClient defaultClientProfile projectDir sharedFixture
902- client.StartAndWaitForSolutionLoad()
903- client
904- finally
905- setupSemaphore.Release() |> ignore
901+ let getNewFixture fixtureName = loadFixture false fixtureName
906902
907- let load fixtureName = loadFixture false fixtureName
903+ let getReadOnlyFixture fixtureName : ClientController =
904+ let lazyClient =
905+ sharedFixtures.GetOrAdd( fixtureName, fun fixtureName -> lazy ( loadFixture true fixtureName))
908906
909- let getShared fixtureName : ClientController =
910- let lazyClient =
911- sharedFixtures.GetOrAdd( fixtureName, fun fixtureName -> lazy ( loadFixture true fixtureName))
907+ lazyClient.Force()
912908
913- lazyClient.Force()
909+
910+ module TextEdit =
911+ let normalizeNewText ( s : TextEdit ) =
912+ { s with
913+ NewText = s.NewText.ReplaceLineEndings( " \n " ) }
0 commit comments