Skip to content

Commit

Permalink
add unit test & test cov
Browse files Browse the repository at this point in the history
  • Loading branch information
akira-cn committed Jul 28, 2016
1 parent 61309c3 commit 621077d
Show file tree
Hide file tree
Showing 13 changed files with 777 additions and 67 deletions.
7 changes: 7 additions & 0 deletions .travis.yml
@@ -0,0 +1,7 @@
language: node_js
node_js:
- '4'
sudo: false
script:
- "npm run test-cov"
after_script: "npm install coveralls && cd test && cat coverage.lcov | ../node_modules/coveralls/bin/coveralls.js && cd .."
2 changes: 1 addition & 1 deletion examples/async_toggle2.js
Expand Up @@ -8,7 +8,7 @@ wait.every(500).and(function(){
//forever - never return true
gpio.toggle();

}).forever();
}).forward();

process.on("SIGINT", function(){
gpio.close();
Expand Down
7 changes: 5 additions & 2 deletions package.json
Expand Up @@ -7,8 +7,9 @@
"rpio": "^0.9.11"
},
"devDependencies": {
"consoler": "^0.2.0",
"chokidar": "^1.6.0",
"wait-promise": "^0.3.2",
"wait-promise": "0.4.1",
"babel-cli": "6.x.x",
"babel-runtime": "6.x.x",
"mocha": "^2.3.4",
Expand All @@ -17,7 +18,9 @@
"babel-plugin-transform-coverage": "^0.1.5"
},
"scripts": {
"test": "babel lib --out-dir test/lib --plugins ../test/transform_rpio_sim.js && mocha test/spec.js"
"test": "babel lib --out-dir test/lib --plugins ../test/transform_rpio_sim.js && mocha test/spec.js",
"printcov": "script/printcov.js test/coverage.lcov lib",
"test-cov": "babel lib --out-dir test/lib --plugins ../test/transform_rpio_sim.js,transform-coverage && mocha test/spec.js --reporter=mocha-lcov-reporter > test/coverage.lcov && npm run printcov"
},
"repository": {
"type": "git",
Expand Down
87 changes: 87 additions & 0 deletions script/printcov.js
@@ -0,0 +1,87 @@
#!/usr/bin/env node

var fs = require('fs');
var consoler = require('consoler');
consoler.add('warning: uncovered code', 'yellow');

if(process.argv.length < 3){
console.log('printcov lcov-file [source-src]');
process.exit(0);
}

var lcov = process.argv[2];
var source = process.argv[3];

function percentage(covered, statements){
var percentage = Math.floor(100 * covered/statements);
var color = 'cyan';

if(percentage >= 80 && percentage < 100){
color = 'magenta';
}else if(percentage >= 40 && percentage < 80){
color = 'yellow';
}else if(percentage < 40){
color = 'red';
}
return (percentage + '%')[color];
}

function print(){
var content = fs.readFileSync(lcov, 'utf-8');

console.log('Generated test coverages:\n');

var total = 0, total_covered = 0;

if(content){
var lines = content.split(/\n/g);

var file = null, covered = 0, statements = 0,
sourceMap = null, linesNotCovered = [];

lines.forEach((line) => {
var fileBegin = /^SF:(.+)$/.exec(line),
fileEnd = /^end_of_record$/.exec(line),
lineCover = /^DA:(\d+),(\d+)/.exec(line);

if(fileBegin){
file = fileBegin[1];
if(source){
var sourceFile = require('path').join(source, file);
sourceMap = fs.readFileSync(sourceFile, 'utf-8');
sourceMap = sourceMap.split(/\n/g);
}
} else if(fileEnd){
console.log(`${file}: ${percentage(covered, statements)}`);

if(linesNotCovered.length){
consoler('warning: uncovered code', linesNotCovered.map((l) => `\tline ${l}: ${sourceMap[l-1]}`).join('\n').red);
}

total += statements;
total_covered += covered;

file = null;
covered = 0;
statements = 0;
sourceMap = null;
linesNotCovered = [];
} else if(lineCover){
var n = lineCover[2]|0;
var l = lineCover[1]|0;

if(n > 0){
covered++;
}else{
if(sourceMap){
linesNotCovered.push(l);
}
}
statements++;
}
});
}
console.log(`\ntotal: ${percentage(total_covered, total)}\n`);
}

print();
1 change: 0 additions & 1 deletion test/gpio/gpio21

This file was deleted.

0 comments on commit 621077d

Please sign in to comment.