From d58ff261d44ea7120a4305f75ef274c1cbbbf894 Mon Sep 17 00:00:00 2001 From: Johannes Date: Fri, 1 Apr 2022 10:57:43 +0200 Subject: [PATCH] add integration tests for LiveShare specific notebook commands, https://github.com/microsoft/vscode/issues/125757 --- .../src/singlefolder-tests/notebook.test.ts | 56 ++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/extensions/vscode-api-tests/src/singlefolder-tests/notebook.test.ts b/extensions/vscode-api-tests/src/singlefolder-tests/notebook.test.ts index 74c3bf0ccbb..c120526ae14 100644 --- a/extensions/vscode-api-tests/src/singlefolder-tests/notebook.test.ts +++ b/extensions/vscode-api-tests/src/singlefolder-tests/notebook.test.ts @@ -5,7 +5,7 @@ import * as assert from 'assert'; import 'mocha'; -import { TextDecoder } from 'util'; +import { TextDecoder, TextEncoder } from 'util'; import * as vscode from 'vscode'; import { asPromise, assertNoRpc, closeAllEditors, createRandomFile, disposeAll, revertAllDirty, saveAllEditors } from '../utils'; @@ -986,3 +986,57 @@ const apiTestContentProvider: vscode.NotebookContentProvider = { assert.strictEqual(getFocusedCell(editor)?.document.languageId, 'typescript'); }); }); + +suite('Notebook & LiveShare', function () { + + const suiteDisposables: vscode.Disposable[] = []; + const notebookType = 'vsls-testing'; + + suiteTeardown(() => { + vscode.Disposable.from(...suiteDisposables).dispose(); + }); + + suiteSetup(function () { + + suiteDisposables.push(vscode.workspace.registerNotebookSerializer(notebookType, new class implements vscode.NotebookSerializer { + deserializeNotebook(content: Uint8Array, _token: vscode.CancellationToken): vscode.NotebookData | Thenable { + const value = new TextDecoder().decode(content); + return new vscode.NotebookData([new vscode.NotebookCellData(vscode.NotebookCellKind.Code, value, 'fooLang')]); + } + serializeNotebook(data: vscode.NotebookData, _token: vscode.CancellationToken): Uint8Array | Thenable { + return new TextEncoder().encode(data.cells[0].value); + } + }, {}, { + displayName: 'LS', + filenamePattern: ['*'], + })); + }); + + test('command: vscode.resolveNotebookContentProviders', async function () { + + type Info = { viewType: string; displayName: string; filenamePattern: string[] }; + + const info = await vscode.commands.executeCommand('vscode.resolveNotebookContentProviders'); + assert.strictEqual(Array.isArray(info), true); + + const item = info.find(item => item.viewType === notebookType); + assert.ok(item); + assert.strictEqual(item?.viewType, notebookType); + }); + + test('command: vscode.executeDataToNotebook', async function () { + const value = 'dataToNotebook'; + const data = await vscode.commands.executeCommand('vscode.executeDataToNotebook', notebookType, new TextEncoder().encode(value)); + assert.ok(data instanceof vscode.NotebookData); + assert.strictEqual(data.cells.length, 1); + assert.strictEqual(data.cells[0].value, value); + }); + + test('command: vscode.executeNotebookToData', async function () { + const value = 'notebookToData'; + const notebook = new vscode.NotebookData([new vscode.NotebookCellData(vscode.NotebookCellKind.Code, value, 'fooLang')]); + const data = await vscode.commands.executeCommand('vscode.executeNotebookToData', notebookType, notebook); + assert.ok(data instanceof Uint8Array); + assert.deepStrictEqual(new TextDecoder().decode(data), value); + }); +});