jsdoc/test/jasmine-jsdoc.js
Jeff Williams 22e899fa9d change __dirname to env.dirname
this fixes a JSHint error that cannot be suppressed.
2012-07-03 17:37:17 -07:00

128 lines
4.0 KiB
JavaScript

/*First load envjs to give us a browser environment for jasmine.
*Jasmine wants things like set/clearInterval,set/clearTimeout.
*Then load jasmine itself
*/
load('test/lib/env.rhino.js');
load('test/lib/jasmine.js');
load('test/async-callback.js');
var jasmineNode = require('./reporter').jasmineNode,
util = require('common/util');
jasmine.loadHelpersInFolder = function(folder, matcher) {
var helpers = [], helperCollection = require('./spec-collection');
helperCollection.load(folder, matcher, true);
helpers = helperCollection.getSpecs();
for ( var i = 0, len = helpers.length; i < len; ++i) {
var file = helpers[i].path();
var helper = require(file.replace(/\\/g, '/').replace(new RegExp('^' + env.dirname + '/'), "").replace(/\.*$/, ""));
for (var key in helper) {
this[key] = helper[key];
}
}
};
function removeJasmineFrames(text) {
var lines = [];
text.split(/\n/).forEach(function(line) {
if (line.indexOf(filename) == -1) {
lines.push(line);
}
});
return lines.join('\n');
}
var reporter = null;
jasmine.initialize = function(done, verbose) {
var jasmineEnv = jasmine.getEnv();
if (reporter !== null) {
//If we've run before, we need to reset the runner
jasmineEnv.currentRunner_ = new jasmine.Runner(jasmineEnv);
//And clear the reporter
jasmineEnv.reporter.subReporters_.splice(jasmineEnv.reporter.subReporters_.indexOf(reporter));
}
reporter = new (verbose ? jasmineNode.TerminalVerboseReporter : jasmineNode.TerminalReporter)({
print : util.print,
color : true,
onComplete : done,
stackFilter : removeJasmineFrames
});
jasmineEnv.addReporter(reporter);
//updateInterval is set to 0 because there were not-fully-understood
//issues with asynchronous behavior in jasmine otherwise.
jasmineEnv.updateInterval = 0;
return jasmineEnv;
};
/**
* Execute the specs in the specified folder. Helpers in each folder will be
* added to the environment. Helpers in parent directories will be available to child
* directories.
* @param {string} folder the folder in which the specs are to be found
* @param {function?} done callback function to execute when finished
* @param {boolean} verbose whether or not output verbose results
* @param {RegExp} matcher a regular expression to filter specs by. Only matching specs will run
*/
jasmine.executeSpecsInFolder = function(folder, done, verbose, matcher) {
var fileMatcher = matcher || new RegExp(".(js)$", "i"),
specs = require('./spec-collection'),
jasmineEnv = jasmine.initialize(done, verbose);
//Load the specs
specs.load(folder, fileMatcher, true);
//Add the specs to the context
var specsList = specs.getSpecs();
for ( var i = 0, len = specsList.length; i < len; ++i) {
var filename = specsList[i];
require(filename.path().replace(/\\/g, '/').replace(new RegExp('^' + env.dirname + '/'), "").replace(/\.\w+$/, ""));
}
//Run Jasmine
jasmineEnv.execute();
};
function now() {
return new Date().getTime();
}
jasmine.asyncSpecWait = function() {
var wait = this.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];
}
exports.spyOn = spyOn;
exports.it = it;
exports.xit = xit;
exports.expect = expect;
exports.runs = runs;
exports.waitsFor = waitsFor;
exports.beforeEach = beforeEach;
exports.afterEach = afterEach;
exports.describe = describe;
exports.xdescribe = xdescribe;