1 | import path from 'path';
|
2 | import { fileURLToPath, URL } from 'url';
|
3 | import { propertyPath } from '@stryker-mutator/util';
|
4 | import semver from 'semver';
|
5 | import { state } from './cjs/messaging.js';
|
6 | const jestEnvironmentGenericFileName = fileURLToPath(new URL('./cjs/jest-environment-generic.js', import.meta.url));
|
7 |
|
8 |
|
9 |
|
10 |
|
11 | function getJestDefaults(jestWrapper) {
|
12 |
|
13 | if (semver.satisfies(jestWrapper.getVersion(), '>=27')) {
|
14 | return {
|
15 | testRunner: 'jest-circus/runner',
|
16 | testEnvironment: 'node',
|
17 | };
|
18 | }
|
19 | else {
|
20 | return {
|
21 |
|
22 | testRunner: 'jest-jasmine2',
|
23 | testEnvironment: 'jsdom',
|
24 | };
|
25 | }
|
26 | }
|
27 | export function withCoverageAnalysis(jestConfig, coverageAnalysis, jestWrapper) {
|
28 |
|
29 | if (coverageAnalysis === 'off') {
|
30 | return jestConfig;
|
31 | }
|
32 | else {
|
33 | const overrides = {};
|
34 | overrideEnvironment(jestConfig, overrides, jestWrapper);
|
35 | if (coverageAnalysis === 'perTest') {
|
36 | setupFramework(jestConfig, overrides, jestWrapper);
|
37 | }
|
38 | return { ...jestConfig, ...overrides };
|
39 | }
|
40 | }
|
41 | export function withHitLimit(jestConfig, hitLimit, jestWrapper) {
|
42 |
|
43 | if (typeof hitLimit === 'number') {
|
44 | const overrides = {};
|
45 | overrideEnvironment(jestConfig, overrides, jestWrapper);
|
46 | return { ...jestConfig, ...overrides };
|
47 | }
|
48 | else {
|
49 | return jestConfig;
|
50 | }
|
51 | }
|
52 |
|
53 |
|
54 |
|
55 |
|
56 | function setupFramework(jestConfig, overrides, jestWrapper) {
|
57 | var _a, _b;
|
58 | const testRunner = (_a = jestConfig.testRunner) !== null && _a !== void 0 ? _a : getJestDefaults(jestWrapper).testRunner;
|
59 | if (testRunner === 'jest-jasmine2') {
|
60 | overrides.setupFilesAfterEnv = [
|
61 | path.resolve(path.dirname(fileURLToPath(import.meta.url)), './jasmine2-setup-coverage-analysis.js'),
|
62 | ...((_b = jestConfig.setupFilesAfterEnv) !== null && _b !== void 0 ? _b : []),
|
63 | ];
|
64 | }
|
65 | else if (!testRunner.includes('jest-circus')) {
|
66 |
|
67 |
|
68 | throw new Error(`The @stryker-mutator/jest-runner doesn't support ${propertyPath()('coverageAnalysis')} "perTest" with "jestConfig.testRunner": "${jestConfig.testRunner}". Please open an issue if you want support for this: https://github.com/stryker-mutator/stryker-js/issues`);
|
69 | }
|
70 | }
|
71 | function overrideEnvironment(jestConfig, overrides, jestWrapper) {
|
72 | var _a;
|
73 | const originalJestEnvironment = (_a = jestConfig.testEnvironment) !== null && _a !== void 0 ? _a : getJestDefaults(jestWrapper).testEnvironment;
|
74 | state.jestEnvironment = nameEnvironment(originalJestEnvironment);
|
75 | overrides.testEnvironment = jestEnvironmentGenericFileName;
|
76 | }
|
77 | function nameEnvironment(shortName) {
|
78 | return ['node', 'jsdom'].includes(shortName) ? `jest-environment-${shortName}` : shortName;
|
79 | }
|
80 |
|
\ | No newline at end of file |