Skip to content

Commit 0ec64fa

Browse files
committed
Update TestClient to support multiple config scopes
1 parent d272fc3 commit 0ec64fa

17 files changed

+41
-56
lines changed

language-server/src/features/completion/completion.test.ts

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
import { afterAll, beforeAll, describe, expect, test } from "vitest";
22
import { TestClient } from "../../test/test-client.ts";
33

4-
import type { DocumentSettings } from "../../services/configuration.js";
5-
64

75
describe("Feature - Completion", () => {
8-
let client: TestClient<DocumentSettings>;
6+
let client: TestClient;
97

108
beforeAll(async () => {
119
client = new TestClient();

language-server/src/features/completion/if-then-completion.test.ts

+1-3
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,9 @@ import { CompletionRequest } from "vscode-languageserver";
33
import { TestClient } from "../../test/test-client.ts";
44
import { ifThenPatternCompletion } from "./if-then-completion.js";
55

6-
import type { DocumentSettings } from "../../services/configuration.js";
7-
86

97
describe("Feature - if/then completion", () => {
10-
let client: TestClient<DocumentSettings>;
8+
let client: TestClient;
119
let documentUri: string;
1210

1311
beforeAll(async () => {

language-server/src/features/completion/keyword-completion.test.ts

+1-3
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,9 @@ import { afterAll, afterEach, beforeAll, describe, expect, test } from "vitest";
22
import { CompletionRequest, CompletionItemKind } from "vscode-languageserver";
33
import { TestClient } from "../../test/test-client.ts";
44

5-
import type { DocumentSettings } from "../../services/configuration.js";
6-
75

86
describe("Feature - if/then completion", () => {
9-
let client: TestClient<DocumentSettings>;
7+
let client: TestClient;
108
let documentUri: string;
119

1210
beforeAll(async () => {

language-server/src/features/completion/schema-completion.test.ts

+1-3
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,9 @@ import { afterAll, afterEach, beforeAll, describe, expect, test } from "vitest";
22
import { CompletionItemKind, CompletionRequest } from "vscode-languageserver";
33
import { TestClient } from "../../test/test-client.ts";
44

5-
import type { DocumentSettings } from "../../services/configuration.js";
6-
75

86
describe("Feature - $schema completion", () => {
9-
let client: TestClient<DocumentSettings>;
7+
let client: TestClient;
108
let documentUri: string;
119

1210
beforeAll(async () => {

language-server/src/features/diagnostics/deprecated.test.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,10 @@ import { DiagnosticSeverity, DiagnosticTag, PublishDiagnosticsNotification } fro
33
import { TestClient } from "../../test/test-client.ts";
44

55
import type { Diagnostic } from "vscode-languageserver";
6-
import type { DocumentSettings } from "../../services/configuration.js";
76

87

98
describe("Feature - Deprecated", () => {
10-
let client: TestClient<DocumentSettings>;
9+
let client: TestClient;
1110

1211
beforeEach(async () => {
1312
client = new TestClient();

language-server/src/features/diagnostics/validate-dialects.test.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,10 @@ import { PublishDiagnosticsNotification } from "vscode-languageserver";
33
import { TestClient } from "../../test/test-client.ts";
44

55
import type { Diagnostic } from "vscode-languageserver";
6-
import type { DocumentSettings } from "../../services/configuration.js";
76

87

98
describe("Feature - Custom Dialects", () => {
10-
let client: TestClient<DocumentSettings>;
9+
let client: TestClient;
1110
let documentUriB: string;
1211
let documentUri: string;
1312

language-server/src/features/diagnostics/validate-references.test.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,10 @@ import { PublishDiagnosticsNotification } from "vscode-languageserver";
33
import { TestClient } from "../../test/test-client.ts";
44

55
import type { Diagnostic } from "vscode-languageserver";
6-
import type { DocumentSettings } from "../../services/configuration.js";
76

87

98
describe("Feature - Validate References Errors", () => {
10-
let client: TestClient<DocumentSettings>;
9+
let client: TestClient;
1110

1211
beforeEach(async () => {
1312
client = new TestClient();

language-server/src/features/diagnostics/validate-vocabulary.test.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,10 @@ import { DiagnosticSeverity, PublishDiagnosticsNotification } from "vscode-langu
33
import { TestClient } from "../../test/test-client.ts";
44

55
import type { Diagnostic } from "vscode-languageserver";
6-
import type { DocumentSettings } from "../../services/configuration.js";
76

87

98
describe("Feature - Validate $vocabulary", () => {
10-
let client: TestClient<DocumentSettings>;
9+
let client: TestClient;
1110

1211
beforeEach(async () => {
1312
client = new TestClient();

language-server/src/features/diagnostics/validation-errors.test.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,10 @@ import { PublishDiagnosticsNotification } from "vscode-languageserver";
33
import { TestClient } from "../../test/test-client.ts";
44

55
import type { Diagnostic } from "vscode-languageserver";
6-
import type { DocumentSettings } from "../../services/configuration.js";
76

87

98
describe("Feature - Validation Errors", () => {
10-
let client: TestClient<DocumentSettings>;
9+
let client: TestClient;
1110

1211
beforeEach(async () => {
1312
client = new TestClient();

language-server/src/features/find-references.test.ts

+1-3
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,9 @@ import { afterEach, beforeEach, describe, expect, test } from "vitest";
22
import { ReferencesRequest } from "vscode-languageserver";
33
import { TestClient } from "../test/test-client.ts";
44

5-
import type { DocumentSettings } from "../services/configuration.js";
6-
75

86
describe("Feature - References", () => {
9-
let client: TestClient<DocumentSettings>;
7+
let client: TestClient;
108

119
beforeEach(async () => {
1210
client = new TestClient();

language-server/src/features/goto-definition.test.ts

+1-3
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,9 @@ import { afterEach, beforeEach, describe, expect, test } from "vitest";
22
import { DefinitionRequest } from "vscode-languageserver";
33
import { TestClient } from "../test/test-client.ts";
44

5-
import type { DocumentSettings } from "../services/configuration.js";
6-
75

86
describe("Feature - Goto Definition", () => {
9-
let client: TestClient<DocumentSettings>;
7+
let client: TestClient;
108

119
beforeEach(async () => {
1210
client = new TestClient();

language-server/src/features/hover.test.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,10 @@ import { HoverRequest, MarkupKind } from "vscode-languageserver";
33
import { TestClient } from "../test/test-client.ts";
44

55
import type { Hover, MarkupContent } from "vscode-languageserver";
6-
import type { DocumentSettings } from "../services/configuration.js";
76

87

98
describe("Feature - Hover", () => {
10-
let client: TestClient<DocumentSettings>;
9+
let client: TestClient;
1110

1211
beforeAll(async () => {
1312
client = new TestClient();

language-server/src/features/semantic-tokens.test.ts

+1-3
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,9 @@ import { beforeAll, afterAll, afterEach, describe, expect, test } from "vitest";
22
import { SemanticTokensRequest } from "vscode-languageserver";
33
import { TestClient } from "../test/test-client.ts";
44

5-
import type { DocumentSettings } from "../services/configuration.js";
6-
75

86
describe("Feature - Semantic Tokens", () => {
9-
let client: TestClient<DocumentSettings>;
7+
let client: TestClient;
108
let documentUri: string;
119

1210
beforeAll(async () => {

language-server/src/services/configuration.test.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,10 @@ import { PublishDiagnosticsNotification } from "vscode-languageserver";
33
import { TestClient } from "../test/test-client.ts";
44

55
import type { Diagnostic } from "vscode-languageserver";
6-
import type { DocumentSettings } from "./configuration.js";
76

87

98
describe("Feature - Document Settings", () => {
10-
let client: TestClient<DocumentSettings>;
9+
let client: TestClient;
1110

1211
beforeEach(async () => {
1312
client = new TestClient();

language-server/src/services/schemas-neovim.test.ts

+1-3
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,9 @@ import { afterAll, beforeAll, describe, expect, test } from "vitest";
22
import { TestClient } from "../test/test-client.ts";
33
import { PublishDiagnosticsNotification } from "vscode-languageserver";
44

5-
import type { DocumentSettings } from "./configuration.js";
6-
75

86
describe("Feature - workspace (neovim)", () => {
9-
let client: TestClient<DocumentSettings>;
7+
let client: TestClient;
108
let documentUriA: string;
119
let documentUriB: string;
1210

language-server/src/services/schemas.test.ts

+1-3
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,9 @@ import { describe, test, expect, beforeAll, afterAll } from "vitest";
22
import { PublishDiagnosticsNotification, TextDocumentSyncKind } from "vscode-languageserver";
33
import { TestClient } from "../test/test-client.ts";
44

5-
import type { DocumentSettings } from "./configuration.js";
6-
75

86
describe("JSON Schema Language Server", () => {
9-
let client: TestClient<DocumentSettings>;
7+
let client: TestClient;
108
let documentUriA: string;
119
let documentUriB: string;
1210

language-server/src/test/test-client.ts

+25-15
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,16 @@ import type {
3333
InitializeParams,
3434
ServerCapabilities
3535
} from "vscode-languageserver";
36+
import type { EditorSettings, FilesSettings, LanguageServerSettings } from "../services/configuration.js";
3637

3738

38-
export class TestClient<Configuration> {
39+
export class TestClient {
3940
private client: Connection;
4041
private serverName: string;
4142
private _serverCapabilities: ServerCapabilities | undefined;
42-
private _settings: Partial<Configuration> | undefined;
43+
private languageServerSettings: Partial<LanguageServerSettings> | undefined;
44+
private editorSettings: Partial<EditorSettings> | undefined;
45+
private filesSettings: Partial<FilesSettings> | undefined;
4346
private configurationChangeNotificationOptions: DidChangeConfigurationRegistrationOptions | null | undefined;
4447
private openDocuments: Set<string>;
4548
private workspaceFolder: Promise<string>;
@@ -102,11 +105,18 @@ export class TestClient<Configuration> {
102105
});
103106

104107
this.client.onRequest(ConfigurationRequest.type, (params) => {
105-
return params.items
106-
.filter((configurationItem) => configurationItem.section === this.serverName)
107-
.map(() => {
108-
return this._settings;
109-
});
108+
return params.items.map((configurationItem) => {
109+
switch (configurationItem.section) {
110+
case this.serverName:
111+
return this.languageServerSettings;
112+
case "editor":
113+
return this.editorSettings;
114+
case "files":
115+
return this.filesSettings;
116+
default:
117+
throw Error(`Unsupported configuration section: ${configurationItem.section}`);
118+
}
119+
});
110120
});
111121

112122
this.client.listen();
@@ -116,10 +126,6 @@ export class TestClient<Configuration> {
116126
return structuredClone(this._serverCapabilities);
117127
}
118128

119-
get settings() {
120-
return structuredClone(this._settings);
121-
}
122-
123129
async start(params: Partial<InitializeParams> = {}) {
124130
const defaultInitParams: InitializeParams = {
125131
processId: null,
@@ -208,7 +214,7 @@ export class TestClient<Configuration> {
208214
// Wait for dynamic registrations to be completed
209215
await wait(100);
210216

211-
await this.changeConfiguration(this._settings ?? {});
217+
await this.changeConfiguration();
212218
}
213219

214220
async stop() {
@@ -218,8 +224,10 @@ export class TestClient<Configuration> {
218224
this.client.dispose();
219225
}
220226

221-
async changeConfiguration(settings: Partial<Configuration>) {
222-
this._settings = settings;
227+
async changeConfiguration(languageServerSettings?: Partial<LanguageServerSettings>, editorSettings?: Partial<EditorSettings>, filesSettings?: Partial<FilesSettings>) {
228+
this.languageServerSettings = languageServerSettings ?? this.languageServerSettings;
229+
this.editorSettings = editorSettings ?? this.editorSettings;
230+
this.filesSettings = filesSettings ?? this.filesSettings;
223231

224232
const buildCompleted = this.buildCompleted();
225233

@@ -230,7 +238,9 @@ export class TestClient<Configuration> {
230238
} else if (this.configurationChangeNotificationOptions) {
231239
await this.client.sendNotification(DidChangeConfigurationNotification.type, {
232240
settings: {
233-
[this.serverName]: this._settings
241+
[this.serverName]: this.languageServerSettings,
242+
editor: this.editorSettings,
243+
files: this.filesSettings
234244
}
235245
});
236246
}

0 commit comments

Comments
 (0)