lots of changes, should have committed earlier
This commit is contained in:
@ -5,69 +5,84 @@ var open = require('open');
|
||||
var fs = require('fs');
|
||||
var path = require('path');
|
||||
var async = require('async');
|
||||
var chalk = require('chalk');
|
||||
|
||||
var yamlTestSourceFile = path.join(__dirname, '../../test/integration/yaml_suite/index.js');
|
||||
var yamlTestBundleFile = path.join(__dirname, '../../test/browser_integration/yaml_tests.js');
|
||||
var yamlTestBundleFile = path.join(__dirname, '../../test/integration/browser_yaml_suite/yaml_tests.js');
|
||||
var clientEntryFile = path.join(__dirname, '../../src/elasticsearch.js');
|
||||
|
||||
var browsers = _.transform({
|
||||
var browserAppNames = _.transform({
|
||||
safari: {
|
||||
darwin: 'Safari'
|
||||
},
|
||||
chrome: {
|
||||
darwin: 'Google Chrome',
|
||||
win32: 'Google Chrome',
|
||||
executable: 'google-chrome'
|
||||
linux: 'google-chrome'
|
||||
},
|
||||
chromium: {
|
||||
|
||||
executable: 'chromium-browser',
|
||||
linux: 'chromium-browser',
|
||||
},
|
||||
firefox: {
|
||||
darwin: 'Firefox',
|
||||
win32: 'Firefox',
|
||||
executable: 'firefox'
|
||||
linux: 'firefox'
|
||||
},
|
||||
opera: {
|
||||
darwin: 'Opera',
|
||||
win32: 'Opera',
|
||||
executable: 'opera'
|
||||
linux: 'opera'
|
||||
}
|
||||
}, function (browsers, config, name) {
|
||||
}, function (browserAppNames, config, name) {
|
||||
if (config[process.platform]) {
|
||||
browsers[name] = config[process.platform];
|
||||
browserAppNames[name] = config[process.platform];
|
||||
return;
|
||||
}
|
||||
|
||||
if (process.platform !== 'darwin' && process.platform !== 'win32' && config.executable) {
|
||||
browsers[name] = config.executable;
|
||||
if (process.platform !== 'darwin' && process.platform !== 'win32' && config.linux) {
|
||||
browserAppNames[name] = config.executable;
|
||||
return;
|
||||
}
|
||||
}, {});
|
||||
|
||||
var argv = require('optimist')
|
||||
.default('browser', 'chrome')
|
||||
.default('force_gen', false)
|
||||
.boolean('force_gen')
|
||||
.alias('f', 'force_gen')
|
||||
.default('host', 'localhost')
|
||||
.default('port', 9200)
|
||||
.default({
|
||||
browsers: '*',
|
||||
forceGen: false,
|
||||
host: 'localhost',
|
||||
port: 9200
|
||||
})
|
||||
.boolean('forceGen')
|
||||
.alias({
|
||||
f: 'forceGen',
|
||||
b: 'browsers',
|
||||
h: 'host',
|
||||
p: 'port'
|
||||
})
|
||||
.argv;
|
||||
|
||||
var browserAppName;
|
||||
server.browsers = [];
|
||||
|
||||
if (argv.browsers === '*') {
|
||||
server.browsers = _.keys(browserAppNames);
|
||||
} else {
|
||||
argv.browsers.split(',').forEach(function (browser) {
|
||||
server.browsers.push(browser);
|
||||
});
|
||||
}
|
||||
|
||||
var badKeys = _.difference(server.browsers, _.keys(browserAppNames));
|
||||
if (badKeys.length) {
|
||||
console.error('Invalid keys: ' + badKeys.join(', '));
|
||||
process.exit();
|
||||
} else {
|
||||
console.log('opening browser suite in', server.browsers);
|
||||
}
|
||||
|
||||
async.series([
|
||||
function (done) {
|
||||
if (browsers.hasOwnProperty(argv.browser)) {
|
||||
browserAppName = browsers[argv.browser];
|
||||
done();
|
||||
} else {
|
||||
done('--browser must be set to one of ' + _.keys(browsers).join(', ') + ' on this platform');
|
||||
}
|
||||
},
|
||||
function (done) {
|
||||
fs.exists('dist', function (yes) {
|
||||
if (!argv.force_gen && yes) {
|
||||
if (!argv.forceGen && yes) {
|
||||
done();
|
||||
return;
|
||||
}
|
||||
@ -82,7 +97,7 @@ async.series([
|
||||
},
|
||||
function (done) {
|
||||
fs.exists(yamlTestBundleFile, function (yes) {
|
||||
if (!argv.force_gen && yes) {
|
||||
if (!argv.forceGen && yes) {
|
||||
done();
|
||||
return;
|
||||
}
|
||||
@ -131,13 +146,32 @@ async.series([
|
||||
var port = server.address().port;
|
||||
console.log('server listening on port', port);
|
||||
|
||||
open('http://localhost:' + port + '?es_hostname=' + encodeURIComponent(argv.host) +
|
||||
'&es_port=' + encodeURIComponent(argv.port) +
|
||||
'&browser=' + encodeURIComponent(argv.browser), browserAppName);
|
||||
async.eachSeries(_.clone(server.browsers), function (browser, done) {
|
||||
open('http://localhost:' + port +
|
||||
'?es_hostname=' + encodeURIComponent(argv.host) +
|
||||
'&es_port=' + encodeURIComponent(argv.port) +
|
||||
'&browser=' + encodeURIComponent(browser), browserAppNames[browser]);
|
||||
|
||||
server.once('browser complete', function () {
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
server.on('tests done', function (success) {
|
||||
console.log('test completed', success ? 'successfully' : 'but failed');
|
||||
server.on('tests done', function (report) {
|
||||
var reports = [];
|
||||
var success = true;
|
||||
_.each(report, function (testSucceeded, browser) {
|
||||
var msg = browser + ':' + (success ? '✔︎' : '⚑');
|
||||
if (testSucceeded) {
|
||||
msg = chalk.green(msg);
|
||||
} else {
|
||||
msg = chalk.red(msg);
|
||||
success = false;
|
||||
}
|
||||
reports.push(' - ' + msg);
|
||||
});
|
||||
console.log('test completed!\n', reports.join('\n'));
|
||||
process.exit(success ? 0 : 1);
|
||||
});
|
||||
}
|
||||
|
||||
@ -5,6 +5,7 @@ var fs = require('fs');
|
||||
var _ = require('lodash');
|
||||
var chalk = require('chalk');
|
||||
var makeJUnitXml = require('../make_j_unit_xml');
|
||||
var docRoot = path.join(__dirname, '../../test/integration/browser_yaml_suite');
|
||||
chalk.enabled = true;
|
||||
|
||||
var middleware = [];
|
||||
@ -17,7 +18,7 @@ var server = http.createServer(function (req, resp) {
|
||||
var parsedUrl = url.parse(req.url, true);
|
||||
req.uri = parsedUrl.pathname;
|
||||
req.query = parsedUrl.query;
|
||||
req.filename = path.join(__dirname, '../../test/browser_integration/', req.uri);
|
||||
req.filename = path.join(docRoot, req.uri);
|
||||
|
||||
var end = resp.end;
|
||||
resp.end = function () {
|
||||
@ -39,6 +40,11 @@ var server = http.createServer(function (req, resp) {
|
||||
next();
|
||||
});
|
||||
|
||||
server.browsers = [
|
||||
// browsers will go here, and will be removed once they call tests-complete
|
||||
// once gone, we will emit "tests done"
|
||||
];
|
||||
|
||||
function rand(length) {
|
||||
var str = '';
|
||||
while (str.length < length) {
|
||||
@ -50,7 +56,7 @@ function rand(length) {
|
||||
function collectTestResults(req, resp) {
|
||||
var body = '';
|
||||
var browser = req.query.browser;
|
||||
var logFilename = path.join(__dirname, '../../test-output-' + browser + '.xml');
|
||||
var logFilename = 'test-output-' + browser + '.xml';
|
||||
|
||||
req.on('data', function (chunk) {
|
||||
body += chunk;
|
||||
@ -79,15 +85,33 @@ function collectTestResults(req, resp) {
|
||||
if (err) {
|
||||
console.log('unable to save test-output to', err.message);
|
||||
console.trace();
|
||||
server.emit('tests done', false);
|
||||
browserComplete(browser);
|
||||
} else {
|
||||
console.log('test output written to', logFilename);
|
||||
server.emit('tests done', !testDetails.stats.failures);
|
||||
browserComplete(browser, true);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
var report = {};
|
||||
|
||||
function browserComplete(browser, success) {
|
||||
var i = server.browsers.indexOf(browser);
|
||||
report[browser] = success;
|
||||
server.emit('browser complete', browser, success);
|
||||
if (i >= 0) {
|
||||
server.browsers.splice(i, 1);
|
||||
if (server.browsers.length) {
|
||||
console.log('waiting for', server.browsers.length, 'browsers');
|
||||
} else {
|
||||
server.emit('tests done', report);
|
||||
}
|
||||
} else {
|
||||
console.error('invalid browser', browser);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
middleware.push(function (req, resp, next) {
|
||||
// resolve filenames
|
||||
@ -120,7 +144,7 @@ middleware.push(function (req, resp, next) {
|
||||
resp.end();
|
||||
} else {
|
||||
if (stats.isDirectory()) {
|
||||
req.filename = path.join(req.filename, '../../test/browser_integration/index.html');
|
||||
req.filename = path.join(docRoot, 'index.html');
|
||||
}
|
||||
next();
|
||||
}
|
||||
@ -176,7 +200,7 @@ middleware.push(function (req, resp) {
|
||||
es_hostname: 'localhost',
|
||||
es_port: 9200,
|
||||
browser: 'unknown',
|
||||
ts: 'no'//rand(5)
|
||||
ts: rand(5)
|
||||
})));
|
||||
} else {
|
||||
resp.end(data);
|
||||
|
||||
Reference in New Issue
Block a user