From 64ed1ba1676f5c0388d5950467c43d7eb025bf3d Mon Sep 17 00:00:00 2001 From: Henry Zhu Date: Fri, 9 Dec 2016 14:40:39 -0500 Subject: [PATCH] add tests for electron option Closes gh-55 --- experimental/babel-preset-env/src/index.js | 45 ++++++++++++++----- .../preset-options/electron/actual.js | 3 ++ .../preset-options/electron/expected.js | 8 ++++ .../preset-options/electron/options.json | 11 +++++ experimental/babel-preset-env/test/index.js | 29 ++++++++++++ 5 files changed, 84 insertions(+), 12 deletions(-) create mode 100644 experimental/babel-preset-env/test/fixtures/preset-options/electron/actual.js create mode 100644 experimental/babel-preset-env/test/fixtures/preset-options/electron/expected.js create mode 100644 experimental/babel-preset-env/test/fixtures/preset-options/electron/options.json diff --git a/experimental/babel-preset-env/src/index.js b/experimental/babel-preset-env/src/index.js index 9ea7cd7d85..d764f5084f 100644 --- a/experimental/babel-preset-env/src/index.js +++ b/experimental/babel-preset-env/src/index.js @@ -83,6 +83,12 @@ export const getCurrentNodeVersion = () => { }; export const electronVersionToChromeVersion = (semverVer) => { + semverVer = String(semverVer); + + if (semverVer === "1") { + semverVer = "1.0"; + } + const m = semverVer.match(/^(\d+\.\d+)/); if (!m) { throw new Error("Electron version must be a semver version"); @@ -96,23 +102,38 @@ export const electronVersionToChromeVersion = (semverVer) => { return result; }; -export const getTargets = (targetOpts = {}) => { - if (targetOpts.node === true || targetOpts.node === "current") { - targetOpts.node = getCurrentNodeVersion(); +const _extends = Object.assign || function (target) { + for (let i = 1; i < arguments.length; i++) { + const source = arguments[i]; + for (let key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + return target; +}; + + +export const getTargets = (targets = {}) => { + const targetOps = _extends({}, targets); + + if (targetOps.node === true || targetOps.node === "current") { + targetOps.node = getCurrentNodeVersion(); } // Rewrite Electron versions to their Chrome equivalents - if (targetOpts.electron) { - targetOpts.chrome = electronVersionToChromeVersion(targetOpts.electron); - delete targetOpts.electron; + if (targetOps.electron) { + targetOps.chrome = electronVersionToChromeVersion(targetOps.electron); + delete targetOps.electron; } - const browserOpts = targetOpts.browsers; + const browserOpts = targetOps.browsers; if (isBrowsersQueryValid(browserOpts)) { const queryBrowsers = getLowestVersions(browserslist(browserOpts)); - return mergeBrowsers(queryBrowsers, targetOpts); + return mergeBrowsers(queryBrowsers, targetOps); } - return targetOpts; + return targetOps; }; // TODO: Allow specifying plugins as either shortened or full name @@ -189,18 +210,18 @@ export default function buildPreset(context, opts = {}) { hasBeenLogged = true; console.log("babel-preset-env: `DEBUG` option"); console.log(""); - console.log(`Using targets: ${JSON.stringify(targets, null, 2)}`); + console.log(`Using targets: ${JSON.stringify(opts.targets, null, 2)}`); console.log(""); console.log(`modules transform: ${moduleType}`); console.log(""); console.log("Using plugins:"); transformations.forEach((transform) => { - logPlugin(transform, targets, pluginList); + logPlugin(transform, opts.targets, pluginList); }); console.log("\nUsing polyfills:"); if (useBuiltIns && polyfills.length) { polyfills.forEach((polyfill) => { - logPlugin(polyfill, targets, builtInsList); + logPlugin(polyfill, opts.targets, builtInsList); }); } } diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/electron/actual.js b/experimental/babel-preset-env/test/fixtures/preset-options/electron/actual.js new file mode 100644 index 0000000000..428919e358 --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/preset-options/electron/actual.js @@ -0,0 +1,3 @@ +import "babel-polyfill"; + +a ** b; diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/electron/expected.js b/experimental/babel-preset-env/test/fixtures/preset-options/electron/expected.js new file mode 100644 index 0000000000..102926c440 --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/preset-options/electron/expected.js @@ -0,0 +1,8 @@ +import "core-js/modules/es7.string.pad-start"; +import "core-js/modules/es7.string.pad-end"; +import "core-js/modules/web.timers"; +import "core-js/modules/web.immediate"; +import "core-js/modules/web.dom.iterable"; + + +a ** b; \ No newline at end of file diff --git a/experimental/babel-preset-env/test/fixtures/preset-options/electron/options.json b/experimental/babel-preset-env/test/fixtures/preset-options/electron/options.json new file mode 100644 index 0000000000..873cef112b --- /dev/null +++ b/experimental/babel-preset-env/test/fixtures/preset-options/electron/options.json @@ -0,0 +1,11 @@ +{ + "presets": [ + ["../../../../lib", { + "targets": { + "electron": 1.5 + }, + "modules": false, + "useBuiltIns": true + }] + ] +} diff --git a/experimental/babel-preset-env/test/index.js b/experimental/babel-preset-env/test/index.js index d439b21ff5..13e4ebc982 100644 --- a/experimental/babel-preset-env/test/index.js +++ b/experimental/babel-preset-env/test/index.js @@ -2,6 +2,7 @@ const babelPresetEnv = require("../lib/index.js"); const assert = require("assert"); +const electronToChromiumData = require("../data/electronToChromium"); const { validateModulesOption, @@ -25,6 +26,34 @@ describe("babel-preset-env", () => { }); }); + describe("getTargets + electron", () => { + it("should work with a string", function() { + assert.deepEqual(babelPresetEnv.getTargets({ + electron: "1.0" + }), { + chrome: 50 + }); + }); + + it("should work with a number", function() { + assert.deepEqual(babelPresetEnv.getTargets({ + electron: 1.0 + }), { + chrome: 50 + }); + }); + + Object.keys(electronToChromiumData).forEach((electronVersion) => { + it(`"should work for Electron: ${electronVersion}`, function() { + assert.deepEqual(babelPresetEnv.getTargets({ + electron: electronVersion + }), { + chrome: electronToChromiumData[electronVersion] + }); + }); + }); + }); + describe("isPluginRequired", () => { it("returns true if no targets are specified", () => { const isRequired = babelPresetEnv.isPluginRequired({}, {});