205 lines
5.9 KiB
JavaScript
205 lines
5.9 KiB
JavaScript
var fs = require('fs');
|
|
var mkdirp = require('mkdirp');
|
|
var util;
|
|
try {
|
|
util = require('util')
|
|
} catch(e) {
|
|
util = require('sys')
|
|
}
|
|
|
|
var path = require('path');
|
|
|
|
var filename = __dirname + '/jasmine-1.3.1.js';
|
|
var isWindowUndefined = typeof global.window === 'undefined';
|
|
if (isWindowUndefined) {
|
|
global.window = {
|
|
setTimeout: setTimeout,
|
|
clearTimeout: clearTimeout,
|
|
setInterval: setInterval,
|
|
clearInterval: clearInterval
|
|
};
|
|
}
|
|
|
|
var src = fs.readFileSync(filename);
|
|
// Put jasmine in the global context, this is somewhat like running in a
|
|
// browser where every file will have access to `jasmine`
|
|
var jasmine = require('vm').runInThisContext(src + "\njasmine;", filename);
|
|
|
|
|
|
if (isWindowUndefined) {
|
|
delete global.window;
|
|
}
|
|
require("./async-callback");
|
|
require("jasmine-reporters");
|
|
var nodeReporters = require('./reporter').jasmineNode;
|
|
jasmine.TerminalVerboseReporter = nodeReporters.TerminalVerboseReporter;
|
|
jasmine.TerminalReporter = nodeReporters.TerminalReporter;
|
|
jasmine.TeamcityReporter = nodeReporters.TeamcityReporter;
|
|
jasmine.GrowlReporter = require('jasmine-growl-reporter');
|
|
|
|
|
|
jasmine.loadHelpersInFolder = function(folder, matcher) {
|
|
// Check to see if the folder is actually a file, if so, back up to the
|
|
// parent directory and find some helpers
|
|
folderStats = fs.statSync(folder);
|
|
if (folderStats.isFile()) {
|
|
folder = path.dirname(folder);
|
|
}
|
|
|
|
var helpers = [],
|
|
helperCollection = require('./spec-collection');
|
|
|
|
helperCollection.load([folder], matcher);
|
|
helpers = helperCollection.getSpecs();
|
|
|
|
for (var i = 0, len = helpers.length; i < len; ++i) {
|
|
var file = helpers[i].path();
|
|
|
|
try {
|
|
var helper = require(file.replace(/\.*$/, ""));
|
|
} catch (e) {
|
|
console.log("Exception loading helper: " + file)
|
|
console.log(e);
|
|
throw e; // If any of the helpers fail to load, fail everything
|
|
}
|
|
|
|
for (var key in helper) {
|
|
global[key]= helper[key];
|
|
}
|
|
}
|
|
};
|
|
|
|
function removeJasmineFrames(text) {
|
|
if (!text) {
|
|
return text;
|
|
}
|
|
|
|
var lines = [];
|
|
text.split(/\n/).forEach(function(line){
|
|
if (line.indexOf(filename) == -1) {
|
|
lines.push(line);
|
|
}
|
|
});
|
|
return lines.join('\n');
|
|
}
|
|
|
|
jasmine.executeSpecsInFolder = function(options){
|
|
var folders = options['specFolders'];
|
|
var done = options['onComplete'];
|
|
var isVerbose = options['isVerbose'];
|
|
var showColors = options['showColors'];
|
|
var teamcity = options['teamcity'];
|
|
var useRequireJs = options['useRequireJs'];
|
|
var matcher = options['regExpSpec'];
|
|
var junitreport = options['junitreport'];
|
|
var includeStackTrace = options['includeStackTrace'];
|
|
var growl = options['growl'];
|
|
|
|
// Overwriting it allows us to handle custom async specs
|
|
it = function(desc, func, timeout) {
|
|
return jasmine.getEnv().it(desc, func, timeout);
|
|
}
|
|
beforeEach = function(func, timeout) {
|
|
return jasmine.getEnv().beforeEach(func, timeout);
|
|
}
|
|
afterEach = function(func, timeout) {
|
|
return jasmine.getEnv().afterEach(func, timeout);
|
|
}
|
|
var fileMatcher = matcher || new RegExp(".(js)$", "i"),
|
|
colors = showColors || false,
|
|
specs = require('./spec-collection'),
|
|
jasmineEnv = jasmine.getEnv();
|
|
|
|
specs.load(folders, fileMatcher);
|
|
|
|
if(junitreport && junitreport.report) {
|
|
var existsSync = fs.existsSync || path.existsSync;
|
|
if(!existsSync(junitreport.savePath)) {
|
|
console.log('creating junit xml report save path: ' + junitreport.savePath);
|
|
mkdirp.sync(junitreport.savePath, "0755");
|
|
}
|
|
jasmineEnv.addReporter(new jasmine.JUnitXmlReporter(junitreport.savePath,
|
|
junitreport.consolidate,
|
|
junitreport.useDotNotation));
|
|
}
|
|
|
|
if(teamcity){
|
|
jasmineEnv.addReporter(new jasmine.TeamcityReporter({onComplete: done}));
|
|
} else if(isVerbose) {
|
|
jasmineEnv.addReporter(new jasmine.TerminalVerboseReporter({ print: print,
|
|
color: showColors,
|
|
onComplete: done,
|
|
stackFilter: removeJasmineFrames}));
|
|
} else {
|
|
jasmineEnv.addReporter(new jasmine.TerminalReporter({print: print,
|
|
color: showColors,
|
|
includeStackTrace: includeStackTrace,
|
|
onComplete: done,
|
|
stackFilter: removeJasmineFrames}));
|
|
}
|
|
|
|
if (growl) {
|
|
jasmineEnv.addReporter(new jasmine.GrowlReporter());
|
|
}
|
|
|
|
if (useRequireJs) {
|
|
require('./requirejs-runner').executeJsRunner(
|
|
specs,
|
|
done,
|
|
jasmineEnv,
|
|
typeof useRequireJs === 'string' ? useRequireJs : null
|
|
);
|
|
} else {
|
|
var specsList = specs.getSpecs();
|
|
|
|
for (var i = 0, len = specsList.length; i < len; ++i) {
|
|
var filename = specsList[i];
|
|
delete require.cache[filename.path()];
|
|
// Catch exceptions in loading the spec
|
|
try {
|
|
require(filename.path().replace(/\.\w+$/, ""));
|
|
} catch (e) {
|
|
console.log("Exception loading: " + filename.path());
|
|
console.log(e);
|
|
throw e;
|
|
}
|
|
}
|
|
|
|
jasmineEnv.execute();
|
|
}
|
|
};
|
|
|
|
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;
|
|
};
|
|
|
|
function print(str) {
|
|
process.stdout.write(util.format(str));
|
|
}
|
|
|
|
for ( var key in jasmine) {
|
|
exports[key] = jasmine[key];
|
|
}
|