mainareawidget.spec.ts 3.3 KB

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