Update fix some errors

This commit is contained in:
2015-09-08 12:51:08 +05:30
parent 39432e35d4
commit 20b8543a2d
+81 -26
View File
@@ -19,6 +19,9 @@ if( global.describe ){ return; }
var async = require('async'); var async = require('async');
function padding( str, width ){
return ( ' ' + str ).slice(-width);
}
var printer = function(prefix){ var printer = function(prefix){
return function(){ return function(){
@@ -29,9 +32,65 @@ var printer = function(prefix){
}; };
function Task(name, fn, parentNode ){
this.parentNode = parentNode;
this.name = name;
this.fn = fn;
this.isAsync = fn && fn.length;
}
Task.prototype.exec = function(_cb){
if( !this.fn ){ return _cb(); }
var _this = this;
var cb = function(err){
_this.endTime = Date.now();
if( err ){
_this.err = err;
_this.parentNode.errorCount++;
}
_this.print();
_cb(err);
};
this.startTime = Date.now();
if( this.isAsync ){
try{
this.fn(cb);
} catch(e){
cb(e);
} finally{
return;
}
}
try{
this.fn();
cb();
} catch(e){
cb(e);
}
return;
};
Task.prototype.print = function(){
var timeTaken = this.endTime - this.startTime;
var err = this.err;
console.log(
this.parentNode.indent +
this.name +
( err? ' Fail ' : ' OK ' )+
padding( '(' + timeTaken + 'ms) ' , 11));
if(err){
console.log('');
console.log( err.stack );
console.log('');
}
};
function runner( d, cb ){ function runner( d, cb ){
var print = printer( d.indent );
cb = cb||function(){}; cb = cb||function(){};
var print = printer( d.indent );
console.log('');
print( 'Describe: ', d.name ); print( 'Describe: ', d.name );
return async.series([ return async.series([
@@ -40,11 +99,12 @@ function runner( d, cb ){
function(cb){ function(cb){
if(!d.before){ return cb(); } if(!d.before){ return cb(); }
print( ' Before hook' ); print( ' Before hook' );
return d.before(cb); return d.before.exec(cb);
}, },
/* Then each It functions */ /* Then each It functions */
function(cb){ function(cb){
console.log( 'starting its...');
async.eachSeries(d.its, async.eachSeries(d.its,
function(itItem, cb ){ function(itItem, cb ){
@@ -52,14 +112,8 @@ function runner( d, cb ){
if( itItem.its ){ if( itItem.its ){
return runner(itItem, cb); return runner(itItem, cb);
} }
print( ' It: ' + itItem.name );
if( !itItem.fn ){ return cb(); } return itItem.exec(cb);
if( itItem.fn.length ){ return itItem.fn(cb); }
itItem.fn();
return cb();
}, cb ); }, cb );
}, },
@@ -67,14 +121,14 @@ function runner( d, cb ){
function(cb){ function(cb){
if(!d.after){ return cb(); } if(!d.after){ return cb(); }
print( ' After hook' ); print( ' After hook' );
return d.after(cb); return d.after.exec(cb);
}, },
], function(err){ ], function( ){
print( 'Finished with ' + ( err? '': 'No' ) + ' Error' ); if( d.parentNode ){
if(err){ d.parentNode.errorCount += d.errorCount;
print( 'Error ', err.stack );
} }
print( 'Finished with ' + ( d.errorCount || 'No' ) + ' Error' );
return cb(); return cb();
}); });
} }
@@ -86,19 +140,21 @@ var store = {
var describe = function(str, fn ){ var describe = function(str, fn ){
var parentDesc = store.currentDescribe; var parentNode = store.currentDescribe;
var descItem = { var descItem = {
name: str, name: str,
its: [], its: [],
indent: ' ' + ( parentDesc? parentDesc.indent : '' ), indent: ' ' + ( parentNode? parentNode.indent : '' ),
errorCount: 0,
parentNode: parentNode,
}; };
store.currentDescribe = descItem; store.currentDescribe = descItem;
fn(); fn();
if( parentDesc ){ if( parentNode ){
parentDesc.its.push( descItem ); parentNode.its.push( descItem );
store.currentDescribe = parentDesc; store.currentDescribe = parentNode;
} else { } else {
runner(descItem); runner(descItem);
} }
@@ -107,22 +163,21 @@ var describe = function(str, fn ){
var it = function( str, fn ){ var it = function( str, fn ){
var task = new Task(str, fn, store.currentDescribe );
store.currentDescribe.its.push({ store.currentDescribe.its.push( task );
name : str,
fn: fn
});
}; };
it.skip = function(){}; it.skip = function(){};
var before = function( fn ){ var before = function( fn ){
store.currentDescribe.before = fn; var task = new Task('Before hook', fn, store.currentDescribe );
store.currentDescribe.before = task;
}; };
var after = function( fn ){ var after = function( fn ){
store.currentDescribe.after = fn; var task = new Task('After hook', fn, store.currentDescribe );
store.currentDescribe.after = task;
}; };