diff --git a/spec/node_suite.js b/spec/node_suite.js new file mode 100644 index 0000000..3d3e1c6 --- /dev/null +++ b/spec/node_suite.js @@ -0,0 +1,233 @@ +var fs = require('fs'); +var sys = require('sys'); +var path = require('path'); + +// yes, really keep this here to keep us honest, but only for jasmine's own runner! [xw] +undefined = "diz be undefined yo"; + +var jasmineGlobals = require("../src/base") +for(var k in jasmineGlobals) {global[k] = jasmineGlobals[k]} + +//load jasmine src files based on the order in runner.html +var srcFilesInProperRequireOrder = []; +var runnerHtmlLines = fs.readFileSync("spec/runner.html", "utf8").split("\n"); +var srcFileLines = []; +for (var i=0; i 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]; +} + +/* +End jasmine-node runner +*/ + + + + + +var isVerbose = false; +var showColors = true; +process.argv.forEach(function(arg){ + switch(arg) { + case '--color': showColors = true; break; + case '--noColor': showColors = false; break; + case '--verbose': isVerbose = true; break; + } +}); + +var specs = jasmine.getAllSpecFiles(__dirname + '/suites', new RegExp("^.+\.(js|coffee)$")); +var domIndependentSpecs = [] +for(var i=0; idisabled Jasmine spec. @@ -472,6 +476,7 @@ var it = function(desc, func) { var xit = function(desc, func) { return jasmine.getEnv().xit(desc, func); }; +if (isCommonJS) exports.xit = xit; /** * Starts a chain for a Jasmine expectation. @@ -484,6 +489,7 @@ var xit = function(desc, func) { var expect = function(actual) { return jasmine.getEnv().currentSpec.expect(actual); }; +if (isCommonJS) exports.expect = expect; /** * Defines part of a jasmine spec. Used in cominbination with waits or waitsFor in asynchrnous specs. @@ -493,6 +499,7 @@ var expect = function(actual) { var runs = function(func) { jasmine.getEnv().currentSpec.runs(func); }; +if (isCommonJS) exports.runs = runs; /** * Waits a fixed time period before moving to the next block. @@ -503,6 +510,7 @@ var runs = function(func) { var waits = function(timeout) { jasmine.getEnv().currentSpec.waits(timeout); }; +if (isCommonJS) exports.waits = waits; /** * Waits for the latchFunction to return true before proceeding to the next block. @@ -514,6 +522,7 @@ var waits = function(timeout) { var waitsFor = function(latchFunction, optional_timeoutMessage, optional_timeout) { jasmine.getEnv().currentSpec.waitsFor.apply(jasmine.getEnv().currentSpec, arguments); }; +if (isCommonJS) exports.waitsFor = waitsFor; /** * A function that is called before each spec in a suite. @@ -525,6 +534,7 @@ var waitsFor = function(latchFunction, optional_timeoutMessage, optional_timeout var beforeEach = function(beforeEachFunction) { jasmine.getEnv().beforeEach(beforeEachFunction); }; +if (isCommonJS) exports.beforeEach = beforeEach; /** * A function that is called after each spec in a suite. @@ -536,6 +546,7 @@ var beforeEach = function(beforeEachFunction) { var afterEach = function(afterEachFunction) { jasmine.getEnv().afterEach(afterEachFunction); }; +if (isCommonJS) exports.afterEach = afterEach; /** * Defines a suite of specifications. @@ -555,6 +566,7 @@ var afterEach = function(afterEachFunction) { var describe = function(description, specDefinitions) { return jasmine.getEnv().describe(description, specDefinitions); }; +if (isCommonJS) exports.describe = describe; /** * Disables a suite of specifications. Used to disable some suites in a file, or files, temporarily during development. @@ -565,6 +577,7 @@ var describe = function(description, specDefinitions) { var xdescribe = function(description, specDefinitions) { return jasmine.getEnv().xdescribe(description, specDefinitions); }; +if (isCommonJS) exports.xdescribe = xdescribe; // Provide the XMLHttpRequest class for IE 5.x-6.x: @@ -586,4 +599,4 @@ jasmine.XmlHttpRequest = (typeof XMLHttpRequest == "undefined") ? function() { } catch(e) { } throw new Error("This browser does not support XMLHttpRequest."); -} : XMLHttpRequest; +} : XMLHttpRequest; \ No newline at end of file