Merge pull request #2309 from tschaub/test
Add a task to run the tests once with PhantomJS.
This commit is contained in:
@@ -3,8 +3,6 @@ before_install:
|
|||||||
- "npm install -g npm && npm install"
|
- "npm install -g npm && npm install"
|
||||||
|
|
||||||
before_script:
|
before_script:
|
||||||
- "./build.py serve &"
|
|
||||||
- "rm src/ol/renderer/webgl/*shader.js"
|
- "rm src/ol/renderer/webgl/*shader.js"
|
||||||
- "sleep 3"
|
|
||||||
|
|
||||||
script: "./build.py ci"
|
script: "./build.py ci"
|
||||||
|
|||||||
@@ -690,8 +690,7 @@ def proj4js_zip(t):
|
|||||||
|
|
||||||
@target('test', PROJ4JS, phony=True)
|
@target('test', PROJ4JS, phony=True)
|
||||||
def test(t):
|
def test(t):
|
||||||
t.run('%(PHANTOMJS)s', 'test/mocha-phantomjs.js',
|
t.run('node', 'tasks/test.js')
|
||||||
'http://localhost:3000/test/index.html')
|
|
||||||
|
|
||||||
|
|
||||||
@target('fixme', phony=True)
|
@target('fixme', phony=True)
|
||||||
|
|||||||
+2
-1
@@ -4,7 +4,8 @@
|
|||||||
"description": "Mapping library",
|
"description": "Mapping library",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"postinstall": "node tasks/parse-examples.js",
|
"postinstall": "node tasks/parse-examples.js",
|
||||||
"start": "node tasks/serve.js"
|
"start": "node tasks/serve.js",
|
||||||
|
"test": "node tasks/test.js"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
|
|||||||
@@ -104,3 +104,8 @@ Called after install to generate an example index. After new examples are added
|
|||||||
Run a debug server that provides all library sources unminified. Provides a static server for examples and tests. See the `--help` option for more detail.
|
Run a debug server that provides all library sources unminified. Provides a static server for examples and tests. See the `--help` option for more detail.
|
||||||
|
|
||||||
node tasks/serve.js --help
|
node tasks/serve.js --help
|
||||||
|
|
||||||
|
|
||||||
|
## `test.js`
|
||||||
|
|
||||||
|
Run the tests once in a headless browser. Note that you can also run the tests by running the `serve.js` task and then visiting the root of the test directory in your browser.
|
||||||
|
|||||||
+80
-54
@@ -12,62 +12,88 @@ var nomnom = require('nomnom');
|
|||||||
|
|
||||||
var log = closure.log;
|
var log = closure.log;
|
||||||
|
|
||||||
var options = nomnom.options({
|
|
||||||
port: {
|
|
||||||
abbr: 'p',
|
|
||||||
default: 3000,
|
|
||||||
help: 'Port for incoming connections',
|
|
||||||
metavar: 'PORT'
|
|
||||||
},
|
|
||||||
loglevel: {
|
|
||||||
abbr: 'l',
|
|
||||||
choices: ['silly', 'verbose', 'info', 'warn', 'error'],
|
|
||||||
default: 'info',
|
|
||||||
help: 'Log level',
|
|
||||||
metavar: 'LEVEL'
|
|
||||||
}
|
|
||||||
}).parse();
|
|
||||||
|
|
||||||
|
/**
|
||||||
/** @type {string} */
|
* Create a debug server for ol and Closure Library sources.
|
||||||
log.level = options.loglevel;
|
* @param {function(Error, closure.Server)} callback Callback.
|
||||||
|
*/
|
||||||
log.info('ol', 'Parsing dependencies ...');
|
var createServer = exports.createServer = function(callback) {
|
||||||
var manager = new closure.Manager({
|
var server;
|
||||||
closure: true, // use the bundled Closure Library
|
var manager = new closure.Manager({
|
||||||
lib: [
|
lib: [
|
||||||
'src/**/*.js',
|
'src/**/*.js',
|
||||||
'test/spec/**/*.test.js'
|
'test/spec/**/*.test.js'
|
||||||
],
|
],
|
||||||
main: 'examples/*.js'
|
main: 'examples/*.js'
|
||||||
});
|
});
|
||||||
manager.on('error', function(e) {
|
manager.on('error', function(err) {
|
||||||
log.error('ol', e.message);
|
if (server) {
|
||||||
});
|
log.error('serve', err.message);
|
||||||
manager.on('ready', function() {
|
} else {
|
||||||
var server = new closure.Server({
|
callback(err);
|
||||||
manager: manager,
|
|
||||||
loader: /^\/\w+\/loader.js/,
|
|
||||||
getMain: function(req) {
|
|
||||||
var main;
|
|
||||||
var query = url.parse(req.url, true).query;
|
|
||||||
if (query.id) {
|
|
||||||
var referer = req.headers.referer;
|
|
||||||
if (referer) {
|
|
||||||
var from = path.join(process.cwd(),
|
|
||||||
path.dirname(url.parse(referer).pathname));
|
|
||||||
main = path.resolve(from, query.id + '.js');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return main;
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
server.listen(options.port, function() {
|
manager.on('ready', function() {
|
||||||
log.info('ol', 'Listening on http://localhost:' +
|
server = new closure.Server({
|
||||||
options.port + '/ (Ctrl+C to stop)');
|
manager: manager,
|
||||||
|
loader: /^\/\w+\/loader.js/,
|
||||||
|
getMain: function(req) {
|
||||||
|
var main;
|
||||||
|
var query = url.parse(req.url, true).query;
|
||||||
|
if (query.id) {
|
||||||
|
var referer = req.headers.referer;
|
||||||
|
if (referer) {
|
||||||
|
var from = path.join(process.cwd(),
|
||||||
|
path.dirname(url.parse(referer).pathname));
|
||||||
|
main = path.resolve(from, query.id + '.js');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return main;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
callback(null, server);
|
||||||
});
|
});
|
||||||
server.on('error', function(err) {
|
};
|
||||||
log.error('ol', 'Server failed to start: ' + err.message);
|
|
||||||
process.exit(1);
|
|
||||||
|
/**
|
||||||
|
* If running this module directly start the server.
|
||||||
|
*/
|
||||||
|
if (require.main === module) {
|
||||||
|
var options = nomnom.options({
|
||||||
|
port: {
|
||||||
|
abbr: 'p',
|
||||||
|
default: 3000,
|
||||||
|
help: 'Port for incoming connections',
|
||||||
|
metavar: 'PORT'
|
||||||
|
},
|
||||||
|
loglevel: {
|
||||||
|
abbr: 'l',
|
||||||
|
choices: ['silly', 'verbose', 'info', 'warn', 'error'],
|
||||||
|
default: 'info',
|
||||||
|
help: 'Log level',
|
||||||
|
metavar: 'LEVEL'
|
||||||
|
}
|
||||||
|
}).parse();
|
||||||
|
|
||||||
|
/** @type {string} */
|
||||||
|
log.level = options.loglevel;
|
||||||
|
|
||||||
|
log.info('serve', 'Parsing dependencies ...');
|
||||||
|
createServer(function(err, server) {
|
||||||
|
if (err) {
|
||||||
|
log.error('serve', 'Parsing failed');
|
||||||
|
log.error('serve', err.message);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
server.listen(options.port, function() {
|
||||||
|
log.info('serve', 'Listening on http://localhost:' +
|
||||||
|
options.port + '/ (Ctrl+C to stop)');
|
||||||
|
});
|
||||||
|
server.on('error', function(err) {
|
||||||
|
log.error('serve', 'Server failed to start: ' + err.message);
|
||||||
|
process.exit(1);
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
});
|
}
|
||||||
|
|||||||
@@ -0,0 +1,68 @@
|
|||||||
|
/**
|
||||||
|
* This task starts a dev server that provides a script loader for OpenLayers
|
||||||
|
* and Closure Library and runs tests in PhantomJS.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var path = require('path');
|
||||||
|
var spawn = require('child_process').spawn;
|
||||||
|
|
||||||
|
var phantomjs = require('phantomjs');
|
||||||
|
|
||||||
|
var serve = require('./serve');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Try listening for incoming connections on a range of ports.
|
||||||
|
* @param {number} min Minimum port to try.
|
||||||
|
* @param {number} max Maximum port to try.
|
||||||
|
* @param {http.Server} server The server.
|
||||||
|
* @param {function(Error)} callback Callback called with any error.
|
||||||
|
*/
|
||||||
|
function listen(min, max, server, callback) {
|
||||||
|
function _listen(port) {
|
||||||
|
server.once('error', function(err) {
|
||||||
|
if (err.code === 'EADDRINUSE') {
|
||||||
|
++port;
|
||||||
|
if (port < max) {
|
||||||
|
_listen(port);
|
||||||
|
} else {
|
||||||
|
callback(new Error('Could not find an open port'));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
callback(err);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
server.listen(port, callback);
|
||||||
|
}
|
||||||
|
_listen(min);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create the debug server and run tests.
|
||||||
|
*/
|
||||||
|
serve.createServer(function(err, server) {
|
||||||
|
if (err) {
|
||||||
|
console.error(err.message);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
listen(3001, 3005, server, function(err) {
|
||||||
|
if (err) {
|
||||||
|
console.error('Server failed to start: ' + err.message);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
var address = server.address();
|
||||||
|
var url = 'http://' + address.address + ':' + address.port;
|
||||||
|
var args = [
|
||||||
|
path.join(__dirname, '..', 'test', 'mocha-phantomjs.js'),
|
||||||
|
url + '/test/index.html'
|
||||||
|
];
|
||||||
|
|
||||||
|
var child = spawn(phantomjs.path, args, {stdio: 'inherit'});
|
||||||
|
child.on('exit', function(code) {
|
||||||
|
process.exit(code);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user