瀏覽代碼

Merge pull request #285 from blink1073/fix-multi-kernel

Fix handling of kernels on notebook startup
A. Darian 8 年之前
父節點
當前提交
3b5c9c5c0c
共有 3 個文件被更改,包括 15 次插入19 次删除
  1. 12 3
      src/notebook/notebook/panel.ts
  2. 1 5
      src/notebook/notebook/widgetfactory.ts
  3. 2 11
      test/src/notebook/notebook/panel.spec.ts

+ 12 - 3
src/notebook/notebook/panel.ts

@@ -26,7 +26,7 @@ import {
 } from 'phosphor-widget';
 
 import {
-  IDocumentContext
+  IDocumentContext, findKernel
 } from '../../docregistry';
 
 import {
@@ -263,9 +263,18 @@ class NotebookPanel extends Widget {
    * Handle a context population.
    */
   protected onPopulated(sender: IDocumentContext<INotebookModel>, args: void): void {
+    let model = sender.model;
     // Clear the undo state of the cells.
-    if (sender.model) {
-      sender.model.cells.clearUndo();
+    if (model) {
+      model.cells.clearUndo();
+    }
+    if (!sender.kernel && model) {
+      let name = findKernel(
+        model.defaultKernelName,
+        model.defaultKernelLanguage,
+        sender.kernelspecs
+      );
+      sender.changeKernel({ name });
     }
   }
 

+ 1 - 5
src/notebook/notebook/widgetfactory.ts

@@ -6,7 +6,7 @@ import {
 } from 'jupyter-js-services';
 
 import {
-  ABCWidgetFactory, IDocumentContext, findKernel
+  ABCWidgetFactory, IDocumentContext
 } from '../../docregistry';
 
 import {
@@ -73,12 +73,8 @@ class NotebookWidgetFactory extends ABCWidgetFactory<NotebookPanel, INotebookMod
    */
   createNew(context: IDocumentContext<INotebookModel>, kernel?: IKernel.IModel): NotebookPanel {
     let rendermime = this._rendermime.clone();
-    let model = context.model;
     if (kernel) {
       context.changeKernel(kernel);
-    } else {
-      let name = findKernel(model.defaultKernelName, model.defaultKernelLanguage, context.kernelspecs);
-      context.changeKernel({ name });
     }
     let panel = new NotebookPanel({ rendermime, clipboard: this._clipboard });
     panel.context = context;

+ 2 - 11
test/src/notebook/notebook/panel.spec.ts

@@ -166,15 +166,6 @@ describe('notebook/notebook/panel', () => {
         expect(called).to.be(true);
       });
 
-      it('should not be emitted when the kernel does not change', () => {
-        let panel = createPanel();
-        let called = false;
-        panel.kernelChanged.connect(() => { called = true; });
-        let context = new MockContext<INotebookModel>(panel.model);
-        panel.context = context;
-        expect(called).to.be(false);
-      });
-
     });
 
     describe('#toolbar', () => {
@@ -209,9 +200,9 @@ describe('notebook/notebook/panel', () => {
 
       it('should be the current kernel used by the panel', () => {
         let panel = createPanel();
-        expect(panel.kernel).to.be(null);
-        panel.context.changeKernel({ name: 'python' });
         expect(panel.kernel.name).to.be('python');
+        panel.context.changeKernel({ name: 'shell' });
+        expect(panel.kernel.name).to.be('shell');
       });
 
       it('should be read-only', () => {