Skip to content

Commit 204eb11

Browse files
committed
Refactor how fixtures are acquired and shared
1 parent 3fed529 commit 204eb11

File tree

11 files changed

+46
-46
lines changed

11 files changed

+46
-46
lines changed

tests/CSharpLanguageServer.Tests/CodeActionTests.fs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ open CSharpLanguageServer.Tests.Tooling
77

88
[<Test>]
99
let ``code action menu appears on request`` () =
10-
let client = Fixtures.getShared "genericProject"
10+
let client = getReadOnlyFixture "genericProject"
1111
use classFile = client.Open("Project/Class.cs")
1212

1313
let caParams: CodeActionParams =
@@ -49,7 +49,7 @@ let ``code action menu appears on request`` () =
4949

5050
[<Test>]
5151
let ``extract base class request extracts base class`` () =
52-
let client = Fixtures.getShared "genericProject"
52+
let client = getReadOnlyFixture "genericProject"
5353
use classFile = client.Open("Project/Class.cs")
5454

5555
let caParams0: CodeActionParams =
@@ -76,7 +76,7 @@ let ``extract base class request extracts base class`` () =
7676

7777
[<Test>]
7878
let ``extract interface code action should extract an interface`` () =
79-
let client = Fixtures.getShared "genericProject"
79+
let client = getReadOnlyFixture "genericProject"
8080
use classFile = client.Open("Project/Class.cs")
8181

8282
let caArgs: CodeActionParams =

tests/CSharpLanguageServer.Tests/CompletionTests.fs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ open CSharpLanguageServer.Tests.Tooling
77

88
[<Test>]
99
let ``completion works in a .cs file`` () =
10-
let client = Fixtures.getShared "genericProject"
10+
let client = getReadOnlyFixture "genericProject"
1111

1212
// resolve provider is necessary for lsp client to resolve
1313
// detail and documentation props for a completion item
@@ -97,7 +97,7 @@ let ``completion works in a .cs file`` () =
9797

9898
[<Test>]
9999
let ``completion works for extension methods`` () =
100-
let client = Fixtures.getShared "genericProject"
100+
let client = getReadOnlyFixture "genericProject"
101101

102102
use classFile =
103103
client.Open("Project/ClassForCompletionTestsWithExtensionMethods.cs")

tests/CSharpLanguageServer.Tests/DefinitionTests.fs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ open CSharpLanguageServer.Tests.Tooling
77

88
[<Test>]
99
let testDefinitionWorks () =
10-
let client = Fixtures.getShared "genericProject"
10+
let client = getReadOnlyFixture "genericProject"
1111
use classFile = client.Open("Project/Class.cs")
1212

1313
let definitionParams0: DefinitionParams =
@@ -44,7 +44,7 @@ let testDefinitionWorks () =
4444

4545
[<Test>]
4646
let testDefinitionWorksInAspNetProject () =
47-
let client = Fixtures.getShared "aspnetProject"
47+
let client = getReadOnlyFixture "aspnetProject"
4848
use testIndexViewModelCsFile = client.Open("Project/Models/Test/IndexViewModel.cs")
4949
use testControllerCsFile = client.Open("Project/Controllers/TestController.cs")
5050

tests/CSharpLanguageServer.Tests/DiagnosticTests.fs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,7 @@ open CSharpLanguageServer.Tests.Tooling
1010

1111
[<Test>]
1212
let testPushDiagnosticsWork () =
13-
// 'makeClientFixture' is used here to make sure we get a blank new server/client pair
14-
use client = Fixtures.load "testDiagnosticsWork"
13+
use client = getNewFixture "testDiagnosticsWork"
1514

1615
//
1716
// open Class.cs file and wait for diagnostics to be pushed
@@ -61,7 +60,7 @@ let testPushDiagnosticsWork () =
6160

6261
[<Test>]
6362
let testPullDiagnosticsWork () =
64-
use client = Fixtures.load "testDiagnosticsWork"
63+
use client = getNewFixture "testDiagnosticsWork"
6564

6665
//
6766
// open Class.cs file and pull diagnostics
@@ -126,7 +125,7 @@ let testPullDiagnosticsWork () =
126125

127126
[<Test>]
128127
let testWorkspaceDiagnosticsWork () =
129-
let client = Fixtures.getShared "testDiagnosticsWork"
128+
let client = getReadOnlyFixture "testDiagnosticsWork"
130129

