mirror of
https://github.com/microsoft/vscode.git
synced 2026-02-23 03:07:58 +00:00
129 lines
5.0 KiB
TypeScript
129 lines
5.0 KiB
TypeScript
/*---------------------------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
*--------------------------------------------------------------------------------------------*/
|
|
|
|
import * as assert from 'assert';
|
|
import * as vscode from 'vscode';
|
|
import * as utils from '../utils';
|
|
|
|
(vscode.env.uiKind === vscode.UIKind.Web ? suite.skip : suite)('Notebook Editor', function () {
|
|
|
|
const contentSerializer = new class implements vscode.NotebookSerializer {
|
|
deserializeNotebook() {
|
|
return new vscode.NotebookData(
|
|
[new vscode.NotebookCellData(vscode.NotebookCellKind.Code, '// code cell', 'javascript')],
|
|
);
|
|
}
|
|
serializeNotebook() {
|
|
return new Uint8Array();
|
|
}
|
|
};
|
|
|
|
const onDidOpenNotebookEditor = (timeout = vscode.env.uiKind === vscode.UIKind.Desktop ? 5000 : 15000) => {
|
|
return new Promise<boolean>((resolve, reject) => {
|
|
|
|
const handle = setTimeout(() => {
|
|
sub.dispose();
|
|
reject(new Error('onDidOpenNotebookEditor TIMEOUT reached'));
|
|
}, timeout);
|
|
|
|
const sub = vscode.window.onDidChangeActiveNotebookEditor(() => {
|
|
if (vscode.window.activeNotebookEditor === undefined) {
|
|
// skip if there is no active notebook editor (e.g. when opening a new notebook)
|
|
return;
|
|
}
|
|
|
|
clearTimeout(handle);
|
|
sub.dispose();
|
|
resolve(true);
|
|
});
|
|
});
|
|
};
|
|
|
|
const disposables: vscode.Disposable[] = [];
|
|
const testDisposables: vscode.Disposable[] = [];
|
|
|
|
suiteTeardown(async function () {
|
|
utils.assertNoRpc();
|
|
await utils.revertAllDirty();
|
|
await utils.closeAllEditors();
|
|
utils.disposeAll(disposables);
|
|
disposables.length = 0;
|
|
|
|
for (const doc of vscode.workspace.notebookDocuments) {
|
|
assert.strictEqual(doc.isDirty, false, doc.uri.toString());
|
|
}
|
|
});
|
|
|
|
suiteSetup(function () {
|
|
disposables.push(vscode.workspace.registerNotebookSerializer('notebook.nbdtest', contentSerializer));
|
|
});
|
|
|
|
teardown(async function () {
|
|
utils.disposeAll(testDisposables);
|
|
testDisposables.length = 0;
|
|
});
|
|
|
|
// #138683
|
|
test('Opening a notebook should fire activeNotebook event changed only once', async function () {
|
|
const openedEditor = onDidOpenNotebookEditor();
|
|
const resource = await utils.createRandomFile(undefined, undefined, '.nbdtest');
|
|
const document = await vscode.workspace.openNotebookDocument(resource);
|
|
const editor = await vscode.window.showNotebookDocument(document);
|
|
assert.ok(await openedEditor);
|
|
assert.strictEqual(editor.notebook.uri.toString(), resource.toString());
|
|
});
|
|
|
|
test('Active/Visible Editor', async function () {
|
|
const firstEditorOpen = onDidOpenNotebookEditor();
|
|
const resource = await utils.createRandomFile(undefined, undefined, '.nbdtest');
|
|
const document = await vscode.workspace.openNotebookDocument(resource);
|
|
|
|
const firstEditor = await vscode.window.showNotebookDocument(document);
|
|
await firstEditorOpen;
|
|
assert.strictEqual(vscode.window.activeNotebookEditor, firstEditor);
|
|
assert.strictEqual(vscode.window.visibleNotebookEditors.includes(firstEditor), true);
|
|
|
|
const secondEditor = await vscode.window.showNotebookDocument(document, { viewColumn: vscode.ViewColumn.Beside });
|
|
// There is no guarantee that when `showNotebookDocument` resolves, the active notebook editor is already updated correctly.
|
|
// assert.strictEqual(secondEditor === vscode.window.activeNotebookEditor, true);
|
|
assert.notStrictEqual(firstEditor, secondEditor);
|
|
assert.strictEqual(vscode.window.visibleNotebookEditors.includes(secondEditor), true);
|
|
assert.strictEqual(vscode.window.visibleNotebookEditors.includes(firstEditor), true);
|
|
assert.strictEqual(vscode.window.visibleNotebookEditors.length, 2);
|
|
await utils.closeAllEditors();
|
|
});
|
|
|
|
test('Notebook Editor Event - onDidChangeVisibleNotebookEditors on open/close', async function () {
|
|
const openedEditor = utils.asPromise(vscode.window.onDidChangeVisibleNotebookEditors);
|
|
const resource = await utils.createRandomFile(undefined, undefined, '.nbdtest');
|
|
const document = await vscode.workspace.openNotebookDocument(resource);
|
|
await vscode.window.showNotebookDocument(document);
|
|
assert.ok(await openedEditor);
|
|
|
|
const firstEditorClose = utils.asPromise(vscode.window.onDidChangeVisibleNotebookEditors);
|
|
await utils.closeAllEditors();
|
|
await firstEditorClose;
|
|
});
|
|
|
|
test('Notebook Editor Event - onDidChangeVisibleNotebookEditors on two editor groups', async function () {
|
|
const resource = await utils.createRandomFile(undefined, undefined, '.nbdtest');
|
|
const document = await vscode.workspace.openNotebookDocument(resource);
|
|
|
|
let count = 0;
|
|
testDisposables.push(vscode.window.onDidChangeVisibleNotebookEditors(() => {
|
|
count = vscode.window.visibleNotebookEditors.length;
|
|
}));
|
|
|
|
await vscode.window.showNotebookDocument(document, { viewColumn: vscode.ViewColumn.Active });
|
|
assert.strictEqual(count, 1);
|
|
|
|
await vscode.window.showNotebookDocument(document, { viewColumn: vscode.ViewColumn.Beside });
|
|
assert.strictEqual(count, 2);
|
|
|
|
await utils.closeAllEditors();
|
|
assert.strictEqual(count, 0);
|
|
});
|
|
});
|