'use strict'; var _jestUtil = require('jest-util'); /** * 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. */ const FRAMEWORK_INITIALIZER = require.resolve('./jestAdapterInit'); const jestAdapter = async ( globalConfig, config, environment, runtime, testPath, sendMessageToJest ) => { var _runtime$setGlobalsFo, _runtime$unstable_sho2; const { initialize, runAndTransformResultsToJestFormat } = runtime.requireInternalModule(FRAMEWORK_INITIALIZER); const getPrettier = () => config.prettierPath ? require(config.prettierPath) : null; const getBabelTraverse = () => require('@babel/traverse').default; const {globals, snapshotState} = await initialize({ config, environment, getBabelTraverse, getPrettier, globalConfig, localRequire: runtime.requireModule.bind(runtime), parentProcess: process, sendMessageToJest, setGlobalsForRuntime: (_runtime$setGlobalsFo = runtime.setGlobalsForRuntime) === null || _runtime$setGlobalsFo === void 0 ? void 0 : _runtime$setGlobalsFo.bind(runtime), testPath }); if (config.timers === 'fake' || config.timers === 'legacy') { // during setup, this cannot be null (and it's fine to explode if it is) environment.fakeTimers.useFakeTimers(); } else if (config.timers === 'modern') { environment.fakeTimersModern.useFakeTimers(); } globals.beforeEach(() => { if (config.resetModules) { runtime.resetModules(); } if (config.clearMocks) { runtime.clearAllMocks(); } if (config.resetMocks) { runtime.resetAllMocks(); if (config.timers === 'fake') { // during setup, this cannot be null (and it's fine to explode if it is) environment.fakeTimers.useFakeTimers(); } } if (config.restoreMocks) { runtime.restoreAllMocks(); } }); for (const path of config.setupFilesAfterEnv) { var _runtime$unstable_sho; // TODO: remove ? in Jest 26 const esm = (_runtime$unstable_sho = runtime.unstable_shouldLoadAsEsm) === null || _runtime$unstable_sho === void 0 ? void 0 : _runtime$unstable_sho.call(runtime, path); if (esm) { await runtime.unstable_importModule(path); } else { runtime.requireModule(path); } } // TODO: remove ? in Jest 26 const esm = (_runtime$unstable_sho2 = runtime.unstable_shouldLoadAsEsm) === null || _runtime$unstable_sho2 === void 0 ? void 0 : _runtime$unstable_sho2.call(runtime, testPath); if (esm) { await runtime.unstable_importModule(testPath); } else { runtime.requireModule(testPath); } const results = await runAndTransformResultsToJestFormat({ config, globalConfig, testPath }); _addSnapshotData(results, snapshotState); // We need to copy the results object to ensure we don't leaks the prototypes // from the VM. Jasmine creates the result objects in the parent process, we // should consider doing that for circus as well. return (0, _jestUtil.deepCyclicCopy)(results, { keepPrototype: false }); }; const _addSnapshotData = (results, snapshotState) => { results.testResults.forEach(({fullName, status}) => { if (status === 'pending' || status === 'failed') { // if test is skipped or failed, we don't want to mark // its snapshots as obsolete. snapshotState.markSnapshotsAsCheckedForTest(fullName); } }); const uncheckedCount = snapshotState.getUncheckedCount(); const uncheckedKeys = snapshotState.getUncheckedKeys(); if (uncheckedCount) { snapshotState.removeUncheckedKeys(); } const status = snapshotState.save(); results.snapshot.fileDeleted = status.deleted; results.snapshot.added = snapshotState.added; results.snapshot.matched = snapshotState.matched; results.snapshot.unmatched = snapshotState.unmatched; results.snapshot.updated = snapshotState.updated; results.snapshot.unchecked = !status.deleted ? uncheckedCount : 0; // Copy the array to prevent memory leaks results.snapshot.uncheckedKeys = Array.from(uncheckedKeys); }; module.exports = jestAdapter;