manager.spec.ts 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. // Copyright (c) Jupyter Development Team.
  2. // Distributed under the terms of the Modified BSD License.
  3. import { JupyterServer, testEmission } from '@jupyterlab/testutils';
  4. import { toArray } from '@lumino/algorithm';
  5. import {
  6. ServerConnection,
  7. Terminal,
  8. TerminalAPI,
  9. TerminalManager
  10. } from '../../src';
  11. const server = new JupyterServer();
  12. beforeAll(async () => {
  13. await server.start();
  14. });
  15. afterAll(async () => {
  16. await server.shutdown();
  17. });
  18. describe('terminal', () => {
  19. let manager: Terminal.IManager;
  20. beforeEach(async () => {
  21. manager = new TerminalManager({ standby: 'never' });
  22. await manager.ready;
  23. });
  24. afterEach(() => {
  25. manager.dispose();
  26. });
  27. afterAll(async () => {
  28. const models = await TerminalAPI.listRunning();
  29. await Promise.all(models.map(m => TerminalAPI.shutdownTerminal(m.name)));
  30. });
  31. describe('TerminalManager', () => {
  32. describe('#constructor()', () => {
  33. it('should accept no options', async () => {
  34. const manager = new TerminalManager({ standby: 'never' });
  35. await manager.ready;
  36. expect(manager).toBeInstanceOf(TerminalManager);
  37. manager.dispose();
  38. });
  39. it('should accept options', async () => {
  40. const manager = new TerminalManager({
  41. serverSettings: ServerConnection.makeSettings(),
  42. standby: 'never'
  43. });
  44. await manager.ready;
  45. expect(manager).toBeInstanceOf(TerminalManager);
  46. manager.dispose();
  47. });
  48. });
  49. describe('#serverSettings', () => {
  50. it('should get the server settings', async () => {
  51. const serverSettings = ServerConnection.makeSettings();
  52. const standby = 'never';
  53. const token = serverSettings.token;
  54. const manager = new TerminalManager({ serverSettings, standby });
  55. await manager.ready;
  56. expect(manager.serverSettings.token).toBe(token);
  57. manager.dispose();
  58. });
  59. });
  60. describe('#isReady', () => {
  61. it('should test whether the manager is ready', async () => {
  62. const manager = new TerminalManager({ standby: 'never' });
  63. expect(manager.isReady).toBe(false);
  64. await manager.ready;
  65. expect(manager.isReady).toBe(true);
  66. manager.dispose();
  67. });
  68. });
  69. describe('#ready', () => {
  70. it('should resolve when the manager is ready', () => {
  71. return manager.ready;
  72. });
  73. });
  74. describe('#isAvailable()', () => {
  75. it('should test whether terminal sessions are available', () => {
  76. expect(Terminal.isAvailable()).toBe(true);
  77. });
  78. });
  79. describe('#running()', () => {
  80. it('should give an iterator over the list of running models', async () => {
  81. await TerminalAPI.startNew();
  82. await manager.refreshRunning();
  83. const running = toArray(manager.running());
  84. expect(running.length).toBeGreaterThan(0);
  85. });
  86. });
  87. describe('#startNew()', () => {
  88. it('should startNew a new terminal session', async () => {
  89. const session = await manager.startNew();
  90. expect(session.name).toBeTruthy();
  91. });
  92. it('should emit a runningChanged signal', async () => {
  93. let called = false;
  94. manager.runningChanged.connect(() => {
  95. called = true;
  96. });
  97. await manager.startNew();
  98. expect(called).toBe(true);
  99. });
  100. });
  101. describe('#connectTo()', () => {
  102. it('should connect to an existing session', async () => {
  103. const session = await manager.startNew();
  104. const session2 = manager.connectTo({ model: session.model });
  105. expect(session).not.toBe(session2);
  106. expect(session2.name).toBe(session.name);
  107. });
  108. });
  109. describe('#shutdown()', () => {
  110. it('should shut down a session by id', async () => {
  111. const temp = await manager.startNew();
  112. await manager.shutdown(temp.name);
  113. expect(temp.isDisposed).toBe(true);
  114. });
  115. it('should emit a runningChanged signal', async () => {
  116. const session = await manager.startNew();
  117. let called = false;
  118. manager.runningChanged.connect(() => {
  119. called = true;
  120. });
  121. await manager.shutdown(session.name);
  122. expect(called).toBe(true);
  123. });
  124. });
  125. describe('#runningChanged', () => {
  126. it('should be emitted when the running terminals changed', async () => {
  127. const emission = testEmission(manager.runningChanged, {
  128. test: (sender, args) => {
  129. expect(sender).toBe(manager);
  130. expect(toArray(args).length).toBeGreaterThan(0);
  131. }
  132. });
  133. await manager.startNew();
  134. await emission;
  135. });
  136. });
  137. describe('#refreshRunning()', () => {
  138. it('should update the running session models', async () => {
  139. const before = toArray(manager.running()).length;
  140. const model = await TerminalAPI.startNew();
  141. await manager.refreshRunning();
  142. const running = toArray(manager.running());
  143. expect(running.length).toBe(before + 1);
  144. let found = false;
  145. running.map(m => {
  146. if (m.name === model.name) {
  147. found = true;
  148. }
  149. });
  150. expect(found).toBe(true);
  151. });
  152. });
  153. });
  154. });