Merge pull request #116968 from DonJayamanne/fixOutputMetadata
Cell output metadata to be added to Notebook Model
This commit is contained in:
commit
fa6c46b74b
|
@ -96,6 +96,18 @@ suite('Notebook API tests', function () {
|
|||
cellKind: vscode.NotebookCellKind.Code,
|
||||
outputs: [],
|
||||
metadata: new vscode.NotebookCellMetadata().with({ custom: { testCellMetadata: 123 } })
|
||||
},
|
||||
{
|
||||
source: 'test2',
|
||||
language: 'typescript',
|
||||
cellKind: vscode.NotebookCellKind.Code,
|
||||
outputs: [
|
||||
new vscode.NotebookCellOutput([
|
||||
new vscode.NotebookCellOutputItem('text/plain', 'Hello World', { testOutputItemMetadata: true })
|
||||
],
|
||||
{ testOutputMetadata: true })
|
||||
],
|
||||
metadata: new vscode.NotebookCellMetadata().with({ custom: { testCellMetadata: 456 } })
|
||||
}
|
||||
]
|
||||
};
|
||||
|
@ -357,7 +369,7 @@ suite('Notebook API tests', function () {
|
|||
|
||||
await vscode.commands.executeCommand('vscode.openWith', resource, 'notebookCoreTest');
|
||||
const firstEditor = vscode.window.activeNotebookEditor;
|
||||
assert.strictEqual(firstEditor?.document.cells.length, 1);
|
||||
assert.strictEqual(firstEditor?.document.cells.length, 2);
|
||||
await saveAllFilesAndCloseAll(undefined);
|
||||
});
|
||||
|
||||
|
@ -438,7 +450,7 @@ suite('Notebook API tests', function () {
|
|||
});
|
||||
|
||||
const document = vscode.window.activeNotebookEditor?.document!;
|
||||
assert.strictEqual(document.cells.length, 1);
|
||||
assert.strictEqual(document.cells.length, 2);
|
||||
assert.strictEqual(document.cells[0].metadata.executionOrder, 17);
|
||||
assert.strictEqual(document.cells[0].metadata.inputCollapsed, true);
|
||||
|
||||
|
@ -497,21 +509,20 @@ suite('Notebook API tests', function () {
|
|||
|
||||
await cellsChangeEvent;
|
||||
await cellMetadataChangeEvent;
|
||||
assert.strictEqual(vscode.window.activeNotebookEditor!.document.cells.length, 2);
|
||||
assert.strictEqual(vscode.window.activeNotebookEditor!.document.cells.length, 3);
|
||||
assert.strictEqual(vscode.window.activeNotebookEditor!.document.cells[0]?.metadata?.runnable, false);
|
||||
assert.strictEqual(version + 1, vscode.window.activeNotebookEditor!.document.version);
|
||||
|
||||
await vscode.commands.executeCommand('undo');
|
||||
assert.strictEqual(version + 2, vscode.window.activeNotebookEditor!.document.version);
|
||||
assert.strictEqual(vscode.window.activeNotebookEditor!.document.cells[0]?.metadata?.runnable, undefined);
|
||||
assert.strictEqual(vscode.window.activeNotebookEditor!.document.cells.length, 1);
|
||||
assert.strictEqual(vscode.window.activeNotebookEditor!.document.cells.length, 2);
|
||||
|
||||
await saveAllFilesAndCloseAll(resource);
|
||||
});
|
||||
|
||||
test('initialzation should not emit cell change events.', async function () {
|
||||
const resource = await createRandomFile('', undefined, '.vsctestnb');
|
||||
|
||||
let count = 0;
|
||||
const disposables: vscode.Disposable[] = [];
|
||||
disposables.push(vscode.notebook.onDidChangeNotebookCells(() => {
|
||||
|
@ -536,6 +547,14 @@ suite('Notebook API tests', function () {
|
|||
assert.strictEqual(vscode.window.activeNotebookEditor!.selection?.document.getText(), 'test');
|
||||
assert.strictEqual(vscode.window.activeNotebookEditor!.selection?.language, 'typescript');
|
||||
|
||||
const secondCell = vscode.window.activeNotebookEditor!.document.cells[1];
|
||||
assert.strictEqual(secondCell!.outputs.length, 1);
|
||||
assert.deepStrictEqual(secondCell!.outputs[0].metadata, { testOutputMetadata: true });
|
||||
assert.strictEqual(secondCell!.outputs[0].outputs.length, 1);
|
||||
assert.strictEqual(secondCell!.outputs[0].outputs[0].mime, 'text/plain');
|
||||
assert.strictEqual(secondCell!.outputs[0].outputs[0].value, 'Hello World');
|
||||
assert.deepStrictEqual(secondCell!.outputs[0].outputs[0].metadata, { testOutputItemMetadata: true });
|
||||
|
||||
await vscode.commands.executeCommand('notebook.cell.insertCodeCellBelow');
|
||||
assert.strictEqual(vscode.window.activeNotebookEditor!.selection?.document.getText(), '');
|
||||
|
||||
|
@ -543,7 +562,7 @@ suite('Notebook API tests', function () {
|
|||
const activeCell = vscode.window.activeNotebookEditor!.selection;
|
||||
assert.notEqual(vscode.window.activeNotebookEditor!.selection, undefined);
|
||||
assert.strictEqual(activeCell!.document.getText(), '');
|
||||
assert.strictEqual(vscode.window.activeNotebookEditor!.document.cells.length, 3);
|
||||
assert.strictEqual(vscode.window.activeNotebookEditor!.document.cells.length, 4);
|
||||
assert.strictEqual(vscode.window.activeNotebookEditor!.document.cells.indexOf(activeCell!), 1);
|
||||
|
||||
await vscode.commands.executeCommand('workbench.action.files.save');
|
||||
|
@ -566,13 +585,13 @@ suite('Notebook API tests', function () {
|
|||
let activeCell = vscode.window.activeNotebookEditor!.selection;
|
||||
assert.notEqual(vscode.window.activeNotebookEditor!.selection, undefined);
|
||||
assert.strictEqual(activeCell!.document.getText(), '');
|
||||
assert.strictEqual(vscode.window.activeNotebookEditor!.document.cells.length, 3);
|
||||
assert.strictEqual(vscode.window.activeNotebookEditor!.document.cells.length, 4);
|
||||
assert.strictEqual(vscode.window.activeNotebookEditor!.document.cells.indexOf(activeCell!), 1);
|
||||
|
||||
// ---- focus bottom ---- //
|
||||
await vscode.commands.executeCommand('notebook.focusBottom');
|
||||
activeCell = vscode.window.activeNotebookEditor!.selection;
|
||||
assert.strictEqual(vscode.window.activeNotebookEditor!.document.cells.indexOf(activeCell!), 2);
|
||||
assert.strictEqual(vscode.window.activeNotebookEditor!.document.cells.indexOf(activeCell!), 3);
|
||||
|
||||
// ---- focus top and then copy down ---- //
|
||||
await vscode.commands.executeCommand('notebook.focusTop');
|
||||
|
@ -592,7 +611,7 @@ suite('Notebook API tests', function () {
|
|||
// ---- focus top and then copy up ---- //
|
||||
await vscode.commands.executeCommand('notebook.focusTop');
|
||||
await vscode.commands.executeCommand('notebook.cell.copyUp');
|
||||
assert.strictEqual(vscode.window.activeNotebookEditor!.document.cells.length, 4);
|
||||
assert.strictEqual(vscode.window.activeNotebookEditor!.document.cells.length, 5);
|
||||
assert.strictEqual(vscode.window.activeNotebookEditor!.document.cells[0].document.getText(), 'test');
|
||||
assert.strictEqual(vscode.window.activeNotebookEditor!.document.cells[1].document.getText(), 'test');
|
||||
assert.strictEqual(vscode.window.activeNotebookEditor!.document.cells[2].document.getText(), '');
|
||||
|
@ -859,7 +878,7 @@ suite('Notebook API tests', function () {
|
|||
const activeCell = vscode.window.activeNotebookEditor!.selection;
|
||||
assert.notStrictEqual(vscode.window.activeNotebookEditor!.selection, undefined);
|
||||
assert.strictEqual(activeCell!.document.getText(), '');
|
||||
assert.strictEqual(vscode.window.activeNotebookEditor!.document.cells.length, 3);
|
||||
assert.strictEqual(vscode.window.activeNotebookEditor!.document.cells.length, 4);
|
||||
assert.strictEqual(vscode.window.activeNotebookEditor!.document.cells.indexOf(activeCell!), 1);
|
||||
|
||||
await withEvent(vscode.workspace.onDidChangeTextDocument, async event => {
|
||||
|
@ -892,7 +911,7 @@ suite('Notebook API tests', function () {
|
|||
const activeCell = vscode.window.activeNotebookEditor!.selection;
|
||||
assert.notStrictEqual(vscode.window.activeNotebookEditor!.selection, undefined);
|
||||
assert.strictEqual(activeCell!.document.getText(), '');
|
||||
assert.strictEqual(vscode.window.activeNotebookEditor!.document.cells.length, 3);
|
||||
assert.strictEqual(vscode.window.activeNotebookEditor!.document.cells.length, 4);
|
||||
assert.strictEqual(vscode.window.activeNotebookEditor!.document.cells.indexOf(activeCell!), 1);
|
||||
|
||||
|
||||
|
@ -901,13 +920,13 @@ suite('Notebook API tests', function () {
|
|||
edit.insert(vscode.window.activeNotebookEditor!.selection!.uri, new vscode.Position(0, 0), 'var abc = 0;');
|
||||
await vscode.workspace.applyEdit(edit);
|
||||
await vscode.commands.executeCommand('notebook.cell.delete');
|
||||
assert.strictEqual(vscode.window.activeNotebookEditor!.document.cells.length, 2);
|
||||
assert.strictEqual(vscode.window.activeNotebookEditor!.document.cells.length, 3);
|
||||
assert.strictEqual(vscode.window.activeNotebookEditor!.document.cells.indexOf(vscode.window.activeNotebookEditor!.selection!), 1);
|
||||
|
||||
|
||||
// undo should bring back the deleted cell, and revert to previous content and selection
|
||||
await vscode.commands.executeCommand('undo');
|
||||
assert.strictEqual(vscode.window.activeNotebookEditor!.document.cells.length, 3);
|
||||
assert.strictEqual(vscode.window.activeNotebookEditor!.document.cells.length, 4);
|
||||
assert.strictEqual(vscode.window.activeNotebookEditor!.document.cells.indexOf(vscode.window.activeNotebookEditor!.selection!), 1);
|
||||
assert.strictEqual(vscode.window.activeNotebookEditor?.selection?.document.getText(), 'var abc = 0;');
|
||||
|
||||
|
@ -939,7 +958,7 @@ suite('Notebook API tests', function () {
|
|||
assert.strictEqual(vscode.window.activeNotebookEditor !== undefined, true);
|
||||
assert.strictEqual(vscode.window.activeNotebookEditor?.selection !== undefined, true);
|
||||
assert.deepStrictEqual(vscode.window.activeNotebookEditor?.document.cells[1], vscode.window.activeNotebookEditor?.selection);
|
||||
assert.deepStrictEqual(vscode.window.activeNotebookEditor?.document.cells.length, 3);
|
||||
assert.deepStrictEqual(vscode.window.activeNotebookEditor?.document.cells.length, 4);
|
||||
assert.strictEqual(vscode.window.activeNotebookEditor?.selection?.document.getText(), 'var abc = 0;');
|
||||
|
||||
await saveFileAndCloseAll(resource);
|
||||
|
@ -966,7 +985,7 @@ suite('Notebook API tests', function () {
|
|||
assert.strictEqual(vscode.window.activeNotebookEditor !== undefined, true);
|
||||
assert.strictEqual(vscode.window.activeNotebookEditor?.selection !== undefined, true);
|
||||
assert.deepStrictEqual(vscode.window.activeNotebookEditor?.document.cells[1], vscode.window.activeNotebookEditor?.selection);
|
||||
assert.deepStrictEqual(vscode.window.activeNotebookEditor?.document.cells.length, 3);
|
||||
assert.deepStrictEqual(vscode.window.activeNotebookEditor?.document.cells.length, 4);
|
||||
assert.strictEqual(vscode.window.activeNotebookEditor?.selection?.document.getText(), 'var abc = 0;');
|
||||
|
||||
// switch to the second editor
|
||||
|
@ -974,7 +993,7 @@ suite('Notebook API tests', function () {
|
|||
assert.strictEqual(vscode.window.activeNotebookEditor !== undefined, true);
|
||||
assert.strictEqual(vscode.window.activeNotebookEditor?.selection !== undefined, true);
|
||||
assert.deepStrictEqual(vscode.window.activeNotebookEditor?.document.cells[1], vscode.window.activeNotebookEditor?.selection);
|
||||
assert.deepStrictEqual(vscode.window.activeNotebookEditor?.document.cells.length, 2);
|
||||
assert.deepStrictEqual(vscode.window.activeNotebookEditor?.document.cells.length, 3);
|
||||
assert.strictEqual(vscode.window.activeNotebookEditor?.selection?.document.getText(), '');
|
||||
|
||||
await saveAllFilesAndCloseAll(secondResource);
|
||||
|
@ -1126,7 +1145,7 @@ suite('Notebook API tests', function () {
|
|||
edit.insert(vscode.window.activeNotebookEditor!.selection!.uri, new vscode.Position(0, 0), 'var abc = 0;');
|
||||
await vscode.workspace.applyEdit(edit);
|
||||
|
||||
assert.strictEqual(vscode.window.activeNotebookEditor!.document.cells.length, 2);
|
||||
assert.strictEqual(vscode.window.activeNotebookEditor!.document.cells.length, 3);
|
||||
assert.notEqual(vscode.window.activeNotebookEditor!.document.cells[0].document.getText(), vscode.window.activeNotebookEditor!.document.cells[1].document.getText());
|
||||
|
||||
await closeAllEditors();
|
||||
|
|
|
@ -1466,7 +1466,9 @@ export namespace NotebookCellData {
|
|||
source: data.source,
|
||||
metadata: data.metadata,
|
||||
outputs: data.outputs.map(output => ({
|
||||
outputId: output.id, outputs: (output.outputs || []).map(op => ({
|
||||
outputId: output.id,
|
||||
metadata: output.metadata,
|
||||
outputs: (output.outputs || []).map(op => ({
|
||||
mime: op.mime,
|
||||
value: op.value,
|
||||
metadata: op.metadata
|
||||
|
|
Loading…
Reference in a new issue