view.spec.ts 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  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 { ViewMenu, IViewMenu } from '@jupyterlab/mainmenu';
  8. import { delegateExecute, delegateToggled } from './util';
  9. class Wodget extends Widget {
  10. wrapped: boolean = false;
  11. matched: boolean = false;
  12. numbered: boolean = false;
  13. }
  14. describe('@jupyterlab/mainmenu', () => {
  15. describe('ViewMenu', () => {
  16. let commands: CommandRegistry;
  17. let menu: ViewMenu;
  18. let tracker: WidgetTracker<Wodget>;
  19. let wodget: Wodget;
  20. beforeAll(() => {
  21. commands = new CommandRegistry();
  22. });
  23. beforeEach(() => {
  24. wodget = new Wodget();
  25. menu = new ViewMenu({ commands });
  26. tracker = new WidgetTracker<Wodget>({ namespace: 'wodget' });
  27. void tracker.add(wodget);
  28. });
  29. afterEach(() => {
  30. menu.dispose();
  31. tracker.dispose();
  32. wodget.dispose();
  33. });
  34. describe('#constructor()', () => {
  35. it('should construct a new view menu', () => {
  36. expect(menu).toBeInstanceOf(ViewMenu);
  37. expect(menu.menu.title.label).toBe('View');
  38. });
  39. });
  40. describe('#editorViewers', () => {
  41. it('should allow setting of an IEditorViewer', () => {
  42. const viewer: IViewMenu.IEditorViewer<Wodget> = {
  43. tracker,
  44. toggleLineNumbers: widget => {
  45. widget.numbered = !widget.numbered;
  46. return;
  47. },
  48. toggleMatchBrackets: widget => {
  49. widget.matched = !widget.matched;
  50. return;
  51. },
  52. toggleWordWrap: widget => {
  53. widget.wrapped = !widget.wrapped;
  54. return;
  55. },
  56. matchBracketsToggled: widget => widget.matched,
  57. lineNumbersToggled: widget => widget.numbered,
  58. wordWrapToggled: widget => widget.wrapped
  59. };
  60. menu.editorViewers.add(viewer);
  61. expect(
  62. delegateToggled(wodget, menu.editorViewers, 'matchBracketsToggled')
  63. ).toBe(false);
  64. expect(
  65. delegateToggled(wodget, menu.editorViewers, 'wordWrapToggled')
  66. ).toBe(false);
  67. expect(
  68. delegateToggled(wodget, menu.editorViewers, 'lineNumbersToggled')
  69. ).toBe(false);
  70. void delegateExecute(wodget, menu.editorViewers, 'toggleLineNumbers');
  71. void delegateExecute(wodget, menu.editorViewers, 'toggleMatchBrackets');
  72. void delegateExecute(wodget, menu.editorViewers, 'toggleWordWrap');
  73. expect(
  74. delegateToggled(wodget, menu.editorViewers, 'matchBracketsToggled')
  75. ).toBe(true);
  76. expect(
  77. delegateToggled(wodget, menu.editorViewers, 'wordWrapToggled')
  78. ).toBe(true);
  79. expect(
  80. delegateToggled(wodget, menu.editorViewers, 'lineNumbersToggled')
  81. ).toBe(true);
  82. });
  83. });
  84. });
  85. });