This repository has been archived by the owner on Aug 15, 2018. It is now read-only.
/
test.js
106 lines (91 loc) · 3.03 KB
/
test.js
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
var exeq = require('exeq');
var path = require('path');
var output = '_site/coverage.html';
var outputJSON = '_site/coverage.json';
var doc = require('./doc');
var mochaBrowser = require('mocha-browser-for-spm');
var mo = require('../lib/sdk/module');
var file = require('../lib/sdk/file');
var log = require('../lib/utils/log');
var port = 8015;
module.exports = function(config) {
var nocoverage = config.nocoverage;
var coveralls = config.coveralls;
var pkg = file.readJSON('package.json');
if (!pkg) {
log.error('miss', 'package.json or "spm" key');
process.exit(2);
}
console.log();
console.log(' Starting service for test runner ...'.to.cyan.color);
doc({
server: true,
port: port
}, function() {
mochaBrowser({
page: 'http://127.0.0.1:' + port + '/tests/runner.html',
reporter: 'spec'
}, function(code) {
if (code !== 0) {
process.exit(code);
}
if (nocoverage) {
process.exit(0);
}
mo.getSourceFiles().forEach(function(item) {
if (!path.extname(item)) {
item = item + '.js';
}
if (path.extname(item) === '.js') {
processCovFile(item);
}
});
if (coveralls) {
exeq([
path.dirname(__dirname) +
'/node_modules/mocha-browser-for-spm/bin/mocha-browser ' +
'http://127.0.0.1:' + port + '/tests/runner.html?cov -S -R lcov'
]).on('done', function() {
process.exit(0);
});
}
exeq([
path.dirname(__dirname) +
'/node_modules/mocha-browser-for-spm/bin/mocha-browser ' +
'http://127.0.0.1:' + port + '/tests/runner.html?cov -R html-cov -o ' +
outputJSON +' > ' + output
]).on('done', function() {
try{
var covJSON = require(path.resolve(outputJSON));
var percentage = Math.round(covJSON.coverage) + '%';
var sloc = covJSON.sloc.toString();
console.log(' ' + percentage.to.green + ' coverage, ' + sloc.to.green + ' sloc');
for (var i=0; i<covJSON.files.length; i++) {
var fileName = covJSON.files[i].filename;
var filePercentage = Math.round(covJSON.files[i].coverage) + '%';
var fileSloc = covJSON.files[i].sloc.toString();
console.log(' ' + (path.relative(process.cwd(), fileName) + ': ').to.grey +
filePercentage.to.green + ' coverage, '.to.grey + fileSloc.to.green + ' sloc'.to.grey);
}
console.log(' You can see more detail in ' + output.to.cyan.color);
} catch(e) {
console.log('');
console.log((' Fail to output ' + outputJSON).to.red.color);
}
process.exit(0);
});
});
});
};
function processCovFile(source) {
var dest;
if (/\.\w+$/.test(source)) {
dest = source.replace(/(\.\w+)$/, '-cov$1');
} else {
dest = source + '-cov';
}
require('jscoverage').processFile(
path.join(process.cwd(), source),
path.join(process.cwd(), '_site/' + dest)
);
}