Skip to content

Commit

Permalink
assert that executing a cell send selection event, #121904
Browse files Browse the repository at this point in the history
  • Loading branch information
jrieken committed Apr 22, 2021
1 parent 12741ed commit 253fee7
Show file tree
Hide file tree
Showing 2 changed files with 68 additions and 10 deletions.
Expand Up @@ -13,16 +13,35 @@ import { NotebookViewModel } from 'vs/workbench/contrib/notebook/browser/viewMod
import { NotebookTextModel } from 'vs/workbench/contrib/notebook/common/model/notebookTextModel';
import { CellKind, INotebookKernel, IOutputDto, NotebookCellMetadata } from 'vs/workbench/contrib/notebook/common/notebookCommon';
import { setupInstantiationService, withTestNotebook as _withTestNotebook } from 'vs/workbench/contrib/notebook/test/testNotebookEditor';
import { TestStorageService } from 'vs/workbench/test/common/workbenchTestServices';
import { Event } from 'vs/base/common/event';
import { INotebookKernelService } from 'vs/workbench/contrib/notebook/common/notebookKernelService';
import { INotebookKernelBindEvent, INotebookKernelService } from 'vs/workbench/contrib/notebook/common/notebookKernelService';
import { NotebookKernelService } from 'vs/workbench/contrib/notebook/browser/notebookKernelServiceImpl';
import { NullLogService } from 'vs/platform/log/common/log';
import { INotebookService } from 'vs/workbench/contrib/notebook/common/notebookService';
import { mock } from 'vs/base/test/common/mock';
import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock';
import { DisposableStore } from 'vs/base/common/lifecycle';

suite('NotebookEditorKernelManager', () => {
const instantiationService = setupInstantiationService();
const kernelService = new NotebookKernelService(new TestStorageService(), new NullLogService());
instantiationService.set(INotebookKernelService, kernelService);

let instantiationService: TestInstantiationService;
let kernelService: INotebookKernelService;
const dispoables = new DisposableStore();

setup(function () {

dispoables.clear();

instantiationService = setupInstantiationService();

instantiationService.stub(INotebookService, new class extends mock<INotebookService>() {
onDidAddNotebookDocument = Event.None;
getNotebookTextModels() { return []; }
});

kernelService = instantiationService.createInstance(NotebookKernelService);
instantiationService.set(INotebookKernelService, kernelService);

});

async function withTestNotebook(cells: [string, string, CellKind, IOutputDto[], NotebookCellMetadata][], callback: (viewModel: NotebookViewModel, textModel: NotebookTextModel) => void | Promise<void>) {
return _withTestNotebook(cells, (editor) => callback(editor.viewModel, editor.viewModel.notebookDocument));
Expand Down Expand Up @@ -51,11 +70,11 @@ suite('NotebookEditorKernelManager', () => {
[],
async (viewModel) => {

const d = kernelService.registerKernel(new TestNotebookKernel({ languages: ['testlang'] }));
kernelService.registerKernel(new TestNotebookKernel({ languages: ['testlang'] }));
const kernelManager = instantiationService.createInstance(NotebookEditorKernelManager);
const cell = viewModel.createCell(1, 'var c = 3', 'javascript', CellKind.Code, {}, [], true);
await assertThrowsAsync(async () => await kernelManager.executeNotebookCell(cell));
d.dispose();

});
});

Expand All @@ -64,17 +83,51 @@ suite('NotebookEditorKernelManager', () => {
[],
async (viewModel) => {
const kernel = new TestNotebookKernel({ languages: ['javascript'] });
const d = kernelService.registerKernel(kernel);
kernelService.registerKernel(kernel);
const kernelManager = instantiationService.createInstance(NotebookEditorKernelManager);
const executeSpy = sinon.spy();
kernel.executeNotebookCellsRequest = executeSpy;

const cell = viewModel.createCell(0, 'var c = 3', 'javascript', CellKind.Code, {}, [], true);
await kernelManager.executeNotebookCells(viewModel.notebookDocument, [cell]);
assert.strictEqual(executeSpy.calledOnce, true);
d.dispose();
});
});

test('select kernel when running cell', async function () {
// https://github.com/microsoft/vscode/issues/121904

return withTestNotebook([], async viewModel => {
assert.strictEqual(kernelService.getNotebookKernels(viewModel.notebookDocument).all.length, 0);

let didExecute = false;
const kernel = new class extends TestNotebookKernel {
constructor() {
super({ languages: ['javascript'] });
this.id = 'mySpecialId';
}

async executeNotebookCellsRequest() {
didExecute = true;
return;
}
};

kernelService.registerKernel(kernel);
const kernelManager = instantiationService.createInstance(NotebookEditorKernelManager);

let event: INotebookKernelBindEvent | undefined;
kernelService.onDidChangeNotebookKernelBinding(e => event = e);

const cell = viewModel.createCell(0, 'var c = 3', 'javascript', CellKind.Code, {}, [], true);
await kernelManager.executeNotebookCells(viewModel.notebookDocument, [cell]);

assert.strictEqual(didExecute, true);
assert.ok(event !== undefined);
assert.strictEqual(event.newKernel, kernel.id);
assert.strictEqual(event.oldKernel, undefined);
});
});
});

class TestNotebookKernel implements INotebookKernel {
Expand Down
5 changes: 5 additions & 0 deletions src/vs/workbench/contrib/notebook/test/testNotebookEditor.ts
Expand Up @@ -37,6 +37,9 @@ import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService
import { BrowserClipboardService } from 'vs/platform/clipboard/browser/clipboardService';
import { IModeService } from 'vs/editor/common/services/modeService';
import { ModeServiceImpl } from 'vs/editor/common/services/modeServiceImpl';
import { ILogService, NullLogService } from 'vs/platform/log/common/log';
import { IStorageService } from 'vs/platform/storage/common/storage';
import { TestStorageService } from 'vs/workbench/test/common/workbenchTestServices';

export class TestCell extends NotebookCellTextModel {
constructor(
Expand Down Expand Up @@ -138,6 +141,8 @@ export function setupInstantiationService() {
instantiationService.stub(IContextKeyService, instantiationService.createInstance(ContextKeyService));
instantiationService.stub(IListService, instantiationService.createInstance(ListService));
instantiationService.stub(IClipboardService, new BrowserClipboardService());
instantiationService.stub(ILogService, new NullLogService());
instantiationService.stub(IStorageService, new TestStorageService());

return instantiationService;
}
Expand Down

0 comments on commit 253fee7

Please sign in to comment.