131130
let diagnosticParams: WorkspaceDiagnosticParams =
132131
{ WorkDoneToken = None
@@ -158,7 +157,7 @@ let testWorkspaceDiagnosticsWork () =
158157

159158
[<Test>]
160159
let testWorkspaceDiagnosticsWorkWithStreaming () =
161-
let client = Fixtures.getShared "testDiagnosticsWork"
160+
let client = getReadOnlyFixture "testDiagnosticsWork"
162161

163162
let partialResultToken: ProgressToken = System.Guid.NewGuid() |> string |> U2.C2
164163

tests/CSharpLanguageServer.Tests/DocumentFormattingTests.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ open CSharpLanguageServer.Tests.Tooling
99

1010
[<Test>]
1111
let testEditorConfigFormatting () =
12-
let client = Fixtures.getShared "projectWithEditorConfig"
12+
let client = getReadOnlyFixture "projectWithEditorConfig"
1313
use classFile = client.Open("Project/Class.cs")
1414

1515
let docFormattingParams0: DocumentFormattingParams =

tests/CSharpLanguageServer.Tests/HoverTests.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ open CSharpLanguageServer.Tests.Tooling
77

88
[<Test>]
99
let testHoverWorks () =
10-
let client = Fixtures.getShared "genericProject"
10+
let client = getReadOnlyFixture "genericProject"
1111
use classFile = client.Open("Project/Class.cs")
1212

1313
//

tests/CSharpLanguageServer.Tests/InitializationTests.fs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ let assertHoverWorks (client: ClientController) file pos expectedMarkupContent =
2727

2828
[<Test>]
2929
let testServerRegistersCapabilitiesWithTheClient () =
30-
let client = Fixtures.getShared "genericProject"
30+
let client = getReadOnlyFixture "genericProject"
3131

3232
let serverInfo = client.GetState().ServerInfo.Value
3333
Assert.AreEqual("csharp-ls", serverInfo.Name)
@@ -131,7 +131,7 @@ let testServerRegistersCapabilitiesWithTheClient () =
131131

132132
[<Test>]
133133
let testSlnxSolutionFileWillBeFoundAndLoaded () =
134-
use client = Fixtures.load "projectWithSlnx"
134+
use client = getNewFixture "projectWithSlnx"
135135

136136
Assert.IsTrue(client.ServerMessageLogContains(fun m -> m.Contains "1 solution(s) found"))
137137

@@ -147,7 +147,7 @@ let testSlnxSolutionFileWillBeFoundAndLoaded () =
147147

148148
[<Test>]
149149
let testMultiTargetProjectLoads () =
150-
use client = Fixtures.load "multiTargetProject"
150+
use client = getNewFixture "multiTargetProject"
151151

152152
Assert.IsTrue(client.ServerMessageLogContains(fun m -> m.Contains "loading project"))
153153

tests/CSharpLanguageServer.Tests/ReferenceTests.fs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ open CSharpLanguageServer.Tests.Tooling
77

88
[<Test>]
99
let testReferenceWorks () =
10-
let client = Fixtures.getShared "genericProject"
10+
let client = getReadOnlyFixture "genericProject"
1111
use classFile = client.Open("Project/Class.cs")
1212

1313
//
@@ -73,10 +73,10 @@ let testReferenceWorks () =
7373

7474
Assert.AreEqual(expectedLocations2, locations2.Value)
7575

76+
7677
[<Test>]
7778
let testReferenceWorksDotnet8 () =
78-
let fixtureName = "testReferenceWorksDotnet8"
79-
use client = Fixtures.load fixtureName
79+
use client = getNewFixture "testReferenceWorksDotnet8"
8080
use classFile = client.Open("Project/Class.cs")
8181

8282
//
@@ -142,9 +142,10 @@ let testReferenceWorksDotnet8 () =
142142

143143
Assert.AreEqual(expectedLocations2, locations2.Value)
144144

145+
145146
[<Test>]
146147
let testReferenceWorksToAspNetRazorPageReferencedValue () =
147-
let client = Fixtures.getShared "aspnetProject"
148+
let client = getReadOnlyFixture "aspnetProject"
148149

149150
use testIndexViewModelCsFile = client.Open("Project/Models/Test/IndexViewModel.cs")
150151
use testControllerCsFile = client.Open("Project/Controllers/TestController.cs")

tests/CSharpLanguageServer.Tests/SemanticTokenTests.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ let decodeSemanticToken legend (semanticToken: SemanticTokens) : DecodedToken[]
6868

6969
[<Test>]
7070
let testSemanticTokens () =
71-
let client = Fixtures.getShared "genericProject"
71+
let client = getReadOnlyFixture "genericProject"
7272

7373
let semanticTokensOptions =
7474
client.GetState().ServerCapabilities

tests/CSharpLanguageServer.Tests/Tooling.fs

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)