|
1 |
| -import Mocha from 'mocha'; |
2 | 1 | import assert from 'assert';
|
3 | 2 | import type {
|
4 | 3 | ChildProcess,
|
@@ -49,7 +48,8 @@ export class TestShell {
|
49 | 48 | private static _openShells: Set<TestShell> = new Set();
|
50 | 49 |
|
51 | 50 | /**
|
52 |
| - * @deprecated Use the {@link Mocha.Context.startTestShell} hook instead |
| 51 | + * Starts a test shell. |
| 52 | + * @private Use the {@link Mocha.Context.startTestShell} hook instead |
53 | 53 | */
|
54 | 54 | static start(options: TestShellOptions = { args: [] }): TestShell {
|
55 | 55 | let shellProcess: ChildProcessWithoutNullStreams;
|
@@ -335,98 +335,3 @@ export class TestShell {
|
335 | 335 | return match.groups!.logId;
|
336 | 336 | }
|
337 | 337 | }
|
338 |
| - |
339 |
| -// Context extension to manage TestShell lifetime |
340 |
| - |
341 |
| -declare module 'mocha' { |
342 |
| - interface Context { |
343 |
| - /** |
344 |
| - * Starts a test shell and registers a hook to kill it after the test |
345 |
| - */ |
346 |
| - startTestShell(options?: TestShellOptions): TestShell; |
347 |
| - } |
348 |
| -} |
349 |
| - |
350 |
| -const TEST_SHELLS_AFTER_ALL = Symbol('test-shells-after-all'); |
351 |
| -const TEST_SHELLS_AFTER_EACH = Symbol('test-shells-after-each'); |
352 |
| - |
353 |
| -type AfterAllInjectedSuite = { |
354 |
| - [TEST_SHELLS_AFTER_ALL]: Set<TestShell>; |
355 |
| -}; |
356 |
| - |
357 |
| -type AfterEachInjectedSuite = { |
358 |
| - [TEST_SHELLS_AFTER_EACH]: Set<TestShell>; |
359 |
| -}; |
360 |
| - |
361 |
| -/** |
362 |
| - * Registers an after (all or each) hook to kill test shells started during the hooks or tests. |
363 |
| - * You don't have to call this from tests, but you can if you want to register an after (each) hook |
364 |
| - * which runs after the shells have been killed. |
365 |
| - */ |
366 |
| -export function ensureTestShellAfterHook( |
367 |
| - hookName: 'afterEach', |
368 |
| - suite: Mocha.Suite |
369 |
| -): asserts suite is AfterEachInjectedSuite & Mocha.Suite; |
370 |
| -export function ensureTestShellAfterHook( |
371 |
| - hookName: 'afterAll', |
372 |
| - suite: Mocha.Suite |
373 |
| -): asserts suite is AfterAllInjectedSuite & Mocha.Suite; |
374 |
| -export function ensureTestShellAfterHook( |
375 |
| - hookName: 'afterEach' | 'afterAll', |
376 |
| - suite: Partial<AfterAllInjectedSuite & AfterEachInjectedSuite> & Mocha.Suite |
377 |
| -): void { |
378 |
| - const symbol = |
379 |
| - hookName === 'afterAll' ? TEST_SHELLS_AFTER_ALL : TEST_SHELLS_AFTER_EACH; |
380 |
| - if (!suite[symbol]) { |
381 |
| - // Store the set of shells to kill afterwards |
382 |
| - const shells = new Set<TestShell>(); |
383 |
| - suite[symbol] = shells; |
384 |
| - suite[hookName](async () => { |
385 |
| - const shellsToKill = [...shells]; |
386 |
| - shells.clear(); |
387 |
| - await Promise.all( |
388 |
| - shellsToKill.map((shell) => { |
389 |
| - // TODO: Consider if it's okay to kill those that are already killed? |
390 |
| - shell.kill(); |
391 |
| - return shell.waitForExit(); |
392 |
| - }) |
393 |
| - ); |
394 |
| - }); |
395 |
| - } |
396 |
| -} |
397 |
| - |
398 |
| -Mocha.Context.prototype.startTestShell = function ( |
399 |
| - this: Mocha.Context, |
400 |
| - options: TestShellOptions |
401 |
| -) { |
402 |
| - const { test: runnable } = this; |
403 |
| - assert(runnable, 'Expected a runnable / test'); |
404 |
| - const { parent } = runnable; |
405 |
| - assert(parent, 'Expected runnable to have a parent'); |
406 |
| - // Start the shell |
407 |
| - const shell = TestShell.start(options); |
408 |
| - // Register a hook to kill the shell |
409 |
| - if (runnable instanceof Mocha.Hook) { |
410 |
| - if ( |
411 |
| - runnable.originalTitle === '"before each" hook' || |
412 |
| - runnable.originalTitle === '"after each" hook' |
413 |
| - ) { |
414 |
| - ensureTestShellAfterHook('afterEach', parent); |
415 |
| - parent[TEST_SHELLS_AFTER_EACH].add(shell); |
416 |
| - } else if ( |
417 |
| - runnable.originalTitle === '"before all" hook' || |
418 |
| - runnable.originalTitle === '"after all" hook' |
419 |
| - ) { |
420 |
| - ensureTestShellAfterHook('afterAll', parent); |
421 |
| - parent[TEST_SHELLS_AFTER_ALL].add(shell); |
422 |
| - } else { |
423 |
| - throw new Error(`Unexpected ${runnable.originalTitle || runnable.title}`); |
424 |
| - } |
425 |
| - } else if (runnable instanceof Mocha.Test) { |
426 |
| - ensureTestShellAfterHook('afterEach', parent); |
427 |
| - parent[TEST_SHELLS_AFTER_EACH].add(shell); |
428 |
| - } else { |
429 |
| - throw new Error('Unexpected Runnable: Expected a Hook or a Test'); |
430 |
| - } |
431 |
| - return shell; |
432 |
| -}; |
0 commit comments