浏览代码

work in progress

A. Darian 9 年之前
父节点
当前提交
4664b40e39
共有 1 个文件被更改,包括 159 次插入2 次删除
  1. 159 2
      test/src/notebook/cells/widget.spec.ts

+ 159 - 2
test/src/notebook/cells/widget.spec.ts

@@ -35,9 +35,20 @@ import {
 } from '../../../../lib/notebook/cells/editor';
 
 
+import {
+  defaultRenderMime
+} from '../../rendermime/rendermime.spec';
+
+
 const INPUT_CLASS = 'jp-InputArea';
 
 
+const defer = requestAnimationFrame;
+
+
+const rendermime = defaultRenderMime();
+
+
 class LogCell extends BaseCellWidget {
 
   methods: string[] = [];
@@ -63,6 +74,19 @@ class LogCell extends BaseCellWidget {
     super.onMetadataChanged(model, args);
     this.methods.push('onMetadataChanged');
   }
+
+  protected onModelChanged(oldValue: ICellModel, newValue: ICellModel): void {
+    super.onModelChanged(oldValue, newValue);
+    this.methods.push('onModelChanged');
+  }
+}
+
+
+class TestRenderer extends CodeCellWidget.Renderer {
+  constructor(callback: () => void) {
+    super();
+    callback();
+  }
 }
 
 
@@ -77,6 +101,16 @@ describe('notebook/cells', () => {
         expect(widget).to.be.a(BaseCellWidget);
       });
 
+      it('should accept a different renderer', () => {
+        let called = false;
+        expect(called).to.be(false);
+        let renderer = new TestRenderer(() => { called = true; });
+        expect(called).to.be(true);
+        let widget = new BaseCellWidget({ renderer });
+        expect(widget).to.be.a(BaseCellWidget);
+        expect(widget.editor).to.be.a(CellEditorWidget);
+      });
+
     });
 
     describe('#model', () => {
@@ -93,6 +127,19 @@ describe('notebook/cells', () => {
 
     });
 
+    describe('#modelChanged', () => {
+
+      it('should emit a signal when the model changes', () => {
+        let widget = new BaseCellWidget();
+        let called = false;
+        widget.modelChanged.connect(() => { called = true; });
+        expect(called).to.be(false);
+        widget.model = new CellModel();
+        expect(called).to.be(true);
+      });
+
+    });
+
     describe('#editor', () => {
 
       it('should be a cell editor widget', () => {
@@ -257,18 +304,87 @@ describe('notebook/cells', () => {
 
     });
 
+    describe('#onModelStateChanged()', () => {
+
+      it('should fire when model state changes', () => {
+        let method = 'onModelStateChanged';
+        let widget = new LogCell();
+        widget.model = new CellModel();
+        expect(widget.methods).to.not.contain(method);
+        widget.model.source = 'foo';
+        defer(() => { expect(widget.methods).to.contain(method); });
+      });
+
+    });
+
     describe('#onMetadataChanged()', () => {
 
       it('should fire when model metadata changes', () => {
+        let method = 'onMetadataChanged';
         let widget = new LogCell();
         widget.model = new CellModel();
-        expect(widget.methods).to.not.contain('onMetadataChanged');
+        expect(widget.methods).to.not.contain(method);
         widget.model.metadataChanged.emit({
           name: 'foo',
           oldValue: 'bar',
           newValue: 'baz'
         });
-        expect(widget.methods).to.contain('onMetadataChanged');
+        expect(widget.methods).to.contain(method);
+      });
+
+    });
+
+    describe('#onModelChanged()', () => {
+
+      it('should fire when the model changes', () => {
+        let method = 'onModelChanged';
+        let widget = new LogCell();
+        expect(widget.methods).to.not.contain(method);
+        widget.model = new CellModel();
+        expect(widget.methods).to.contain(method);
+      });
+
+    });
+
+    describe('.Renderer', () => {
+
+      describe('#constructor()', () => {
+
+        it('should create a renderer', () => {
+          let renderer = new BaseCellWidget.Renderer();
+          expect(renderer).to.be.a(BaseCellWidget.Renderer);
+        });
+
+      });
+
+      describe('#createCellEditor()', () => {
+
+        it('should create a cell editor widget', () => {
+          let renderer = new BaseCellWidget.Renderer();
+          let editor = renderer.createCellEditor(new CellModel());
+          expect(editor).to.be.a(CellEditorWidget);
+        });
+
+      });
+
+      describe('#createInputArea()', () => {
+
+        it('should create an input area widget', () => {
+          let renderer = new BaseCellWidget.Renderer();
+          let editor = renderer.createCellEditor(new CellModel());
+          let input = renderer.createInputArea(editor);
+          expect(input).to.be.an(InputAreaWidget);
+        });
+
+      });
+
+      describe('#defaultRenderer', () => {
+
+        it('should be a renderer', () => {
+          let defaultRenderer = BaseCellWidget.defaultRenderer;
+          expect(defaultRenderer).to.be.a(BaseCellWidget.Renderer);
+        });
+
       });
 
     });
@@ -277,6 +393,47 @@ describe('notebook/cells', () => {
 
   describe('CodeCellWidget', () => {
 
+    describe('#constructor()', () => {
+
+      it('should create a code cell widget', () => {
+        let widget = new CodeCellWidget({ rendermime });
+        expect(widget).to.be.a(CodeCellWidget);
+      });
+
+    });
+
+    describe('.Renderer', () => {
+
+      describe('#constructor()', () => {
+
+        it('should create a renderer', () => {
+          let renderer = new CodeCellWidget.Renderer();
+          expect(renderer).to.be.a(CodeCellWidget.Renderer);
+        });
+
+      });
+
+      describe('#createOutputArea()', () => {
+
+        it('should create an output area widget', () => {
+          let renderer = new CodeCellWidget.Renderer();
+          let output = renderer.createOutputArea(rendermime);
+          expect(output).to.be.an(OutputAreaWidget);
+        });
+
+      });
+
+      describe('#defaultRenderer', () => {
+
+        it('should be a renderer', () => {
+          let defaultRenderer = CodeCellWidget.defaultRenderer;
+          expect(defaultRenderer).to.be.a(CodeCellWidget.Renderer);
+        });
+
+      });
+
+    });
+
   });
 
 });