edit.spec.ts 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. // Copyright (c) Jupyter Development Team.
  2. // Distributed under the terms of the Modified BSD License.
  3. import { WidgetTracker } from '@jupyterlab/apputils';
  4. import { EditMenu, IEditMenu } from '@jupyterlab/mainmenu';
  5. import { CommandRegistry } from '@lumino/commands';
  6. import { Widget } from '@lumino/widgets';
  7. import { delegateExecute } from './util';
  8. class Wodget extends Widget {
  9. state: string;
  10. }
  11. describe('@jupyterlab/mainmenu', () => {
  12. describe('EditMenu', () => {
  13. let commands: CommandRegistry;
  14. let menu: EditMenu;
  15. let tracker: WidgetTracker<Wodget>;
  16. let wodget: Wodget;
  17. beforeAll(() => {
  18. commands = new CommandRegistry();
  19. });
  20. beforeEach(() => {
  21. wodget = new Wodget();
  22. menu = new EditMenu({ commands });
  23. tracker = new WidgetTracker<Wodget>({ namespace: 'wodget' });
  24. void tracker.add(wodget);
  25. });
  26. afterEach(() => {
  27. menu.dispose();
  28. tracker.dispose();
  29. wodget.dispose();
  30. });
  31. describe('#constructor()', () => {
  32. it('should construct a new edit menu', () => {
  33. expect(menu).toBeInstanceOf(EditMenu);
  34. // For localization this is now defined when on the mainmenu-extension.
  35. expect(menu.title.label).toBe('');
  36. });
  37. });
  38. describe('#undoers', () => {
  39. it('should allow setting of an IUndoer', () => {
  40. const undoer: IEditMenu.IUndoer<Wodget> = {
  41. tracker,
  42. undo: widget => {
  43. widget.state = 'undo';
  44. return;
  45. },
  46. redo: widget => {
  47. widget.state = 'redo';
  48. return;
  49. }
  50. };
  51. menu.undoers.add(undoer);
  52. void delegateExecute(wodget, menu.undoers, 'undo');
  53. expect(wodget.state).toBe('undo');
  54. void delegateExecute(wodget, menu.undoers, 'redo');
  55. expect(wodget.state).toBe('redo');
  56. });
  57. });
  58. describe('#clearers', () => {
  59. it('should allow setting of an IClearer', () => {
  60. const clearer: IEditMenu.IClearer<Wodget> = {
  61. tracker,
  62. clearCurrentLabel: (n: number) => 'Clear current label',
  63. clearAllLabel: (n: number) => 'Clear all label',
  64. clearCurrent: widget => {
  65. widget.state = 'clearCurrent';
  66. return;
  67. },
  68. clearAll: widget => {
  69. widget.state = 'clearAll';
  70. return;
  71. }
  72. };
  73. menu.clearers.add(clearer);
  74. void delegateExecute(wodget, menu.clearers, 'clearCurrent');
  75. expect(wodget.state).toBe('clearCurrent');
  76. void delegateExecute(wodget, menu.clearers, 'clearAll');
  77. expect(wodget.state).toBe('clearAll');
  78. });
  79. });
  80. });
  81. });