kernel.spec.ts 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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 { KernelMenu, IKernelMenu } from '@jupyterlab/mainmenu';
  8. import { delegateExecute } from './util';
  9. class Wodget extends Widget {
  10. state: string;
  11. }
  12. describe('@jupyterlab/mainmenu', () => {
  13. describe('KernelMenu', () => {
  14. let commands: CommandRegistry;
  15. let menu: KernelMenu;
  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 KernelMenu({ 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 kernel menu', () => {
  34. expect(menu).toBeInstanceOf(KernelMenu);
  35. expect(menu.menu.title.label).toBe('Kernel');
  36. });
  37. });
  38. describe('#kernelUsers', () => {
  39. it('should allow setting of an IKernelUser', () => {
  40. const user: IKernelMenu.IKernelUser<Wodget> = {
  41. tracker,
  42. noun: 'Wodget',
  43. interruptKernel: widget => {
  44. widget.state = 'interrupt';
  45. return Promise.resolve(void 0);
  46. },
  47. restartKernel: widget => {
  48. widget.state = 'restart';
  49. return Promise.resolve(false);
  50. },
  51. restartKernelAndClear: widget => {
  52. widget.state = 'restartAndClear';
  53. return Promise.resolve(false);
  54. },
  55. changeKernel: widget => {
  56. widget.state = 'change';
  57. return Promise.resolve(void 0);
  58. },
  59. shutdownKernel: widget => {
  60. widget.state = 'shutdown';
  61. return Promise.resolve(void 0);
  62. }
  63. };
  64. menu.kernelUsers.add(user);
  65. void delegateExecute(wodget, menu.kernelUsers, 'interruptKernel');
  66. expect(wodget.state).toBe('interrupt');
  67. void delegateExecute(wodget, menu.kernelUsers, 'restartKernel');
  68. expect(wodget.state).toBe('restart');
  69. void delegateExecute(wodget, menu.kernelUsers, 'restartKernelAndClear');
  70. expect(wodget.state).toBe('restartAndClear');
  71. void delegateExecute(wodget, menu.kernelUsers, 'changeKernel');
  72. expect(wodget.state).toBe('change');
  73. void delegateExecute(wodget, menu.kernelUsers, 'shutdownKernel');
  74. expect(wodget.state).toBe('shutdown');
  75. });
  76. });
  77. });
  78. });