From b459f6a0a4fa5d45814158eb271e5aed66c001d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Ribaudo?= Date: Thu, 26 Sep 2019 20:57:58 +0200 Subject: [PATCH] Add windows to travis (#10249) * Add windows to travis * Update * Do not use sh file on windows * Fix whitespace * Unify command * ./ doesn't work on windows * Remove all ./ usages * Run windows test before others * fix: normalize filename when generating sources sources should be URL. * fix: replace normalized path to cwd * chore: add nodePlatform task options * fix: normalize preset-env filename output * chore: replace normalized path to CWD on win32 platform * limit transform-react-source to run on linux and darwin * test: escapeRegExp on testcases * test: add test for babel --filename on windows * test: double babel-node/cli test timeout * chore: workaround windows build does not stop * chore: remove redundant condition * refactor: rename `nodePlatform` to `os` --- .travis.yml | 18 +++-- Makefile | 67 ++++++++++--------- .../stdin --filename windows/options.json | 5 ++ .../babel/stdin --filename windows/stderr.txt | 1 + .../babel/stdin --filename windows/stdin.txt | 3 + .../babel/stdin --filename/options.json | 3 +- packages/babel-cli/test/index.js | 26 ++++++- packages/babel-core/test/config-chain.js | 25 +++---- packages/babel-generator/src/source-map.js | 17 +++-- packages/babel-helper-fixtures/src/index.js | 20 ++++++ .../src/index.js | 12 +++- packages/babel-node/test/index.js | 2 +- .../react-source/basic-sample/options.json | 3 + .../react-source/with-source/options.json | 3 + .../fixtures/absoluteRuntime/options.json | 3 + packages/babel-preset-env/src/debug.js | 8 +++ .../src/polyfills/regenerator/entry-plugin.js | 7 +- .../src/polyfills/regenerator/usage-plugin.js | 7 +- .../development-windows/exec.js | 19 ++++++ .../development-windows/options.json | 4 ++ .../preset-options/development/options.json | 3 +- 21 files changed, 197 insertions(+), 59 deletions(-) create mode 100644 packages/babel-cli/test/fixtures/babel/stdin --filename windows/options.json create mode 100644 packages/babel-cli/test/fixtures/babel/stdin --filename windows/stderr.txt create mode 100644 packages/babel-cli/test/fixtures/babel/stdin --filename windows/stdin.txt create mode 100644 packages/babel-plugin-transform-react-jsx-source/test/fixtures/react-source/basic-sample/options.json create mode 100644 packages/babel-plugin-transform-react-jsx-source/test/fixtures/react-source/with-source/options.json create mode 100644 packages/babel-plugin-transform-runtime/test/fixtures/absoluteRuntime/options.json create mode 100644 packages/babel-preset-react/test/fixtures/preset-options/development-windows/exec.js create mode 100644 packages/babel-preset-react/test/fixtures/preset-options/development-windows/options.json diff --git a/.travis.yml b/.travis.yml index 3957c277c102..1ae4cb229356 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,12 +3,15 @@ git: language: node_js cache: yarn: true + +os: linux + node_js: # We test the latest version on circleci - - '11' - - '10' - - '8' - - '6' + - "11" + - "10" + - "8" + - "6" env: global: @@ -24,6 +27,7 @@ install: - if [ "$JOB" = "lint" ]; then make bootstrap; fi before_script: + - if [ "$TRAVIS_OS_NAME" = "windows" ]; then choco install make; fi - if [ "$JOB" = "babel-parser-flow-tests" ]; then make bootstrap-flow; fi - if [ "$JOB" = "babel-parser-test262-tests" ]; then make bootstrap-test262; fi @@ -36,6 +40,12 @@ script: matrix: fast_finish: true include: + - os: windows + node_js: "node" + env: + - JOB=test + # https://travis-ci.community/t/build-doesnt-finish-after-completing-tests/288/9 + - YARN_GPG=no - node_js: "node" env: JOB=lint - node_js: "node" diff --git a/Makefile b/Makefile index fc54314de178..1e88895bdd81 100644 --- a/Makefile +++ b/Makefile @@ -10,30 +10,30 @@ SOURCES = packages codemods .PHONY: build build-dist watch lint fix clean test-clean test-only test test-ci publish bootstrap build: clean clean-lib - ./node_modules/.bin/gulp build - node ./packages/babel-standalone/scripts/generate.js - node ./packages/babel-types/scripts/generateTypeHelpers.js + yarn gulp build + node packages/babel-standalone/scripts/generate.js + node packages/babel-types/scripts/generateTypeHelpers.js # call build again as the generated files might need to be compiled again. - ./node_modules/.bin/gulp build + yarn gulp build # generate flow and typescript typings - node packages/babel-types/scripts/generators/flow.js > ./packages/babel-types/lib/index.js.flow - node packages/babel-types/scripts/generators/typescript.js > ./packages/babel-types/lib/index.d.ts + node packages/babel-types/scripts/generators/flow.js > packages/babel-types/lib/index.js.flow + node packages/babel-types/scripts/generators/typescript.js > packages/babel-types/lib/index.d.ts ifneq ("$(BABEL_COVERAGE)", "true") make build-standalone make build-preset-env-standalone endif build-standalone: - ./node_modules/.bin/gulp build-babel-standalone + yarn gulp build-babel-standalone build-preset-env-standalone: - ./node_modules/.bin/gulp build-babel-preset-env-standalone + yarn gulp build-babel-preset-env-standalone prepublish-build-standalone: - BABEL_ENV=production IS_PUBLISH=true ./node_modules/.bin/gulp build-babel-standalone + BABEL_ENV=production IS_PUBLISH=true yarn gulp build-babel-standalone prepublish-build-preset-env-standalone: - BABEL_ENV=production IS_PUBLISH=true ./node_modules/.bin/gulp build-babel-preset-env-standalone + BABEL_ENV=production IS_PUBLISH=true yarn gulp build-babel-preset-env-standalone build-dist: build cd packages/babel-polyfill; \ @@ -45,28 +45,28 @@ watch: clean clean-lib # Ensure that build artifacts for types are created during local # development too. - BABEL_ENV=development ./node_modules/.bin/gulp build-no-bundle - node ./packages/babel-types/scripts/generateTypeHelpers.js - node packages/babel-types/scripts/generators/flow.js > ./packages/babel-types/lib/index.js.flow - node packages/babel-types/scripts/generators/typescript.js > ./packages/babel-types/lib/index.d.ts - BABEL_ENV=development ./node_modules/.bin/gulp watch + BABEL_ENV=development yarn gulp build-no-bundle + node packages/babel-types/scripts/generateTypeHelpers.js + node packages/babel-types/scripts/generators/flow.js > packages/babel-types/lib/index.js.flow + node packages/babel-types/scripts/generators/typescript.js > packages/babel-types/lib/index.d.ts + BABEL_ENV=development yarn gulp watch flow: - ./node_modules/.bin/flow check --strip-root + yarn flow check --strip-root lint: lint-js lint-ts lint-js: - ./node_modules/.bin/eslint scripts $(SOURCES) '*.js' --format=codeframe + yarn eslint scripts $(SOURCES) '*.js' --format=codeframe lint-ts: - ./scripts/tests/typescript/lint.sh + scripts/tests/typescript/lint.sh fix: fix-json - ./node_modules/.bin/eslint scripts $(SOURCES) '*.js' --format=codeframe --fix + yarn eslint scripts $(SOURCES) '*.js' --format=codeframe --fix fix-json: - ./node_modules/.bin/prettier "{packages,codemod}/*/test/fixtures/**/options.json" --write --loglevel warn + yarn prettier "{packages,codemod}/*/test/fixtures/**/options.json" --write --loglevel warn clean: test-clean rm -f .npmrc @@ -79,14 +79,18 @@ test-clean: $(foreach source, $(SOURCES), \ $(call clean-source-test, $(source))) +# Does not work on Windows; use "yarn jest" instead test-only: BABEL_ENV=test ./scripts/test.sh make test-clean test: lint test-only -test-ci: bootstrap test-only +test-ci: bootstrap + BABEL_ENV=test yarn jest --maxWorkers=4 --ci + make test-clean +# Does not work on Windows test-ci-coverage: SHELL:=/bin/bash test-ci-coverage: BABEL_COVERAGE=true BABEL_ENV=test make bootstrap @@ -94,9 +98,9 @@ test-ci-coverage: bash <(curl -s https://codecov.io/bash) -f coverage/coverage-final.json bootstrap-flow: - rm -rf ./build/flow - mkdir -p ./build - git clone --branch=master --single-branch --shallow-since=2018-11-01 https://github.com/facebook/flow.git ./build/flow + rm -rf build/flow + mkdir -p build + git clone --branch=master --single-branch --shallow-since=2018-11-01 https://github.com/facebook/flow.git build/flow cd build/flow && git checkout $(FLOW_COMMIT) test-flow: @@ -108,9 +112,9 @@ test-flow-update-whitelist: node scripts/tests/flow/run_babel_parser_flow_tests.js --update-whitelist bootstrap-test262: - rm -rf ./build/test262 - mkdir -p ./build - git clone --branch=master --single-branch --shallow-since=2019-01-01 https://github.com/tc39/test262.git ./build/test262 + rm -rf build/test262 + mkdir -p build + git clone --branch=master --single-branch --shallow-since=2019-01-01 https://github.com/tc39/test262.git build/test262 cd build/test262 && git checkout $(TEST262_COMMIT) test-test262: @@ -121,6 +125,7 @@ test-test262-ci: bootstrap test-test262 test-test262-update-whitelist: node scripts/tests/test262/run_babel_parser_test262.js --update-whitelist +# Does not work on Windows clone-license: ./scripts/clone-license.sh @@ -139,11 +144,11 @@ prepublish: new-version: git pull --rebase - ./node_modules/.bin/lerna version --force-publish="@babel/runtime,@babel/runtime-corejs2,@babel/runtime-corejs3,@babel/standalone,@babel/preset-env-standalone" + yarn lerna version --force-publish="@babel/runtime,@babel/runtime-corejs2,@babel/runtime-corejs3,@babel/standalone,@babel/preset-env-standalone" # NOTE: Run make new-version first publish: prepublish - ./node_modules/.bin/lerna publish from-git --require-scripts + yarn lerna publish from-git --require-scripts make clean publish-ci: prepublish @@ -153,13 +158,13 @@ else echo "Missing NPM_TOKEN env var" exit 1 endif - ./node_modules/.bin/lerna publish from-git --require-scripts --yes + yarn lerna publish from-git --require-scripts --yes rm -f .npmrc make clean bootstrap-only: clean-all yarn --ignore-engines - ./node_modules/.bin/lerna bootstrap -- --ignore-engines + yarn lerna bootstrap -- --ignore-engines bootstrap: bootstrap-only make build diff --git a/packages/babel-cli/test/fixtures/babel/stdin --filename windows/options.json b/packages/babel-cli/test/fixtures/babel/stdin --filename windows/options.json new file mode 100644 index 000000000000..0c847447d595 --- /dev/null +++ b/packages/babel-cli/test/fixtures/babel/stdin --filename windows/options.json @@ -0,0 +1,5 @@ +{ + "args": ["--filename", "test.js"], + "stderrContains": true, + "os": ["win32"] +} diff --git a/packages/babel-cli/test/fixtures/babel/stdin --filename windows/stderr.txt b/packages/babel-cli/test/fixtures/babel/stdin --filename windows/stderr.txt new file mode 100644 index 000000000000..1ca69db1084e --- /dev/null +++ b/packages/babel-cli/test/fixtures/babel/stdin --filename windows/stderr.txt @@ -0,0 +1 @@ +SyntaxError: \test.js: Unexpected token, expected ";" (2:10) diff --git a/packages/babel-cli/test/fixtures/babel/stdin --filename windows/stdin.txt b/packages/babel-cli/test/fixtures/babel/stdin --filename windows/stdin.txt new file mode 100644 index 000000000000..1d931c7e8559 --- /dev/null +++ b/packages/babel-cli/test/fixtures/babel/stdin --filename windows/stdin.txt @@ -0,0 +1,3 @@ +arr.map(function () { + return $]!; +}); diff --git a/packages/babel-cli/test/fixtures/babel/stdin --filename/options.json b/packages/babel-cli/test/fixtures/babel/stdin --filename/options.json index 4274d9a29614..724c35ed8520 100644 --- a/packages/babel-cli/test/fixtures/babel/stdin --filename/options.json +++ b/packages/babel-cli/test/fixtures/babel/stdin --filename/options.json @@ -1,4 +1,5 @@ { "args": ["--filename", "test.js"], - "stderrContains": true + "stderrContains": true, + "os": ["linux", "darwin"] } diff --git a/packages/babel-cli/test/index.js b/packages/babel-cli/test/index.js index 2787b5832355..9e8af0d9b947 100644 --- a/packages/babel-cli/test/index.js +++ b/packages/babel-cli/test/index.js @@ -185,7 +185,29 @@ fs.readdirSync(fixtureLoc).forEach(function(binName) { }; const optionsLoc = path.join(testLoc, "options.json"); - if (fs.existsSync(optionsLoc)) merge(opts, require(optionsLoc)); + if (fs.existsSync(optionsLoc)) { + const taskOpts = require(optionsLoc); + if (taskOpts.os) { + let os = taskOpts.os; + + if (!Array.isArray(os) && typeof os !== "string") { + throw new Error( + `'os' should be either string or string array: ${taskOpts.os}`, + ); + } + + if (typeof os === "string") { + os = [os]; + } + + if (!os.includes(process.platform)) { + return; + } + + delete taskOpts.os; + } + merge(opts, taskOpts); + } ["stdout", "stdin", "stderr"].forEach(function(key) { const loc = path.join(testLoc, key + ".txt"); @@ -205,7 +227,7 @@ fs.readdirSync(fixtureLoc).forEach(function(binName) { opts.inFiles[".babelrc"] = helper.readFile(babelrcLoc); } - it(testName, buildTest(binName, testName, opts)); + it(testName, buildTest(binName, testName, opts), 20000); }); }); }); diff --git a/packages/babel-core/test/config-chain.js b/packages/babel-core/test/config-chain.js index 32ee13867568..32513b1a4519 100644 --- a/packages/babel-core/test/config-chain.js +++ b/packages/babel-core/test/config-chain.js @@ -1,5 +1,6 @@ import fs from "fs"; import path from "path"; +import escapeRegExp from "lodash/escapeRegExp"; import { loadOptions as loadOptionsOrig } from "../lib"; function fixture(...args) { @@ -33,7 +34,7 @@ describe("buildConfigChain", function() { cwd: fixture("nonexistant-fake"), filename: fixture("nonexistant-fake", "src.js"), babelrc: false, - test: new RegExp(fixture("nonexistant-fake")), + test: new RegExp(escapeRegExp(fixture("nonexistant-fake"))), comments: true, }); @@ -69,7 +70,7 @@ describe("buildConfigChain", function() { cwd: fixture("nonexistant-fake"), filename: fixture("nonexistant-fake", "src.js"), babelrc: false, - test: new RegExp(fixture("nonexistant-unknown")), + test: new RegExp(escapeRegExp(fixture("nonexistant-unknown"))), comments: true, }); @@ -107,7 +108,7 @@ describe("buildConfigChain", function() { cwd: fixture("nonexistant-fake"), filename: fixture("nonexistant-fake", "src.js"), babelrc: false, - test: [new RegExp(fixture("nonexistant-fake"))], + test: [new RegExp(escapeRegExp(fixture("nonexistant-fake")))], comments: true, }); @@ -143,7 +144,7 @@ describe("buildConfigChain", function() { cwd: fixture("nonexistant-fake"), filename: fixture("nonexistant-fake", "src.js"), babelrc: false, - test: [new RegExp(fixture("nonexistant-unknown"))], + test: [new RegExp(escapeRegExp(fixture("nonexistant-unknown")))], comments: true, }); @@ -183,7 +184,7 @@ describe("buildConfigChain", function() { cwd: fixture("nonexistant-fake"), filename: fixture("nonexistant-fake", "src.js"), babelrc: false, - include: new RegExp(fixture("nonexistant-fake")), + include: new RegExp(escapeRegExp(fixture("nonexistant-fake"))), comments: true, }); @@ -219,7 +220,7 @@ describe("buildConfigChain", function() { cwd: fixture("nonexistant-fake"), filename: fixture("nonexistant-fake", "src.js"), babelrc: false, - include: new RegExp(fixture("nonexistant-unknown")), + include: new RegExp(escapeRegExp(fixture("nonexistant-unknown"))), comments: true, }); @@ -257,7 +258,7 @@ describe("buildConfigChain", function() { cwd: fixture("nonexistant-fake"), filename: fixture("nonexistant-fake", "src.js"), babelrc: false, - include: [new RegExp(fixture("nonexistant-fake"))], + include: [new RegExp(escapeRegExp(fixture("nonexistant-fake")))], comments: true, }); @@ -293,7 +294,7 @@ describe("buildConfigChain", function() { cwd: fixture("nonexistant-fake"), filename: fixture("nonexistant-fake", "src.js"), babelrc: false, - include: [new RegExp(fixture("nonexistant-unknown"))], + include: [new RegExp(escapeRegExp(fixture("nonexistant-unknown")))], comments: true, }); @@ -333,7 +334,7 @@ describe("buildConfigChain", function() { cwd: fixture("nonexistant-fake"), filename: fixture("nonexistant-fake", "src.js"), babelrc: false, - exclude: new RegExp(fixture("nonexistant-fake")), + exclude: new RegExp(escapeRegExp(fixture("nonexistant-fake"))), comments: true, }); @@ -369,7 +370,7 @@ describe("buildConfigChain", function() { cwd: fixture("nonexistant-fake"), filename: fixture("nonexistant-fake", "src.js"), babelrc: false, - exclude: new RegExp(fixture("nonexistant-unknown")), + exclude: new RegExp(escapeRegExp(fixture("nonexistant-unknown"))), comments: true, }); @@ -407,7 +408,7 @@ describe("buildConfigChain", function() { cwd: fixture("nonexistant-fake"), filename: fixture("nonexistant-fake", "src.js"), babelrc: false, - exclude: [new RegExp(fixture("nonexistant-fake"))], + exclude: [new RegExp(escapeRegExp(fixture("nonexistant-fake")))], comments: true, }); @@ -443,7 +444,7 @@ describe("buildConfigChain", function() { cwd: fixture("nonexistant-fake"), filename: fixture("nonexistant-fake", "src.js"), babelrc: false, - exclude: [new RegExp(fixture("nonexistant-unknown"))], + exclude: [new RegExp(escapeRegExp(fixture("nonexistant-unknown")))], comments: true, }); diff --git a/packages/babel-generator/src/source-map.js b/packages/babel-generator/src/source-map.js index d03628a5eb53..9c58d8b8c64b 100644 --- a/packages/babel-generator/src/source-map.js +++ b/packages/babel-generator/src/source-map.js @@ -24,14 +24,20 @@ export default class SourceMap { const code = this._code; if (typeof code === "string") { - map.setSourceContent(this._opts.sourceFileName, code); + map.setSourceContent( + this._opts.sourceFileName.replace(/\\/g, "/"), + code, + ); } else if (typeof code === "object") { Object.keys(code).forEach(sourceFileName => { - map.setSourceContent(sourceFileName, code[sourceFileName]); + map.setSourceContent( + sourceFileName.replace(/\\/g, "/"), + code[sourceFileName], + ); }); } - this._rawMappings.forEach(map.addMapping, map); + this._rawMappings.forEach(mapping => map.addMapping(mapping), map); } return this._cachedMap.toJSON(); @@ -83,7 +89,10 @@ export default class SourceMap { line: generatedLine, column: generatedColumn, }, - source: line == null ? undefined : filename || this._opts.sourceFileName, + source: + line == null + ? undefined + : (filename || this._opts.sourceFileName).replace(/\\/g, "/"), original: line == null ? undefined diff --git a/packages/babel-helper-fixtures/src/index.js b/packages/babel-helper-fixtures/src/index.js index 4366d27e3322..1cc630e3bcfc 100644 --- a/packages/babel-helper-fixtures/src/index.js +++ b/packages/babel-helper-fixtures/src/index.js @@ -192,6 +192,26 @@ export default function get(entryLoc): Array { delete taskOpts.minNodeVersion; } + if (taskOpts.os) { + let os = taskOpts.os; + + if (!Array.isArray(os) && typeof os !== "string") { + throw new Error( + `'os' should be either string or string array: ${taskOpts.os}`, + ); + } + + if (typeof os === "string") { + os = [os]; + } + + if (!os.includes(process.platform)) { + return; + } + + delete taskOpts.os; + } + // traceur checks if (test.exec.code.indexOf("// Async.") >= 0) { diff --git a/packages/babel-helper-transform-fixture-test-runner/src/index.js b/packages/babel-helper-transform-fixture-test-runner/src/index.js index 1af2fb868560..eed9dde11342 100644 --- a/packages/babel-helper-transform-fixture-test-runner/src/index.js +++ b/packages/babel-helper-transform-fixture-test-runner/src/index.js @@ -295,12 +295,22 @@ function validateFile(actualCode, expectedLoc, expectedCode) { } function normalizeOutput(code) { - return code + let result = code .trim() .replace( new RegExp(escapeRegExp(path.resolve(__dirname, "../../../")), "g"), "", ); + if (process.platform === "win32") { + result = result.replace( + new RegExp( + escapeRegExp(path.resolve(__dirname, "../../../").replace(/\\/g, "/")), + "g", + ), + "", + ); + } + return result; } const toEqualFile = () => ({ diff --git a/packages/babel-node/test/index.js b/packages/babel-node/test/index.js index a603204aea07..9fd61c73f81e 100644 --- a/packages/babel-node/test/index.js +++ b/packages/babel-node/test/index.js @@ -198,7 +198,7 @@ fs.readdirSync(fixtureLoc).forEach(function(binName) { opts.inFiles[".babelrc"] = helper.readFile(babelrcLoc); } - it(testName, buildTest(binName, testName, opts)); + it(testName, buildTest(binName, testName, opts), 20000); }); }); }); diff --git a/packages/babel-plugin-transform-react-jsx-source/test/fixtures/react-source/basic-sample/options.json b/packages/babel-plugin-transform-react-jsx-source/test/fixtures/react-source/basic-sample/options.json new file mode 100644 index 000000000000..d6180568ae8d --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx-source/test/fixtures/react-source/basic-sample/options.json @@ -0,0 +1,3 @@ +{ + "os": ["linux", "darwin"] +} diff --git a/packages/babel-plugin-transform-react-jsx-source/test/fixtures/react-source/with-source/options.json b/packages/babel-plugin-transform-react-jsx-source/test/fixtures/react-source/with-source/options.json new file mode 100644 index 000000000000..d6180568ae8d --- /dev/null +++ b/packages/babel-plugin-transform-react-jsx-source/test/fixtures/react-source/with-source/options.json @@ -0,0 +1,3 @@ +{ + "os": ["linux", "darwin"] +} diff --git a/packages/babel-plugin-transform-runtime/test/fixtures/absoluteRuntime/options.json b/packages/babel-plugin-transform-runtime/test/fixtures/absoluteRuntime/options.json new file mode 100644 index 000000000000..d6180568ae8d --- /dev/null +++ b/packages/babel-plugin-transform-runtime/test/fixtures/absoluteRuntime/options.json @@ -0,0 +1,3 @@ +{ + "os": ["linux", "darwin"] +} diff --git a/packages/babel-preset-env/src/debug.js b/packages/babel-preset-env/src/debug.js index db72cf0c3e3e..747b895a1067 100644 --- a/packages/babel-preset-env/src/debug.js +++ b/packages/babel-preset-env/src/debug.js @@ -56,6 +56,10 @@ export const logEntryPolyfills = ( polyfillTargets: Targets, allBuiltInsList: { [key: string]: Targets }, ) => { + // normalize filename to generate consistent preset-env test fixtures + if (process.env.BABEL_ENV === "test") { + filename = filename.replace(/\\/g, "/"); + } if (!importPolyfillIncluded) { console.log(`\n[${filename}] Import of ${polyfillName} was not found.`); return; @@ -83,6 +87,10 @@ export const logUsagePolyfills = ( polyfillTargets: Targets, allBuiltInsList: { [key: string]: Targets }, ) => { + // normalize filename to generate consistent preset-env test fixtures + if (process.env.BABEL_ENV === "test") { + filename = filename.replace(/\\/g, "/"); + } if (!polyfills.size) { console.log( `\n[${filename}] Based on your code and targets, core-js polyfills were not added.`, diff --git a/packages/babel-preset-env/src/polyfills/regenerator/entry-plugin.js b/packages/babel-preset-env/src/polyfills/regenerator/entry-plugin.js index ea0baffbf350..53db45877398 100644 --- a/packages/babel-preset-env/src/polyfills/regenerator/entry-plugin.js +++ b/packages/babel-preset-env/src/polyfills/regenerator/entry-plugin.js @@ -33,8 +33,13 @@ export default function() { }, post() { if (this.opts.debug && this.regeneratorImportExcluded) { + let filename = this.file.opts.filename; + // normalize filename to generate consistent preset-env test fixtures + if (process.env.BABEL_ENV === "test") { + filename = filename.replace(/\\/g, "/"); + } console.log( - `\n[${this.file.opts.filename}] Based on your targets, regenerator-runtime import excluded.`, + `\n[${filename}] Based on your targets, regenerator-runtime import excluded.`, ); } }, diff --git a/packages/babel-preset-env/src/polyfills/regenerator/usage-plugin.js b/packages/babel-preset-env/src/polyfills/regenerator/usage-plugin.js index 2803e7be1231..f417cf248de8 100644 --- a/packages/babel-preset-env/src/polyfills/regenerator/usage-plugin.js +++ b/packages/babel-preset-env/src/polyfills/regenerator/usage-plugin.js @@ -21,8 +21,13 @@ export default function() { }, post() { if (this.opts.debug && this.usesRegenerator) { + let filename = this.file.opts.filename; + // normalize filename to generate consistent preset-env test fixtures + if (process.env.BABEL_ENV === "test") { + filename = filename.replace(/\\/g, "/"); + } console.log( - `\n[${this.file.opts.filename}] Based on your code and targets, added regenerator-runtime.`, + `\n[${filename}] Based on your code and targets, added regenerator-runtime.`, ); } }, diff --git a/packages/babel-preset-react/test/fixtures/preset-options/development-windows/exec.js b/packages/babel-preset-react/test/fixtures/preset-options/development-windows/exec.js new file mode 100644 index 000000000000..3b7eb0d8ede5 --- /dev/null +++ b/packages/babel-preset-react/test/fixtures/preset-options/development-windows/exec.js @@ -0,0 +1,19 @@ +const actual = transform( + '', + Object.assign({}, opts, { filename: 'C:\\fake\\path\\mock.js' }) +).code; + +const expected = multiline([ + 'var _jsxFileName = "C:\\\\fake\\\\path\\\\mock.js";', + 'React.createElement(Foo, {', + ' bar: "baz",', + ' __source: {', + ' fileName: _jsxFileName,', + ' lineNumber: 1', + ' },', + ' __self: this', + '});', +]); + + +expect(actual).toBe(expected); diff --git a/packages/babel-preset-react/test/fixtures/preset-options/development-windows/options.json b/packages/babel-preset-react/test/fixtures/preset-options/development-windows/options.json new file mode 100644 index 000000000000..6ca8659a61e3 --- /dev/null +++ b/packages/babel-preset-react/test/fixtures/preset-options/development-windows/options.json @@ -0,0 +1,4 @@ +{ + "presets": [["react", { "development": true }]], + "os": ["win32"] +} diff --git a/packages/babel-preset-react/test/fixtures/preset-options/development/options.json b/packages/babel-preset-react/test/fixtures/preset-options/development/options.json index 20fb8a7d4beb..69900e734466 100644 --- a/packages/babel-preset-react/test/fixtures/preset-options/development/options.json +++ b/packages/babel-preset-react/test/fixtures/preset-options/development/options.json @@ -1,3 +1,4 @@ { - "presets": [["react", { "development": true }]] + "presets": [["react", { "development": true }]], + "os": ["linux", "darwin"] }