180 lines
4.7 KiB
JavaScript
180 lines
4.7 KiB
JavaScript
var fs = require('fs');
|
|
var sys = require('sys');
|
|
var path = require('path');
|
|
|
|
var filename = __dirname + '/jasmine.js';
|
|
global.window = {
|
|
setTimeout: setTimeout,
|
|
clearTimeout: clearTimeout,
|
|
setInterval: setInterval,
|
|
clearInterval: clearInterval
|
|
};
|
|
var src = fs.readFileSync(filename);
|
|
var jasmine = process.compile(src + '\njasmine;', filename);
|
|
delete global.window;
|
|
|
|
function noop(){}
|
|
|
|
jasmine.executeSpecsInFolder = function(folder, done, isVerbose, showColors, matcher){
|
|
var log = [];
|
|
var columnCounter = 0;
|
|
var start = 0;
|
|
var elapsed = 0;
|
|
var verbose = isVerbose || false;
|
|
var fileMatcher = new RegExp(matcher || "\.js$");
|
|
var colors = showColors || false;
|
|
var specs = jasmine.getAllSpecFiles(folder, fileMatcher);
|
|
|
|
var ansi = {
|
|
green: '\033[32m',
|
|
red: '\033[31m',
|
|
yellow: '\033[33m',
|
|
none: '\033[0m'
|
|
};
|
|
|
|
for (var i = 0, len = specs.length; i < len; ++i){
|
|
var filename = specs[i];
|
|
require(filename.replace(/\.*$/, ""));
|
|
}
|
|
|
|
var jasmineEnv = jasmine.getEnv();
|
|
jasmineEnv.reporter = {
|
|
log: function(str){
|
|
},
|
|
|
|
reportSpecStarting: function(runner) {
|
|
},
|
|
|
|
reportRunnerStarting: function(runner) {
|
|
sys.puts('Started');
|
|
start = Number(new Date);
|
|
},
|
|
|
|
reportSuiteResults: function(suite) {
|
|
var specResults = suite.results();
|
|
var path = [];
|
|
while(suite) {
|
|
path.unshift(suite.description);
|
|
suite = suite.parentSuite;
|
|
}
|
|
var description = path.join(' ');
|
|
|
|
if (verbose)
|
|
log.push('Spec ' + description);
|
|
|
|
specResults.items_.forEach(function(spec){
|
|
if (spec.failedCount > 0 && spec.description) {
|
|
if (!verbose)
|
|
log.push(description);
|
|
log.push(' it ' + spec.description);
|
|
spec.items_.forEach(function(result){
|
|
log.push(' ' + result.trace.stack + '\n');
|
|
});
|
|
}
|
|
});
|
|
},
|
|
|
|
reportSpecResults: function(spec) {
|
|
var result = spec.results();
|
|
var msg = '';
|
|
if (result.passed())
|
|
{
|
|
msg = (colors) ? (ansi.green + '.' + ansi.none) : '.';
|
|
// } else if (result.skipped) { TODO: Research why "result.skipped" returns false when "xit" is called on a spec?
|
|
// msg = (colors) ? (ansi.yellow + '*' + ansi.none) : '*';
|
|
} else {
|
|
msg = (colors) ? (ansi.red + 'F' + ansi.none) : 'F';
|
|
}
|
|
sys.print(msg);
|
|
if (columnCounter++ < 50) return;
|
|
columnCounter = 0;
|
|
sys.print('\n');
|
|
},
|
|
|
|
|
|
reportRunnerResults: function(runner) {
|
|
elapsed = (Number(new Date) - start) / 1000;
|
|
sys.puts('\n');
|
|
log.forEach(function(log){
|
|
sys.puts(log);
|
|
});
|
|
sys.puts('Finished in ' + elapsed + ' seconds');
|
|
|
|
var summary = jasmine.printRunnerResults(runner);
|
|
if(colors)
|
|
{
|
|
if(runner.results().failedCount === 0 )
|
|
sys.puts(ansi.green + summary + ansi.none);
|
|
else
|
|
sys.puts(ansi.red + summary + ansi.none);
|
|
} else {
|
|
sys.puts(summary);
|
|
}
|
|
(done||noop)(runner, log);
|
|
}
|
|
};
|
|
jasmineEnv.execute();
|
|
};
|
|
|
|
jasmine.getAllSpecFiles = function(dir, matcher){
|
|
var specs = [];
|
|
|
|
if (fs.statSync(dir).isFile() && dir.match(matcher)) {
|
|
specs.push(dir);
|
|
} else {
|
|
var files = fs.readdirSync(dir);
|
|
for (var i = 0, len = files.length; i < len; ++i){
|
|
var filename = dir + '/' + files[i];
|
|
if (fs.statSync(filename).isFile() && filename.match(matcher)){
|
|
specs.push(filename);
|
|
}else if (fs.statSync(filename).isDirectory()){
|
|
var subfiles = this.getAllSpecFiles(filename, matcher);
|
|
subfiles.forEach(function(result){
|
|
specs.push(result);
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
return specs;
|
|
};
|
|
|
|
jasmine.printRunnerResults = function(runner){
|
|
var results = runner.results();
|
|
var suites = runner.suites();
|
|
var msg = '';
|
|
msg += suites.length + ' test' + ((suites.length === 1) ? '' : 's') + ', ';
|
|
msg += results.totalCount + ' assertion' + ((results.totalCount === 1) ? '' : 's') + ', ';
|
|
msg += results.failedCount + ' failure' + ((results.failedCount === 1) ? '' : 's') + '\n';
|
|
return msg;
|
|
};
|
|
|
|
function now(){
|
|
return new Date().getTime();
|
|
}
|
|
|
|
jasmine.asyncSpecWait = function(){
|
|
var wait = jasmine.asyncSpecWait;
|
|
wait.start = now();
|
|
wait.done = false;
|
|
(function innerWait(){
|
|
waits(10);
|
|
runs(function() {
|
|
if (wait.start + wait.timeout < now()) {
|
|
expect('timeout waiting for spec').toBeNull();
|
|
} else if (wait.done) {
|
|
wait.done = false;
|
|
} else {
|
|
innerWait();
|
|
}
|
|
});
|
|
})();
|
|
};
|
|
jasmine.asyncSpecWait.timeout = 4 * 1000;
|
|
jasmine.asyncSpecDone = function(){
|
|
jasmine.asyncSpecWait.done = true;
|
|
};
|
|
|
|
for ( var key in jasmine) {
|
|
exports[key] = jasmine[key];
|
|
} |