From 1ed6862c3ea062c704d33a3e31cfbba9cdef09b4 Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Fri, 30 Apr 2021 14:16:00 +0200 Subject: [PATCH] more insights when execution integration tests fail --- .../src/singlefolder-tests/notebook.test.ts | 24 ++++++++++++++----- .../browser/contrib/status/editorStatus.ts | 14 ++++++++--- 2 files changed, 29 insertions(+), 9 deletions(-) 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 9f8c884e204..1aff42f1ea6 100644 --- a/extensions/vscode-api-tests/src/singlefolder-tests/notebook.test.ts +++ b/extensions/vscode-api-tests/src/singlefolder-tests/notebook.test.ts @@ -98,6 +98,14 @@ function getFocusedCell(editor?: vscode.NotebookEditor) { return editor ? editor.document.cellAt(editor.selections[0].start) : undefined; } +async function assertKernel(controller: vscode.NotebookController): Promise { + const success = await vscode.commands.executeCommand('notebook.selectKernel', { + extension: 'vscode.vscode-api-tests', + id: controller.id + }); + assert.ok(success, `expected selected kernel to be ${controller.id}`); +} + suite('Notebook API tests', function () { const testDisposables: vscode.Disposable[] = []; @@ -167,9 +175,12 @@ suite('Notebook API tests', function () { })); }); + let kernel1: Kernel; + let kernel2: Kernel; + setup(() => { - const kernel1 = new Kernel('mainKernel', 'Notebook Primary Test Kernel'); + kernel1 = new Kernel('mainKernel', 'Notebook Primary Test Kernel'); const listener = vscode.notebook.onDidOpenNotebookDocument(async notebook => { if (notebook.viewType === kernel1.controller.viewType) { @@ -181,7 +192,7 @@ suite('Notebook API tests', function () { }); - const kernel2 = new class extends Kernel { + kernel2 = new class extends Kernel { constructor() { super('secondaryKernel', 'Notebook Secondary Test Kernel'); this.controller.hasExecutionOrder = false; @@ -755,7 +766,7 @@ suite('Notebook API tests', function () { }); await withEvent(vscode.notebook.onDidChangeCellOutputs, async (event) => { - await vscode.commands.executeCommand('notebook.selectKernel', { extension: 'vscode.vscode-api-tests', id: 'secondaryKernel' }); + await assertKernel(kernel2.controller); await vscode.commands.executeCommand('notebook.cell.execute'); await event; assert.strictEqual(cell.outputs.length, 1, 'should execute'); // runnable, it worked @@ -797,7 +808,7 @@ suite('Notebook API tests', function () { const editor = vscode.window.activeNotebookEditor!; const cell = editor.document.cellAt(0); - await vscode.commands.executeCommand('notebook.selectKernel', { extension: 'vscode.vscode-api-tests', id: cancelableKernel.controller.id }); + await assertKernel(cancelableKernel.controller); await withEvent(vscode.notebook.onDidChangeCellOutputs, async (event) => { await vscode.commands.executeCommand('notebook.cell.execute'); await vscode.commands.executeCommand('notebook.cell.cancelExecution'); @@ -844,7 +855,8 @@ suite('Notebook API tests', function () { const editor = vscode.window.activeNotebookEditor!; const cell = editor.document.cellAt(0); - await vscode.commands.executeCommand('notebook.selectKernel', { extension: 'vscode.vscode-api-tests', id: interruptableKernel.controller.id }); + await assertKernel(interruptableKernel.controller); + await withEvent(vscode.notebook.onDidChangeCellOutputs, async (event) => { await vscode.commands.executeCommand('notebook.cell.execute'); await vscode.commands.executeCommand('notebook.cell.cancelExecution'); @@ -1219,7 +1231,7 @@ suite('Notebook API tests', function () { const resource = await createRandomNotebookFile(); await vscode.commands.executeCommand('vscode.openWith', resource, 'notebookCoreTest'); - await vscode.commands.executeCommand('notebook.selectKernel', { extension: 'vscode.vscode-api-tests', id: verifyOutputSyncKernel.controller.id }); + await assertKernel(verifyOutputSyncKernel.controller); await vscode.commands.executeCommand('notebook.cell.execute'); await saveAllFilesAndCloseAll(undefined); diff --git a/src/vs/workbench/contrib/notebook/browser/contrib/status/editorStatus.ts b/src/vs/workbench/contrib/notebook/browser/contrib/status/editorStatus.ts index 96f501c6c4c..cc3f20a7101 100644 --- a/src/vs/workbench/contrib/notebook/browser/contrib/status/editorStatus.ts +++ b/src/vs/workbench/contrib/notebook/browser/contrib/status/editorStatus.ts @@ -22,6 +22,7 @@ import { ExtensionIdentifier } from 'vs/platform/extensions/common/extensions'; import { INotebookKernelService } from 'vs/workbench/contrib/notebook/common/notebookKernelService'; import { INotebookKernel, INotebookTextModel } from 'vs/workbench/contrib/notebook/common/notebookCommon'; import { ILabelService } from 'vs/platform/label/common/label'; +import { ILogService } from 'vs/platform/log/common/log'; registerAction2(class extends Action2 { constructor() { @@ -57,15 +58,16 @@ registerAction2(class extends Action2 { }); } - async run(accessor: ServicesAccessor, context?: { id: string, extension: string }): Promise { + async run(accessor: ServicesAccessor, context?: { id: string, extension: string }): Promise { const notebookKernelService = accessor.get(INotebookKernelService); const editorService = accessor.get(IEditorService); const quickInputService = accessor.get(IQuickInputService); const labelService = accessor.get(ILabelService); + const logService = accessor.get(ILogService); const editor = getNotebookEditorFromEditorPane(editorService.activeEditorPane); if (!editor || !editor.hasModel()) { - return; + return false; } if (context && (typeof context.id !== 'string' || typeof context.extension !== 'string')) { @@ -78,7 +80,7 @@ registerAction2(class extends Action2 { if (selected && context && selected.id === context.id && ExtensionIdentifier.equals(selected.extension, context.extension)) { // current kernel is wanted kernel -> done - return; + return true; } let newKernel: INotebookKernel | undefined; @@ -90,6 +92,10 @@ registerAction2(class extends Action2 { break; } } + if (!newKernel) { + logService.warn(`wanted kernel DOES NOT EXIST, wanted: ${wantedId}, all: ${all.map(k => k.id)}`); + return false; + } } if (!newKernel) { @@ -132,7 +138,9 @@ registerAction2(class extends Action2 { if (newKernel) { notebookKernelService.selectKernelForNotebook(newKernel, notebook); + return true; } + return false; } });