UNPKG

2.4 kBJavaScriptView Raw
1/**
2 * This task starts a dev server that provides a script loader for OpenLayers
3 * and Closure Library and runs tests in PhantomJS.
4 */
5
6var path = require('path');
7var spawn = require('child_process').spawn;
8
9var phantomjs = require('phantomjs-prebuilt');
10
11var serve = require('./serve');
12
13/**
14 * Try listening for incoming connections on a range of ports.
15 * @param {number} min Minimum port to try.
16 * @param {number} max Maximum port to try.
17 * @param {http.Server} server The server.
18 * @param {function(Error)} callback Callback called with any error.
19 */
20function listen(min, max, server, callback) {
21 function _listen(port) {
22 server.once('error', function(err) {
23 if (err.code === 'EADDRINUSE') {
24 ++port;
25 if (port < max) {
26 _listen(port);
27 } else {
28 callback(new Error('Could not find an open port'));
29 }
30 } else {
31 callback(err);
32 }
33 });
34 server.listen(port, '127.0.0.1');
35 }
36 server.once('listening', function() {
37 callback(null);
38 });
39 _listen(min);
40}
41
42
43function runTests(conf, callback) {
44 var coverage = 'coverage' in conf ? conf.coverage : false;
45 var reporter = 'reporter' in conf ? conf.reporter : 'spec';
46 /**
47 * Create the debug server and run tests.
48 */
49 serve.createServer(function(err, server) {
50 if (err) {
51 process.stderr.write(err.message + '\n');
52 process.exit(1);
53 }
54
55 listen(3001, 3005, server, function(err) {
56 if (err) {
57 process.stderr.write('Server failed to start: ' + err.message + '\n');
58 process.exit(1);
59 }
60 var address = server.address();
61 var url = 'http://' + address.address + ':' + address.port;
62 var args = [
63 require.resolve('mocha-phantomjs-core'),
64 url + '/test/index.html',
65 reporter
66 ];
67 var config = {
68 ignoreResourceErrors: true,
69 useColors: true
70 };
71
72 if (coverage) {
73 config.hooks = path.join(__dirname, '../test/phantom_hooks.js');
74 }
75
76 args.push(JSON.stringify(config));
77
78 var child = spawn(phantomjs.path, args, {stdio: 'inherit'});
79 child.on('exit', function(code) {
80 callback(code);
81 });
82 });
83 });
84}
85
86if (require.main === module) {
87 runTests({coverage: false, reporter: 'spec'}, function(code) {
88 process.exit(code);
89 });
90}
91
92module.exports = {
93 runTests: runTests,
94 listen: listen
95};