|
|
|
|
@@ -10,13 +10,13 @@ import * as utils from '../utils';
|
|
|
|
|
suite('Notebook Document', function () {
|
|
|
|
|
|
|
|
|
|
const simpleContentProvider = new class implements vscode.NotebookSerializer {
|
|
|
|
|
dataToNotebook(_data: Uint8Array): vscode.NotebookData | Thenable<vscode.NotebookData> {
|
|
|
|
|
deserializeNotebook(_data: Uint8Array): vscode.NotebookData | Thenable<vscode.NotebookData> {
|
|
|
|
|
return new vscode.NotebookData(
|
|
|
|
|
[new vscode.NotebookCellData(vscode.NotebookCellKind.Code, '// SIMPLE', 'javascript')],
|
|
|
|
|
new vscode.NotebookDocumentMetadata()
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
notebookToData(_data: vscode.NotebookData): Uint8Array | Thenable<Uint8Array> {
|
|
|
|
|
serializeNotebook(_data: vscode.NotebookData): Uint8Array | Thenable<Uint8Array> {
|
|
|
|
|
return new Uint8Array();
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
@@ -83,7 +83,7 @@ suite('Notebook Document', function () {
|
|
|
|
|
assert.strictEqual(notebook.uri.toString(), uri.toString());
|
|
|
|
|
assert.strictEqual(notebook.isDirty, false);
|
|
|
|
|
assert.strictEqual(notebook.isUntitled, false);
|
|
|
|
|
assert.strictEqual(notebook.cells.length, 1);
|
|
|
|
|
assert.strictEqual(notebook.cellCount, 1);
|
|
|
|
|
|
|
|
|
|
assert.strictEqual(notebook.viewType, 'notebook.nbdtest');
|
|
|
|
|
});
|
|
|
|
|
@@ -96,7 +96,7 @@ suite('Notebook Document', function () {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
const notebook = vscode.notebook.notebookDocuments.find(notebook => {
|
|
|
|
|
const cell = notebook.cells.find(cell => cell.document === doc);
|
|
|
|
|
const cell = notebook.getCells().find(cell => cell.document === doc);
|
|
|
|
|
return Boolean(cell);
|
|
|
|
|
});
|
|
|
|
|
assert.ok(notebook, `notebook for cell ${doc.uri} NOT found`);
|
|
|
|
|
@@ -112,7 +112,9 @@ suite('Notebook Document', function () {
|
|
|
|
|
const uri = await utils.createRandomFile(undefined, undefined, '.nbdtest');
|
|
|
|
|
|
|
|
|
|
const p = utils.asPromise(vscode.notebook.onDidOpenNotebookDocument).then(notebook => {
|
|
|
|
|
for (let cell of notebook.cells) {
|
|
|
|
|
for (let i = 0; i < notebook.cellCount; i++) {
|
|
|
|
|
let cell = notebook.cellAt(i);
|
|
|
|
|
|
|
|
|
|
const doc = vscode.workspace.textDocuments.find(doc => doc.uri.toString() === cell.document.uri.toString());
|
|
|
|
|
assert.ok(doc);
|
|
|
|
|
assert.strictEqual(doc.notebook === notebook, true);
|
|
|
|
|
@@ -132,12 +134,12 @@ suite('Notebook Document', function () {
|
|
|
|
|
const uri = await utils.createRandomFile(undefined, undefined, '.nbdtest');
|
|
|
|
|
|
|
|
|
|
const document = await vscode.notebook.openNotebookDocument(uri);
|
|
|
|
|
assert.strictEqual(document.cells.length, 1);
|
|
|
|
|
assert.strictEqual(document.cellCount, 1);
|
|
|
|
|
|
|
|
|
|
// inserting two new cells
|
|
|
|
|
{
|
|
|
|
|
const edit = new vscode.WorkspaceEdit();
|
|
|
|
|
edit.replaceNotebookCells(document.uri, 0, 0, [{
|
|
|
|
|
edit.replaceNotebookCells(document.uri, new vscode.NotebookRange(0, 0), [{
|
|
|
|
|
kind: vscode.NotebookCellKind.Markdown,
|
|
|
|
|
language: 'markdown',
|
|
|
|
|
metadata: undefined,
|
|
|
|
|
@@ -155,26 +157,26 @@ suite('Notebook Document', function () {
|
|
|
|
|
assert.strictEqual(success, true);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
assert.strictEqual(document.cells.length, 3);
|
|
|
|
|
assert.strictEqual(document.cells[0].document.getText(), 'new_markdown');
|
|
|
|
|
assert.strictEqual(document.cells[1].document.getText(), 'new_code');
|
|
|
|
|
assert.strictEqual(document.cellCount, 3);
|
|
|
|
|
assert.strictEqual(document.cellAt(0).document.getText(), 'new_markdown');
|
|
|
|
|
assert.strictEqual(document.cellAt(1).document.getText(), 'new_code');
|
|
|
|
|
|
|
|
|
|
// deleting cell 1 and 3
|
|
|
|
|
{
|
|
|
|
|
const edit = new vscode.WorkspaceEdit();
|
|
|
|
|
edit.replaceNotebookCells(document.uri, 0, 1, []);
|
|
|
|
|
edit.replaceNotebookCells(document.uri, 2, 3, []);
|
|
|
|
|
edit.replaceNotebookCells(document.uri, new vscode.NotebookRange(0, 1), []);
|
|
|
|
|
edit.replaceNotebookCells(document.uri, new vscode.NotebookRange(2, 3), []);
|
|
|
|
|
const success = await vscode.workspace.applyEdit(edit);
|
|
|
|
|
assert.strictEqual(success, true);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
assert.strictEqual(document.cells.length, 1);
|
|
|
|
|
assert.strictEqual(document.cells[0].document.getText(), 'new_code');
|
|
|
|
|
assert.strictEqual(document.cellCount, 1);
|
|
|
|
|
assert.strictEqual(document.cellAt(0).document.getText(), 'new_code');
|
|
|
|
|
|
|
|
|
|
// replacing all cells
|
|
|
|
|
{
|
|
|
|
|
const edit = new vscode.WorkspaceEdit();
|
|
|
|
|
edit.replaceNotebookCells(document.uri, 0, 1, [{
|
|
|
|
|
edit.replaceNotebookCells(document.uri, new vscode.NotebookRange(0, 1), [{
|
|
|
|
|
kind: vscode.NotebookCellKind.Markdown,
|
|
|
|
|
language: 'markdown',
|
|
|
|
|
metadata: undefined,
|
|
|
|
|
@@ -190,27 +192,27 @@ suite('Notebook Document', function () {
|
|
|
|
|
const success = await vscode.workspace.applyEdit(edit);
|
|
|
|
|
assert.strictEqual(success, true);
|
|
|
|
|
}
|
|
|
|
|
assert.strictEqual(document.cells.length, 2);
|
|
|
|
|
assert.strictEqual(document.cells[0].document.getText(), 'new2_markdown');
|
|
|
|
|
assert.strictEqual(document.cells[1].document.getText(), 'new2_code');
|
|
|
|
|
assert.strictEqual(document.cellCount, 2);
|
|
|
|
|
assert.strictEqual(document.cellAt(0).document.getText(), 'new2_markdown');
|
|
|
|
|
assert.strictEqual(document.cellAt(1).document.getText(), 'new2_code');
|
|
|
|
|
|
|
|
|
|
// remove all cells
|
|
|
|
|
{
|
|
|
|
|
const edit = new vscode.WorkspaceEdit();
|
|
|
|
|
edit.replaceNotebookCells(document.uri, 0, document.cells.length, []);
|
|
|
|
|
edit.replaceNotebookCells(document.uri, new vscode.NotebookRange(0, document.cellCount), []);
|
|
|
|
|
const success = await vscode.workspace.applyEdit(edit);
|
|
|
|
|
assert.strictEqual(success, true);
|
|
|
|
|
}
|
|
|
|
|
assert.strictEqual(document.cells.length, 0);
|
|
|
|
|
assert.strictEqual(document.cellCount, 0);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('workspace edit API (replaceCells, event)', async function () {
|
|
|
|
|
const uri = await utils.createRandomFile(undefined, undefined, '.nbdtest');
|
|
|
|
|
const document = await vscode.notebook.openNotebookDocument(uri);
|
|
|
|
|
assert.strictEqual(document.cells.length, 1);
|
|
|
|
|
assert.strictEqual(document.cellCount, 1);
|
|
|
|
|
|
|
|
|
|
const edit = new vscode.WorkspaceEdit();
|
|
|
|
|
edit.replaceNotebookCells(document.uri, 0, 0, [{
|
|
|
|
|
edit.replaceNotebookCells(document.uri, new vscode.NotebookRange(0, 0), [{
|
|
|
|
|
kind: vscode.NotebookCellKind.Markdown,
|
|
|
|
|
language: 'markdown',
|
|
|
|
|
metadata: undefined,
|
|
|
|
|
@@ -232,9 +234,9 @@ suite('Notebook Document', function () {
|
|
|
|
|
const data = await event;
|
|
|
|
|
|
|
|
|
|
// check document
|
|
|
|
|
assert.strictEqual(document.cells.length, 3);
|
|
|
|
|
assert.strictEqual(document.cells[0].document.getText(), 'new_markdown');
|
|
|
|
|
assert.strictEqual(document.cells[1].document.getText(), 'new_code');
|
|
|
|
|
assert.strictEqual(document.cellCount, 3);
|
|
|
|
|
assert.strictEqual(document.cellAt(0).document.getText(), 'new_markdown');
|
|
|
|
|
assert.strictEqual(document.cellAt(1).document.getText(), 'new_code');
|
|
|
|
|
|
|
|
|
|
// check event data
|
|
|
|
|
assert.strictEqual(data.document === document, true);
|
|
|
|
|
@@ -242,69 +244,8 @@ suite('Notebook Document', function () {
|
|
|
|
|
assert.strictEqual(data.changes[0].deletedCount, 0);
|
|
|
|
|
assert.strictEqual(data.changes[0].deletedItems.length, 0);
|
|
|
|
|
assert.strictEqual(data.changes[0].items.length, 2);
|
|
|
|
|
assert.strictEqual(data.changes[0].items[0], document.cells[0]);
|
|
|
|
|
assert.strictEqual(data.changes[0].items[1], document.cells[1]);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('workspace edit API (appendNotebookCellOutput, replaceCellOutput, event)', async function () {
|
|
|
|
|
const uri = await utils.createRandomFile(undefined, undefined, '.nbdtest');
|
|
|
|
|
const document = await vscode.notebook.openNotebookDocument(uri);
|
|
|
|
|
|
|
|
|
|
const outputChangeEvent = utils.asPromise<vscode.NotebookCellOutputsChangeEvent>(vscode.notebook.onDidChangeCellOutputs);
|
|
|
|
|
const edit = new vscode.WorkspaceEdit();
|
|
|
|
|
const firstCellOutput = new vscode.NotebookCellOutput([new vscode.NotebookCellOutputItem('foo', 'bar')]);
|
|
|
|
|
edit.appendNotebookCellOutput(document.uri, 0, [firstCellOutput]);
|
|
|
|
|
const success = await vscode.workspace.applyEdit(edit);
|
|
|
|
|
const data = await outputChangeEvent;
|
|
|
|
|
|
|
|
|
|
assert.strictEqual(success, true);
|
|
|
|
|
assert.strictEqual(document.cells.length, 1);
|
|
|
|
|
assert.strictEqual(document.cells[0].outputs.length, 1);
|
|
|
|
|
assert.deepStrictEqual(document.cells[0].outputs, [firstCellOutput]);
|
|
|
|
|
|
|
|
|
|
assert.strictEqual(data.document === document, true);
|
|
|
|
|
assert.strictEqual(data.cells.length, 1);
|
|
|
|
|
assert.strictEqual(data.cells[0].outputs.length, 1);
|
|
|
|
|
assert.deepStrictEqual(data.cells[0].outputs, [firstCellOutput]);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
const outputChangeEvent = utils.asPromise<vscode.NotebookCellOutputsChangeEvent>(vscode.notebook.onDidChangeCellOutputs);
|
|
|
|
|
const edit = new vscode.WorkspaceEdit();
|
|
|
|
|
const secondCellOutput = new vscode.NotebookCellOutput([new vscode.NotebookCellOutputItem('foo', 'baz')]);
|
|
|
|
|
edit.appendNotebookCellOutput(document.uri, 0, [secondCellOutput]);
|
|
|
|
|
const success = await vscode.workspace.applyEdit(edit);
|
|
|
|
|
const data = await outputChangeEvent;
|
|
|
|
|
|
|
|
|
|
assert.strictEqual(success, true);
|
|
|
|
|
assert.strictEqual(document.cells.length, 1);
|
|
|
|
|
assert.strictEqual(document.cells[0].outputs.length, 2);
|
|
|
|
|
assert.deepStrictEqual(document.cells[0].outputs, [firstCellOutput, secondCellOutput]);
|
|
|
|
|
|
|
|
|
|
assert.strictEqual(data.document === document, true);
|
|
|
|
|
assert.strictEqual(data.cells.length, 1);
|
|
|
|
|
assert.strictEqual(data.cells[0].outputs.length, 2);
|
|
|
|
|
assert.deepStrictEqual(data.cells[0].outputs, [firstCellOutput, secondCellOutput]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
const outputChangeEvent = utils.asPromise<vscode.NotebookCellOutputsChangeEvent>(vscode.notebook.onDidChangeCellOutputs);
|
|
|
|
|
const edit = new vscode.WorkspaceEdit();
|
|
|
|
|
const thirdOutput = new vscode.NotebookCellOutput([new vscode.NotebookCellOutputItem('foo', 'baz1')]);
|
|
|
|
|
edit.replaceNotebookCellOutput(document.uri, 0, [thirdOutput]);
|
|
|
|
|
const success = await vscode.workspace.applyEdit(edit);
|
|
|
|
|
const data = await outputChangeEvent;
|
|
|
|
|
|
|
|
|
|
assert.strictEqual(success, true);
|
|
|
|
|
assert.strictEqual(document.cells.length, 1);
|
|
|
|
|
assert.strictEqual(document.cells[0].outputs.length, 1);
|
|
|
|
|
assert.deepStrictEqual(document.cells[0].outputs, [thirdOutput]);
|
|
|
|
|
|
|
|
|
|
assert.strictEqual(data.document === document, true);
|
|
|
|
|
assert.strictEqual(data.cells.length, 1);
|
|
|
|
|
assert.strictEqual(data.cells[0].outputs.length, 1);
|
|
|
|
|
assert.deepStrictEqual(data.cells[0].outputs, [thirdOutput]);
|
|
|
|
|
}
|
|
|
|
|
assert.strictEqual(data.changes[0].items[0], document.cellAt(0));
|
|
|
|
|
assert.strictEqual(data.changes[0].items[1], document.cellAt(1));
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('document save API', async function () {
|
|
|
|
|
@@ -314,11 +255,11 @@ suite('Notebook Document', function () {
|
|
|
|
|
assert.strictEqual(notebook.uri.toString(), uri.toString());
|
|
|
|
|
assert.strictEqual(notebook.isDirty, false);
|
|
|
|
|
assert.strictEqual(notebook.isUntitled, false);
|
|
|
|
|
assert.strictEqual(notebook.cells.length, 1);
|
|
|
|
|
assert.strictEqual(notebook.cellCount, 1);
|
|
|
|
|
assert.strictEqual(notebook.viewType, 'notebook.nbdtest');
|
|
|
|
|
|
|
|
|
|
const edit = new vscode.WorkspaceEdit();
|
|
|
|
|
edit.replaceNotebookCells(notebook.uri, 0, 0, [{
|
|
|
|
|
edit.replaceNotebookCells(notebook.uri, new vscode.NotebookRange(0, 0), [{
|
|
|
|
|
kind: vscode.NotebookCellKind.Markdown,
|
|
|
|
|
language: 'markdown',
|
|
|
|
|
metadata: undefined,
|
|
|
|
|
@@ -345,7 +286,7 @@ suite('Notebook Document', function () {
|
|
|
|
|
|
|
|
|
|
const uri = await utils.createRandomFile(undefined, undefined, '.nbdtest');
|
|
|
|
|
const notebook = await vscode.notebook.openNotebookDocument(uri);
|
|
|
|
|
const first = notebook.cells[0];
|
|
|
|
|
const first = notebook.cellAt(0);
|
|
|
|
|
assert.strictEqual(first.document.languageId, 'javascript');
|
|
|
|
|
|
|
|
|
|
const pclose = utils.asPromise(vscode.workspace.onDidCloseTextDocument);
|
|
|
|
|
@@ -362,44 +303,15 @@ suite('Notebook Document', function () {
|
|
|
|
|
assert.strictEqual(opened === closed, true);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('setTextDocumentLanguage when notebook editor is not open', async function () {
|
|
|
|
|
const uri = await utils.createRandomFile('', undefined, '.nbdtest');
|
|
|
|
|
const notebook = await vscode.notebook.openNotebookDocument(uri);
|
|
|
|
|
const firstCelUri = notebook.cellAt(0).document.uri;
|
|
|
|
|
await vscode.commands.executeCommand('workbench.action.closeActiveEditor');
|
|
|
|
|
|
|
|
|
|
test('#117273, Add multiple outputs', async function () {
|
|
|
|
|
|
|
|
|
|
const resource = await utils.createRandomFile(undefined, undefined, '.nbdtest');
|
|
|
|
|
const document = await vscode.notebook.openNotebookDocument(resource);
|
|
|
|
|
|
|
|
|
|
const edit = new vscode.WorkspaceEdit();
|
|
|
|
|
edit.replaceNotebookCellOutput(document.uri, 0, [
|
|
|
|
|
new vscode.NotebookCellOutput(
|
|
|
|
|
[new vscode.NotebookCellOutputItem('application/x.notebook.stream', '1', { outputType: 'stream', streamName: 'stdout' })],
|
|
|
|
|
{ outputType: 'stream', streamName: 'stdout' }
|
|
|
|
|
)
|
|
|
|
|
]);
|
|
|
|
|
let success = await vscode.workspace.applyEdit(edit);
|
|
|
|
|
|
|
|
|
|
assert.ok(success);
|
|
|
|
|
assert.strictEqual(document.cells[0].outputs.length, 1);
|
|
|
|
|
assert.strictEqual(document.cells[0].outputs[0].outputs.length, 1);
|
|
|
|
|
assert.deepStrictEqual(document.cells[0].outputs[0].metadata, { outputType: 'stream', streamName: 'stdout' });
|
|
|
|
|
assert.deepStrictEqual(document.cells[0].outputs[0].outputs[0].metadata, { outputType: 'stream', streamName: 'stdout' });
|
|
|
|
|
|
|
|
|
|
const edit2 = new vscode.WorkspaceEdit();
|
|
|
|
|
edit2.appendNotebookCellOutput(document.uri, 0, [
|
|
|
|
|
new vscode.NotebookCellOutput(
|
|
|
|
|
[new vscode.NotebookCellOutputItem('hello', '1', { outputType: 'stream', streamName: 'stderr' })],
|
|
|
|
|
{ outputType: 'stream', streamName: 'stderr' }
|
|
|
|
|
)
|
|
|
|
|
]);
|
|
|
|
|
success = await vscode.workspace.applyEdit(edit2);
|
|
|
|
|
assert.ok(success);
|
|
|
|
|
|
|
|
|
|
assert.strictEqual(document.cells[0].outputs.length, 2);
|
|
|
|
|
assert.strictEqual(document.cells[0].outputs[0].outputs.length, 1);
|
|
|
|
|
assert.strictEqual(document.cells[0].outputs[1].outputs.length, 1);
|
|
|
|
|
assert.deepStrictEqual(document.cells[0].outputs[0].metadata, { outputType: 'stream', streamName: 'stdout' });
|
|
|
|
|
assert.deepStrictEqual(document.cells[0].outputs[0].outputs[0].metadata, { outputType: 'stream', streamName: 'stdout' });
|
|
|
|
|
assert.deepStrictEqual(document.cells[0].outputs[1].metadata, { outputType: 'stream', streamName: 'stderr' });
|
|
|
|
|
assert.deepStrictEqual(document.cells[0].outputs[1].outputs[0].metadata, { outputType: 'stream', streamName: 'stderr' });
|
|
|
|
|
let cellDoc = await vscode.workspace.openTextDocument(firstCelUri);
|
|
|
|
|
cellDoc = await vscode.languages.setTextDocumentLanguage(cellDoc, 'css');
|
|
|
|
|
assert.strictEqual(cellDoc.languageId, 'css');
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('dirty state - complex', async function () {
|
|
|
|
|
@@ -408,7 +320,7 @@ suite('Notebook Document', function () {
|
|
|
|
|
assert.strictEqual(document.isDirty, false);
|
|
|
|
|
|
|
|
|
|
const edit = new vscode.WorkspaceEdit();
|
|
|
|
|
edit.replaceNotebookCells(document.uri, 0, document.getCells().length, []);
|
|
|
|
|
edit.replaceNotebookCells(document.uri, new vscode.NotebookRange(0, document.cellCount), []);
|
|
|
|
|
assert.ok(await vscode.workspace.applyEdit(edit));
|
|
|
|
|
|
|
|
|
|
assert.strictEqual(document.isDirty, true);
|
|
|
|
|
@@ -423,7 +335,7 @@ suite('Notebook Document', function () {
|
|
|
|
|
assert.strictEqual(document.isDirty, false);
|
|
|
|
|
|
|
|
|
|
const edit = new vscode.WorkspaceEdit();
|
|
|
|
|
edit.replaceNotebookCells(document.uri, 0, document.getCells().length, []);
|
|
|
|
|
edit.replaceNotebookCells(document.uri, new vscode.NotebookRange(0, document.cellCount), []);
|
|
|
|
|
assert.ok(await vscode.workspace.applyEdit(edit));
|
|
|
|
|
|
|
|
|
|
assert.strictEqual(document.isDirty, true);
|
|
|
|
|
|