Migrate format test to ES Module (#11902)

Co-authored-by: Sosuke Suzuki <aosukeke@gmail.com>
This commit is contained in:
fisker CheungandSosuke Suzuki authored and GitHub committed 2022-01-04 17:00:25 +08:00
1 parent d9ca78e156
commit 6bd81c23b6
1161 files changed
+1936 -1424

No files matched your search

+1
View File
@@ -2,6 +2,7 @@
/tests/format/**/*.js
/tests/integration/cli/
!/tests/format/**/jsfmt.spec.js
/tests/config/jest-light-runner/**/*
!/**/.eslintrc.js
/test*.*
/scripts/release/node_modules
+2 -12
View File
@@ -151,11 +151,7 @@ module.exports = {
},
},
{
files: [
"**/*.mjs",
"scripts/release/**/*.js",
"tests/integration/**/*.js",
],
files: ["**/*.mjs", "scripts/release/**/*.js", "tests/**/*.js"],
excludedFiles: [
"tests/integration/plugins/automatic/prettier-plugin-bar.js",
],
@@ -167,13 +163,6 @@ module.exports = {
"unicorn/prefer-node-protocol": "error",
},
},
// There is a empty package.json in that directory
{
files: ["tests/integration/**/*.js"],
rules: {
"import/no-extraneous-dependencies": "off",
},
},
{
files: [
"tests/format/**/jsfmt.spec.js",
@@ -205,6 +194,7 @@ module.exports = {
files: ["tests/**/*.js"],
rules: {
strict: "off",
"import/no-extraneous-dependencies": "off",
"unicorn/prefer-array-flat": "off",
"unicorn/prefer-array-flat-map": "off",
},
+4 -1
View File
@@ -47,4 +47,7 @@ jobs:
run: npm install --global pnpm
- name: Run Tests
run: yarn test:dev-package --maxWorkers=2
run: yarn test:dev-package:integration --maxWorkers=2
- name: Run Tests
run: yarn test:dev-package:format --maxWorkers=2
+19 -5
View File
@@ -56,13 +56,27 @@ jobs:
- name: Install Dependencies
run: yarn install --frozen-lockfile
- name: Run Tests (macOS)
- name: Run Integration Tests (macOS)
if: ${{ matrix.os == 'macos-latest' }}
run: yarn test --maxWorkers=4
run: yarn test:integration --maxWorkers=4
- name: Run Tests (Linux and Windows)
- name: Run Integration Tests (Linux and Windows)
if: ${{ matrix.os != 'macos-latest' }}
run: yarn test --maxWorkers=2
run: yarn test:integration --maxWorkers=2
- name: Upload Coverage
uses: codecov/codecov-action@v2.1.0
if: ${{ matrix.ENABLE_CODE_COVERAGE }}
with:
fail_ci_if_error: true
- name: Run Format Tests (macOS)
if: ${{ matrix.os == 'macos-latest' }}
run: yarn test:format --maxWorkers=4
- name: Run Format Tests (Linux and Windows)
if: ${{ matrix.os != 'macos-latest' }}
run: yarn c8 yarn test:format --maxWorkers=2
- name: Upload Coverage
uses: codecov/codecov-action@v2.1.0
@@ -72,7 +86,7 @@ jobs:
# #8073 test
- name: Run Tests (PRETTIER_FALLBACK_RESOLVE)
run: yarn test "tests/integration/__tests__/(config|plugin)"
run: yarn c8 yarn test:integration "tests/integration/__tests__/(config|plugin)"
env:
PRETTIER_FALLBACK_RESOLVE: true
+18 -10
View File
@@ -77,7 +77,7 @@ jobs:
path: dist
- name: Lint Code
run: yarn lint:dist
run: yarn test:dist:lint
test:
timeout-minutes: 90
@@ -125,25 +125,33 @@ jobs:
name: dist
path: dist
- name: Run Tests (macOS)
- name: Run Integration Tests (macOS)
if: ${{ matrix.os == 'macos-latest' }}
run: yarn test:dist --maxWorkers=4
run: yarn test:dist:integration --maxWorkers=4
- name: Run Tests (Linux and Windows)
- name: Run Integration Tests (Linux and Windows)
if: ${{ matrix.os != 'macos-latest' }}
run: yarn test:dist --maxWorkers=2
run: yarn test:dist:integration --maxWorkers=2
- name: Run Tests (standalone) (macOS)
- name: Run Format Tests (macOS)
if: ${{ matrix.os == 'macos-latest' }}
run: yarn test:dist-standalone --maxWorkers=4
run: yarn test:dist:format --maxWorkers=4
- name: Run Tests (standalone) (Linux and Windows)
- name: Run Format Tests (Linux and Windows)
if: ${{ matrix.os != 'macos-latest' }}
run: yarn test:dist-standalone --maxWorkers=2
run: yarn test:dist:format --maxWorkers=2
- name: Run Format Tests (standalone) (macOS)
if: ${{ matrix.os == 'macos-latest' }}
run: yarn test:dist:standalone:format --maxWorkers=4
- name: Run Format Tests (standalone) (Linux and Windows)
if: ${{ matrix.os != 'macos-latest' }}
run: yarn test:dist:standalone:format --maxWorkers=2
# #8073 test
- name: Run Tests (PRETTIER_FALLBACK_RESOLVE)
run: yarn test "tests/integration/__tests__/(config|plugin)"
run: yarn test:dist:integration "tests/integration/__tests__/(config|plugin)"
env:
NODE_ENV: production
PRETTIER_FALLBACK_RESOLVE: true
+1
View File
@@ -6,6 +6,7 @@ coverage/
/tests/integration/cli/
/tests/integration/plugins/
/tests/integration/custom-parsers/
/tests/config/jest-light-runner/**/*
/website/build/
/website/static/lib/
/website/static/playground.js
+5 -5
View File
@@ -14,7 +14,7 @@ The tests use [Jest snapshots](https://facebook.github.io/jest/docs/en/snapshot-
Each test directory in `tests/format` has a `jsfmt.spec.js` file that controls how exactly the rest of the files in the directory are used for tests. This file must contain one or more calls to the `run_spec` global function. For example, in directories with JavaScript formatting tests, `jsfmt.spec.js` generally looks like this:
```js
run_spec(__dirname, ["babel", "flow", "typescript"]);
run_spec(import.meta, ["babel", "flow", "typescript"]);
```
This verifies that for each file in the directory, the output matches the snapshot and is the same for each listed parser.
@@ -22,7 +22,7 @@ This verifies that for each file in the directory, the output matches the snapsh
You can also pass options as the third argument:
```js
run_spec(__dirname, ["babel"], { trailingComma: "es5" });
run_spec(import.meta, ["babel"], { trailingComma: "es5" });
```
Signature:
@@ -30,9 +30,9 @@ Signature:
```ts
function run_spec(
fixtures:
| string
| ImportMeta
| {
dirname: string;
importMeta: ImportMeta;
snippets?: Array<
| string
| { code: string; name?: string; filename?: string; output?: string }
@@ -47,7 +47,7 @@ function run_spec(
Parameters:
- **`fixtures`**: Must be set to `__dirname` or to an object of the shape `{ dirname: __dirname, ... }`. The object may have the `snippets` property to specify an array of extra input entries in addition to the files in the current directory. For each input entry (a file or a snippet), `run_spec` configures and runs a number of tests. The main check is that for a given input the output should match the snapshot (for snippets, the expected output can also be specified directly). [Additional checks](#deeper-testing) are controlled by options and environment variables.
- **`fixtures`**: Must be set to `import.meta` or to an object of the shape `{ importMeta: import.meta, ... }`. The object may have the `snippets` property to specify an array of extra input entries in addition to the files in the current directory. For each input entry (a file or a snippet), `run_spec` configures and runs a number of tests. The main check is that for a given input the output should match the snapshot (for snippets, the expected output can also be specified directly). [Additional checks](#deeper-testing) are controlled by options and environment variables.
- **`parsers`**: A list of parser names. The tests verify that the parsers in this list produce the same output. If the list includes `typescript`, then `babel-ts` is included implicitly. If the list includes `babel`, and the current directory is inside `tests/format/js`, then `espree` and `meriyah` are included implicitly.
- **`options`**: In addition to Prettier's formatting options, can contain the `errors` property to specify that it's expected that the formatting shouldn't be successful and an error should be thrown for all (`errors: true`) or some combinations of input entries and parsers.
+1
View File
@@ -382,6 +382,7 @@
"**/yarn.lock",
"*.{log,svg,snap,png}",
"test*.*",
"tests/config/jest-light-runner/**/*",
"website/data/users.yml",
"website/build/**",
"website/playground/codeSamples.mjs",
+9
View File
@@ -0,0 +1,9 @@
import baseConfig from "./jest.config.mjs";
const config = {
runner: "./tests/config/jest-light-runner",
testRegex: "tests/format/.*/jsfmt\\.spec\\.js$",
...baseConfig,
};
export default config;
+8
View File
@@ -0,0 +1,8 @@
import baseConfig from "./jest.config.mjs";
const config = {
testRegex: "tests/integration/__tests__/.*\\.js$",
...baseConfig,
};
export default config;
+4 -4
View File
@@ -1,7 +1,8 @@
import path from "node:path";
import createEsmUtils from "esm-utils";
import installPrettier from "./tests/config/install-prettier.mjs";
import installPrettier from "./tests/config/install-prettier.js";
// @ts-expect-error
const { dirname: PROJECT_ROOT } = createEsmUtils(import.meta);
const isProduction = process.env.NODE_ENV === "production";
const ENABLE_CODE_COVERAGE = Boolean(process.env.ENABLE_CODE_COVERAGE);
@@ -33,7 +34,6 @@ const config = {
"jest-snapshot-serializer-raw",
"jest-snapshot-serializer-ansi",
],
testRegex: "jsfmt\\.spec\\.js$|__tests__/.*\\.js$",
testPathIgnorePatterns,
collectCoverage: ENABLE_CODE_COVERAGE,
collectCoverageFrom: ["<rootDir>/src/**/*.js", "<rootDir>/bin/**/*.js"],
@@ -43,8 +43,8 @@ const config = {
],
coverageReporters: ["text", "lcov"],
moduleNameMapper: {
"prettier-local": "<rootDir>/tests/config/require-prettier.js",
"prettier-standalone": "<rootDir>/tests/config/require-standalone.js",
"prettier-local": "<rootDir>/tests/config/require-prettier.cjs",
"prettier-standalone": "<rootDir>/tests/config/require-standalone.cjs",
},
modulePathIgnorePatterns: [
"<rootDir>/dist",
+17 -7
View File
@@ -29,6 +29,7 @@
"@typescript-eslint/typescript-estree": "5.8.1",
"angular-estree-parser": "2.5.0",
"angular-html-parser": "1.8.0",
"c8": "7.10.0",
"camelcase": "6.3.0",
"chalk": "4.1.2",
"ci-info": "3.3.0",
@@ -94,6 +95,7 @@
"@babel/types": "7.16.7",
"@glimmer/reference": "0.83.1",
"@jest/globals": "27.4.2",
"@prettier/jest-light-runner": "file:./tests/config/jest-light-runner",
"@rollup/plugin-alias": "3.1.9",
"@rollup/plugin-babel": "5.3.0",
"@rollup/plugin-commonjs": "21.0.1",
@@ -120,8 +122,8 @@
"eslint-plugin-react": "7.28.0",
"eslint-plugin-regexp": "1.5.1",
"eslint-plugin-unicorn": "40.0.0",
"execa": "6.0.0",
"esm-utils": "2.0.1",
"execa": "6.0.0",
"jest": "27.4.5",
"jest-snapshot-serializer-ansi": "1.0.0",
"jest-snapshot-serializer-raw": "1.2.0",
@@ -142,11 +144,14 @@
},
"scripts": {
"prepublishOnly": "echo \"Error: must publish from dist/\" && exit 1",
"test": "cross-env NODE_OPTIONS=--experimental-vm-modules jest",
"test:dev-package": "cross-env INSTALL_PACKAGE=1 NODE_OPTIONS=--experimental-vm-modules jest",
"test:dist": "cross-env NODE_ENV=production NODE_OPTIONS=--experimental-vm-modules jest",
"test:dist-standalone": "cross-env NODE_ENV=production TEST_STANDALONE=1 NODE_OPTIONS=--experimental-vm-modules jest",
"test:integration": "cross-env NODE_OPTIONS=--experimental-vm-modules jest tests/integration",
"test:integration": "cross-env NODE_OPTIONS=--experimental-vm-modules jest --config=jest-integration-test.config.mjs",
"test:format": "jest --config=jest-format-test.config.mjs",
"test:dev-package:integration": "cross-env INSTALL_PACKAGE=1 yarn test:integration",
"test:dev-package:format": "cross-env INSTALL_PACKAGE=1 yarn test:format",
"test:dist:lint": "eslint --no-eslintrc --no-ignore --no-inline-config --config=./scripts/bundle-eslint-config.js \"dist/!(bin-prettier|index|third-party).js\"",
"test:dist:integration": "cross-env NODE_ENV=production yarn test:integration",
"test:dist:format": "cross-env NODE_ENV=production yarn test:format",
"test:dist:standalone:format": "cross-env TEST_STANDALONE=1 yarn test:dist:format",
"perf:repeat": "yarn && yarn build && cross-env NODE_ENV=production node ./dist/bin-prettier.js --debug-repeat ${PERF_REPEAT:-1000} --loglevel debug ${PERF_FILE:-./index.js} > /dev/null",
"perf:repeat-inspect": "yarn && yarn build && cross-env NODE_ENV=production node --inspect-brk ./dist/bin-prettier.js --debug-repeat ${PERF_REPEAT:-1000} --loglevel debug ${PERF_FILE:-./index.js} > /dev/null",
"perf:benchmark": "yarn && yarn build && cross-env NODE_ENV=production node ./dist/bin-prettier.js --debug-benchmark --loglevel debug ${PERF_FILE:-./index.js} > /dev/null",
@@ -155,7 +160,6 @@
"lint:eslint": "cross-env EFF_NO_LINK_RULES=true eslint . --format friendly",
"lint:changelog": "node ./scripts/lint-changelog.mjs",
"lint:prettier": "prettier . \"!test*\" --check",
"lint:dist": "eslint --no-eslintrc --no-ignore --no-inline-config --config=./scripts/bundle-eslint-config.js \"dist/!(bin-prettier|index|third-party).js\"",
"lint:spellcheck": "cspell --no-progress --relative",
"lint:deps": "node ./scripts/check-deps.mjs",
"lint:actionlint": "node-actionlint",
@@ -165,6 +169,12 @@
"build": "node --max-old-space-size=4096 ./scripts/build/build.mjs",
"build:website": "node ./scripts/build-website.mjs"
},
"c8": {
"reporter": [
"lcov",
"text"
]
},
"browserslist": [
">0.5%",
"not ie 11",
+18 -14
View File
@@ -1,17 +1,19 @@
"use strict";
import fs from "node:fs";
import path from "node:path";
import url from "node:url";
import createEsmUtils from "esm-utils";
import checkParsers from "./utils/check-parsers.js";
import createSnapshot from "./utils/create-snapshot.js";
import visualizeEndOfLine from "./utils/visualize-end-of-line.js";
import consistentEndOfLine from "./utils/consistent-end-of-line.js";
import stringifyOptionsForTitle from "./utils/stringify-options-for-title.js";
const { require, __dirname } = createEsmUtils(import.meta);
const { TEST_STANDALONE } = process.env;
const fs = require("fs");
const path = require("path");
const prettier = !TEST_STANDALONE
? require("prettier-local")
: require("prettier-standalone");
const checkParsers = require("./utils/check-parsers.js");
const createSnapshot = require("./utils/create-snapshot.js");
const visualizeEndOfLine = require("./utils/visualize-end-of-line.js");
const consistentEndOfLine = require("./utils/consistent-end-of-line.js");
const stringifyOptionsForTitle = require("./utils/stringify-options-for-title.js");
? require("./require-prettier.cjs")
: require("./require-standalone.cjs");
const { FULL_TEST } = process.env;
const BOM = "\uFEFF";
@@ -98,8 +100,10 @@ const isTestDirectory = (dirname, name) =>
);
function runSpec(fixtures, parsers, options) {
let { dirname, snippets = [] } =
typeof fixtures === "string" ? { dirname: fixtures } : fixtures;
let { importMeta, snippets = [] } = fixtures.importMeta
? fixtures
: { importMeta: fixtures };
const dirname = path.dirname(url.fileURLToPath(importMeta.url));
// `IS_PARSER_INFERENCE_TESTS` mean to test `inferParser` on `standalone`
const IS_PARSER_INFERENCE_TESTS = isTestDirectory(
@@ -445,4 +449,4 @@ function format(originalText, originalOptions) {
};
}
module.exports = runSpec;
export default runSpec;
File renamed without changes.
@@ -0,0 +1,19 @@
{
"name": "@prettier/jest-light-runner",
"version": "0.0.1",
"private": true,
"type": "module",
"main": "./src/index.js",
"exports": {
".": "./src/index.js"
},
"dependencies": {
"expect": "^27.4.0",
"jest-circus": "^27.4.0",
"jest-each": "^27.4.0",
"jest-mock": "^27.4.0",
"jest-snapshot": "^27.4.0",
"piscina": "^3.1.0",
"supports-color": "^9.0.2"
}
}
+6
View File
@@ -0,0 +1,6 @@
> This package is copied from https://github.com/babel/babel/tree/main/test/jest-light-runner
Modifications:
- Added `setupFiles` support
- Added `snapshotSerializers` support
@@ -0,0 +1,27 @@
/* eslint-disable import/extensions */
import mock from "jest-mock";
import expect from "expect";
import snapshot from "jest-snapshot";
import * as circus from "jest-circus";
expect.extend({
toMatchInlineSnapshot: snapshot.toMatchInlineSnapshot,
toMatchSnapshot: snapshot.toMatchSnapshot,
toThrowErrorMatchingInlineSnapshot:
snapshot.toThrowErrorMatchingInlineSnapshot,
toThrowErrorMatchingSnapshot: snapshot.toThrowErrorMatchingSnapshot,
});
globalThis.expect = expect;
globalThis.test = circus.test;
globalThis.it = circus.it;
globalThis.describe = circus.describe;
globalThis.beforeAll = circus.beforeAll;
globalThis.afterAll = circus.afterAll;
globalThis.beforeEach = circus.beforeEach;
globalThis.afterEach = circus.afterEach;
globalThis.jest = {
fn: mock.fn,
spyOn: mock.spyOn,
};
@@ -0,0 +1,54 @@
import { Piscina } from "piscina";
import supportsColor from "supports-color";
import { MessageChannel } from "worker_threads";
import os from "os";
/** @typedef {import("@jest/test-result").Test} Test */
const piscina = new Piscina({
filename: new URL("./worker-runner.js", import.meta.url).href,
maxThreads: os.cpus().length / 2,
env: {
// Workers don't have a tty; we whant them to inherit
// the color support level from the main thread.
FORCE_COLOR: supportsColor.stdout.level,
...process.env,
},
});
export default class LightRunner {
#config;
constructor(config) {
this.#config = config;
}
/**
* @param {Array<Test>} tests
* @param {*} watcher
* @param {*} onStart
* @param {*} onResult
* @param {*} onFailure
*/
runTests(tests, watcher, onStart, onResult, onFailure) {
const { updateSnapshot } = this.#config;
return Promise.all(
tests.map((test) => {
const mc = new MessageChannel();
mc.port2.onmessage = () => onStart(test);
mc.port2.unref();
return piscina
.run(
{ test, updateSnapshot, port: mc.port1 },
{ transferList: [mc.port1] }
)
.then(
(result) => void onResult(test, result),
(error) => void onFailure(test, error)
);
})
);
}
}
@@ -0,0 +1,235 @@
import path from "path";
import { fileURLToPath, pathToFileURL } from "url";
import { performance } from "perf_hooks";
import snapshot from "jest-snapshot";
import expect from "expect";
import * as circus from "jest-circus";
import "./global-setup.js";
/** @typedef {{ failures: number, passses: number, pending: number, start: number, end: number }} Stats */
/** @typedef {{ ancestors: string[], title: string, errors: Error[], skipped: boolean }} InternalTestResult */
// Node.js workers (worker_therads) don't support
// process.chdir, that we use multiple times in our tests.
// We can "polyfill" it for process.cwd() usage, but it
// won't affect path.* and fs.* functions.
{
const startCwd = process.cwd();
let cwd = startCwd;
process.cwd = () => cwd;
process.chdir = dir => {
cwd = path.resolve(cwd, dir);
};
}
export default async function ({ test, updateSnapshot, port }) {
port.postMessage("start");
const {setupFiles, snapshotSerializers} = test.context.config;
for (const path of setupFiles) {
await import(pathToFileURL(path));
}
for (const path of snapshotSerializers) {
const {default: serializer} = await import(pathToFileURL(path));
snapshot.addSerializer(serializer);
}
/** @type {Stats} */
const stats = { passes: 0, failures: 0, pending: 0, start: 0, end: 0 };
/** @type {Array<InternalTestResult>} */
const results = [];
const { tests, hasFocusedTests } = await loadTests(test.path);
const snapshotState = new snapshot.SnapshotState(
`${path.dirname(test.path)}/__snapshots__/${path.basename(test.path)}.snap`,
{ prettierPath: "prettier", updateSnapshot }
);
expect.setState({ snapshotState });
stats.start = performance.now();
await runTestBlock(tests, hasFocusedTests, results, stats);
stats.end = performance.now();
snapshotState._inlineSnapshots.forEach(({ frame }) => {
// When using native ESM, errors have an URL location.
// Jest expects paths.
frame.file = fileURLToPath(frame.file);
});
snapshotState.save();
return toTestResult(stats, results, test);
}
async function loadTests(testFile) {
circus.resetState();
await import(pathToFileURL(testFile));
const { rootDescribeBlock, hasFocusedTests } = circus.getState();
return { tests: rootDescribeBlock, hasFocusedTests };
}
async function runTestBlock(
block,
hasFocusedTests,
results,
stats,
ancestors = []
) {
await runHooks("beforeAll", block, results, stats, ancestors);
for (const child of block.children) {
const { type, mode, fn, name } = child;
const nextAncestors = ancestors.concat(name);
if (
mode === "skip" ||
(hasFocusedTests && type === "test" && mode !== "only")
) {
stats.pending++;
results.push({ ancestors, title: name, errors: [], skipped: true });
} else if (type === "describeBlock") {
await runTestBlock(child, hasFocusedTests, results, stats, nextAncestors);
} else if (type === "test") {
await runHooks("beforeEach", block, results, stats, nextAncestors, true);
await runTest(fn, stats, results, ancestors, name);
await runHooks("afterEach", block, results, stats, nextAncestors, true);
}
}
await runHooks("afterAll", block, results, stats, ancestors);
return results;
}
/**
* @param {Function} fn
* @param {Stats} stats
* @param {Array<InternalTestResult>} results
* @param {string[]} ancestors
* @param {string} name
*/
async function runTest(fn, stats, results, ancestors, name) {
expect.setState({
suppressedErrors: [],
currentTestName: ancestors.concat(name).join(" "),
});
const errors = [];
await callAsync(fn).catch(error => {
errors.push(error);
});
// 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 { suppressedErrors } = expect.getState();
expect.setState({ suppressedErrors: [] });
if (suppressedErrors.length > 0) {
errors.unshift(...suppressedErrors);
}
if (errors.length > 0) {
stats.failures++;
} else {
stats.passes++;
}
results.push({ ancestors, title: name, errors, skipped: false });
}
async function runHooks(hook, block, results, stats, ancestors, runInParents) {
for (const { type, fn } of block.hooks) {
if (type === hook) {
await callAsync(fn).catch(error => {
stats.failures++;
results.push({ ancestors, title: `(${hook})`, error, skipped: false });
});
}
}
if (block.parent && runInParents) {
await runHooks(hook, block.parent, results, stats, ancestors, true);
}
}
function callAsync(fn) {
if (fn.length >= 1) {
return new Promise((resolve, reject) => {
fn((err, result) => {
if (err) {
reject(err);
} else {
resolve(result);
}
});
});
} else {
return Promise.resolve().then(fn);
}
}
/**
*
* @param {Stats} stats
* @param {Array<InternalTestResult>} tests
* @param {import("@jest/test-result").Test} testInput
* @returns {import("@jest/test-result").TestResult}
*/
function toTestResult(stats, tests, { path, context }) {
const { start, end } = stats;
const runtime = end - start;
return {
coverage: globalThis.__coverage__,
console: null,
failureMessage: tests
.filter(t => t.errors.length > 0)
.map(failureToString)
.join("\n"),
numFailingTests: stats.failures,
numPassingTests: stats.passes,
numPendingTests: stats.pending,
perfStats: {
start,
end,
runtime: Math.round(runtime), // ms precision
slow: runtime / 1000 > context.config.slowTestThreshold,
},
skipped: false,
snapshot: {
added: 0,
fileDeleted: false,
matched: 0,
unchecked: 0,
unmatched: 0,
updated: 0,
},
sourceMaps: {},
testExecError: null,
testFilePath: path,
testResults: tests.map(test => {
return {
ancestorTitles: test.ancestors,
duration: test.duration / 1000,
failureMessages: test.errors.length ? [failureToString(test)] : [],
fullName: test.title,
numPassingAsserts: test.errors.length > 0 ? 1 : 0,
status: test.skipped
? "pending"
: test.errors.length > 0
? "failed"
: "passed",
title: test.title,
};
}),
};
}
function failureToString(test) {
return (
test.ancestors.concat(test.title).join(" > ") +
"\n" +
test.errors.map(e => e.toString().replace(/^/gm, "\t")).join("\n") +
"\n"
);
}
@@ -1,3 +1,3 @@
{
"main": "./index.js"
"main": "./index.cjs"
}
@@ -1,6 +1,6 @@
"use strict";
const createPlugin = require("../../utils/create-plugin.js");
const createPlugin = require("../../utils/create-plugin.cjs");
module.exports = createPlugin({
name: "uppercase-rocks",
@@ -2,5 +2,5 @@
"private": true,
"name": "prettier-plugin-uppercase-rocks",
"version": "1.0.0",
"main": "./index.js"
"main": "./index.cjs"
}
File renamed without changes.
File renamed without changes.
+2 -6
View File
@@ -1,7 +1,3 @@
"use strict";
import run_spec from "./format-test.js";
Object.defineProperty(global, "run_spec", {
get() {
return require("./format-test.js");
},
});
globalThis.run_spec = run_spec;
+5 -4
View File
@@ -1,7 +1,8 @@
"use strict";
import path from "node:path";
import { outdent } from "outdent";
import createEsmUtils from "esm-utils";
const path = require("path");
const { outdent } = require("outdent");
const { __dirname, __filename } = createEsmUtils(import.meta);
const TESTS_ROOT = path.join(__dirname, "../../format");
@@ -204,4 +205,4 @@ const checkParser = ({ dirname, files }, parsers = []) => {
}
};
module.exports = checkParser;
export default checkParser;
+1 -3
View File
@@ -1,5 +1,3 @@
"use strict";
function consistentEndOfLine(text) {
let firstEndOfLine;
return text.replace(/\r\n?|\n/g, (endOfLine) => {
@@ -10,4 +8,4 @@ function consistentEndOfLine(text) {
});
}
module.exports = consistentEndOfLine;
export default consistentEndOfLine;
File renamed without changes.
+4 -6
View File
@@ -1,8 +1,6 @@
"use strict";
const raw = require("jest-snapshot-serializer-raw").wrap;
const visualizeRange = require("./visualize-range.js");
const visualizeEndOfLine = require("./visualize-end-of-line.js");
import { wrap as raw } from "jest-snapshot-serializer-raw";
import visualizeRange from "./visualize-range.js";
import visualizeEndOfLine from "./visualize-end-of-line.js";
const SEPARATOR_WIDTH = 80;
function printSeparator(description = "") {
@@ -95,4 +93,4 @@ function createSnapshot(
);
}
module.exports = createSnapshot;
export default createSnapshot;
@@ -1,5 +1,3 @@
"use strict";
function stringifyOptions(options) {
const string = JSON.stringify(options || {}, (key, value) =>
key === "plugins" || key === "errors"
@@ -12,4 +10,4 @@ function stringifyOptions(options) {
return string === "{}" ? "" : string;
}
module.exports = stringifyOptions;
export default stringifyOptions;
+1 -3
View File
@@ -1,5 +1,3 @@
"use strict";
function visualizeEndOfLine(text) {
return text.replace(/\r\n?|\n/g, (endOfLine) => {
switch (endOfLine) {
@@ -15,4 +13,4 @@ function visualizeEndOfLine(text) {
});
}
module.exports = visualizeEndOfLine;
export default visualizeEndOfLine;
+3 -5
View File
@@ -1,7 +1,5 @@
"use strict";
const { LinesAndColumns } = require("lines-and-columns");
const { codeFrameColumns } = require("@babel/code-frame");
import { LinesAndColumns } from "lines-and-columns";
import { codeFrameColumns } from "@babel/code-frame";
const codeFrameColumnsOptions = {
linesAbove: Number.POSITIVE_INFINITY,
linesBelow: Number.POSITIVE_INFINITY,
@@ -37,4 +35,4 @@ const visualizeRange = (text, { rangeStart = 0, rangeEnd = text.length }) =>
: codeFrameColumnsOptions
);
module.exports = visualizeRange;
export default visualizeRange;
+5 -5
View File
@@ -1,5 +1,5 @@
run_spec(__dirname, ["angular"], { trailingComma: "none" });
run_spec(__dirname, ["angular"]);
run_spec(__dirname, ["angular"], { printWidth: 1 });
run_spec(__dirname, ["angular"], { htmlWhitespaceSensitivity: "ignore" });
run_spec(__dirname, ["angular"], { bracketSpacing: false });
run_spec(import.meta, ["angular"], { trailingComma: "none" });
run_spec(import.meta, ["angular"]);
run_spec(import.meta, ["angular"], { printWidth: 1 });
run_spec(import.meta, ["angular"], { htmlWhitespaceSensitivity: "ignore" });
run_spec(import.meta, ["angular"], { bracketSpacing: false });
@@ -1,2 +1,2 @@
run_spec(__dirname, ["angular"], { bracketSameLine: true });
run_spec(__dirname, ["angular"], { bracketSameLine: false });
run_spec(import.meta, ["angular"], { bracketSameLine: true });
run_spec(import.meta, ["angular"], { bracketSameLine: false });
@@ -1,2 +1,2 @@
// We always pass {trailingComma: "none"} when printing
run_spec(__dirname, ["__ng_interpolation"], { trailingComma: "none" });
run_spec(import.meta, ["__ng_interpolation"], { trailingComma: "none" });
@@ -1 +1 @@
run_spec(__dirname, ["angular"]);
run_spec(import.meta, ["angular"]);
+1 -1
View File
@@ -1 +1 @@
run_spec(__dirname, ["css"]);
run_spec(import.meta, ["css"]);
+2 -2
View File
@@ -1,2 +1,2 @@
run_spec(__dirname, ["css"]);
run_spec(__dirname, ["css"], { singleQuote: true });
run_spec(import.meta, ["css"]);
run_spec(import.meta, ["css"], { singleQuote: true });
+1 -1
View File
@@ -1 +1 @@
run_spec(__dirname, ["css"]);
run_spec(import.meta, ["css"]);
+1 -1
View File
@@ -1 +1 @@
run_spec(__dirname, ["css"]);
run_spec(import.meta, ["css"]);
+1 -1
View File
@@ -1 +1 @@
run_spec(__dirname, ["css"]);
run_spec(import.meta, ["css"]);
@@ -1 +1 @@
run_spec(__dirname, ["css"]);
run_spec(import.meta, ["css"]);
+1 -1
View File
@@ -1 +1 @@
run_spec(__dirname, ["css"]);
run_spec(import.meta, ["css"]);
+1 -1
View File
@@ -1 +1 @@
run_spec(__dirname, ["css"]);
run_spec(import.meta, ["css"]);
+1 -1
View File
@@ -1 +1 @@
run_spec(__dirname, ["css"]);
run_spec(import.meta, ["css"]);
+1 -1
View File
@@ -1 +1 @@
run_spec(__dirname, ["css"]);
run_spec(import.meta, ["css"]);
+1 -1
View File
@@ -1 +1 @@
run_spec(__dirname, ["css"]);
run_spec(import.meta, ["css"]);
+1 -1
View File
@@ -1 +1 @@
run_spec(__dirname, ["css"]);
run_spec(import.meta, ["css"]);
+1 -1
View File
@@ -1 +1 @@
run_spec(__dirname, ["css"]);
run_spec(import.meta, ["css"]);
+1 -1
View File
@@ -1 +1 @@
run_spec(__dirname, ["css"]);
run_spec(import.meta, ["css"]);
+1 -1
View File
@@ -1 +1 @@
run_spec(__dirname, ["css", "scss", "less"]);
run_spec(import.meta, ["css", "scss", "less"]);
+1 -1
View File
@@ -1 +1 @@
run_spec(__dirname, ["css"]);
run_spec(import.meta, ["css"]);
+1 -1
View File
@@ -1 +1 @@
run_spec(__dirname, ["css"]);
run_spec(import.meta, ["css"]);
+1 -1
View File
@@ -1 +1 @@
run_spec(__dirname, ["css"]);
run_spec(import.meta, ["css"]);
+1 -1
View File
@@ -1 +1 @@
run_spec(__dirname, ["css"]);
run_spec(import.meta, ["css"]);
+1 -1
View File
@@ -1 +1 @@
run_spec(__dirname, ["css"]);
run_spec(import.meta, ["css"]);
+1 -1
View File
@@ -1 +1 @@
run_spec(__dirname, ["css"]);
run_spec(import.meta, ["css"]);
+1 -1
View File
@@ -1 +1 @@
run_spec(__dirname, ["css"]);
run_spec(import.meta, ["css"]);
+1 -1
View File
@@ -1 +1 @@
run_spec(__dirname, ["css"]);
run_spec(import.meta, ["css"]);
+1 -1
View File
@@ -1 +1 @@
run_spec(__dirname, ["css"]);
run_spec(import.meta, ["css"]);
+1 -1
View File
@@ -1 +1 @@
run_spec(__dirname, ["css"]);
run_spec(import.meta, ["css"]);
+1 -1
View File
@@ -1 +1 @@
run_spec(__dirname, ["css"]);
run_spec(import.meta, ["css"]);
@@ -1 +1 @@
run_spec(__dirname, ["css"]);
run_spec(import.meta, ["css"]);
@@ -1 +1 @@
run_spec(__dirname, ["css"]);
run_spec(import.meta, ["css"]);
+1 -1
View File
@@ -1 +1 @@
run_spec(__dirname, ["css"]);
run_spec(import.meta, ["css"]);
+1 -1
View File
@@ -1 +1 @@
run_spec(__dirname, ["css"]);
run_spec(import.meta, ["css"]);
+2 -2
View File
@@ -1,2 +1,2 @@
run_spec(__dirname, ["css"]);
run_spec(__dirname, ["css"], { singleQuote: true });
run_spec(import.meta, ["css"]);
run_spec(import.meta, ["css"], { singleQuote: true });
+1 -1
View File
@@ -1 +1 @@
run_spec(__dirname, ["css"]);
run_spec(import.meta, ["css"]);
+1 -1
View File
@@ -1 +1 @@
run_spec(__dirname, ["css"]);
run_spec(import.meta, ["css"]);
+1 -1
View File
@@ -1 +1 @@
run_spec(__dirname, ["css"]);
run_spec(import.meta, ["css"]);
@@ -1 +1 @@
run_spec(__dirname, ["css"]);
run_spec(import.meta, ["css"]);
+1 -1
View File
@@ -1 +1 @@
run_spec(__dirname, ["css"]);
run_spec(import.meta, ["css"]);
+1 -1
View File
@@ -1 +1 @@
run_spec(__dirname, ["css"]);
run_spec(import.meta, ["css"]);
+1 -1
View File
@@ -1 +1 @@
run_spec(__dirname, ["css"]);
run_spec(import.meta, ["css"]);
@@ -1 +1 @@
run_spec(__dirname, ["flow"]);
run_spec(import.meta, ["flow"]);
@@ -1 +1 @@
run_spec(__dirname, ["flow"]);
run_spec(import.meta, ["flow"]);
+1 -1
View File
@@ -1 +1 @@
run_spec(__dirname, ["flow"]);
run_spec(import.meta, ["flow"]);
+1 -1
View File
@@ -1 +1 @@
run_spec(__dirname, ["flow"]);
run_spec(import.meta, ["flow"]);
+1 -1
View File
@@ -1 +1 @@
run_spec(__dirname, ["flow"]);
run_spec(import.meta, ["flow"]);
+1 -1
View File
@@ -1 +1 @@
run_spec(__dirname, ["flow"]);
run_spec(import.meta, ["flow"]);
@@ -1 +1 @@
run_spec(__dirname, ["flow"]);
run_spec(import.meta, ["flow"]);
@@ -1 +1 @@
run_spec(__dirname, ["flow"]);
run_spec(import.meta, ["flow"]);
@@ -1 +1 @@
run_spec(__dirname, ["flow"]);
run_spec(import.meta, ["flow"]);
+1 -1
View File
@@ -1 +1 @@
run_spec(__dirname, ["flow"]);
run_spec(import.meta, ["flow"]);
+1 -1
View File
@@ -1 +1 @@
run_spec(__dirname, ["flow"]);
run_spec(import.meta, ["flow"]);
+1 -1
View File
@@ -1 +1 @@
run_spec(__dirname, ["flow"]);
run_spec(import.meta, ["flow"]);
@@ -1 +1 @@
run_spec(__dirname, ["flow"]);
run_spec(import.meta, ["flow"]);
@@ -1 +1 @@
run_spec(__dirname, ["flow"]);
run_spec(import.meta, ["flow"]);
@@ -1 +1 @@
run_spec(__dirname, ["flow"]);
run_spec(import.meta, ["flow"]);
@@ -1 +1 @@
run_spec(__dirname, ["flow"]);
run_spec(import.meta, ["flow"]);
+1 -1
View File
@@ -1 +1 @@
run_spec(__dirname, ["flow"]);
run_spec(import.meta, ["flow"]);
+1 -1
View File
@@ -1 +1 @@
run_spec(__dirname, ["flow"]);
run_spec(import.meta, ["flow"]);
+1 -1
View File
@@ -1 +1 @@
run_spec(__dirname, ["flow"]);
run_spec(import.meta, ["flow"]);
@@ -1 +1 @@
run_spec(__dirname, ["flow"]);
run_spec(import.meta, ["flow"]);
+1 -1
View File
@@ -1 +1 @@
run_spec(__dirname, ["flow"]);
run_spec(import.meta, ["flow"]);
@@ -1 +1 @@
run_spec(__dirname, ["flow"]);
run_spec(import.meta, ["flow"]);
@@ -1 +1 @@
run_spec(__dirname, ["flow"]);
run_spec(import.meta, ["flow"]);
@@ -1 +1 @@
run_spec(__dirname, ["flow"]);
run_spec(import.meta, ["flow"]);
@@ -1 +1 @@
run_spec(__dirname, ["flow"]);
run_spec(import.meta, ["flow"]);
Loaded 100 of 1161 files, more files were not shown because too many files have changed in this diff. Show more