funcunit
Version:
<!-- @hide title
172 lines (142 loc) • 4.15 kB
JavaScript
'use strict';
var util = require('util');
var pkg = require('./package.json');
var extend = util._extend;
var geSaLaKaCuLa = require('gesalakacula');
// No Karma options are passed after the double dash option (`--`)
// Example : karma start --single-run -- --polyfill
// >> { _: [], polyfill: true }
var _argv = process.argv;
var argv = require('minimist')(_argv.slice(_argv.indexOf('--') + 1));
var options = extend({
travis: process.env.TRAVIS,
polyfill: false,
saucelabs: false,
ie8: false,
coverage: false
}, argv);
if (options.ie8) {
console.log('IE8 Mode !\n - polyfill required\n');
options.polyfill = true;
}
if (options.saucelabs) {
options.polyfill = true;
}
////
module.exports = function(config) {
var files = [
'test/_helper.js',
[options['babel'] ? 'node_modules/regenerator/runtime.js' : ''],
[!options.ie8 ? (!options['babel'] ? 'node_modules/traceur/bin/traceur.js' : 'node_modules/babel-core/browser.js') : ''],
'dist/es6-module-loader' + (options.polyfill ? '' : '-sans-promises') + '.src.js',
'test/_browser.js',
'test/browser-script-type-module.js',
'test/custom-loader.js',
[!options.ie8 ? 'test/*.spec.js' : 'test/*.normalize.spec.js'],
{pattern: 'test/{loader,loads,syntax,worker}/**/*', included: false},
{pattern: 'node_modules/traceur/bin/traceur.js', included: false},
{pattern: 'node_modules/babel-core/browser.js', included: false},
{pattern: 'node_modules/when/es6-shim/Promise.js', included: false},
{pattern: 'dist/es6-module-loader*.js', included: false}
];
// Default Config
config.set({
basePath: '',
frameworks: ['mocha', 'expect'],
files: flatten(files),
reporters: ['mocha'],
browsers: ['Chrome', 'Firefox'],
client: {
mocha: {
reporter: 'html',
timeout: 8000
},
system: {
transpiler: options.babel ? 'babel' : 'traceur'
}
}
});
if (options.coverage) {
config.set({
reporters: ['mocha', 'coverage'],
preprocessors: {
'dist/es6-module-loader*.src.js': ['coverage']
},
coverageReporter: {
type : 'html',
dir : 'coverage/'
},
browsers: ['Chrome']
});
}
if (options.travis) {
// TRAVIS config overwrite
config.set({
singleRun: true,
reporters: ['dots'],
customLaunchers: {
'TR_Chrome': {
base: 'Chrome',
flags: ['--no-sandbox']
}
},
browsers: ['TR_Chrome', 'Firefox']
});
}
if (options.saucelabs) {
var customLaunchers = geSaLaKaCuLa({
'Windows 7': {
'internet explorer': '9..11'
}
});
// IE tests disabled for now (https://github.com/ModuleLoader/es6-module-loader/issues/295)
customLaunchers = undefined;
if (options.ie8) {
customLaunchers = geSaLaKaCuLa({
'Windows 7': {
'internet explorer': '8'
}
});
}
var now = new Date();
var buildData = options.travis ?
{
location: 'TRAVIS',
name: process.env.TRAVIS_JOB_NUMBER,
id: process.env.TRAVIS_BUILD_ID
}
:
{
location: 'LOCAL',
name: now.toString(),
id: +now
};
var build = util.format('%s #%s (%s)',
buildData.location, buildData.name, buildData.id);
console.log('SauceLabs Run\n- Build : ' + build + '\n');
config.set({
reporters: ['dots', 'saucelabs'],
browserDisconnectTimeout: 10000,
browserDisconnectTolerance: 2,
browserNoActivityTimeout: 30000,
captureTimeout: 120000,
sauceLabs: {
testName: pkg.name,
recordScreenshots: false,
build: build,
tunnelIdentifier: options.travis ?
process.env.TRAVIS_JOB_NUMBER : Math.floor(Math.random() * 1000)
}
});
if (customLaunchers)
config.set({
browsers: Object.keys(customLaunchers),
customLaunchers: customLaunchers
});
}
};
function flatten(arr) {
return arr.reduce(function(memo, val) {
return memo.concat(util.isArray(val) ? flatten(val) : val ? [val] : []);
}, []);
}