1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 | var path = require('path');
|
7 | var spawn = require('child_process').spawn;
|
8 |
|
9 | var phantomjs = require('phantomjs-prebuilt');
|
10 |
|
11 | var serve = require('./serve');
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 | function 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 |
|
43 | function runTests(conf, callback) {
|
44 | var coverage = 'coverage' in conf ? conf.coverage : false;
|
45 | var reporter = 'reporter' in conf ? conf.reporter : 'spec';
|
46 | |
47 |
|
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 |
|
86 | if (require.main === module) {
|
87 | runTests({coverage: false, reporter: 'spec'}, function(code) {
|
88 | process.exit(code);
|
89 | });
|
90 | }
|
91 |
|
92 | module.exports = {
|
93 | runTests: runTests,
|
94 | listen: listen
|
95 | };
|