mainareawidget.spec.ts 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. // Copyright (c) Jupyter Development Team.
  2. // Distributed under the terms of the Modified BSD License.
  3. import 'jest';
  4. import { MainAreaWidget, Toolbar } from '@jupyterlab/apputils';
  5. import { MessageLoop } from '@lumino/messaging';
  6. import { Widget } from '@lumino/widgets';
  7. describe('@jupyterlab/apputils', () => {
  8. describe('MainAreaWidget', () => {
  9. describe('#constructor()', () => {
  10. it('should create a new main area widget', () => {
  11. const content = new Widget();
  12. const widget = new MainAreaWidget({ content });
  13. expect(widget).toBeInstanceOf(MainAreaWidget);
  14. expect(widget.hasClass('jp-MainAreaWidget')).toBe(true);
  15. expect(widget.content.node.tabIndex).toBe(-1);
  16. expect(widget.title.closable).toBe(true);
  17. });
  18. it('should allow toolbar options', () => {
  19. const content = new Widget();
  20. const toolbar = new Toolbar();
  21. const widget = new MainAreaWidget({ content, toolbar });
  22. expect(widget.hasClass('jp-MainAreaWidget')).toBe(true);
  23. });
  24. });
  25. describe('#onActivateRequest()', () => {
  26. it('should focus on activation', () => {
  27. const content = new Widget();
  28. const widget = new MainAreaWidget({ content });
  29. Widget.attach(widget, document.body);
  30. MessageLoop.sendMessage(widget, Widget.Msg.ActivateRequest);
  31. expect(document.activeElement).toBe(widget.content.node);
  32. });
  33. });
  34. describe('#onCloseRequest()', () => {
  35. it('should dispose on close', () => {
  36. const content = new Widget();
  37. const widget = new MainAreaWidget({ content });
  38. Widget.attach(widget, document.body);
  39. MessageLoop.sendMessage(widget, Widget.Msg.CloseRequest);
  40. expect(widget.isDisposed).toBe(true);
  41. });
  42. });
  43. describe('#onUpdateRequest()', () => {
  44. it('should propagate to the content', () => {
  45. let updated: boolean;
  46. const content = new (class extends Widget {
  47. onUpdateRequest() {
  48. updated = true;
  49. }
  50. })();
  51. const widget = new MainAreaWidget({ content });
  52. Widget.attach(widget, document.body);
  53. updated = false;
  54. MessageLoop.sendMessage(widget, Widget.Msg.UpdateRequest);
  55. expect(updated).toBe(true);
  56. });
  57. });
  58. describe('title', () => {
  59. it('should proxy from content to main', () => {
  60. const content = new Widget();
  61. const widget = new MainAreaWidget({ content });
  62. content.title.label = 'foo';
  63. expect(widget.title.label).toBe('foo');
  64. });
  65. it('should proxy from main to content', () => {
  66. const content = new Widget();
  67. const widget = new MainAreaWidget({ content });
  68. widget.title.label = 'foo';
  69. expect(content.title.label).toBe('foo');
  70. });
  71. });
  72. describe('dispose', () => {
  73. it('should dispose of main', () => {
  74. const content = new Widget();
  75. const widget = new MainAreaWidget({ content });
  76. content.dispose();
  77. expect(widget.isDisposed).toBe(true);
  78. });
  79. });
  80. });
  81. });