From 8abe061fab6b51bb8929ea91fe17c6a32bbc63e3 Mon Sep 17 00:00:00 2001 From: Buu Nguyen Date: Thu, 25 May 2017 08:59:01 -0700 Subject: [PATCH] Support specifying minimum Node version a test requires (#5765) --- CONTRIBUTING.md | 9 +++++++++ packages/babel-helper-fixtures/package.json | 3 ++- packages/babel-helper-fixtures/src/index.js | 19 +++++++++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2f47779de3..d0482635a0 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -188,6 +188,15 @@ If you need to check for an error that is thrown you can add to the `options.jso } ``` +If the test requires a minimum Node version, you can add `minNodeVersion` (must be in semver format). + +```js +// options.json example +{ + "minNodeVersion": "5.0.0" +} +``` + #### Bootstrapping expected output For both `babel-plugin-x` and `babylon`, you can easily generate an `expected.js`/`expected.json` automatically by just providing `actual.js` and running the tests as you usually would. diff --git a/packages/babel-helper-fixtures/package.json b/packages/babel-helper-fixtures/package.json index aeeb536a02..367cb4b165 100644 --- a/packages/babel-helper-fixtures/package.json +++ b/packages/babel-helper-fixtures/package.json @@ -8,6 +8,7 @@ "main": "lib/index.js", "dependencies": { "lodash": "^4.2.0", - "try-resolve": "^1.0.0" + "try-resolve": "^1.0.0", + "semver": "^5.3.0" } } diff --git a/packages/babel-helper-fixtures/src/index.js b/packages/babel-helper-fixtures/src/index.js index 4b905cc7cd..96adcabab0 100644 --- a/packages/babel-helper-fixtures/src/index.js +++ b/packages/babel-helper-fixtures/src/index.js @@ -3,9 +3,12 @@ import trimEnd from "lodash/trimEnd"; import resolve from "try-resolve"; import clone from "lodash/clone"; import merge from "lodash/merge"; +import semver from "semver"; import path from "path"; import fs from "fs"; +const nodeVersion = semver.clean(process.version.slice(1)); + function humanize(val, noext) { if (noext) val = path.basename(val, path.extname(val)); return val.replace(/-/g, " "); @@ -125,6 +128,22 @@ export default function get(entryLoc): Array { }, }; + // If there's node requirement, check it before pushing task + if (taskOpts.minNodeVersion) { + const minimumVersion = semver.clean(taskOpts.minNodeVersion); + + if (minimumVersion == null) { + throw new Error(`'minNodeVersion' has invalid semver format: ${taskOpts.minNodeVersion}`); + } + + if (semver.lt(nodeVersion, minimumVersion)) { + return; + } + + // Delete to avoid option validation error + delete taskOpts.minNodeVersion; + } + // traceur checks if (test.exec.code.indexOf("// Async.") >= 0) {