-
-
Notifications
You must be signed in to change notification settings - Fork 6.5k
/
Copy pathtypes.ts
107 lines (88 loc) · 2.74 KB
/
types.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
/**
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
import type Emittery = require('emittery');
import type {JestEnvironment} from '@jest/environment';
import type {
SerializableError,
Test,
TestEvents,
TestFileEvent,
TestResult,
} from '@jest/test-result';
import type {Config} from '@jest/types';
import type RuntimeType from 'jest-runtime';
export type ErrorWithCode = Error & {code?: string};
export type OnTestStart = (test: Test) => Promise<void>;
export type OnTestFailure = (
test: Test,
serializableError: SerializableError,
) => Promise<void>;
export type OnTestSuccess = (
test: Test,
testResult: TestResult,
) => Promise<void>;
export type TestFramework = (
globalConfig: Config.GlobalConfig,
config: Config.ProjectConfig,
environment: JestEnvironment,
runtime: RuntimeType,
testPath: string,
sendMessageToJest?: TestFileEvent,
) => Promise<TestResult>;
export type TestRunnerOptions = {
serial: boolean;
};
// make sure all props here are present in the type below it as well
export type TestRunnerContext = {
changedFiles?: Set<string>;
sourcesRelatedToTestsInChangedFiles?: Set<string>;
};
export type TestRunnerSerializedContext = {
changedFiles?: Array<string>;
sourcesRelatedToTestsInChangedFiles?: Array<string>;
};
export type UnsubscribeFn = () => void;
abstract class BaseTestRunner {
readonly isSerial?: boolean;
abstract readonly supportsEventEmitters: boolean;
constructor(
protected readonly _globalConfig: Config.GlobalConfig,
protected readonly _context: TestRunnerContext,
) {}
}
export abstract class CallbackTestRunner extends BaseTestRunner {
readonly supportsEventEmitters = false;
abstract runTests(
tests: Array<Test>,
watcher: TestWatcher,
onStart: OnTestStart,
onResult: OnTestSuccess,
onFailure: OnTestFailure,
options: TestRunnerOptions,
): Promise<void>;
}
export abstract class EmittingTestRunner extends BaseTestRunner {
readonly supportsEventEmitters = true;
abstract runTests(
tests: Array<Test>,
watcher: TestWatcher,
options: TestRunnerOptions,
): Promise<void>;
abstract on<Name extends keyof TestEvents>(
eventName: Name,
listener: (eventData: TestEvents[Name]) => void | Promise<void>,
): UnsubscribeFn;
}
export type JestTestRunner = CallbackTestRunner | EmittingTestRunner;
// TODO: Should live in `@jest/core` or `jest-watcher`
type WatcherState = {interrupted: boolean};
export interface TestWatcher extends Emittery<{change: WatcherState}> {
state: WatcherState;
setState(state: WatcherState): void;
isInterrupted(): boolean;
isWatchMode(): boolean;
}