瀏覽代碼

Update foreign handler tests.

Afshin Darian 8 年之前
父節點
當前提交
03f02a5dcf
共有 2 個文件被更改,包括 90 次插入1 次删除
  1. 3 0
      test/src/console/content.spec.ts
  2. 87 1
      test/src/console/foreign.spec.ts

+ 3 - 0
test/src/console/content.spec.ts

@@ -54,6 +54,9 @@ class TestContent extends ConsoleContent {
   methods: string[] = [];
 
   dispose(): void {
+    if (this.isDisposed) {
+      return;
+    }
     super.dispose();
     clearSignalData(this);
   }

+ 87 - 1
test/src/console/foreign.spec.ts

@@ -3,10 +3,69 @@
 
 import expect = require('expect.js');
 
+import {
+  Kernel, KernelMessage, utils, Session
+} from '@jupyterlab/services';
+
+import {
+  clearSignalData, defineSignal, ISignal
+} from 'phosphor/lib/core/signaling';
+
+import {
+  Panel
+} from 'phosphor/lib/ui/panel';
+
+import {
+  CodeMirrorConsoleRenderer
+} from '../../../lib/console/codemirror/widget';
+
 import {
   ForeignHandler
 } from '../../../lib/console/foreign';
 
+import {
+  CodeCellModel, CodeCellWidget
+} from '../../../lib/notebook/cells';
+
+import {
+  defaultRenderMime
+} from '../utils';
+
+
+class TestHandler extends ForeignHandler {
+  readonly injected: ISignal<this, void>;
+
+  dispose(): void {
+    if (this.isDisposed) {
+      return;
+    }
+    super.dispose();
+    clearSignalData(this);
+  }
+
+  protected onIOPubMessage(sender: Kernel.IKernel, msg: KernelMessage.IIOPubMessage): boolean {
+    let injected = super.onIOPubMessage(sender, msg);
+    if (injected) {
+      this.injected.emit(void 0);
+    }
+    return injected;
+  }
+}
+
+
+defineSignal(TestHandler.prototype, 'injected');
+
+
+const rendermime = defaultRenderMime();
+const renderer: ForeignHandler.IRenderer = {
+  createCell: () => {
+    let renderer = CodeMirrorConsoleRenderer.defaultCodeCellRenderer;
+    let cell = new CodeCellWidget({ rendermime, renderer });
+    cell.model = new CodeCellModel();
+    return cell;
+  }
+};
+
 
 describe('console/foreign', () => {
 
@@ -18,7 +77,7 @@ describe('console/foreign', () => {
         let options: ForeignHandler.IOptions = {
           kernel: null,
           parent: null,
-          renderer: { createCell: () => null }
+          renderer
         };
         let handler = new ForeignHandler(options);
         expect(handler).to.be.a(ForeignHandler);
@@ -26,6 +85,33 @@ describe('console/foreign', () => {
 
     });
 
+    describe('#enabled', () => {
+
+      it('should default to `true`', () => {
+        let options: ForeignHandler.IOptions = {
+          kernel: null,
+          parent: null,
+          renderer
+        };
+        let handler = new ForeignHandler(options);
+        expect(handler.enabled).to.be(true);
+      });
+
+      it('should allow foreign cells to be injected if `true`', done => {
+        let path = utils.uuid();
+        let code = 'print("#enabled")';
+        let parent = new Panel();
+        Promise.all([
+          Session.startNew({ path }), Session.startNew({ path })
+        ]).then(([a, b]) => {
+          let handler = new TestHandler({ kernel: a.kernel, parent, renderer });
+          handler.injected.connect(() => { done(); });
+          b.kernel.execute({ code, stop_on_error: true });
+        }).catch(done);
+      });
+
+    });
+
   });
 
 });