Enable VS Code extension APIs for getting opened notebook documents (#18043)

This commit is contained in:
Cory Rivera
2022-01-11 12:57:55 -08:00
committed by GitHub
parent 7940814e8d
commit df2934a80c
3 changed files with 81 additions and 15 deletions

View File

@@ -15,6 +15,7 @@ import { NBFORMAT, NBFORMAT_MINOR } from 'sql/workbench/common/constants';
import { convertToVSCodeNotebookCell } from 'sql/workbench/api/common/vscodeExecuteProvider';
import { VSCodeNotebookDocument } from 'sql/workbench/api/common/vscodeNotebookDocument';
import { URI } from 'vs/base/common/uri';
import { VSCodeNotebookEditor } from 'sql/workbench/api/common/vscodeNotebookEditor';
class MockNotebookSerializer implements vscode.NotebookSerializer {
deserializeNotebook(content: Uint8Array, token: vscode.CancellationToken): vscode.NotebookData | Thenable<vscode.NotebookData> {
@@ -366,6 +367,17 @@ suite('Notebook Serializer', () => {
validateCellRange: () => undefined
};
function validateDocsMatch(actualDoc: vscode.NotebookDocument, expectedDoc: vscode.NotebookDocument): void {
assert.deepStrictEqual(actualDoc.uri, expectedDoc.uri);
assert.strictEqual(actualDoc.notebookType, expectedDoc.notebookType);
assert.strictEqual(actualDoc.version, expectedDoc.version);
assert.strictEqual(actualDoc.isDirty, expectedDoc.isDirty);
assert.strictEqual(actualDoc.isUntitled, expectedDoc.isUntitled);
assert.strictEqual(actualDoc.isClosed, expectedDoc.isClosed);
assert.deepStrictEqual(actualDoc.metadata, expectedDoc.metadata);
assert.strictEqual(actualDoc.cellCount, expectedDoc.cellCount);
}
test('Convert ADS NotebookDocument into VS Code NotebookDocument', async () => {
let expectedDoc: vscode.NotebookDocument = {
get uri() { return testDoc.uri; },
@@ -382,14 +394,7 @@ suite('Notebook Serializer', () => {
};
let actualDoc = new VSCodeNotebookDocument(testDoc);
assert.deepStrictEqual(actualDoc.uri, expectedDoc.uri);
assert.strictEqual(actualDoc.notebookType, expectedDoc.notebookType);
assert.strictEqual(actualDoc.version, expectedDoc.version);
assert.strictEqual(actualDoc.isDirty, expectedDoc.isDirty);
assert.strictEqual(actualDoc.isUntitled, expectedDoc.isUntitled);
assert.strictEqual(actualDoc.isClosed, expectedDoc.isClosed);
assert.deepStrictEqual(actualDoc.metadata, expectedDoc.metadata);
assert.strictEqual(actualDoc.cellCount, expectedDoc.cellCount);
validateDocsMatch(actualDoc, expectedDoc);
});
// Have to validate cell fields manually since one of the NotebookCell fields is a function pointer,
@@ -440,6 +445,23 @@ suite('Notebook Serializer', () => {
secondCell = vsDoc.cellAt(10);
validateCellMatches(secondCell, expectedCells[1]);
});
test('VS Code NotebookEditor functionality', async () => {
let editor = <azdata.nb.NotebookEditor>{ document: testDoc };
let vscodeEditor = new VSCodeNotebookEditor(editor);
let expectedDoc = new VSCodeNotebookDocument(testDoc);
validateDocsMatch(vscodeEditor.document, expectedDoc);
// We only need the document field for VSCodeNotebookEditor, so the other
// fields should be non-functional
assert.throws(() => vscodeEditor.selections);
assert.throws(() => vscodeEditor.visibleRanges);
assert.throws(() => vscodeEditor.viewColumn);
assert.throws(() => vscodeEditor.revealRange(undefined));
assert.throws(() => vscodeEditor.setDecorations(undefined, undefined));
await assert.rejects(() => vscodeEditor.edit(() => undefined));
});
});
suite('Notebook Controller', () => {