diff --git a/api.js b/api.js index e13a7c41c..a96503b37 100644 --- a/api.js +++ b/api.js @@ -6,7 +6,7 @@ var fs = require('fs'); var flatten = require('arr-flatten'); var Promise = require('bluebird'); var figures = require('figures'); -var assign = require('object-assign'); +var objectAssign = require('object-assign'); var globby = require('globby'); var chalk = require('chalk'); var fork = require('./lib/fork'); @@ -18,7 +18,8 @@ function Api(files, options) { EventEmitter.call(this); - assign(this, options); + objectAssign(this, options); + this.options = options; this.rejectionCount = 0; this.exceptionCount = 0; @@ -40,23 +41,7 @@ util.inherits(Api, EventEmitter); module.exports = Api; Api.prototype._runFile = function (file) { - var args = [file]; - - if (this.failFast) { - args.push('--fail-fast'); - } - - if (this.serial) { - args.push('--serial'); - } - - // Forward the `time-require` `--sorted` flag. - // Intended for internal optimization tests only. - if (this._sorted) { - args.push('--sorted'); - } - - return fork(args) + return fork(file, this.options) .on('stats', this._handleStats) .on('test', this._handleTest) .on('unhandledRejections', this._handleRejections) @@ -162,7 +147,7 @@ Api.prototype.run = function () { if (++statsCount === self.fileCount) { self.emit('ready'); - var method = self.serial ? 'mapSeries' : 'map'; + var method = self.options.serial ? 'mapSeries' : 'map'; deferred.resolve(Promise[method](files, function (file, index) { return tests[index].run(); diff --git a/index.js b/index.js index cf0ed5d54..31d7153bb 100644 --- a/index.js +++ b/index.js @@ -1,6 +1,5 @@ 'use strict'; var relative = require('path').relative; -var hasFlag = require('has-flag'); var chalk = require('chalk'); var serializeError = require('serialize-error'); var globals = require('./lib/globals'); @@ -8,11 +7,13 @@ var Runner = require('./lib/runner'); var send = require('./lib/send'); var log = require('./lib/logger'); -var runner = new Runner(); - // note that test files have require('ava') require('./lib/babel').avaRequired = true; +var opts = JSON.parse(process.argv[2]); + +var runner = new Runner(opts); + // check if the test is being run without AVA cli var isForked = typeof process.send === 'function'; @@ -45,7 +46,7 @@ function test(props) { send('test', props); - if (props.error && hasFlag('fail-fast')) { + if (props.error && opts.failFast) { isFailed = true; exit(); } diff --git a/lib/babel.js b/lib/babel.js index cbf8f2b72..dcb7d3456 100644 --- a/lib/babel.js +++ b/lib/babel.js @@ -2,7 +2,14 @@ var debug = require('debug')('ava'); +var opts = JSON.parse(process.argv[2]); + if (debug.enabled) { + // Forward the `time-require` `--sorted` flag. + // Intended for internal optimization tests only. + if (opts._sorted) { + process.argv.push('--sorted'); + } require('time-require'); } @@ -31,7 +38,7 @@ var hasGenerator = require('has-generator'); var serializeError = require('serialize-error'); var send = require('./send'); -var testPath = process.argv[2]; +var testPath = opts.file; // include local babel and fallback to ava's babel var babel; diff --git a/lib/fork.js b/lib/fork.js index 806ecd01b..d0f66446b 100644 --- a/lib/fork.js +++ b/lib/fork.js @@ -1,23 +1,22 @@ 'use strict'; var childProcess = require('child_process'); var path = require('path'); +var objectAssign = require('object-assign'); var Promise = require('bluebird'); var debug = require('debug')('ava'); var send = require('./send'); -module.exports = function (args) { - if (!Array.isArray(args)) { - args = [args]; - } - +module.exports = function (file, opts) { var filepath = path.join(__dirname, 'babel.js'); - var file = args[0]; + opts = objectAssign({file: file}, opts); var options = { cwd: path.dirname(file), stdio: ['ignore', process.stderr, process.stderr] }; + var args = [JSON.stringify(opts)]; + var ps = childProcess.fork(filepath, args, options); var promise = new Promise(function (resolve, reject) { diff --git a/lib/runner.js b/lib/runner.js index 293347d5f..8de51def9 100644 --- a/lib/runner.js +++ b/lib/runner.js @@ -2,7 +2,6 @@ var EventEmitter = require('events').EventEmitter; var util = require('util'); var Promise = require('bluebird'); -var hasFlag = require('has-flag'); var Test = require('./test'); var Hook = require('./hook'); var objectAssign = require('object-assign'); @@ -24,6 +23,8 @@ function Runner(opts) { EventEmitter.call(this); + this.options = opts || {}; + this.results = []; this.tests = []; @@ -130,7 +131,7 @@ Runner.prototype._runTest = function (test) { }; Runner.prototype._runConcurrent = function (tests) { - if (hasFlag('serial')) { + if (this.options.serial) { return this._runSerial(tests); } diff --git a/package.json b/package.json index 41e83b348..71c31bb09 100644 --- a/package.json +++ b/package.json @@ -92,7 +92,6 @@ "figures": "^1.4.0", "fn-name": "^2.0.0", "globby": "^4.0.0", - "has-flag": "^1.0.0", "has-generator": "^1.0.0", "is-generator-fn": "^1.0.0", "is-observable": "^0.1.0",