forked from redhat-developer/vscode-yaml
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathhelper.ts
More file actions
155 lines (134 loc) · 5.76 KB
/
helper.ts
File metadata and controls
155 lines (134 loc) · 5.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
/* --------------------------------------------------------------------------------------------
* Copyright (c) Red Hat, Inc. All rights reserved.
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
* ------------------------------------------------------------------------------------------ */
import * as vscode from 'vscode';
import * as path from 'path';
import assert = require('assert');
import { CommonLanguageClient } from 'vscode-languageclient/lib/common/commonClient';
import { MessageTransports } from 'vscode-languageclient';
export let doc: vscode.TextDocument;
export let editor: vscode.TextEditor;
export let documentEol: string;
export let platformEol: string;
/**
* Activates the redhat.vscode-yaml extension
*/
// eslint-disable-next-line @typescript-eslint/no-explicit-any
export async function activate(docUri: vscode.Uri): Promise<any> {
const ext = vscode.extensions.getExtension('redhat.vscode-yaml');
const activation = await ext.activate();
try {
doc = await vscode.workspace.openTextDocument(docUri);
editor = await vscode.window.showTextDocument(doc);
await sleep(2000); // Wait for server activation
return activation;
} catch (e) {
console.error(e);
}
}
export async function sleep(ms: number): Promise<void> {
return new Promise((resolve) => setTimeout(resolve, ms));
}
export const getDocPath = (p: string): string => {
return path.resolve(__dirname, path.join('..', '..', 'test', 'testFixture', p));
};
export const getDocUri = (p: string): vscode.Uri => {
return vscode.Uri.file(getDocPath(p));
};
export const updateSettings = (setting: string, value: unknown): Thenable<void> => {
const yamlConfiguration = vscode.workspace.getConfiguration('yaml', null);
return yamlConfiguration.update(setting, value, false);
};
export const resetSettings = (setting: string, value: unknown): Thenable<void> => {
const yamlConfiguration = vscode.workspace.getConfiguration('yaml', null);
return yamlConfiguration.update(setting, value, false);
};
export async function setTestContent(content: string): Promise<boolean> {
const all = new vscode.Range(doc.positionAt(0), doc.positionAt(doc.getText().length));
return editor.edit((eb) => eb.replace(all, content));
}
export async function testCompletion(
docUri: vscode.Uri,
position: vscode.Position,
expectedCompletionList: vscode.CompletionList
): Promise<void> {
// Executing the command `vscode.executeCompletionItemProvider` to simulate triggering completion
const actualCompletionList = (await vscode.commands.executeCommand(
'vscode.executeCompletionItemProvider',
docUri,
position
)) as vscode.CompletionList;
const sortedActualCompletionList = actualCompletionList.items.sort((a, b) => (a.label > b.label ? 1 : -1));
assert.equal(
actualCompletionList.items.length,
expectedCompletionList.items.length,
"Completion List doesn't have expected size"
);
expectedCompletionList.items
.sort((a, b) => (a.label > b.label ? 1 : -1))
.forEach((expectedItem, i) => {
const actualItem = sortedActualCompletionList[i];
assert.equal(actualItem.label, expectedItem.label);
assert.equal(actualItem.kind, expectedItem.kind);
});
}
export async function testCompletionNotEmpty(docUri: vscode.Uri, position: vscode.Position): Promise<void> {
// Executing the command `vscode.executeCompletionItemProvider` to simulate triggering completion
const actualCompletionList = (await vscode.commands.executeCommand(
'vscode.executeCompletionItemProvider',
docUri,
position
)) as vscode.CompletionList;
assert.notEqual(actualCompletionList.items.length, 0);
}
export async function testHover(docUri: vscode.Uri, position: vscode.Position, expectedHover: vscode.Hover[]): Promise<void> {
// Executing the command `vscode.executeCompletionItemProvider` to simulate triggering completion
const actualHoverResults = (await vscode.commands.executeCommand(
'vscode.executeHoverProvider',
docUri,
position
)) as vscode.Hover[];
assert.equal(actualHoverResults.length, expectedHover.length);
expectedHover.forEach((expectedItem, i) => {
const actualItem = actualHoverResults[i];
assert.equal((actualItem.contents[i] as vscode.MarkdownString).value, expectedItem.contents[i]);
});
}
export async function testDiagnostics(docUri: vscode.Uri, expectedDiagnostics: vscode.Diagnostic[]): Promise<void> {
const actualDiagnostics = vscode.languages.getDiagnostics(docUri);
assert.equal(actualDiagnostics.length, expectedDiagnostics.length);
expectedDiagnostics.forEach((expectedDiagnostic, i) => {
const actualDiagnostic = actualDiagnostics[i];
assert.equal(actualDiagnostic.message, expectedDiagnostic.message);
assert.deepEqual(actualDiagnostic.range, expectedDiagnostic.range);
assert.equal(actualDiagnostic.severity, expectedDiagnostic.severity);
});
}
export class TestMemento implements vscode.Memento {
keys(): readonly string[] {
throw new Error('Method not implemented.');
}
get<T>(key: string): T;
get<T>(key: string, defaultValue: T): T;
// eslint-disable-next-line @typescript-eslint/no-unused-vars
get<T>(key: string, defaultValue?: T): T | undefined {
throw new Error('Method not implemented.');
}
// eslint-disable-next-line @typescript-eslint/no-unused-vars
update(key: string, value: unknown): Thenable<void> {
throw new Error('Method not implemented.');
}
}
export class TestLanguageClient extends CommonLanguageClient {
constructor() {
super('test', 'test', {});
}
protected getLocale(): string {
throw new Error('Method not implemented.');
}
protected createMessageTransports(): Promise<MessageTransports> {
throw new Error('Method not implemented.');
}
}