From 6ba5dff16c223733c974bd01302a995a898e952e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Ribaudo?= Date: Mon, 12 Aug 2019 23:19:25 +0200 Subject: [PATCH 1/6] Add support for logs to transform-fixture-test-runner --- packages/babel-helper-fixtures/src/index.js | 9 +++++++ .../src/index.js | 26 +++++++++++++++---- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/packages/babel-helper-fixtures/src/index.js b/packages/babel-helper-fixtures/src/index.js index d187a118f8e6..403bd31a4853 100644 --- a/packages/babel-helper-fixtures/src/index.js +++ b/packages/babel-helper-fixtures/src/index.js @@ -141,11 +141,14 @@ export default function get(entryLoc): Array { const taskOptsLoc = resolve(taskDir + "/options"); if (taskOptsLoc) extend(taskOpts, require(taskOptsLoc)); + const taskLogLoc = resolve(taskDir + "/expected-log.txt"); + const test = { optionsDir: taskOptsLoc ? path.dirname(taskOptsLoc) : null, title: humanize(taskName, true), disabled: taskName[0] === ".", options: taskOpts, + expectedLog: taskLogLoc ? readFile(taskLogLoc) : null, exec: { loc: execLoc, code: readFile(execLoc), @@ -222,6 +225,12 @@ export default function get(entryLoc): Array { ); } } + + if (test.exec.code && test.expectedLog) { + throw new Error( + "Test cannot have logs and also be executed: " + taskLogLoc, + ); + } } } 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 a83e8ff1c61b..5da7dd302a4b 100644 --- a/packages/babel-helper-transform-fixture-test-runner/src/index.js +++ b/packages/babel-helper-transform-fixture-test-runner/src/index.js @@ -131,11 +131,14 @@ function wrapPackagesArray(type, names, optionsDir) { } function run(task) { - const actual = task.actual; - const expected = task.expect; - const exec = task.exec; - const opts = task.options; - const optionsDir = task.optionsDir; + const { + actual, + expect: expected, + exec, + options: opts, + optionsDir, + expectedLog, + } = task; function getOpts(self) { const newOpts = merge( @@ -194,12 +197,25 @@ function run(task) { let actualCode = actual.code; const expectCode = expected.code; if (!execCode || actualCode) { + let actualLogs = ""; + if (expectedLog !== null) { + jest.spyOn(console, "log").mockImplementation(msg => { + actualLogs += `>>>>>> [console.log] <<<<<<\n${msg}\n\n`; + }); + jest.spyOn(console, "warn").mockImplementation(msg => { + actualLogs += `>>>>>> [console.warn] <<<<<<\n${msg}\n\n`; + }); + } + result = babel.transform(actualCode, getOpts(actual)); + const expectedCode = result.code.replace( escapeRegExp(path.resolve(__dirname, "../../../")), "", ); + if (expectedLog !== null) expect(actualLogs.trim()).toBe(expectedLog); + checkDuplicatedNodes(babel, result.ast); if ( !expected.code && From 550299319a63607ccde3fc9e63c489ece7a8e65e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Ribaudo?= Date: Tue, 13 Aug 2019 00:13:36 +0200 Subject: [PATCH 2/6] Test some warnings --- .../test/fixtures/systemjs/missing-plugin/expected-log.txt | 4 ++++ .../auto-esm-supported-import-supported/expected-log.txt | 0 .../auto-esm-supported-import-unsupported/expected-log.txt | 2 ++ .../auto-esm-unsupported-import-unsupported/expected-log.txt | 0 .../test/fixtures/dynamic-import/modules-amd/expected-log.txt | 0 .../test/fixtures/dynamic-import/modules-cjs/expected-log.txt | 0 .../fixtures/dynamic-import/modules-false/expected-log.txt | 0 .../fixtures/dynamic-import/modules-systemjs/expected-log.txt | 0 .../test/fixtures/dynamic-import/modules-umd/expected-log.txt | 2 ++ 9 files changed, 8 insertions(+) create mode 100644 packages/babel-plugin-proposal-dynamic-import/test/fixtures/systemjs/missing-plugin/expected-log.txt create mode 100644 packages/babel-preset-env/test/fixtures/dynamic-import/auto-esm-supported-import-supported/expected-log.txt create mode 100644 packages/babel-preset-env/test/fixtures/dynamic-import/auto-esm-supported-import-unsupported/expected-log.txt create mode 100644 packages/babel-preset-env/test/fixtures/dynamic-import/auto-esm-unsupported-import-unsupported/expected-log.txt create mode 100644 packages/babel-preset-env/test/fixtures/dynamic-import/modules-amd/expected-log.txt create mode 100644 packages/babel-preset-env/test/fixtures/dynamic-import/modules-cjs/expected-log.txt create mode 100644 packages/babel-preset-env/test/fixtures/dynamic-import/modules-false/expected-log.txt create mode 100644 packages/babel-preset-env/test/fixtures/dynamic-import/modules-systemjs/expected-log.txt create mode 100644 packages/babel-preset-env/test/fixtures/dynamic-import/modules-umd/expected-log.txt diff --git a/packages/babel-plugin-proposal-dynamic-import/test/fixtures/systemjs/missing-plugin/expected-log.txt b/packages/babel-plugin-proposal-dynamic-import/test/fixtures/systemjs/missing-plugin/expected-log.txt new file mode 100644 index 000000000000..44f1cd3f1d56 --- /dev/null +++ b/packages/babel-plugin-proposal-dynamic-import/test/fixtures/systemjs/missing-plugin/expected-log.txt @@ -0,0 +1,4 @@ +>>>>>> [console.warn] <<<<<< +WARNING: Dynamic import() transformation must be enabled using the + @babel/plugin-proposal-dynamic-import plugin. Babel 8 will + no longer transform import() without using that plugin. diff --git a/packages/babel-preset-env/test/fixtures/dynamic-import/auto-esm-supported-import-supported/expected-log.txt b/packages/babel-preset-env/test/fixtures/dynamic-import/auto-esm-supported-import-supported/expected-log.txt new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/babel-preset-env/test/fixtures/dynamic-import/auto-esm-supported-import-unsupported/expected-log.txt b/packages/babel-preset-env/test/fixtures/dynamic-import/auto-esm-supported-import-unsupported/expected-log.txt new file mode 100644 index 000000000000..e50b2e2d01fd --- /dev/null +++ b/packages/babel-preset-env/test/fixtures/dynamic-import/auto-esm-supported-import-unsupported/expected-log.txt @@ -0,0 +1,2 @@ +>>>>>> [console.warn] <<<<<< +Dynamic import can only be supported when transforming ES modules to AMD, CommonJS or SystemJS. Only the parser plugin will be enabled. diff --git a/packages/babel-preset-env/test/fixtures/dynamic-import/auto-esm-unsupported-import-unsupported/expected-log.txt b/packages/babel-preset-env/test/fixtures/dynamic-import/auto-esm-unsupported-import-unsupported/expected-log.txt new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/babel-preset-env/test/fixtures/dynamic-import/modules-amd/expected-log.txt b/packages/babel-preset-env/test/fixtures/dynamic-import/modules-amd/expected-log.txt new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/babel-preset-env/test/fixtures/dynamic-import/modules-cjs/expected-log.txt b/packages/babel-preset-env/test/fixtures/dynamic-import/modules-cjs/expected-log.txt new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/babel-preset-env/test/fixtures/dynamic-import/modules-false/expected-log.txt b/packages/babel-preset-env/test/fixtures/dynamic-import/modules-false/expected-log.txt new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/babel-preset-env/test/fixtures/dynamic-import/modules-systemjs/expected-log.txt b/packages/babel-preset-env/test/fixtures/dynamic-import/modules-systemjs/expected-log.txt new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/babel-preset-env/test/fixtures/dynamic-import/modules-umd/expected-log.txt b/packages/babel-preset-env/test/fixtures/dynamic-import/modules-umd/expected-log.txt new file mode 100644 index 000000000000..e50b2e2d01fd --- /dev/null +++ b/packages/babel-preset-env/test/fixtures/dynamic-import/modules-umd/expected-log.txt @@ -0,0 +1,2 @@ +>>>>>> [console.warn] <<<<<< +Dynamic import can only be supported when transforming ES modules to AMD, CommonJS or SystemJS. Only the parser plugin will be enabled. From baa8ea5ce82e32eb829f394167698b1fd0e247b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Ribaudo?= Date: Tue, 13 Aug 2019 11:44:13 +0200 Subject: [PATCH 3/6] Use stderr/stdout, and add a validateLogs test option --- packages/babel-helper-fixtures/src/index.js | 16 ++++--- .../src/index.js | 45 +++++++++++-------- .../systemjs/missing-plugin/options.json | 1 + .../{expected-log.txt => stderr.txt} | 1 - .../expected-log.txt | 0 .../options.json | 1 + .../options.json | 1 + .../stderr.txt} | 1 - .../expected-log.txt | 0 .../options.json | 1 + .../modules-amd/expected-log.txt | 0 .../dynamic-import/modules-amd/options.json | 1 + .../modules-cjs/expected-log.txt | 0 .../dynamic-import/modules-cjs/options.json | 1 + .../modules-false/expected-log.txt | 0 .../dynamic-import/modules-false/options.json | 1 + .../modules-systemjs/expected-log.txt | 0 .../modules-systemjs/options.json | 1 + .../dynamic-import/modules-umd/options.json | 1 + .../stderr.txt} | 1 - 20 files changed, 47 insertions(+), 26 deletions(-) rename packages/babel-plugin-proposal-dynamic-import/test/fixtures/systemjs/missing-plugin/{expected-log.txt => stderr.txt} (87%) delete mode 100644 packages/babel-preset-env/test/fixtures/dynamic-import/auto-esm-supported-import-supported/expected-log.txt rename packages/babel-preset-env/test/fixtures/dynamic-import/{modules-umd/expected-log.txt => auto-esm-supported-import-unsupported/stderr.txt} (82%) delete mode 100644 packages/babel-preset-env/test/fixtures/dynamic-import/auto-esm-unsupported-import-unsupported/expected-log.txt delete mode 100644 packages/babel-preset-env/test/fixtures/dynamic-import/modules-amd/expected-log.txt delete mode 100644 packages/babel-preset-env/test/fixtures/dynamic-import/modules-cjs/expected-log.txt delete mode 100644 packages/babel-preset-env/test/fixtures/dynamic-import/modules-false/expected-log.txt delete mode 100644 packages/babel-preset-env/test/fixtures/dynamic-import/modules-systemjs/expected-log.txt rename packages/babel-preset-env/test/fixtures/dynamic-import/{auto-esm-supported-import-unsupported/expected-log.txt => modules-umd/stderr.txt} (82%) diff --git a/packages/babel-helper-fixtures/src/index.js b/packages/babel-helper-fixtures/src/index.js index 403bd31a4853..fe30b82309a5 100644 --- a/packages/babel-helper-fixtures/src/index.js +++ b/packages/babel-helper-fixtures/src/index.js @@ -120,6 +120,8 @@ export default function get(entryLoc): Array { const expectLoc = findFile(taskDir + "/output", true /* allowJSON */) || taskDir + "/output.js"; + const stdoutLoc = taskDir + "/stdout.txt"; + const stderrLoc = taskDir + "/stderr.txt"; const actualLocAlias = suiteName + "/" + taskName + "/" + path.basename(actualLoc); @@ -141,14 +143,14 @@ export default function get(entryLoc): Array { const taskOptsLoc = resolve(taskDir + "/options"); if (taskOptsLoc) extend(taskOpts, require(taskOptsLoc)); - const taskLogLoc = resolve(taskDir + "/expected-log.txt"); - const test = { optionsDir: taskOptsLoc ? path.dirname(taskOptsLoc) : null, title: humanize(taskName, true), disabled: taskName[0] === ".", options: taskOpts, - expectedLog: taskLogLoc ? readFile(taskLogLoc) : null, + validateLogs: taskOpts.validateLogs, + stdout: { loc: stdoutLoc, code: readFile(stdoutLoc) }, + stderr: { loc: stderrLoc, code: readFile(stderrLoc) }, exec: { loc: execLoc, code: readFile(execLoc), @@ -226,11 +228,15 @@ export default function get(entryLoc): Array { } } - if (test.exec.code && test.expectedLog) { + if (!test.validateLogs && (test.stdout.code || test.stderr.code)) { throw new Error( - "Test cannot have logs and also be executed: " + taskLogLoc, + "stdout.txt and stderr.txt are only allowed when the 'validateLogs' option is enabled: " + + (test.stdout.code ? stdoutLoc : stderrLoc), ); } + + // Delete to avoid option validation error + delete test.options.validateLogs; } } 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 5da7dd302a4b..a94f27102d81 100644 --- a/packages/babel-helper-transform-fixture-test-runner/src/index.js +++ b/packages/babel-helper-transform-fixture-test-runner/src/index.js @@ -137,7 +137,9 @@ function run(task) { exec, options: opts, optionsDir, - expectedLog, + validateLogs, + stdout, + stderr, } = task; function getOpts(self) { @@ -197,13 +199,13 @@ function run(task) { let actualCode = actual.code; const expectCode = expected.code; if (!execCode || actualCode) { - let actualLogs = ""; - if (expectedLog !== null) { + const actualLogs = { stdout: "", stderr: "" }; + if (validateLogs) { jest.spyOn(console, "log").mockImplementation(msg => { - actualLogs += `>>>>>> [console.log] <<<<<<\n${msg}\n\n`; + actualLogs.stdout += `${msg}\n`; }); jest.spyOn(console, "warn").mockImplementation(msg => { - actualLogs += `>>>>>> [console.warn] <<<<<<\n${msg}\n\n`; + actualLogs.stderr += `${msg}\n`; }); } @@ -214,8 +216,6 @@ function run(task) { "", ); - if (expectedLog !== null) expect(actualLogs.trim()).toBe(expectedLog); - checkDuplicatedNodes(babel, result.ast); if ( !expected.code && @@ -239,17 +239,7 @@ function run(task) { } } else { actualCode = expectedCode.trim(); - try { - expect(actualCode).toEqualFile({ - filename: expected.loc, - code: expectCode, - }); - } catch (e) { - if (!process.env.OVERWRITE) throw e; - - console.log(`Updated test file: ${expected.loc}`); - fs.writeFileSync(expected.loc, `${expectedCode}\n`); - } + validateFile(actualCode, expected.loc, expectCode); if (actualCode) { expect(expected.loc).toMatch( @@ -257,6 +247,11 @@ function run(task) { ); } } + + if (validateLogs) { + validateFile(actualLogs.stdout.trim(), stdout.loc, stdout.code); + validateFile(actualLogs.stderr.trim(), stderr.loc, stderr.code); + } } if (task.sourceMap) { @@ -279,6 +274,20 @@ function run(task) { } } +function validateFile(actualCode, expectedLoc, expectedCode) { + try { + expect(actualCode).toEqualFile({ + filename: expectedLoc, + code: expectedCode, + }); + } catch (e) { + if (!process.env.OVERWRITE) throw e; + + console.log(`Updated test file: ${expectedLoc}`); + fs.writeFileSync(expectedLoc, `${actualCode}\n`); + } +} + const toEqualFile = () => ({ compare: (actual, { filename, code }) => { const pass = actual === code; diff --git a/packages/babel-plugin-proposal-dynamic-import/test/fixtures/systemjs/missing-plugin/options.json b/packages/babel-plugin-proposal-dynamic-import/test/fixtures/systemjs/missing-plugin/options.json index c4fe39793abd..c269a708f8a2 100644 --- a/packages/babel-plugin-proposal-dynamic-import/test/fixtures/systemjs/missing-plugin/options.json +++ b/packages/babel-plugin-proposal-dynamic-import/test/fixtures/systemjs/missing-plugin/options.json @@ -1,4 +1,5 @@ { + "validateLogs": true, "plugins": [ "syntax-dynamic-import", "transform-modules-systemjs", diff --git a/packages/babel-plugin-proposal-dynamic-import/test/fixtures/systemjs/missing-plugin/expected-log.txt b/packages/babel-plugin-proposal-dynamic-import/test/fixtures/systemjs/missing-plugin/stderr.txt similarity index 87% rename from packages/babel-plugin-proposal-dynamic-import/test/fixtures/systemjs/missing-plugin/expected-log.txt rename to packages/babel-plugin-proposal-dynamic-import/test/fixtures/systemjs/missing-plugin/stderr.txt index 44f1cd3f1d56..6a64047d50bc 100644 --- a/packages/babel-plugin-proposal-dynamic-import/test/fixtures/systemjs/missing-plugin/expected-log.txt +++ b/packages/babel-plugin-proposal-dynamic-import/test/fixtures/systemjs/missing-plugin/stderr.txt @@ -1,4 +1,3 @@ ->>>>>> [console.warn] <<<<<< WARNING: Dynamic import() transformation must be enabled using the @babel/plugin-proposal-dynamic-import plugin. Babel 8 will no longer transform import() without using that plugin. diff --git a/packages/babel-preset-env/test/fixtures/dynamic-import/auto-esm-supported-import-supported/expected-log.txt b/packages/babel-preset-env/test/fixtures/dynamic-import/auto-esm-supported-import-supported/expected-log.txt deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/packages/babel-preset-env/test/fixtures/dynamic-import/auto-esm-supported-import-supported/options.json b/packages/babel-preset-env/test/fixtures/dynamic-import/auto-esm-supported-import-supported/options.json index 154ea4199025..65df7ec7a7d3 100644 --- a/packages/babel-preset-env/test/fixtures/dynamic-import/auto-esm-supported-import-supported/options.json +++ b/packages/babel-preset-env/test/fixtures/dynamic-import/auto-esm-supported-import-supported/options.json @@ -1,4 +1,5 @@ { + "validateLogs": true, "caller": { "name": "test-fixture", "supportsStaticESM": true, diff --git a/packages/babel-preset-env/test/fixtures/dynamic-import/auto-esm-supported-import-unsupported/options.json b/packages/babel-preset-env/test/fixtures/dynamic-import/auto-esm-supported-import-unsupported/options.json index c444f60ae955..85b4d7deafad 100644 --- a/packages/babel-preset-env/test/fixtures/dynamic-import/auto-esm-supported-import-unsupported/options.json +++ b/packages/babel-preset-env/test/fixtures/dynamic-import/auto-esm-supported-import-unsupported/options.json @@ -1,4 +1,5 @@ { + "validateLogs": true, "caller": { "name": "test-fixture", "supportsStaticESM": true, diff --git a/packages/babel-preset-env/test/fixtures/dynamic-import/modules-umd/expected-log.txt b/packages/babel-preset-env/test/fixtures/dynamic-import/auto-esm-supported-import-unsupported/stderr.txt similarity index 82% rename from packages/babel-preset-env/test/fixtures/dynamic-import/modules-umd/expected-log.txt rename to packages/babel-preset-env/test/fixtures/dynamic-import/auto-esm-supported-import-unsupported/stderr.txt index e50b2e2d01fd..f3e3df470839 100644 --- a/packages/babel-preset-env/test/fixtures/dynamic-import/modules-umd/expected-log.txt +++ b/packages/babel-preset-env/test/fixtures/dynamic-import/auto-esm-supported-import-unsupported/stderr.txt @@ -1,2 +1 @@ ->>>>>> [console.warn] <<<<<< Dynamic import can only be supported when transforming ES modules to AMD, CommonJS or SystemJS. Only the parser plugin will be enabled. diff --git a/packages/babel-preset-env/test/fixtures/dynamic-import/auto-esm-unsupported-import-unsupported/expected-log.txt b/packages/babel-preset-env/test/fixtures/dynamic-import/auto-esm-unsupported-import-unsupported/expected-log.txt deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/packages/babel-preset-env/test/fixtures/dynamic-import/auto-esm-unsupported-import-unsupported/options.json b/packages/babel-preset-env/test/fixtures/dynamic-import/auto-esm-unsupported-import-unsupported/options.json index 370b48e76fb2..60d72e63221a 100644 --- a/packages/babel-preset-env/test/fixtures/dynamic-import/auto-esm-unsupported-import-unsupported/options.json +++ b/packages/babel-preset-env/test/fixtures/dynamic-import/auto-esm-unsupported-import-unsupported/options.json @@ -1,4 +1,5 @@ { + "validateLogs": true, "caller": { "name": "test-fixture", "supportsStaticESM": false, diff --git a/packages/babel-preset-env/test/fixtures/dynamic-import/modules-amd/expected-log.txt b/packages/babel-preset-env/test/fixtures/dynamic-import/modules-amd/expected-log.txt deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/packages/babel-preset-env/test/fixtures/dynamic-import/modules-amd/options.json b/packages/babel-preset-env/test/fixtures/dynamic-import/modules-amd/options.json index e34f77e9664c..dad5640aa571 100644 --- a/packages/babel-preset-env/test/fixtures/dynamic-import/modules-amd/options.json +++ b/packages/babel-preset-env/test/fixtures/dynamic-import/modules-amd/options.json @@ -1,3 +1,4 @@ { + "validateLogs": true, "presets": [["env", { "modules": "amd" }]] } diff --git a/packages/babel-preset-env/test/fixtures/dynamic-import/modules-cjs/expected-log.txt b/packages/babel-preset-env/test/fixtures/dynamic-import/modules-cjs/expected-log.txt deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/packages/babel-preset-env/test/fixtures/dynamic-import/modules-cjs/options.json b/packages/babel-preset-env/test/fixtures/dynamic-import/modules-cjs/options.json index 1b03b37c6f6d..091b0e2a32c6 100644 --- a/packages/babel-preset-env/test/fixtures/dynamic-import/modules-cjs/options.json +++ b/packages/babel-preset-env/test/fixtures/dynamic-import/modules-cjs/options.json @@ -1,3 +1,4 @@ { + "validateLogs": true, "presets": [["env", { "modules": "cjs" }]] } diff --git a/packages/babel-preset-env/test/fixtures/dynamic-import/modules-false/expected-log.txt b/packages/babel-preset-env/test/fixtures/dynamic-import/modules-false/expected-log.txt deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/packages/babel-preset-env/test/fixtures/dynamic-import/modules-false/options.json b/packages/babel-preset-env/test/fixtures/dynamic-import/modules-false/options.json index 3c22b6872e58..c7c066f78489 100644 --- a/packages/babel-preset-env/test/fixtures/dynamic-import/modules-false/options.json +++ b/packages/babel-preset-env/test/fixtures/dynamic-import/modules-false/options.json @@ -1,3 +1,4 @@ { + "validateLogs": true, "presets": [["env", { "modules": false }]] } diff --git a/packages/babel-preset-env/test/fixtures/dynamic-import/modules-systemjs/expected-log.txt b/packages/babel-preset-env/test/fixtures/dynamic-import/modules-systemjs/expected-log.txt deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/packages/babel-preset-env/test/fixtures/dynamic-import/modules-systemjs/options.json b/packages/babel-preset-env/test/fixtures/dynamic-import/modules-systemjs/options.json index 9be6fdb3812e..206e080b9c53 100644 --- a/packages/babel-preset-env/test/fixtures/dynamic-import/modules-systemjs/options.json +++ b/packages/babel-preset-env/test/fixtures/dynamic-import/modules-systemjs/options.json @@ -1,3 +1,4 @@ { + "validateLogs": true, "presets": [["env", { "modules": "systemjs" }]] } diff --git a/packages/babel-preset-env/test/fixtures/dynamic-import/modules-umd/options.json b/packages/babel-preset-env/test/fixtures/dynamic-import/modules-umd/options.json index da7772e2d584..6315da5c545a 100644 --- a/packages/babel-preset-env/test/fixtures/dynamic-import/modules-umd/options.json +++ b/packages/babel-preset-env/test/fixtures/dynamic-import/modules-umd/options.json @@ -1,3 +1,4 @@ { + "validateLogs": true, "presets": [["env", { "modules": "umd" }]] } diff --git a/packages/babel-preset-env/test/fixtures/dynamic-import/auto-esm-supported-import-unsupported/expected-log.txt b/packages/babel-preset-env/test/fixtures/dynamic-import/modules-umd/stderr.txt similarity index 82% rename from packages/babel-preset-env/test/fixtures/dynamic-import/auto-esm-supported-import-unsupported/expected-log.txt rename to packages/babel-preset-env/test/fixtures/dynamic-import/modules-umd/stderr.txt index e50b2e2d01fd..f3e3df470839 100644 --- a/packages/babel-preset-env/test/fixtures/dynamic-import/auto-esm-supported-import-unsupported/expected-log.txt +++ b/packages/babel-preset-env/test/fixtures/dynamic-import/modules-umd/stderr.txt @@ -1,2 +1 @@ ->>>>>> [console.warn] <<<<<< Dynamic import can only be supported when transforming ES modules to AMD, CommonJS or SystemJS. Only the parser plugin will be enabled. From 64ba603cc12867b84c9430f1239916c6572a09f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Ribaudo?= Date: Tue, 13 Aug 2019 11:55:28 +0200 Subject: [PATCH 4/6] Normalize CWD in logs and rename vars --- .../src/index.js | 32 ++++++++++--------- 1 file changed, 17 insertions(+), 15 deletions(-) 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 a94f27102d81..14dbeebab57d 100644 --- a/packages/babel-helper-transform-fixture-test-runner/src/index.js +++ b/packages/babel-helper-transform-fixture-test-runner/src/index.js @@ -196,9 +196,9 @@ function run(task) { } } - let actualCode = actual.code; - const expectCode = expected.code; - if (!execCode || actualCode) { + const inputCode = actual.code; + const expectedCode = expected.code; + if (!execCode || inputCode) { const actualLogs = { stdout: "", stderr: "" }; if (validateLogs) { jest.spyOn(console, "log").mockImplementation(msg => { @@ -209,17 +209,14 @@ function run(task) { }); } - result = babel.transform(actualCode, getOpts(actual)); + result = babel.transform(inputCode, getOpts(actual)); - const expectedCode = result.code.replace( - escapeRegExp(path.resolve(__dirname, "../../../")), - "", - ); + const outputCode = normalizeOutput(result.code); checkDuplicatedNodes(babel, result.ast); if ( !expected.code && - expectedCode && + outputCode && !opts.throws && fs.statSync(path.dirname(expected.loc)).isDirectory() && !process.env.CI @@ -230,7 +227,7 @@ function run(task) { ); console.log(`New test file created: ${expectedFile}`); - fs.writeFileSync(expectedFile, `${expectedCode}\n`); + fs.writeFileSync(expectedFile, `${outputCode}\n`); if (expected.loc !== expectedFile) { try { @@ -238,10 +235,9 @@ function run(task) { } catch (e) {} } } else { - actualCode = expectedCode.trim(); - validateFile(actualCode, expected.loc, expectCode); + validateFile(outputCode, expected.loc, expectedCode); - if (actualCode) { + if (inputCode) { expect(expected.loc).toMatch( result.sourceType === "module" ? /\.mjs$/ : /\.js$/, ); @@ -249,8 +245,8 @@ function run(task) { } if (validateLogs) { - validateFile(actualLogs.stdout.trim(), stdout.loc, stdout.code); - validateFile(actualLogs.stderr.trim(), stderr.loc, stderr.code); + validateFile(normalizeOutput(actualLogs.stdout), stdout.loc, stdout.code); + validateFile(normalizeOutput(actualLogs.stderr), stderr.loc, stderr.code); } } @@ -288,6 +284,12 @@ function validateFile(actualCode, expectedLoc, expectedCode) { } } +function normalizeOutput(code) { + return code + .trim() + .replace(escapeRegExp(path.resolve(__dirname, "../../../")), ""); +} + const toEqualFile = () => ({ compare: (actual, { filename, code }) => { const pass = actual === code; From 6228c59cb2a621ee53867ac57848b98e0f0683c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Ribaudo?= Date: Tue, 13 Aug 2019 11:55:42 +0200 Subject: [PATCH 5/6] Silence preset-env tests --- .../options.json | 1 + .../stdout.txt | 33 ++++++++++++++++++ .../output.mjs | 0 .../options.json | 1 + .../stdout.txt | 34 +++++++++++++++++++ .../safari-10_3-block-scoped/options.json | 1 + .../safari-10_3-block-scoped/stdout.txt | 24 +++++++++++++ 7 files changed, 94 insertions(+) create mode 100644 packages/babel-preset-env/test/fixtures/corejs2/usage-browserslist-config-ignore/stdout.txt create mode 100644 packages/babel-preset-env/test/fixtures/corejs2/usage-remove-babel-polyfill-import/output.mjs create mode 100644 packages/babel-preset-env/test/fixtures/corejs3/usage-browserslist-config-ignore/stdout.txt create mode 100644 packages/babel-preset-env/test/fixtures/preset-options/safari-10_3-block-scoped/stdout.txt diff --git a/packages/babel-preset-env/test/fixtures/corejs2/usage-browserslist-config-ignore/options.json b/packages/babel-preset-env/test/fixtures/corejs2/usage-browserslist-config-ignore/options.json index f0e1e2cba61d..d7dca0ca75ef 100644 --- a/packages/babel-preset-env/test/fixtures/corejs2/usage-browserslist-config-ignore/options.json +++ b/packages/babel-preset-env/test/fixtures/corejs2/usage-browserslist-config-ignore/options.json @@ -1,4 +1,5 @@ { + "validateLogs": true, "presets": [ [ "../../../../lib", diff --git a/packages/babel-preset-env/test/fixtures/corejs2/usage-browserslist-config-ignore/stdout.txt b/packages/babel-preset-env/test/fixtures/corejs2/usage-browserslist-config-ignore/stdout.txt new file mode 100644 index 000000000000..61526c5b8070 --- /dev/null +++ b/packages/babel-preset-env/test/fixtures/corejs2/usage-browserslist-config-ignore/stdout.txt @@ -0,0 +1,33 @@ +@babel/preset-env: `DEBUG` option + +Using targets: +{ + "chrome": "61", + "edge": "16", + "firefox": "60", + "ios": "10.3", + "opera": "48", + "safari": "10.1" +} + +Using modules transform: false + +Using plugins: + transform-template-literals { "ios":"10.3", "safari":"10.1" } + transform-function-name { "edge":"16" } + transform-dotall-regex { "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "opera":"48", "safari":"10.1" } + transform-unicode-regex { "ios":"10.3", "safari":"10.1" } + transform-parameters { "edge":"16" } + transform-block-scoping { "ios":"10.3", "safari":"10.1" } + transform-async-to-generator { "ios":"10.3", "safari":"10.1" } + proposal-async-generator-functions { "chrome":"61", "edge":"16", "ios":"10.3", "opera":"48", "safari":"10.1" } + proposal-object-rest-spread { "edge":"16", "ios":"10.3", "safari":"10.1" } + proposal-unicode-property-regex { "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "opera":"48", "safari":"10.1" } + proposal-json-strings { "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "opera":"48", "safari":"10.1" } + proposal-optional-catch-binding { "chrome":"61", "edge":"16", "ios":"10.3", "opera":"48", "safari":"10.1" } + transform-named-capturing-groups-regex { "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "opera":"48", "safari":"10.1" } + +Using polyfills with `usage` option: + +[/packages/babel-preset-env/test/fixtures/corejs2/usage-browserslist-config-ignore/input.mjs] Added following core-js polyfill: + web.dom.iterable { "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "opera":"48", "safari":"10.1" } diff --git a/packages/babel-preset-env/test/fixtures/corejs2/usage-remove-babel-polyfill-import/output.mjs b/packages/babel-preset-env/test/fixtures/corejs2/usage-remove-babel-polyfill-import/output.mjs new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/babel-preset-env/test/fixtures/corejs3/usage-browserslist-config-ignore/options.json b/packages/babel-preset-env/test/fixtures/corejs3/usage-browserslist-config-ignore/options.json index 95a82bb5ec7a..ffb21b1f8aa2 100644 --- a/packages/babel-preset-env/test/fixtures/corejs3/usage-browserslist-config-ignore/options.json +++ b/packages/babel-preset-env/test/fixtures/corejs3/usage-browserslist-config-ignore/options.json @@ -1,4 +1,5 @@ { + "validateLogs": true, "presets": [ [ "../../../../lib", diff --git a/packages/babel-preset-env/test/fixtures/corejs3/usage-browserslist-config-ignore/stdout.txt b/packages/babel-preset-env/test/fixtures/corejs3/usage-browserslist-config-ignore/stdout.txt new file mode 100644 index 000000000000..af7e5f8e39c4 --- /dev/null +++ b/packages/babel-preset-env/test/fixtures/corejs3/usage-browserslist-config-ignore/stdout.txt @@ -0,0 +1,34 @@ +@babel/preset-env: `DEBUG` option + +Using targets: +{ + "chrome": "61", + "edge": "16", + "firefox": "60", + "ios": "10.3", + "opera": "48", + "safari": "10.1" +} + +Using modules transform: false + +Using plugins: + transform-template-literals { "ios":"10.3", "safari":"10.1" } + transform-function-name { "edge":"16" } + transform-dotall-regex { "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "opera":"48", "safari":"10.1" } + transform-unicode-regex { "ios":"10.3", "safari":"10.1" } + transform-parameters { "edge":"16" } + transform-block-scoping { "ios":"10.3", "safari":"10.1" } + transform-async-to-generator { "ios":"10.3", "safari":"10.1" } + proposal-async-generator-functions { "chrome":"61", "edge":"16", "ios":"10.3", "opera":"48", "safari":"10.1" } + proposal-object-rest-spread { "edge":"16", "ios":"10.3", "safari":"10.1" } + proposal-unicode-property-regex { "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "opera":"48", "safari":"10.1" } + proposal-json-strings { "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "opera":"48", "safari":"10.1" } + proposal-optional-catch-binding { "chrome":"61", "edge":"16", "ios":"10.3", "opera":"48", "safari":"10.1" } + transform-named-capturing-groups-regex { "chrome":"61", "edge":"16", "firefox":"60", "ios":"10.3", "opera":"48", "safari":"10.1" } + +Using polyfills with `usage` option: + +[/packages/babel-preset-env/test/fixtures/corejs3/usage-browserslist-config-ignore/input.mjs] Added following core-js polyfills: + es.array.iterator { "chrome":"61", "opera":"48" } + web.dom-collections.iterator { "chrome":"61", "edge":"16", "ios":"10.3", "opera":"48", "safari":"10.1" } diff --git a/packages/babel-preset-env/test/fixtures/preset-options/safari-10_3-block-scoped/options.json b/packages/babel-preset-env/test/fixtures/preset-options/safari-10_3-block-scoped/options.json index 7eca9afc37fe..daee94dc032e 100644 --- a/packages/babel-preset-env/test/fixtures/preset-options/safari-10_3-block-scoped/options.json +++ b/packages/babel-preset-env/test/fixtures/preset-options/safari-10_3-block-scoped/options.json @@ -1,4 +1,5 @@ { + "validateLogs": true, "presets": [ [ "../../../../lib", diff --git a/packages/babel-preset-env/test/fixtures/preset-options/safari-10_3-block-scoped/stdout.txt b/packages/babel-preset-env/test/fixtures/preset-options/safari-10_3-block-scoped/stdout.txt new file mode 100644 index 000000000000..494481624f2f --- /dev/null +++ b/packages/babel-preset-env/test/fixtures/preset-options/safari-10_3-block-scoped/stdout.txt @@ -0,0 +1,24 @@ +@babel/preset-env: `DEBUG` option + +Using targets: +{ + "safari": "10" +} + +Using modules transform: auto + +Using plugins: + transform-template-literals { "safari":"10" } + transform-dotall-regex { "safari":"10" } + transform-unicode-regex { "safari":"10" } + transform-block-scoping { "safari":"10" } + transform-exponentiation-operator { "safari":"10" } + transform-async-to-generator { "safari":"10" } + proposal-async-generator-functions { "safari":"10" } + proposal-object-rest-spread { "safari":"10" } + proposal-unicode-property-regex { "safari":"10" } + proposal-json-strings { "safari":"10" } + proposal-optional-catch-binding { "safari":"10" } + transform-named-capturing-groups-regex { "safari":"10" } + +Using polyfills: No polyfills were added, since the `useBuiltIns` option was not set. From 0158a6f3098e9cf0d4d1e69b374762959f6323e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Ribaudo?= Date: Wed, 14 Aug 2019 00:03:35 +0200 Subject: [PATCH 6/6] Restore old methos --- .../src/index.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) 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 14dbeebab57d..ba85918ee12f 100644 --- a/packages/babel-helper-transform-fixture-test-runner/src/index.js +++ b/packages/babel-helper-transform-fixture-test-runner/src/index.js @@ -200,17 +200,24 @@ function run(task) { const expectedCode = expected.code; if (!execCode || inputCode) { const actualLogs = { stdout: "", stderr: "" }; + let restoreSpies = null; if (validateLogs) { - jest.spyOn(console, "log").mockImplementation(msg => { + const spy1 = jest.spyOn(console, "log").mockImplementation(msg => { actualLogs.stdout += `${msg}\n`; }); - jest.spyOn(console, "warn").mockImplementation(msg => { + const spy2 = jest.spyOn(console, "warn").mockImplementation(msg => { actualLogs.stderr += `${msg}\n`; }); + restoreSpies = () => { + spy1.mockRestore(); + spy2.mockRestore(); + }; } result = babel.transform(inputCode, getOpts(actual)); + if (restoreSpies) restoreSpies(); + const outputCode = normalizeOutput(result.code); checkDuplicatedNodes(babel, result.ast);