diff options
Diffstat (limited to 'lib/jasmine-1.0.1/index.js')
| -rw-r--r-- | lib/jasmine-1.0.1/index.js | 180 |
1 files changed, 180 insertions, 0 deletions
diff --git a/lib/jasmine-1.0.1/index.js b/lib/jasmine-1.0.1/index.js new file mode 100644 index 00000000..6c57d20a --- /dev/null +++ b/lib/jasmine-1.0.1/index.js @@ -0,0 +1,180 @@ +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]; +}
\ No newline at end of file |
