manager.spec.ts 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. // Copyright (c) Jupyter Development Team.
  2. import 'jest';
  3. import { JSONExt } from '@lumino/coreutils';
  4. import { KernelSpecManager, KernelSpec } from '../../src';
  5. import {
  6. PYTHON_SPEC,
  7. KERNELSPECS,
  8. handleRequest,
  9. makeSettings
  10. } from '../utils';
  11. import { JupyterServer } from '@jupyterlab/testutils';
  12. class TestManager extends KernelSpecManager {
  13. intercept: KernelSpec.ISpecModels | null = null;
  14. protected async requestSpecs(): Promise<void> {
  15. if (this.intercept) {
  16. handleRequest(this, 200, this.intercept);
  17. }
  18. return super.requestSpecs();
  19. }
  20. }
  21. const PYTHON3_SPEC = JSON.parse(JSON.stringify(PYTHON_SPEC));
  22. PYTHON3_SPEC.name = 'Python3';
  23. PYTHON3_SPEC.display_name = 'python3';
  24. const server = new JupyterServer();
  25. beforeAll(async () => {
  26. await server.start();
  27. });
  28. afterAll(async () => {
  29. await server.shutdown();
  30. });
  31. describe('kernel/manager', () => {
  32. let manager: KernelSpecManager;
  33. beforeEach(() => {
  34. manager = new KernelSpecManager({ standby: 'never' });
  35. return manager.ready;
  36. });
  37. afterEach(() => {
  38. manager.dispose();
  39. });
  40. describe('KernelSpecManager', () => {
  41. describe('#constructor()', () => {
  42. it('should take the options as an argument', () => {
  43. manager.dispose();
  44. manager = new KernelSpecManager({
  45. serverSettings: makeSettings(),
  46. standby: 'never'
  47. });
  48. expect(manager instanceof KernelSpecManager).toBe(true);
  49. });
  50. });
  51. describe('#serverSettings', () => {
  52. it('should get the server settings', () => {
  53. manager.dispose();
  54. const serverSettings = makeSettings();
  55. const standby = 'never';
  56. const token = serverSettings.token;
  57. manager = new KernelSpecManager({ serverSettings, standby });
  58. expect(manager.serverSettings.token).toBe(token);
  59. });
  60. });
  61. describe('#specs', () => {
  62. it('should get the kernel specs', async () => {
  63. await manager.ready;
  64. expect(manager.specs!.default).toBeTruthy();
  65. });
  66. });
  67. describe('#specsChanged', () => {
  68. it('should be emitted when the specs change', async () => {
  69. const manager = new TestManager({ standby: 'never' });
  70. const specs = JSONExt.deepCopy(KERNELSPECS) as KernelSpec.ISpecModels;
  71. let called = false;
  72. manager.specsChanged.connect(() => {
  73. called = true;
  74. });
  75. await manager.ready;
  76. expect(manager.specs!.default).toBe('echo');
  77. specs.default = 'shell';
  78. manager.intercept = specs;
  79. await manager.refreshSpecs();
  80. expect(manager.specs!.default).toBe('shell');
  81. expect(called).toBe(true);
  82. });
  83. });
  84. describe('#isReady', () => {
  85. it('should test whether the manager is ready', async () => {
  86. manager.dispose();
  87. manager = new KernelSpecManager({ standby: 'never' });
  88. expect(manager.isReady).toBe(false);
  89. await manager.ready;
  90. expect(manager.isReady).toBe(true);
  91. });
  92. });
  93. describe('#ready', () => {
  94. it('should resolve when the manager is ready', () => {
  95. return manager.ready;
  96. });
  97. });
  98. describe('#refreshSpecs()', () => {
  99. it('should update list of kernel specs', async () => {
  100. const manager = new TestManager({ standby: 'never' });
  101. const specs = JSONExt.deepCopy(KERNELSPECS) as KernelSpec.ISpecModels;
  102. await manager.ready;
  103. specs.default = 'shell';
  104. manager.intercept = specs;
  105. expect(manager.specs!.default).not.toBe('shell');
  106. await manager.refreshSpecs();
  107. expect(manager.specs!.default).toBe('shell');
  108. });
  109. });
  110. });
  111. });