forked from DonJayamanne/pythonVSCode
-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Expand file tree
/
Copy pathvscode-mock.ts
More file actions
130 lines (118 loc) · 6.51 KB
/
vscode-mock.ts
File metadata and controls
130 lines (118 loc) · 6.51 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
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
'use strict';
// tslint:disable:no-invalid-this no-require-imports no-var-requires no-any
import * as TypeMoq from 'typemoq';
import * as vscode from 'vscode';
import * as vscodeMocks from './mocks/vsc';
import { vscMockTelemetryReporter } from './mocks/vsc/telemetryReporter';
const Module = require('module');
type VSCode = typeof vscode;
const mockedVSCode: Partial<VSCode> = {};
export const mockedVSCodeNamespaces: { [P in keyof VSCode]?: TypeMoq.IMock<VSCode[P]> } = {};
const originalLoad = Module._load;
function generateMock<K extends keyof VSCode>(name: K): void {
const mockedObj = TypeMoq.Mock.ofType<VSCode[K]>();
(mockedVSCode as any)[name] = mockedObj.object;
mockedVSCodeNamespaces[name] = mockedObj as any;
}
class MockClipboard {
private text: string = '';
public readText(): Promise<string> {
return Promise.resolve(this.text);
}
public async writeText(value: string): Promise<void> {
this.text = value;
}
}
export function initialize() {
generateMock('workspace');
generateMock('window');
generateMock('commands');
generateMock('languages');
generateMock('env');
generateMock('debug');
generateMock('scm');
generateNotebookMocks();
// Use mock clipboard fo testing purposes.
const clipboard = new MockClipboard();
mockedVSCodeNamespaces.env?.setup((e) => e.clipboard).returns(() => clipboard);
mockedVSCodeNamespaces.env?.setup((e) => e.appName).returns(() => 'Insider');
// When upgrading to npm 9-10, this might have to change, as we could have explicit imports (named imports).
Module._load = function (request: any, _parent: any) {
if (request === 'vscode') {
return mockedVSCode;
}
if (request === 'vscode-extension-telemetry') {
return { default: vscMockTelemetryReporter as any };
}
// less files need to be in import statements to be converted to css
// But we don't want to try to load them in the mock vscode
if (/\.less$/.test(request)) {
return;
}
return originalLoad.apply(this, arguments);
};
}
mockedVSCode.MarkdownString = vscodeMocks.vscMock.MarkdownString;
mockedVSCode.Hover = vscodeMocks.vscMock.Hover;
mockedVSCode.Disposable = vscodeMocks.vscMock.Disposable as any;
mockedVSCode.ExtensionKind = vscodeMocks.vscMock.ExtensionKind;
mockedVSCode.CodeAction = vscodeMocks.vscMock.CodeAction;
mockedVSCode.EventEmitter = vscodeMocks.vscMock.EventEmitter;
mockedVSCode.CancellationTokenSource = vscodeMocks.vscMock.CancellationTokenSource;
mockedVSCode.CompletionItemKind = vscodeMocks.vscMock.CompletionItemKind;
mockedVSCode.SymbolKind = vscodeMocks.vscMock.SymbolKind;
mockedVSCode.IndentAction = vscodeMocks.vscMock.IndentAction;
mockedVSCode.Uri = vscodeMocks.vscUri.URI as any;
mockedVSCode.Range = vscodeMocks.vscMockExtHostedTypes.Range;
mockedVSCode.Position = vscodeMocks.vscMockExtHostedTypes.Position;
mockedVSCode.Selection = vscodeMocks.vscMockExtHostedTypes.Selection;
mockedVSCode.Location = vscodeMocks.vscMockExtHostedTypes.Location;
mockedVSCode.SymbolInformation = vscodeMocks.vscMockExtHostedTypes.SymbolInformation;
mockedVSCode.CompletionItem = vscodeMocks.vscMockExtHostedTypes.CompletionItem;
mockedVSCode.CompletionItemKind = vscodeMocks.vscMockExtHostedTypes.CompletionItemKind;
mockedVSCode.CodeLens = vscodeMocks.vscMockExtHostedTypes.CodeLens;
mockedVSCode.DiagnosticSeverity = vscodeMocks.vscMockExtHostedTypes.DiagnosticSeverity;
mockedVSCode.SnippetString = vscodeMocks.vscMockExtHostedTypes.SnippetString;
mockedVSCode.ConfigurationTarget = vscodeMocks.vscMockExtHostedTypes.ConfigurationTarget;
mockedVSCode.StatusBarAlignment = vscodeMocks.vscMockExtHostedTypes.StatusBarAlignment;
mockedVSCode.SignatureHelp = vscodeMocks.vscMockExtHostedTypes.SignatureHelp;
mockedVSCode.DocumentLink = vscodeMocks.vscMockExtHostedTypes.DocumentLink;
mockedVSCode.TextEdit = vscodeMocks.vscMockExtHostedTypes.TextEdit;
mockedVSCode.WorkspaceEdit = vscodeMocks.vscMockExtHostedTypes.WorkspaceEdit;
mockedVSCode.RelativePattern = vscodeMocks.vscMockExtHostedTypes.RelativePattern;
mockedVSCode.ProgressLocation = vscodeMocks.vscMockExtHostedTypes.ProgressLocation;
mockedVSCode.ViewColumn = vscodeMocks.vscMockExtHostedTypes.ViewColumn;
mockedVSCode.TextEditorRevealType = vscodeMocks.vscMockExtHostedTypes.TextEditorRevealType;
mockedVSCode.TreeItem = vscodeMocks.vscMockExtHostedTypes.TreeItem;
mockedVSCode.TreeItemCollapsibleState = vscodeMocks.vscMockExtHostedTypes.TreeItemCollapsibleState;
mockedVSCode.CodeActionKind = vscodeMocks.vscMock.CodeActionKind;
mockedVSCode.CompletionItemKind = vscodeMocks.vscMock.CompletionItemKind;
mockedVSCode.CompletionTriggerKind = vscodeMocks.vscMock.CompletionTriggerKind;
mockedVSCode.DebugAdapterExecutable = vscodeMocks.vscMock.DebugAdapterExecutable;
mockedVSCode.DebugAdapterServer = vscodeMocks.vscMock.DebugAdapterServer;
mockedVSCode.QuickInputButtons = vscodeMocks.vscMockExtHostedTypes.QuickInputButtons;
mockedVSCode.FileType = vscodeMocks.vscMock.FileType;
mockedVSCode.FileSystemError = vscodeMocks.vscMockExtHostedTypes.FileSystemError;
(mockedVSCode as any).CellKind = vscodeMocks.vscMockExtHostedTypes.CellKind;
(mockedVSCode as any).CellOutputKind = vscodeMocks.vscMockExtHostedTypes.CellOutputKind;
(mockedVSCode as any).NotebookCellRunState = vscodeMocks.vscMockExtHostedTypes.NotebookCellRunState;
(mockedVSCode as any).DebugProtocolVariable = vscodeMocks.vscMockExtHostedTypes.DebugProtocolVariable;
(mockedVSCode as any).DebugProtocolVariableContainer = vscodeMocks.vscMockExtHostedTypes.DebugProtocolVariableContainer;
// This API is used in src/client/telemetry/telemetry.ts
const extensions = TypeMoq.Mock.ofType<typeof vscode.extensions>();
extensions.setup((e) => e.all).returns(() => []);
const extension = TypeMoq.Mock.ofType<vscode.Extension<any>>();
const packageJson = TypeMoq.Mock.ofType<any>();
const contributes = TypeMoq.Mock.ofType<any>();
extension.setup((e) => e.packageJSON).returns(() => packageJson.object);
packageJson.setup((p) => p.contributes).returns(() => contributes.object);
contributes.setup((p) => p.debuggers).returns(() => [{ aiKey: '' }]);
extensions.setup((e) => e.getExtension(TypeMoq.It.isAny())).returns(() => extension.object);
mockedVSCode.extensions = extensions.object;
function generateNotebookMocks() {
const mockedObj = TypeMoq.Mock.ofType<{}>();
(mockedVSCode as any).notebook = mockedObj.object;
(mockedVSCodeNamespaces as any).notebook = mockedObj as any;
}