UNPKG

babel-helper-transform-fixture-test-runner

Version:

Transform test runner for babel-helper-fixtures module

310 lines (223 loc) 9.02 kB
"use strict"; exports.__esModule = true; var _getIterator2 = require("babel-runtime/core-js/get-iterator"); var _getIterator3 = _interopRequireDefault(_getIterator2); var _values = require("babel-runtime/core-js/object/values"); var _values2 = _interopRequireDefault(_values); var _keys = require("babel-runtime/core-js/object/keys"); var _keys2 = _interopRequireDefault(_keys); var _extends2 = require("babel-runtime/helpers/extends"); var _extends3 = _interopRequireDefault(_extends2); var _stringify = require("babel-runtime/core-js/json/stringify"); var _stringify2 = _interopRequireDefault(_stringify); exports.default = function (fixturesLoc, name) { var suiteOpts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; var taskOpts = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; var dynamicOpts = arguments[4]; var suites = (0, _babelHelperFixtures2.default)(fixturesLoc); 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 testSuite = _ref; if ((0, _includes2.default)(suiteOpts.ignoreSuites, testSuite.title)) return "continue"; describe(name + "/" + testSuite.title, function () { var _loop3 = function _loop3() { if (_isArray2) { if (_i2 >= _iterator2.length) return "break"; _ref2 = _iterator2[_i2++]; } else { _i2 = _iterator2.next(); if (_i2.done) return "break"; _ref2 = _i2.value; } var task = _ref2; if ((0, _includes2.default)(suiteOpts.ignoreTasks, task.title) || (0, _includes2.default)(suiteOpts.ignoreTasks, testSuite.title + "/" + task.title)) return "continue"; it(task.title, !task.disabled && function () { function runTask() { run(task); } (0, _defaults2.default)(task.options, { filenameRelative: task.expect.filename, sourceFileName: task.actual.filename, sourceMapTarget: task.expect.filename, suppressDeprecationMessages: true, babelrc: false, sourceMap: !!(task.sourceMappings || task.sourceMap), inputSourceMap: task.inputSourceMap || undefined }); (0, _extend2.default)(task.options, taskOpts); if (dynamicOpts) dynamicOpts(task.options, task); var throwMsg = task.options.throws; if (throwMsg) { delete task.options.throws; _assert2.default.throws(runTask, function (err) { return throwMsg === true || err.message.indexOf(throwMsg) >= 0; }); } else { if (task.exec.code) { var result = run(task); if (result && typeof result.then === "function") { return result; } } else { runTask(); } } }); }; _loop4: for (var _iterator2 = testSuite.tests, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : (0, _getIterator3.default)(_iterator2);;) { var _ref2; var _ret2 = _loop3(); switch (_ret2) { case "break": break _loop4; case "continue": continue;} } }); }; _loop2: for (var _iterator = suites, _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;} } }; var _babelCore = require("babel-core"); var babel = _interopRequireWildcard(_babelCore); var _babelHelperFixtures = require("babel-helper-fixtures"); var _babelHelperFixtures2 = _interopRequireDefault(_babelHelperFixtures); var _sourceMap = require("source-map"); var _sourceMap2 = _interopRequireDefault(_sourceMap); var _babelCodeFrame = require("babel-code-frame"); var _babelCodeFrame2 = _interopRequireDefault(_babelCodeFrame); var _defaults = require("lodash/defaults"); var _defaults2 = _interopRequireDefault(_defaults); var _includes = require("lodash/includes"); var _includes2 = _interopRequireDefault(_includes); var _helpers = require("./helpers"); var helpers = _interopRequireWildcard(_helpers); var _extend = require("lodash/extend"); var _extend2 = _interopRequireDefault(_extend); var _merge = require("lodash/merge"); var _merge2 = _interopRequireDefault(_merge); var _assert = require("assert"); var _assert2 = _interopRequireDefault(_assert); var _chai = require("chai"); var _chai2 = _interopRequireDefault(_chai); require("babel-polyfill"); var _fs = require("fs"); var _fs2 = _interopRequireDefault(_fs); var _path = require("path"); var _path2 = _interopRequireDefault(_path); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var babelHelpers = eval((0, _babelCore.buildExternalHelpers)(null, "var")); function wrapPackagesArray(type, names, optionsDir) { return (names || []).map(function (val) { if (typeof val === "string") val = [val]; if (val[0][0] === ".") { if (!optionsDir) { throw new Error("Please provide an options.json in test dir when using a " + "relative plugin path."); } val[0] = _path2.default.resolve(optionsDir, val[0]); } else { val[0] = __dirname + "/../../babel-" + type + "-" + val[0]; } return val; }); } function run(task) { var actual = task.actual; var expect = task.expect; var exec = task.exec; var opts = task.options; var optionsDir = task.optionsDir; function getOpts(self) { var newOpts = (0, _merge2.default)({ filename: self.loc }, opts); newOpts.plugins = wrapPackagesArray("plugin", newOpts.plugins, optionsDir); newOpts.presets = wrapPackagesArray("preset", newOpts.presets, optionsDir).map(function (val) { if (val.length > 2) { throw new Error("Unexpected extra options " + (0, _stringify2.default)(val.slice(2)) + " passed to preset."); } return val; }); return newOpts; } var execCode = exec.code; var result = void 0; var resultExec = void 0; if (execCode) { var execOpts = getOpts(exec); var execDirName = _path2.default.dirname(exec.loc); result = babel.transform(execCode, execOpts); execCode = result.code; try { resultExec = runExec(execOpts, execCode, execDirName); } catch (err) { err.message = exec.loc + ": " + err.message; err.message += (0, _babelCodeFrame2.default)(execCode); throw err; } } var actualCode = actual.code; var expectCode = expect.code; if (!execCode || actualCode) { result = babel.transform(actualCode, getOpts(actual)); if (!expect.code && result.code && !opts.throws && _fs2.default.statSync(_path2.default.dirname(expect.loc)).isDirectory() && !process.env.CI) { console.log("New test file created: " + expect.loc); _fs2.default.writeFileSync(expect.loc, result.code); } else { actualCode = result.code.trim(); _chai2.default.expect(actualCode).to.be.equal(expectCode, actual.loc + " !== " + expect.loc); } } if (task.sourceMap) { _chai2.default.expect(result.map).to.deep.equal(task.sourceMap); } if (task.sourceMappings) { var consumer = new _sourceMap2.default.SourceMapConsumer(result.map); task.sourceMappings.forEach(function (mapping) { var actual = mapping.original; var expect = consumer.originalPositionFor(mapping.generated); _chai2.default.expect({ line: expect.line, column: expect.column }).to.deep.equal(actual); }); } if (execCode && resultExec) { return resultExec; } } function runExec(opts, execCode, execDirname) { var sandbox = (0, _extends3.default)({}, helpers, { babelHelpers: babelHelpers, assert: _chai2.default.assert, transform: babel.transform, opts: opts, exports: {}, require: function (_require) { function require(_x) { return _require.apply(this, arguments); } require.toString = function () { return _require.toString(); }; return require; }(function (id) { return require(id[0] === "." ? _path2.default.resolve(execDirname, id) : id); }) }); var fn = new (Function.prototype.bind.apply(Function, [null].concat((0, _keys2.default)(sandbox), [execCode])))(); return fn.apply(null, (0, _values2.default)(sandbox)); } module.exports = exports["default"];