Skip to content

Commit 35736b7

Browse files
committed
wip: add more mock APIs
1 parent 6165c1c commit 35736b7

File tree

5 files changed

+82
-8
lines changed

5 files changed

+82
-8
lines changed

packages/mock/src/class/EventEmitter.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ export class EventEmitter<T> extends Disposable implements vscode.EventEmitter<T
99

1010
_listeners = new Set<(e: T) => any>()
1111

12-
event: vscode.Event<T> = vi.fn((listener, thisArgs, disposables) => {
12+
event = vi.fn<vscode.Event<T>>((listener, thisArgs, disposables) => {
1313
const cb = (e: T) => listener.call(thisArgs, e)
1414
this._listeners.add(cb)
1515
const disposable = new Disposable(() => this._listeners.delete(cb))

packages/mock/src/internal/WorkspaceConfiguration.ts

+7-1
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
import type vscode from 'vscode'
22
import { vi } from 'vitest'
33
import { Unimplemented } from '../utils/unimplemented'
4+
import type { MockVscode } from '../ns'
45

56
export class WorkspaceConfiguration implements vscode.WorkspaceConfiguration {
6-
constructor(public _data: any) {
7+
constructor(public _context: MockVscode, public _data: any, public _baseSection?: string) {
78
}
89

910
get = vi.fn(<T>(section: string, defaultValue?: T): T | undefined => {
@@ -39,5 +40,10 @@ export class WorkspaceConfiguration implements vscode.WorkspaceConfiguration {
3940
obj = obj[key]
4041
}
4142
obj[keys[keys.length - 1]] = value
43+
this._context.workspace._onDidChangeConfiguration.fire({
44+
affectsConfiguration: vi.fn((check: string, _resource?: vscode.Uri) => {
45+
return (this._baseSection ? `${this._baseSection}.` : `${section}`).startsWith(check)
46+
}),
47+
})
4248
})
4349
}

packages/mock/src/ns/window.ts

+27-5
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
import type vscode from 'vscode'
2-
2+
import { vi } from 'vitest'
33
import { EventEmitter } from '../class/EventEmitter'
44
import { TextDocument } from '../internal/TextDocument'
55
import { TextEditor } from '../internal/TextEditor'
66
import type { WindowNS } from '../types'
77
import { createState } from '../utils/state'
88
import { ColorThemeKind } from '../enum/ColorThemeKind'
9+
import { Unimplemented } from '../utils/unimplemented'
910
import type { MockVscode } from '.'
1011

1112
export function createMockWindow(_context: MockVscode) {
@@ -60,13 +61,34 @@ export function createMockWindow(_context: MockVscode) {
6061
return editor
6162
}
6263

64+
showInformationMessage = vi.fn((..._args: any) => Unimplemented('showInformationMessage'))
65+
showWarningMessage = vi.fn((..._args: any) => Unimplemented('showInformationMessage'))
66+
showErrorMessage = vi.fn((..._args: any) => Unimplemented('showInformationMessage'))
67+
showQuickPick = vi.fn((..._args: any) => Unimplemented('showQuickPick'))
68+
showWorkspaceFolderPick = vi.fn((..._args: any) => Unimplemented('showWorkspaceFolderPick'))
69+
showOpenDialog = vi.fn((..._args: any) => Unimplemented('showOpenDialog'))
70+
showSaveDialog = vi.fn((..._args: any) => Unimplemented('showSaveDialog'))
71+
showInputBox = vi.fn((..._args: any) => Unimplemented('showInputBox'))
72+
createQuickPick = TODO
73+
createInputBox = TODO
74+
createStatusBarItem = TODO
75+
createOutputChannel = TODO
76+
createWebviewPanel = TODO
77+
registerWebviewPanelSerializer = TODO
78+
setStatusBarMessage = TODO
79+
withScmProgress = TODO
80+
withProgress = TODO
81+
createTerminal = TODO
82+
registerTreeDataProvider = TODO
83+
createTreeView = TODO
84+
registerUriHandler = TODO
85+
registerWebviewViewProvider = TODO
86+
registerCustomEditorProvider = TODO
87+
6388
_windowState = createState(_init.state)
64-
get windowState(): vscode.WindowState {
89+
get state(): vscode.WindowState {
6590
return this._windowState.value
6691
}
67-
set windowState(value: vscode.WindowState) {
68-
this._windowState.update(value)
69-
}
7092
_onDidChangeWindowState = this._windowState.eventEmitter
7193
onDidChangeWindowState = this._windowState.event
7294

packages/mock/src/ns/workspace.ts

+46
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import type { WorkspaceNS } from '../types'
66
import { Unimplemented } from '../utils/unimplemented'
77
import { TextDocument } from '../internal/TextDocument'
88
import { TextDocumentSaveReason } from '../enum/TextDocumentSaveReason'
9+
import { WorkspaceConfiguration } from '../internal/WorkspaceConfiguration'
910
import type { MockVscode } from '.'
1011

1112
export function createMockWorkspace(_context: MockVscode) {
@@ -151,6 +152,49 @@ export function createMockWorkspace(_context: MockVscode) {
151152

152153
_onDidSaveTextDocument = new EventEmitter<TextDocument>()
153154
onDidSaveTextDocument = this._onDidSaveTextDocument.event
155+
156+
_onWillCreateFiles = new EventEmitter<vscode.FileWillCreateEvent>()
157+
onWillCreateFiles = this._onWillCreateFiles.event
158+
159+
_onDidCreateFiles = new EventEmitter<vscode.FileCreateEvent>()
160+
onDidCreateFiles = this._onDidCreateFiles.event
161+
162+
_onWillDeleteFiles = new EventEmitter<vscode.FileWillDeleteEvent>()
163+
onWillDeleteFiles = this._onWillDeleteFiles.event
164+
165+
_onDidDeleteFiles = new EventEmitter<vscode.FileDeleteEvent>()
166+
onDidDeleteFiles = this._onDidDeleteFiles.event
167+
168+
_onWillRenameFiles = new EventEmitter<vscode.FileWillRenameEvent>()
169+
onWillRenameFiles = this._onWillRenameFiles.event
170+
171+
_onDidRenameFiles = new EventEmitter<vscode.FileRenameEvent>()
172+
onDidRenameFiles = this._onDidRenameFiles.event
173+
174+
_workspaceConfiguration = _init.workspaceConfiguration
175+
getConfiguration = vi.fn((section?: string, _scope?: vscode.ConfigurationScope | null): WorkspaceConfiguration => {
176+
let obj = this._workspaceConfiguration
177+
for (const key of section?.split('.') ?? []) {
178+
if (!(key in obj))
179+
return new WorkspaceConfiguration(_context, {}, section)
180+
obj = obj[key]
181+
}
182+
return new WorkspaceConfiguration(_context, obj, section)
183+
})
184+
185+
_onDidChangeConfiguration = new EventEmitter<vscode.ConfigurationChangeEvent>()
186+
onDidChangeConfiguration = this._onDidChangeConfiguration.event
187+
188+
_isTrusted = _init.isTrusted
189+
_trust = () => {
190+
this._isTrusted = true
191+
this._onDidGrantWorkspaceTrust.fire()
192+
}
193+
get isTrusted() {
194+
return this._isTrusted
195+
}
196+
_onDidGrantWorkspaceTrust = new EventEmitter<void>()
197+
onDidGrantWorkspaceTrust = this._onDidGrantWorkspaceTrust.event
154198
})()
155199
}
156200

@@ -163,6 +207,8 @@ export const defaultWorkspaceInitConfig = {
163207
name: 'workspace',
164208
index: 0,
165209
}] as vscode.WorkspaceFolder[],
210+
workspaceConfiguration: {} as any,
211+
isTrusted: true,
166212
}
167213

168214
export type MockWorkspace = ReturnType<typeof createMockWorkspace>

packages/mock/src/utils/state.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ export function createState<T>(initial: T) {
77
eventEmitter,
88
update(newVal: T) {
99
this.value = newVal
10-
this.fire()
10+
eventEmitter.fire(newVal)
1111
},
1212
event: eventEmitter.event,
1313
}

0 commit comments

Comments
 (0)