| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299 | 'use strict';Object.defineProperty(exports, '__esModule', {  value: true});exports.runAndTransformResultsToJestFormat = exports.initialize = void 0;var _throat = _interopRequireDefault(require('throat'));var _testResult = require('@jest/test-result');var _expect = require('expect');var _jestEach = require('jest-each');var _jestMessageUtil = require('jest-message-util');var _jestSnapshot = require('jest-snapshot');var _ = _interopRequireDefault(require('..'));var _run = _interopRequireDefault(require('../run'));var _state = require('../state');var _testCaseReportHandler = _interopRequireDefault(  require('../testCaseReportHandler'));var _utils = require('../utils');var _jestExpect = _interopRequireDefault(require('./jestExpect'));function _interopRequireDefault(obj) {  return obj && obj.__esModule ? obj : {default: obj};}/** * 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 initialize = async ({  config,  environment,  globalConfig,  localRequire,  parentProcess,  sendMessageToJest,  setGlobalsForRuntime,  testPath}) => {  if (globalConfig.testTimeout) {    (0, _state.getState)().testTimeout = globalConfig.testTimeout;  }  const mutex = (0, _throat.default)(globalConfig.maxConcurrency); // @ts-expect-error  const globalsObject = {    ..._.default,    fdescribe: _.default.describe.only,    fit: _.default.it.only,    xdescribe: _.default.describe.skip,    xit: _.default.it.skip,    xtest: _.default.it.skip  };  globalsObject.test.concurrent = (test => {    const concurrent = (testName, testFn, timeout) => {      // For concurrent tests we first run the function that returns promise, and then register a      // normal test that will be waiting on the returned promise (when we start the test, the promise      // will already be in the process of execution).      // Unfortunately at this stage there's no way to know if there are any `.only` tests in the suite      // that will result in this test to be skipped, so we'll be executing the promise function anyway,      // even if it ends up being skipped.      const promise = mutex(() => testFn()); // Avoid triggering the uncaught promise rejection handler in case the test errors before      // being awaited on.      promise.catch(() => {});      globalsObject.test(testName, () => promise, timeout);    };    const only = (testName, testFn, timeout) => {      const promise = mutex(() => testFn()); // eslint-disable-next-line jest/no-focused-tests      test.only(testName, () => promise, timeout);    };    concurrent.only = only;    concurrent.skip = test.skip;    concurrent.each = (0, _jestEach.bind)(test, false);    concurrent.skip.each = (0, _jestEach.bind)(test.skip, false);    only.each = (0, _jestEach.bind)(test.only, false);    return concurrent;  })(globalsObject.test);  (0, _state.addEventHandler)(eventHandler);  if (environment.handleTestEvent) {    (0, _state.addEventHandler)(environment.handleTestEvent.bind(environment));  }  const runtimeGlobals = {    ...globalsObject,    expect: (0, _jestExpect.default)(globalConfig)  };  setGlobalsForRuntime(runtimeGlobals);  if (config.injectGlobals) {    Object.assign(environment.global, runtimeGlobals);  }  await (0, _state.dispatch)({    name: 'setup',    parentProcess,    runtimeGlobals,    testNamePattern: globalConfig.testNamePattern  });  if (config.testLocationInResults) {    await (0, _state.dispatch)({      name: 'include_test_location_in_result'    });  } // Jest tests snapshotSerializers in order preceding built-in serializers.  // Therefore, add in reverse because the last added is the first tested.  config.snapshotSerializers    .concat()    .reverse()    .forEach(path => (0, _jestSnapshot.addSerializer)(localRequire(path)));  const {expand, updateSnapshot} = globalConfig;  const snapshotResolver = await (0, _jestSnapshot.buildSnapshotResolver)(    config,    localRequire  );  const snapshotPath = snapshotResolver.resolveSnapshotPath(testPath);  const snapshotState = new _jestSnapshot.SnapshotState(snapshotPath, {    expand,    prettierPath: config.prettierPath,    snapshotFormat: config.snapshotFormat,    updateSnapshot  }); // @ts-expect-error: snapshotState is a jest extension of `expect`  (0, _expect.setState)({    snapshotState,    testPath  });  (0, _state.addEventHandler)(handleSnapshotStateAfterRetry(snapshotState));  if (sendMessageToJest) {    (0, _state.addEventHandler)(      (0, _testCaseReportHandler.default)(testPath, sendMessageToJest)    );  } // Return it back to the outer scope (test runner outside the VM).  return {    globals: globalsObject,    snapshotState  };};exports.initialize = initialize;const runAndTransformResultsToJestFormat = async ({  config,  globalConfig,  testPath}) => {  const runResult = await (0, _run.default)();  let numFailingTests = 0;  let numPassingTests = 0;  let numPendingTests = 0;  let numTodoTests = 0;  const assertionResults = runResult.testResults.map(testResult => {    let status;    if (testResult.status === 'skip') {      status = 'pending';      numPendingTests += 1;    } else if (testResult.status === 'todo') {      status = 'todo';      numTodoTests += 1;    } else if (testResult.errors.length) {      status = 'failed';      numFailingTests += 1;    } else {      status = 'passed';      numPassingTests += 1;    }    const ancestorTitles = testResult.testPath.filter(      name => name !== _state.ROOT_DESCRIBE_BLOCK_NAME    );    const title = ancestorTitles.pop();    return {      ancestorTitles,      duration: testResult.duration,      failureDetails: testResult.errorsDetailed,      failureMessages: testResult.errors,      fullName: title        ? ancestorTitles.concat(title).join(' ')        : ancestorTitles.join(' '),      invocations: testResult.invocations,      location: testResult.location,      numPassingAsserts: 0,      status,      title: testResult.testPath[testResult.testPath.length - 1]    };  });  let failureMessage = (0, _jestMessageUtil.formatResultsErrors)(    assertionResults,    config,    globalConfig,    testPath  );  let testExecError;  if (runResult.unhandledErrors.length) {    testExecError = {      message: '',      stack: runResult.unhandledErrors.join('\n')    };    failureMessage =      (failureMessage || '') +      '\n\n' +      runResult.unhandledErrors        .map(err =>          (0, _jestMessageUtil.formatExecError)(err, config, globalConfig)        )        .join('\n');  }  await (0, _state.dispatch)({    name: 'teardown'  });  return {    ...(0, _testResult.createEmptyTestResult)(),    console: undefined,    displayName: config.displayName,    failureMessage,    numFailingTests,    numPassingTests,    numPendingTests,    numTodoTests,    testExecError,    testFilePath: testPath,    testResults: assertionResults  };};exports.runAndTransformResultsToJestFormat = runAndTransformResultsToJestFormat;const handleSnapshotStateAfterRetry = snapshotState => event => {  switch (event.name) {    case 'test_retry': {      // Clear any snapshot data that occurred in previous test run      snapshotState.clear();    }  }};const eventHandler = async event => {  switch (event.name) {    case 'test_start': {      (0, _expect.setState)({        currentTestName: (0, _utils.getTestID)(event.test)      });      break;    }    case 'test_done': {      _addSuppressedErrors(event.test);      _addExpectedAssertionErrors(event.test);      break;    }  }};const _addExpectedAssertionErrors = test => {  const failures = (0, _expect.extractExpectedAssertionsErrors)();  const errors = failures.map(failure => failure.error);  test.errors = test.errors.concat(errors);}; // Get suppressed errors from ``jest-matchers`` that weren't throw during// test execution and add them to the test result, potentially failing// a passing test.const _addSuppressedErrors = test => {  const {suppressedErrors} = (0, _expect.getState)();  (0, _expect.setState)({    suppressedErrors: []  });  if (suppressedErrors.length) {    test.errors = test.errors.concat(suppressedErrors);  }};
 |