6b6449fee34a10dd0a0a1d8689239f9e50cd3f3f.svn-base
4.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#!/usr/bin/env node
var
fs = require('fs'),
path = require('path');
// TODO: remove this when https://github.com/joyent/node/pull/1312
// lands in core.
//
// Until then, use console.log from npm (https://gist.github.com/1077544)
require('../deps/console.log');
//require.paths.push(process.cwd());
var args = (process.ARGV || process.argv).slice(2);
var files = [];
var testrunner,
config_file,
config_param_found = false,
output_param_found = false,
reporter_file = 'default',
reporter_param_found = false,
testspec_param_found = false;
testFullSpec_param_found = false;
var usage = "Usage: nodeunit [options] testmodule1.js testfolder [...] \n" +
"Options:\n\n" +
" --config FILE the path to a JSON file with options\n" +
" --reporter FILE optional path to a reporter file to customize the output\n" +
" --list-reporters list available build-in reporters\n" +
" -t name, specify a test to run\n" +
" -f fullname, specify a specific test to run. fullname is built so: \"outerGroup - .. - innerGroup - testName\"\n" +
" -h, --help display this help and exit\n" +
" -v, --version output version information and exit";
// load default options
var content = fs.readFileSync(__dirname + '/nodeunit.json', 'utf8');
var options = JSON.parse(content);
// a very basic pseudo --options parser
args.forEach(function (arg) {
if (arg.slice(0, 9) === "--config=") {
config_file = arg.slice(9);
} else if (arg === '--config') {
config_param_found = true;
} else if (config_param_found) {
config_file = arg;
config_param_found = false;
} else if (arg.slice(0, 9) === "--output=") {
options.output = arg.slice(9);
} else if (arg === '--output') {
output_param_found = true;
} else if (output_param_found) {
options.output = arg;
output_param_found = false;
} else if (arg.slice(0, 11) === "--reporter=") {
reporter_file = arg.slice(11);
} else if (arg === '--reporter') {
reporter_param_found = true;
} else if (reporter_param_found) {
reporter_file = arg;
reporter_param_found = false;
} else if (arg === '-t') {
testspec_param_found = true;
} else if (testspec_param_found) {
options.testspec = arg;
testspec_param_found = false;
} else if (arg === '-f') {
testFullSpec_param_found = true;
} else if (testFullSpec_param_found) {
options.testFullSpec= arg;
testFullSpec_param_found = false;
} else if (arg === '--list-reporters') {
var reporters = fs.readdirSync(__dirname + '/../lib/reporters');
reporters = reporters.filter(function (reporter_file) {
return (/\.js$/).test(reporter_file);
}).map(function (reporter_file) {
return reporter_file.replace(/\.js$/, '');
}).filter(function (reporter_file) {
return reporter_file !== 'index';
});
console.log('Build-in reporters: ');
reporters.forEach(function (reporter_file) {
var reporter = require('../lib/reporters/' + reporter_file);
console.log(' * ' + reporter_file + (reporter.info ? ': ' + reporter.info : ''));
});
process.exit(0);
} else if ((arg === '-v') || (arg === '--version')) {
var content = fs.readFileSync(__dirname + '/../package.json', 'utf8');
var pkg = JSON.parse(content);
console.log(pkg.version);
process.exit(0);
} else if ((arg === '-h') || (arg === '--help')) {
console.log(usage);
process.exit(0);
} else {
files.push(arg);
}
});
if (files.length === 0) {
console.log('Files required.');
console.log(usage);
process.exit(1);
}
if (config_file) {
content = fs.readFileSync(config_file, 'utf8');
var custom_options = JSON.parse(content);
for (var option in custom_options) {
if (typeof option === 'string') {
options[option] = custom_options[option];
}
}
}
var builtin_reporters = require(__dirname + '/../lib/reporters');
if (reporter_file in builtin_reporters) {
testrunner = builtin_reporters[reporter_file];
}
else {
testrunner = require(reporter_file);
}
testrunner.run(files, options, function(err) {
if (err) {
process.exit(1);
}
});