kernel.spec.ts 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. // Copyright (c) Jupyter Development Team.
  2. // Distributed under the terms of the Modified BSD License.
  3. import { WidgetTracker } from '@jupyterlab/apputils';
  4. import { IKernelMenu, KernelMenu } 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('KernelMenu', () => {
  13. let commands: CommandRegistry;
  14. let menu: KernelMenu;
  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 KernelMenu({ 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 kernel menu', () => {
  33. expect(menu).toBeInstanceOf(KernelMenu);
  34. // For localization this is now defined when on the mainmenu-extension.
  35. expect(menu.title.label).toBe('');
  36. });
  37. });
  38. describe('#kernelUsers', () => {
  39. it('should allow setting of an IKernelUser', () => {
  40. const user: IKernelMenu.IKernelUser<Wodget> = {
  41. tracker,
  42. restartKernelAndClearLabel: (n: number) =>
  43. 'restartKernelAndClearLabel',
  44. interruptKernel: widget => {
  45. widget.state = 'interrupt';
  46. return Promise.resolve(void 0);
  47. },
  48. restartKernel: widget => {
  49. widget.state = 'restart';
  50. return Promise.resolve(false);
  51. },
  52. restartKernelAndClear: widget => {
  53. widget.state = 'restartAndClear';
  54. return Promise.resolve(false);
  55. },
  56. changeKernel: widget => {
  57. widget.state = 'change';
  58. return Promise.resolve(void 0);
  59. },
  60. shutdownKernel: widget => {
  61. widget.state = 'shutdown';
  62. return Promise.resolve(void 0);
  63. }
  64. };
  65. menu.kernelUsers.add(user);
  66. void delegateExecute(wodget, menu.kernelUsers, 'interruptKernel');
  67. expect(wodget.state).toBe('interrupt');
  68. void delegateExecute(wodget, menu.kernelUsers, 'restartKernel');
  69. expect(wodget.state).toBe('restart');
  70. void delegateExecute(wodget, menu.kernelUsers, 'restartKernelAndClear');
  71. expect(wodget.state).toBe('restartAndClear');
  72. void delegateExecute(wodget, menu.kernelUsers, 'changeKernel');
  73. expect(wodget.state).toBe('change');
  74. void delegateExecute(wodget, menu.kernelUsers, 'shutdownKernel');
  75. expect(wodget.state).toBe('shutdown');
  76. });
  77. });
  78. });
  79. });