diff --git a/jest/integration/runner/getFantomTestConfig.js b/jest/integration/runner/getFantomTestConfig.js new file mode 100644 index 00000000000..98a63ce3bf1 --- /dev/null +++ b/jest/integration/runner/getFantomTestConfig.js @@ -0,0 +1,64 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @flow strict-local + * @format + * @oncall react_native + */ + +import fs from 'fs'; +// $FlowExpectedError[untyped-import] +import {extract, parse} from 'jest-docblock'; + +type DocblockPragmas = {[key: string]: string | string[]}; +type FantomTestMode = 'dev' | 'opt'; +type FantomTestConfig = { + mode: FantomTestMode, +}; + +const DEFAULT_MODE: FantomTestMode = 'dev'; + +/** + * Extracts the Fantom configuration from the test file, specified as part of + * the docblock comment. E.g.: + * + * ``` + * /** + * * @flow strict-local + * * @fantom mode:opt + * * + * ``` + * + * So far the only supported option is `mode`, which can be 'dev' or 'opt'. + */ +export default function getFantomTestConfig( + testPath: string, +): FantomTestConfig { + const docblock = extract(fs.readFileSync(testPath, 'utf8')); + const pragmas = parse(docblock) as DocblockPragmas; + + const config = { + mode: DEFAULT_MODE, + }; + + const maybeMode = pragmas.fantom_mode; + + if (maybeMode != null) { + if (Array.isArray(maybeMode)) { + throw new Error('Expected a single value for @fantom_mode'); + } + + const mode = maybeMode; + + if (mode === 'dev' || mode === 'opt') { + config.mode = mode; + } else { + throw new Error(`Invalid Fantom mode: ${mode}`); + } + } + + return config; +} diff --git a/jest/integration/runner/runner.js b/jest/integration/runner/runner.js index 2baaaceb849..4247edb5461 100644 --- a/jest/integration/runner/runner.js +++ b/jest/integration/runner/runner.js @@ -12,10 +12,10 @@ import type {TestSuiteResult} from '../runtime/setup'; import entrypointTemplate from './entrypoint-template'; +import getFantomTestConfig from './getFantomTestConfig'; import { getBuckModeForPlatform, getDebugInfoFromCommandResult, - getFantomTestConfig, getShortHash, runBuck2, symbolicateStackTrace, diff --git a/jest/integration/runner/utils.js b/jest/integration/runner/utils.js index 9e43a68f16d..3671f636afb 100644 --- a/jest/integration/runner/utils.js +++ b/jest/integration/runner/utils.js @@ -12,60 +12,10 @@ import {spawnSync} from 'child_process'; import crypto from 'crypto'; import fs from 'fs'; -// $FlowExpectedError[untyped-import] -import {extract, parse} from 'jest-docblock'; import os from 'os'; // $FlowExpectedError[untyped-import] import {SourceMapConsumer} from 'source-map'; -type DocblockPragmas = {[key: string]: string | string[]}; -type FantomTestMode = 'dev' | 'opt'; -type FantomTestConfig = { - mode: FantomTestMode, -}; - -const DEFAULT_MODE: FantomTestMode = 'dev'; - -/** - * Extracts the Fantom configuration from the test file, specified as part of - * the docblock comment. E.g.: - * - * ``` - * /** - * * @flow strict-local - * * @fantom mode:opt - * * - * ``` - * - * So far the only supported option is `mode`, which can be 'dev' or 'opt'. - */ -export function getFantomTestConfig(testPath: string): FantomTestConfig { - const docblock = extract(fs.readFileSync(testPath, 'utf8')); - const pragmas = parse(docblock) as DocblockPragmas; - - const config = { - mode: DEFAULT_MODE, - }; - - const maybeMode = pragmas.fantom_mode; - - if (maybeMode != null) { - if (Array.isArray(maybeMode)) { - throw new Error('Expected a single value for @fantom_mode'); - } - - const mode = maybeMode; - - if (mode === 'dev' || mode === 'opt') { - config.mode = mode; - } else { - throw new Error(`Invalid Fantom mode: ${mode}`); - } - } - - return config; -} - export function getBuckModeForPlatform(enableRelease: boolean = false): string { const mode = enableRelease ? 'opt' : 'dev';