tracker.spec.ts 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. // Copyright (c) Jupyter Development Team.
  2. // Distributed under the terms of the Modified BSD License.
  3. import expect = require('expect.js');
  4. import {
  5. MimeData
  6. } from 'phosphor/lib/core/mimedata';
  7. import {
  8. BaseCellWidget
  9. } from '../../../lib/notebook/cells';
  10. import {
  11. NotebookPanel
  12. } from '../../../lib/notebook/notebook/panel';
  13. import {
  14. NotebookTracker
  15. } from '../../../lib/notebook/tracker';
  16. import {
  17. createNotebookContext, defaultRenderMime
  18. } from '../utils';
  19. import {
  20. DEFAULT_CONTENT, createNotebookPanelRenderer
  21. } from './utils';
  22. const NAMESPACE = 'notebook-tracker-test';
  23. class TestTracker extends NotebookTracker {
  24. methods: string[] = [];
  25. protected onCurrentChanged(): void {
  26. super.onCurrentChanged();
  27. this.methods.push('onCurrentChanged');
  28. }
  29. }
  30. /**
  31. * Default notebook panel data.
  32. */
  33. const rendermime = defaultRenderMime();
  34. const clipboard = new MimeData();
  35. const renderer = createNotebookPanelRenderer();
  36. describe('notebook/tracker', () => {
  37. describe('NotebookTracker', () => {
  38. describe('#constructor()', () => {
  39. it('should create a NotebookTracker', () => {
  40. let tracker = new NotebookTracker({ namespace: NAMESPACE });
  41. expect(tracker).to.be.a(NotebookTracker);
  42. });
  43. });
  44. describe('#activeCell', () => {
  45. it('should be `null` if there is no tracked notebook panel', () => {
  46. let tracker = new NotebookTracker({ namespace: NAMESPACE });
  47. expect(tracker.activeCell).to.be(null);
  48. });
  49. it('should be `null` if a tracked notebook has no active cell', () => {
  50. let tracker = new NotebookTracker({ namespace: NAMESPACE });
  51. let panel = new NotebookPanel({ rendermime, clipboard, renderer});
  52. tracker.add(panel);
  53. tracker.sync(panel);
  54. expect(tracker.activeCell).to.be(null);
  55. });
  56. it('should be the active cell if a tracked notebook has one', () => {
  57. let tracker = new NotebookTracker({ namespace: NAMESPACE });
  58. let panel = new NotebookPanel({ rendermime, clipboard, renderer});
  59. tracker.add(panel);
  60. tracker.sync(panel);
  61. panel.context = createNotebookContext();
  62. panel.content.model.fromJSON(DEFAULT_CONTENT);
  63. expect(tracker.activeCell).to.be.a(BaseCellWidget);
  64. panel.dispose();
  65. });
  66. });
  67. describe('#activeCellChanged', () => {
  68. it('should emit a signal when the active cell changes', () => {
  69. let tracker = new NotebookTracker({ namespace: NAMESPACE });
  70. let panel = new NotebookPanel({ rendermime, clipboard, renderer });
  71. let count = 0;
  72. tracker.activeCellChanged.connect(() => { count++; });
  73. panel.context = createNotebookContext();
  74. panel.content.model.fromJSON(DEFAULT_CONTENT);
  75. expect(count).to.be(0);
  76. tracker.add(panel);
  77. tracker.sync(panel);
  78. expect(count).to.be(1);
  79. panel.content.activeCellIndex = 1;
  80. expect(count).to.be(2);
  81. panel.dispose();
  82. });
  83. });
  84. describe('#onCurrentChanged()', () => {
  85. it('should be called when the active cell changes', () => {
  86. let tracker = new TestTracker({ namespace: NAMESPACE });
  87. let panel = new NotebookPanel({ rendermime, clipboard, renderer});
  88. tracker.add(panel);
  89. tracker.sync(panel);
  90. panel.context = createNotebookContext();
  91. panel.content.model.fromJSON(DEFAULT_CONTENT);
  92. expect(tracker.methods).to.contain('onCurrentChanged');
  93. panel.dispose();
  94. });
  95. });
  96. });
  97. });