var path = require('path') var extend = require('util')._extend var minimist = require('minimist') var createPattern = function (path) { return {pattern: path, included: true, served: true, watched: false} } var initMocha = function (files, config) { var mochaPath = path.dirname(require.resolve('mocha')) files.unshift(createPattern(path.join(__dirname, 'adapter.js'))) config = config || {} config.client = config.client || {} var mochaConfig = config.client.mocha = getMochaOpts(config.client.mocha || {}) if (mochaConfig.require && mochaConfig.require.map) { mochaConfig.require.map(function (requirePath) { return files.unshift(createPattern(requirePath)) }) } files.unshift(createPattern(path.join(mochaPath, 'mocha.js'))) if (mochaConfig.reporter) { files.unshift(createPattern(path.join(mochaPath, 'mocha.css'))) } } initMocha.$inject = ['config.files', 'config'] module.exports = { 'framework:mocha': ['factory', initMocha] } function getMochaOpts (mochaConfig) { var optsPath = typeof mochaConfig.opts === 'string' ? mochaConfig.opts : 'test/mocha.opts' if (!mochaConfig.opts) { return mochaConfig } delete mochaConfig.opts var fs = require('fs') if (!fs.existsSync(optsPath)) { return mochaConfig } return extend(normalizeOpts(minimist(fs.readFileSync(optsPath, 'utf8') .replace(/\\\s/g, '%20') .split(/\s/) .filter(Boolean) .map(function (value) { return value.replace(/%20/g, ' ') }))), mochaConfig) function normalizeOpts (opts) { opts = [ 'require', 'ui', 'reporter', 'globals', 'grep', 'timeout', 'slow', 'bail', 'ignoreLeaks' ].reduce(function (result, optName) { if (opts.hasOwnProperty(optName)) { result[optName] = opts[optName] } return result }, {}) opts.require = [].concat(opts.require || []) return opts } }