mirror of
https://github.com/microsoft/vscode.git
synced 2026-05-03 23:06:49 +01:00
Fix issue with kernel preselection being overridden by view state (#154968)
* Fix view state overriding selected kernel * Add test to verify correct kernel is used
This commit is contained in:
@@ -17,7 +17,7 @@ async function createInteractiveWindow(kernel: Kernel) {
|
|||||||
// Keep focus on the owning file if there is one
|
// Keep focus on the owning file if there is one
|
||||||
{ viewColumn: vscode.ViewColumn.Beside, preserveFocus: false },
|
{ viewColumn: vscode.ViewColumn.Beside, preserveFocus: false },
|
||||||
undefined,
|
undefined,
|
||||||
kernel.controller.id,
|
`vscode.vscode-api-tests/${kernel.controller.id}`,
|
||||||
undefined
|
undefined
|
||||||
)) as unknown as INativeInteractiveWindow;
|
)) as unknown as INativeInteractiveWindow;
|
||||||
|
|
||||||
@@ -45,11 +45,13 @@ async function addCellAndRun(code: string, notebook: vscode.NotebookDocument, i:
|
|||||||
|
|
||||||
const testDisposables: vscode.Disposable[] = [];
|
const testDisposables: vscode.Disposable[] = [];
|
||||||
let defaultKernel: Kernel;
|
let defaultKernel: Kernel;
|
||||||
|
let secondKernel: Kernel;
|
||||||
|
|
||||||
setup(async function () {
|
setup(async function () {
|
||||||
// there should be ONE default kernel in this suite
|
|
||||||
defaultKernel = new Kernel('mainKernel', 'Notebook Default Kernel', 'interactive');
|
defaultKernel = new Kernel('mainKernel', 'Notebook Default Kernel', 'interactive');
|
||||||
|
secondKernel = new Kernel('secondKernel', 'Notebook Secondary Kernel', 'interactive');
|
||||||
testDisposables.push(defaultKernel.controller);
|
testDisposables.push(defaultKernel.controller);
|
||||||
|
testDisposables.push(secondKernel.controller);
|
||||||
await saveAllFilesAndCloseAll();
|
await saveAllFilesAndCloseAll();
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -85,4 +87,22 @@ async function addCellAndRun(code: string, notebook: vscode.NotebookDocument, i:
|
|||||||
assert.strictEqual(notebookEditor.visibleRanges[notebookEditor.visibleRanges.length - 1].end, notebookEditor.notebook.cellCount, `Last cell is not visible`);
|
assert.strictEqual(notebookEditor.visibleRanges[notebookEditor.visibleRanges.length - 1].end, notebookEditor.notebook.cellCount, `Last cell is not visible`);
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('Interactive window has the correct kernel', async () => {
|
||||||
|
assert.ok(vscode.workspace.workspaceFolders);
|
||||||
|
const notebookEditor = await createInteractiveWindow(defaultKernel);
|
||||||
|
assert.ok(notebookEditor);
|
||||||
|
|
||||||
|
await vscode.commands.executeCommand('workbench.action.closeActiveEditor');
|
||||||
|
|
||||||
|
// Create a new interactive window with a different kernel
|
||||||
|
const notebookEditor2 = await createInteractiveWindow(secondKernel);
|
||||||
|
assert.ok(notebookEditor2);
|
||||||
|
|
||||||
|
// Verify the kernel is the secondary one
|
||||||
|
await addCellAndRun(`print`, notebookEditor2.notebook, 0);
|
||||||
|
|
||||||
|
assert.strictEqual(secondKernel.associatedNotebooks.has(notebookEditor2.notebook.uri.toString()), true, `Secondary kernel was not set as the kernel for the interactive window`);
|
||||||
|
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1693,8 +1693,11 @@ export class NotebookEditorWidget extends Disposable implements INotebookEditorD
|
|||||||
|
|
||||||
private _restoreSelectedKernel(viewState: INotebookEditorViewState | undefined): void {
|
private _restoreSelectedKernel(viewState: INotebookEditorViewState | undefined): void {
|
||||||
if (viewState?.selectedKernelId && this.textModel) {
|
if (viewState?.selectedKernelId && this.textModel) {
|
||||||
const kernel = this.notebookKernelService.getMatchingKernel(this.textModel).all.find(k => k.id === viewState.selectedKernelId);
|
const matching = this.notebookKernelService.getMatchingKernel(this.textModel);
|
||||||
if (kernel) {
|
const kernel = matching.all.find(k => k.id === viewState.selectedKernelId);
|
||||||
|
// Selected kernel may have already been picked prior to the view state loading
|
||||||
|
// If so, don't overwrite it with the saved kernel.
|
||||||
|
if (kernel && !matching.selected) {
|
||||||
this.notebookKernelService.selectKernelForNotebook(kernel, this.textModel);
|
this.notebookKernelService.selectKernelForNotebook(kernel, this.textModel);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user