more insights when execution integration tests fail

上级 e1a46ca6
...@@ -98,6 +98,14 @@ function getFocusedCell(editor?: vscode.NotebookEditor) { ...@@ -98,6 +98,14 @@ function getFocusedCell(editor?: vscode.NotebookEditor) {
return editor ? editor.document.cellAt(editor.selections[0].start) : undefined; return editor ? editor.document.cellAt(editor.selections[0].start) : undefined;
} }
async function assertKernel(controller: vscode.NotebookController): Promise<void> {
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 () { suite('Notebook API tests', function () {
const testDisposables: vscode.Disposable[] = []; const testDisposables: vscode.Disposable[] = [];
...@@ -167,9 +175,12 @@ suite('Notebook API tests', function () { ...@@ -167,9 +175,12 @@ suite('Notebook API tests', function () {
})); }));
}); });
let kernel1: Kernel;
let kernel2: Kernel;
setup(() => { 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 => { const listener = vscode.notebook.onDidOpenNotebookDocument(async notebook => {
if (notebook.viewType === kernel1.controller.viewType) { if (notebook.viewType === kernel1.controller.viewType) {
...@@ -181,7 +192,7 @@ suite('Notebook API tests', function () { ...@@ -181,7 +192,7 @@ suite('Notebook API tests', function () {
}); });
const kernel2 = new class extends Kernel { kernel2 = new class extends Kernel {
constructor() { constructor() {
super('secondaryKernel', 'Notebook Secondary Test Kernel'); super('secondaryKernel', 'Notebook Secondary Test Kernel');
this.controller.hasExecutionOrder = false; this.controller.hasExecutionOrder = false;
...@@ -755,7 +766,7 @@ suite('Notebook API tests', function () { ...@@ -755,7 +766,7 @@ suite('Notebook API tests', function () {
}); });
await withEvent<vscode.NotebookCellOutputsChangeEvent>(vscode.notebook.onDidChangeCellOutputs, async (event) => { await withEvent<vscode.NotebookCellOutputsChangeEvent>(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 vscode.commands.executeCommand('notebook.cell.execute');
await event; await event;
assert.strictEqual(cell.outputs.length, 1, 'should execute'); // runnable, it worked assert.strictEqual(cell.outputs.length, 1, 'should execute'); // runnable, it worked
...@@ -797,7 +808,7 @@ suite('Notebook API tests', function () { ...@@ -797,7 +808,7 @@ suite('Notebook API tests', function () {
const editor = vscode.window.activeNotebookEditor!; const editor = vscode.window.activeNotebookEditor!;
const cell = editor.document.cellAt(0); 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.NotebookCellOutputsChangeEvent>(vscode.notebook.onDidChangeCellOutputs, async (event) => { await withEvent<vscode.NotebookCellOutputsChangeEvent>(vscode.notebook.onDidChangeCellOutputs, async (event) => {
await vscode.commands.executeCommand('notebook.cell.execute'); await vscode.commands.executeCommand('notebook.cell.execute');
await vscode.commands.executeCommand('notebook.cell.cancelExecution'); await vscode.commands.executeCommand('notebook.cell.cancelExecution');
...@@ -844,7 +855,8 @@ suite('Notebook API tests', function () { ...@@ -844,7 +855,8 @@ suite('Notebook API tests', function () {
const editor = vscode.window.activeNotebookEditor!; const editor = vscode.window.activeNotebookEditor!;
const cell = editor.document.cellAt(0); 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.NotebookCellOutputsChangeEvent>(vscode.notebook.onDidChangeCellOutputs, async (event) => { await withEvent<vscode.NotebookCellOutputsChangeEvent>(vscode.notebook.onDidChangeCellOutputs, async (event) => {
await vscode.commands.executeCommand('notebook.cell.execute'); await vscode.commands.executeCommand('notebook.cell.execute');
await vscode.commands.executeCommand('notebook.cell.cancelExecution'); await vscode.commands.executeCommand('notebook.cell.cancelExecution');
...@@ -1219,7 +1231,7 @@ suite('Notebook API tests', function () { ...@@ -1219,7 +1231,7 @@ suite('Notebook API tests', function () {
const resource = await createRandomNotebookFile(); const resource = await createRandomNotebookFile();
await vscode.commands.executeCommand('vscode.openWith', resource, 'notebookCoreTest'); 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 vscode.commands.executeCommand('notebook.cell.execute');
await saveAllFilesAndCloseAll(undefined); await saveAllFilesAndCloseAll(undefined);
......
...@@ -22,6 +22,7 @@ import { ExtensionIdentifier } from 'vs/platform/extensions/common/extensions'; ...@@ -22,6 +22,7 @@ import { ExtensionIdentifier } from 'vs/platform/extensions/common/extensions';
import { INotebookKernelService } from 'vs/workbench/contrib/notebook/common/notebookKernelService'; import { INotebookKernelService } from 'vs/workbench/contrib/notebook/common/notebookKernelService';
import { INotebookKernel, INotebookTextModel } from 'vs/workbench/contrib/notebook/common/notebookCommon'; import { INotebookKernel, INotebookTextModel } from 'vs/workbench/contrib/notebook/common/notebookCommon';
import { ILabelService } from 'vs/platform/label/common/label'; import { ILabelService } from 'vs/platform/label/common/label';
import { ILogService } from 'vs/platform/log/common/log';
registerAction2(class extends Action2 { registerAction2(class extends Action2 {
constructor() { constructor() {
...@@ -57,15 +58,16 @@ registerAction2(class extends Action2 { ...@@ -57,15 +58,16 @@ registerAction2(class extends Action2 {
}); });
} }
async run(accessor: ServicesAccessor, context?: { id: string, extension: string }): Promise<void> { async run(accessor: ServicesAccessor, context?: { id: string, extension: string }): Promise<boolean> {
const notebookKernelService = accessor.get(INotebookKernelService); const notebookKernelService = accessor.get(INotebookKernelService);
const editorService = accessor.get(IEditorService); const editorService = accessor.get(IEditorService);
const quickInputService = accessor.get(IQuickInputService); const quickInputService = accessor.get(IQuickInputService);
const labelService = accessor.get(ILabelService); const labelService = accessor.get(ILabelService);
const logService = accessor.get(ILogService);
const editor = getNotebookEditorFromEditorPane(editorService.activeEditorPane); const editor = getNotebookEditorFromEditorPane(editorService.activeEditorPane);
if (!editor || !editor.hasModel()) { if (!editor || !editor.hasModel()) {
return; return false;
} }
if (context && (typeof context.id !== 'string' || typeof context.extension !== 'string')) { if (context && (typeof context.id !== 'string' || typeof context.extension !== 'string')) {
...@@ -78,7 +80,7 @@ registerAction2(class extends Action2 { ...@@ -78,7 +80,7 @@ registerAction2(class extends Action2 {
if (selected && context && selected.id === context.id && ExtensionIdentifier.equals(selected.extension, context.extension)) { if (selected && context && selected.id === context.id && ExtensionIdentifier.equals(selected.extension, context.extension)) {
// current kernel is wanted kernel -> done // current kernel is wanted kernel -> done
return; return true;
} }
let newKernel: INotebookKernel | undefined; let newKernel: INotebookKernel | undefined;
...@@ -90,6 +92,10 @@ registerAction2(class extends Action2 { ...@@ -90,6 +92,10 @@ registerAction2(class extends Action2 {
break; break;
} }
} }
if (!newKernel) {
logService.warn(`wanted kernel DOES NOT EXIST, wanted: ${wantedId}, all: ${all.map(k => k.id)}`);
return false;
}
} }
if (!newKernel) { if (!newKernel) {
...@@ -132,7 +138,9 @@ registerAction2(class extends Action2 { ...@@ -132,7 +138,9 @@ registerAction2(class extends Action2 {
if (newKernel) { if (newKernel) {
notebookKernelService.selectKernelForNotebook(newKernel, notebook); notebookKernelService.selectKernelForNotebook(newKernel, notebook);
return true;
} }
return false;
} }
}); });
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册