UNPKG

babel-helper-fixtures

Version:

Helper function to support fixtures

259 lines (189 loc) 7 kB
"use strict"; exports.__esModule = true; var _getIterator2 = require("babel-runtime/core-js/get-iterator"); var _getIterator3 = _interopRequireDefault(_getIterator2); exports.default = get; exports.multiple = multiple; exports.readFile = readFile; var _cloneDeep = require("lodash/cloneDeep"); var _cloneDeep2 = _interopRequireDefault(_cloneDeep); var _trimEnd = require("lodash/trimEnd"); var _trimEnd2 = _interopRequireDefault(_trimEnd); var _tryResolve = require("try-resolve"); var _tryResolve2 = _interopRequireDefault(_tryResolve); var _clone = require("lodash/clone"); var _clone2 = _interopRequireDefault(_clone); var _merge = require("lodash/merge"); var _merge2 = _interopRequireDefault(_merge); var _semver = require("semver"); var _semver2 = _interopRequireDefault(_semver); var _path = require("path"); var _path2 = _interopRequireDefault(_path); var _fs = require("fs"); var _fs2 = _interopRequireDefault(_fs); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var nodeVersion = _semver2.default.clean(process.version.slice(1)); function humanize(val, noext) { if (noext) val = _path2.default.basename(val, _path2.default.extname(val)); return val.replace(/-/g, " "); } function assertDirectory(loc) { if (!_fs2.default.statSync(loc).isDirectory()) { throw new Error("Expected " + loc + " to be a directory."); } } function shouldIgnore(name, blacklist) { if (blacklist && blacklist.indexOf(name) >= 0) { return true; } var ext = _path2.default.extname(name); var base = _path2.default.basename(name, ext); return name[0] === "." || ext === ".md" || base === "LICENSE" || base === "options"; } function get(entryLoc) { var suites = []; var rootOpts = {}; var rootOptsLoc = (0, _tryResolve2.default)(entryLoc + "/options"); if (rootOptsLoc) rootOpts = require(rootOptsLoc); var _loop = function _loop() { if (_isArray) { if (_i >= _iterator.length) return "break"; _ref = _iterator[_i++]; } else { _i = _iterator.next(); if (_i.done) return "break"; _ref = _i.value; } var suiteName = _ref; if (shouldIgnore(suiteName)) return "continue"; var suite = { options: (0, _clone2.default)(rootOpts), tests: [], title: humanize(suiteName), filename: entryLoc + "/" + suiteName }; assertDirectory(suite.filename); suites.push(suite); var suiteOptsLoc = (0, _tryResolve2.default)(suite.filename + "/options"); if (suiteOptsLoc) suite.options = require(suiteOptsLoc); for (var _iterator2 = _fs2.default.readdirSync(suite.filename), _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : (0, _getIterator3.default)(_iterator2);;) { var _ref2; if (_isArray2) { if (_i2 >= _iterator2.length) break; _ref2 = _iterator2[_i2++]; } else { _i2 = _iterator2.next(); if (_i2.done) break; _ref2 = _i2.value; } var taskName = _ref2; push(taskName, suite.filename + "/" + taskName); } function push(taskName, taskDir) { var actualLocAlias = suiteName + "/" + taskName + "/actual.js"; var expectLocAlias = suiteName + "/" + taskName + "/expected.js"; var execLocAlias = suiteName + "/" + taskName + "/exec.js"; var actualLoc = taskDir + "/actual.js"; var expectLoc = taskDir + "/expected.js"; var execLoc = taskDir + "/exec.js"; if (_fs2.default.statSync(taskDir).isFile()) { var ext = _path2.default.extname(taskDir); if (ext !== ".js" && ext !== ".module.js") return; execLoc = taskDir; } if (_tryResolve2.default.relative(expectLoc + "on")) { expectLoc += "on"; expectLocAlias += "on"; } var taskOpts = (0, _cloneDeep2.default)(suite.options); var taskOptsLoc = (0, _tryResolve2.default)(taskDir + "/options"); if (taskOptsLoc) (0, _merge2.default)(taskOpts, require(taskOptsLoc)); var test = { optionsDir: taskOptsLoc ? _path2.default.dirname(taskOptsLoc) : null, title: humanize(taskName, true), disabled: taskName[0] === ".", options: taskOpts, exec: { loc: execLoc, code: readFile(execLoc), filename: execLocAlias }, actual: { loc: actualLoc, code: readFile(actualLoc), filename: actualLocAlias }, expect: { loc: expectLoc, code: readFile(expectLoc), filename: expectLocAlias } }; if (taskOpts.minNodeVersion) { var minimumVersion = _semver2.default.clean(taskOpts.minNodeVersion); if (minimumVersion == null) { throw new Error("'minNodeVersion' has invalid semver format: " + taskOpts.minNodeVersion); } if (_semver2.default.lt(nodeVersion, minimumVersion)) { return; } delete taskOpts.minNodeVersion; } if (test.exec.code.indexOf("// Async.") >= 0) { return; } suite.tests.push(test); var sourceMappingsLoc = taskDir + "/source-mappings.json"; if (_fs2.default.existsSync(sourceMappingsLoc)) { test.sourceMappings = JSON.parse(readFile(sourceMappingsLoc)); } var sourceMapLoc = taskDir + "/source-map.json"; if (_fs2.default.existsSync(sourceMapLoc)) { test.sourceMap = JSON.parse(readFile(sourceMapLoc)); } var inputMapLoc = taskDir + "/input-source-map.json"; if (_fs2.default.existsSync(inputMapLoc)) { test.inputSourceMap = JSON.parse(readFile(inputMapLoc)); } } }; _loop2: for (var _iterator = _fs2.default.readdirSync(entryLoc), _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { var _ref; var _ret = _loop(); switch (_ret) { case "break": break _loop2; case "continue": continue;} } return suites; } function multiple(entryLoc, ignore) { var categories = {}; for (var _iterator3 = _fs2.default.readdirSync(entryLoc), _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : (0, _getIterator3.default)(_iterator3);;) { var _ref3; if (_isArray3) { if (_i3 >= _iterator3.length) break; _ref3 = _iterator3[_i3++]; } else { _i3 = _iterator3.next(); if (_i3.done) break; _ref3 = _i3.value; } var name = _ref3; if (shouldIgnore(name, ignore)) continue; var _loc = _path2.default.join(entryLoc, name); assertDirectory(_loc); categories[name] = get(_loc); } return categories; } function readFile(filename) { if (_fs2.default.existsSync(filename)) { var file = (0, _trimEnd2.default)(_fs2.default.readFileSync(filename, "utf8")); file = file.replace(/\r\n/g, "\n"); return file; } else { return ""; } }