105 lines
2.6 KiB
JavaScript
105 lines
2.6 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
var path = require('path');
|
|
var spawn = require('child_process').spawn;
|
|
|
|
var wd = require('wd');
|
|
var devserver = require('./dev-server.js');
|
|
|
|
var SELENIUM_PATH = '../node_modules/.bin/start-selenium';
|
|
var testUrl = 'http://127.0.0.1:8000/tests/test.html';
|
|
var testTimeout = 2 * 60 * 1000;
|
|
var currentTest = '';
|
|
var results = {};
|
|
var client = {};
|
|
|
|
var browsers = [
|
|
'firefox',
|
|
// Temporarily disable safari until it is fixed (#1068)
|
|
// 'safari',
|
|
'chrome'
|
|
];
|
|
|
|
// Don't do it on trais
|
|
if (process.env.TRAVIS) {
|
|
console.log('skipping tests on travis');
|
|
process.exit(0)
|
|
}
|
|
var numBrowsers = browsers.length;
|
|
var finishedBrowsers = 0;
|
|
function startServers(callback) {
|
|
|
|
// Starts the file and CORS proxy
|
|
devserver.start();
|
|
|
|
// Start selenium
|
|
var started = false;
|
|
var selenium = spawn(path.resolve(__dirname, SELENIUM_PATH));
|
|
|
|
selenium.stdout.on('data', function(data) {
|
|
if (!started &&
|
|
/Started org.openqa.jetty.jetty.servlet.ServletHandler/.test(data)) {
|
|
started = true;
|
|
callback();
|
|
}
|
|
});
|
|
}
|
|
|
|
function testsComplete() {
|
|
var passed = Object.keys(results).length && Object.keys(results).every(function(x) {
|
|
return !results[x].failed;
|
|
});
|
|
|
|
if (passed) {
|
|
console.log('Woot, all ' + Object.keys(results).length + ' tests passed');
|
|
process.exit(0);
|
|
} else if (!Object.keys(results).length) {
|
|
console.error('no tests ran');
|
|
process.exit(4);
|
|
} else {
|
|
console.error('we ran ' + Object.keys(results).length + ' tests and ' + results[x].failed + ' failed');
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
|
|
function startTest() {
|
|
if (numBrowsers === finishedBrowsers) {
|
|
return testsComplete();
|
|
}
|
|
if (!browsers.length) {
|
|
return;
|
|
}
|
|
|
|
var currentTest = browsers.pop();
|
|
console.log('[' + currentTest + '] starting');
|
|
var client = wd.promiseChainRemote();
|
|
client.init({
|
|
browserName: currentTest
|
|
}).get(testUrl).setAsyncScriptTimeout(testTimeout)
|
|
.executeAsync('var cb = arguments[arguments.length - 1];QUnit.done(function( report ) {cb(report)});')
|
|
.then(function (result) {
|
|
finishedBrowsers++;
|
|
if (!result.failed) {
|
|
console.log('[' + currentTest + '] passed ' + result.passed + ' of ' + result.total + ' tests');
|
|
} else {
|
|
console.log('[' + currentTest + '] failed ' + result.failed + ' of ' + result.total + ' tests');
|
|
return client.quit().then(function() {
|
|
process.exit(2);
|
|
})
|
|
}
|
|
results[currentTest] = result;
|
|
}).quit()
|
|
.then(startTest,function(e) {
|
|
console.error(e);
|
|
console.error('Doh, tests failed');
|
|
client.quit();
|
|
process.exit(3);
|
|
});
|
|
|
|
}
|
|
|
|
startServers(function() {
|
|
startTest();
|
|
});
|