mainareawidget.spec.ts 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. // Copyright (c) Jupyter Development Team.
  2. import 'jest';
  3. import { MainAreaWidget, Toolbar } from '@jupyterlab/apputils';
  4. import { MessageLoop } from '@lumino/messaging';
  5. import { 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. });
  23. });
  24. describe('#onActivateRequest()', () => {
  25. it('should focus on activation', () => {
  26. const content = new Widget();
  27. const widget = new MainAreaWidget({ content });
  28. Widget.attach(widget, document.body);
  29. MessageLoop.sendMessage(widget, Widget.Msg.ActivateRequest);
  30. expect(document.activeElement).toBe(widget.content.node);
  31. });
  32. });
  33. describe('#onCloseRequest()', () => {
  34. it('should dispose on close', () => {
  35. const content = new Widget();
  36. const widget = new MainAreaWidget({ content });
  37. Widget.attach(widget, document.body);
  38. MessageLoop.sendMessage(widget, Widget.Msg.CloseRequest);
  39. expect(widget.isDisposed).toBe(true);
  40. });
  41. });
  42. describe('#onUpdateRequest()', () => {
  43. it('should propagate to the content', () => {
  44. let updated: boolean;
  45. const content = new (class extends Widget {
  46. onUpdateRequest() {
  47. updated = true;
  48. }
  49. })();
  50. const widget = new MainAreaWidget({ content });
  51. Widget.attach(widget, document.body);
  52. updated = false;
  53. MessageLoop.sendMessage(widget, Widget.Msg.UpdateRequest);
  54. expect(updated).toBe(true);
  55. });
  56. });
  57. describe('title', () => {
  58. it('should proxy from content to main', () => {
  59. const content = new Widget();
  60. const widget = new MainAreaWidget({ content });
  61. content.title.label = 'foo';
  62. expect(widget.title.label).toBe('foo');
  63. });
  64. it('should proxy from main to content', () => {
  65. const content = new Widget();
  66. const widget = new MainAreaWidget({ content });
  67. widget.title.label = 'foo';
  68. expect(content.title.label).toBe('foo');
  69. });
  70. });
  71. describe('dispose', () => {
  72. it('should dispose of main', () => {
  73. const content = new Widget();
  74. const widget = new MainAreaWidget({ content });
  75. content.dispose();
  76. expect(widget.isDisposed).toBe(true);
  77. });
  78. });
  79. });
  80. });