file.spec.ts 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. // Copyright (c) Jupyter Development Team.
  2. // Distributed under the terms of the Modified BSD License.
  3. import 'jest';
  4. import { CommandRegistry } from '@lumino/commands';
  5. import { Widget } from '@lumino/widgets';
  6. import { WidgetTracker } from '@jupyterlab/apputils';
  7. import { FileMenu, IFileMenu } from '@jupyterlab/mainmenu';
  8. import { delegateExecute } from './util';
  9. class Wodget extends Widget {
  10. state: string;
  11. }
  12. describe('@jupyterlab/mainmenu', () => {
  13. describe('FileMenu', () => {
  14. let commands: CommandRegistry;
  15. let menu: FileMenu;
  16. let tracker: WidgetTracker<Wodget>;
  17. let wodget: Wodget;
  18. beforeAll(() => {
  19. commands = new CommandRegistry();
  20. });
  21. beforeEach(() => {
  22. wodget = new Wodget();
  23. menu = new FileMenu({ commands });
  24. tracker = new WidgetTracker<Wodget>({ namespace: 'wodget' });
  25. void tracker.add(wodget);
  26. });
  27. afterEach(() => {
  28. menu.dispose();
  29. tracker.dispose();
  30. wodget.dispose();
  31. });
  32. describe('#constructor()', () => {
  33. it('should construct a new file menu', () => {
  34. expect(menu).toBeInstanceOf(FileMenu);
  35. expect(menu.menu.title.label).toBe('File');
  36. });
  37. });
  38. describe('#newMenu', () => {
  39. it('should be a submenu for `New...` commands', () => {
  40. expect(menu.newMenu.menu.title.label).toBe('New');
  41. });
  42. });
  43. describe('#cleaners', () => {
  44. it('should allow setting of an ICloseAndCleaner', () => {
  45. const cleaner: IFileMenu.ICloseAndCleaner<Wodget> = {
  46. tracker,
  47. name: 'Wodget',
  48. action: 'Clean',
  49. closeAndCleanup: widget => {
  50. widget.state = 'clean';
  51. return Promise.resolve(void 0);
  52. }
  53. };
  54. menu.closeAndCleaners.add(cleaner);
  55. void delegateExecute(wodget, menu.closeAndCleaners, 'closeAndCleanup');
  56. expect(wodget.state).toBe('clean');
  57. });
  58. });
  59. describe('#consoleCreators', () => {
  60. it('should allow setting of an IConsoleCreator', () => {
  61. const creator: IFileMenu.IConsoleCreator<Wodget> = {
  62. tracker,
  63. name: 'Wodget',
  64. createConsole: widget => {
  65. widget.state = 'create';
  66. return Promise.resolve(void 0);
  67. }
  68. };
  69. menu.consoleCreators.add(creator);
  70. void delegateExecute(wodget, menu.consoleCreators, 'createConsole');
  71. expect(wodget.state).toBe('create');
  72. });
  73. });
  74. });
  75. });