Skip to content

Commit cefc991

Browse files
author
Loïc Mangeonjean
committed
fix: update tests
1 parent 3976cf8 commit cefc991

File tree

5 files changed

+63
-191
lines changed

5 files changed

+63
-191
lines changed

browserMock.js

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import fs from 'fs/promises'
22
import { performance } from 'perf_hooks'
3+
import { fetch as fetchPolyfill } from 'whatwg-fetch'
34

45
Object.defineProperty(document, 'queryCommandSupported', {
56
value: jest.fn().mockImplementation(() => true),
@@ -22,12 +23,16 @@ Object.defineProperty(window, 'matchMedia', {
2223
});
2324

2425
Object.defineProperty(window, 'fetch', {
25-
value: jest.fn(async (url) => {
26-
const content = await fs.readFile(new URL(url).pathname)
27-
return {
28-
json: async () => JSON.stringify(JSON.parse(content.toString())),
29-
arrayBuffer: async () => content.buffer.slice(content.byteOffset, content.byteOffset + content.byteLength),
30-
status: 200
26+
value: jest.fn(async (url, options) => {
27+
if (url.startsWith('file:')) {
28+
const content = await fs.readFile(new URL(url).pathname)
29+
return {
30+
json: async () => JSON.stringify(JSON.parse(content.toString())),
31+
arrayBuffer: async () => content.buffer.slice(content.byteOffset, content.byteOffset + content.byteLength),
32+
status: 200
33+
}
34+
} else {
35+
return fetchPolyfill(url, options)
3136
}
3237
})
3338
})

package-lock.json

Lines changed: 8 additions & 158 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,8 @@
8585
"rollup-plugin-visualizer": "5.12.0",
8686
"tslib": "^2.6.2",
8787
"typescript": "5.4.2",
88-
"vscode-languageserver": "~9.0.1"
88+
"vscode-languageserver": "~9.0.1",
89+
"whatwg-fetch": "^3.6.20"
8990
},
9091
"resolutions": {
9192
"eslint": "8.57.0"

src/tests/infrastructure.test.ts

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { createModelReference } from 'vscode/monaco'
88
import * as vscode from 'vscode'
99
import { RegisteredFileSystemProvider, RegisteredMemoryFile, registerFileSystemOverlay } from '@codingame/monaco-vscode-files-service-override'
1010
import pDefer, { TestInfrastructure, waitClientNotification, waitClientRequest } from './tools'
11-
import { GetTextDocumentParams, getTextDocumentRequestType, GetTextDocumentResult, saveTextDocumentRequestType } from '../customRequests'
11+
import { getFileStatsRequestType, ReadFileParams, readFileRequestType, ReadFileResult, StatFileParams, StatFileResult, WriteFileParams, writeFileRequestType } from '../customRequests'
1212
import { createLanguageClientManager, LanguageClientManager, getLanguageClientOptions, StaticLanguageClientId } from '..'
1313

1414
async function initializeLanguageClientAndGetConnection (
@@ -181,17 +181,28 @@ async function testLanguageClient (
181181
return editor
182182
})
183183

184-
const [getDocumentRequest, sendGetDocumentRequestResponse] = await waitClientRequest<GetTextDocumentParams, GetTextDocumentResult, never>(handler => connection.onRequest(getTextDocumentRequestType, handler))
185-
expect(getDocumentRequest).toEqual({
186-
textDocument: {
187-
uri: 'file:///tmp/project/src/main/Otherfile.java'
188-
}
184+
const readFileRequestPromise = waitClientRequest<ReadFileParams, ReadFileResult, never>(handler => connection.onRequest(readFileRequestType, handler))
185+
const [getFileStatsRequest, sendGetFileStatsRequestResponse] = await waitClientRequest<StatFileParams, StatFileResult, never>(handler => connection.onRequest(getFileStatsRequestType, handler))
186+
expect(getFileStatsRequest).toEqual({
187+
uri: 'file:///tmp/project/src/main/Otherfile.java'
188+
})
189+
190+
sendGetFileStatsRequestResponse({
191+
mtime: 0,
192+
name: 'Otherfile.java',
193+
size: 50,
194+
type: 'file'
195+
})
196+
197+
const [readFileRequest, sendReadFileRequestResponse] = await readFileRequestPromise
198+
expect(readFileRequest).toEqual({
199+
uri: 'file:///tmp/project/src/main/Otherfile.java'
189200
})
190201

191202
const openNotificationPromise = waitClientNotification(connection.onDidOpenTextDocument)
192203

193-
sendGetDocumentRequestResponse({
194-
text: 'other file content'
204+
sendReadFileRequestResponse({
205+
content: btoa('other file content')
195206
})
196207

197208
// Expect the model to be open
@@ -218,7 +229,7 @@ async function testLanguageClient (
218229

219230
// Expect the model to be saved
220231
const willSavePromise = waitClientNotification(connection.onWillSaveTextDocument)
221-
const saveRequestPromise = waitClientRequest(handler => connection.onRequest(saveTextDocumentRequestType, handler))
232+
const writeFileRequestPromise = waitClientRequest<WriteFileParams, void, never>(handler => connection.onRequest(writeFileRequestType, handler))
222233
const didSavePromise = waitClientNotification(connection.onDidSaveTextDocument)
223234

224235
expect(await willSavePromise).toEqual({
@@ -227,14 +238,12 @@ async function testLanguageClient (
227238
},
228239
reason: vscode.TextDocumentSaveReason.Manual
229240
})
230-
const [saveRequest, sendSaveRequestResponse] = await saveRequestPromise
231-
expect(await saveRequest).toEqual({
232-
textDocument: {
233-
uri: mainFileUri.toString(),
234-
text: modelRef.object.textEditorModel!.getValue()
235-
}
241+
const [writeFileRequest, sendWriteFileResponse] = await writeFileRequestPromise
242+
expect(writeFileRequest).toEqual({
243+
uri: mainFileUri.toString(),
244+
content: btoa(modelRef.object.textEditorModel!.getValue())
236245
})
237-
sendSaveRequestResponse(null)
246+
sendWriteFileResponse()
238247

239248
expect(await didSavePromise).toEqual({
240249
textDocument: {

src/tests/tools.ts

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { Uri } from 'monaco-editor'
21
import { AbstractMessageReader, AbstractMessageWriter, createMessageConnection, DataCallback, Disposable, Message, MessageReader, MessageWriter, NotificationHandler, RequestHandler } from 'vscode-languageserver-protocol'
32
import {
43
createConnection,
@@ -8,7 +7,7 @@ import {
87
} from 'vscode-languageserver/lib/common/api'
98
import { monaco } from '@codingame/monaco-editor-wrapper'
109
import { MessageTransports } from 'vscode-languageclient'
11-
import { getFile, updateFile } from '../customRequests'
10+
import { getFileStats, listFiles, StatFileResult, readFile, writeFile } from '../customRequests'
1211
import { Infrastructure, LanguageClientId, LanguageClientManager, LanguageClientOptions } from '../'
1312

1413
class PipedMessageReader extends AbstractMessageReader {
@@ -131,18 +130,26 @@ export class TestInfrastructure implements Infrastructure {
131130
}
132131

133132
// use same method as CodinGameInfrastructure to be able to simply catch it
134-
async getFileContent (resource: Uri, languageClient: LanguageClientManager): Promise<string | undefined> {
135-
try {
136-
return (await getFile(resource.toString(true), languageClient)).text
137-
} catch (error) {
138-
return undefined
139-
}
133+
public async readFile (resource: monaco.Uri, languageClient: LanguageClientManager): Promise<string> {
134+
return (await readFile(resource.toString(true), languageClient)).content
140135
}
141136

142137
// use same method as CodinGameInfrastructure to be able to simply catch it
143-
public async saveFileContent (document: monaco.Uri, content: string, languageClient: LanguageClientManager): Promise<void> {
138+
public async writeFile (document: monaco.Uri, content: string, languageClient: LanguageClientManager): Promise<void> {
144139
if (languageClient.isConnected()) {
145-
await updateFile(document.toString(), content, languageClient)
140+
await writeFile(document.toString(), content, languageClient)
141+
}
142+
}
143+
144+
public async getFileStats (directory: monaco.Uri, languageClient: LanguageClientManager): Promise<StatFileResult> {
145+
return (await getFileStats(directory.toString(true), languageClient))
146+
}
147+
148+
public async listFiles (directory: monaco.Uri, languageClient: LanguageClientManager): Promise<string[]> {
149+
try {
150+
return (await listFiles(directory.toString(true), languageClient)).files
151+
} catch (error) {
152+
return []
146153
}
147154
}
148155

0 commit comments

Comments
 (0)