remove Envjs from test harness; remove broken --coffee option; add --nocolor option

This commit is contained in:
Jeff Williams 2012-10-07 07:35:57 -07:00
parent cdee70fe4c
commit e17601feb1
7 changed files with 130 additions and 14115 deletions

View File

@ -33,8 +33,8 @@ argParser.addOption('u', 'tutorials', true, 'Directory in which JSDoc should
//Here are options specific to tests //Here are options specific to tests
argParser.addOption(null, 'verbose', false, 'Display verbose output for tests'); argParser.addOption(null, 'verbose', false, 'Display verbose output for tests');
argParser.addOption(null, 'match', true, 'only run tests containing <value>', true); argParser.addOption(null, 'match', true, 'Only run tests containing <value>', true);
argParser.addOption(null, 'coffee', false, 'load coffee-script which allows execution .coffee files'); argParser.addOption(null, 'nocolor', false, 'Do not use color in console output from tests');
/** /**
Set the options for this app. Set the options for this app.

3
rhino_modules/util.js Normal file
View File

@ -0,0 +1,3 @@
exports.print = require('common/util').print;
exports.puts = require('common/util').puts;

View File

@ -1,12 +1,26 @@
/*First load envjs to give us a browser environment for jasmine. /*global env: true, expect: true, runs: true, waits: true */
*Jasmine wants things like set/clearInterval,set/clearTimeout. /*jshint evil: true */
*Then load jasmine itself var fs = require('fs');
*/ var path = require('path');
load('test/lib/env.rhino.js'); var util = require('util');
load('test/lib/jasmine.js');
load('test/async-callback.js'); var jasmineAll = require('test/lib/jasmine');
var jasmineNode = require('./reporter').jasmineNode, var jasmine = jasmineAll.jasmine;
util = require('common/util');
// due to scoping issues, requiring this file doesn't work
eval( fs.readFileSync(env.dirname + '/test/async-callback.js') );
var jasmineNode = require('test/reporter').jasmineNode;
var globalRoot = (function() {
return this;
}).call(null);
// set up jasmine's global functions
['spyOn', 'it', 'xit', 'expect', 'runs', 'waitsFor', 'beforeEach', 'afterEach', 'describe',
'xdescribe'].forEach(function(item) {
globalRoot[item] = jasmineAll[item];
});
jasmine.loadHelpersInFolder = function(folder, matcher) { jasmine.loadHelpersInFolder = function(folder, matcher) {
var helpers = [], helperCollection = require('./spec-collection'); var helpers = [], helperCollection = require('./spec-collection');
@ -15,44 +29,41 @@ jasmine.loadHelpersInFolder = function(folder, matcher) {
helpers = helperCollection.getSpecs(); helpers = helperCollection.getSpecs();
for ( var i = 0, len = helpers.length; i < len; ++i) { for ( var i = 0, len = helpers.length; i < len; ++i) {
var file = helpers[i].path(); var file = helpers[i].path();
var helper = require(file.replace(/\\/g, '/').replace(new RegExp('^' + env.dirname + '/'), "").replace(/\.*$/, "")); var helper = require(file.replace(/\\/g, '/').
replace(new RegExp('^' + env.dirname + '/'), "").
replace(/\.*$/, ""));
for (var key in helper) { for (var key in helper) {
this[key] = helper[key]; if ( helper.hasOwnProperty(key) ) {
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; var reporter = null;
jasmine.initialize = function(done, verbose) { jasmine.initialize = function(done, verbose) {
var jasmineEnv = jasmine.getEnv(); var jasmineEnv = jasmine.getEnv();
if (reporter !== null) { if (reporter !== null) {
//If we've run before, we need to reset the runner // If we've run before, we need to reset the runner
jasmineEnv.currentRunner_ = new jasmine.Runner(jasmineEnv); jasmineEnv.currentRunner_ = new jasmine.Runner(jasmineEnv);
//And clear the reporter // And clear the reporter
jasmineEnv.reporter.subReporters_.splice(jasmineEnv.reporter.subReporters_.indexOf(reporter)); jasmineEnv.reporter.subReporters_.splice(jasmineEnv.reporter.subReporters_.indexOf(reporter));
} }
reporter = new (verbose ? jasmineNode.TerminalVerboseReporter : jasmineNode.TerminalReporter)({
print : util.print, var reporterOpts = {
color : true, print: util.print,
onComplete : done, color: env.opts.nocolor === true ? false : true,
stackFilter : removeJasmineFrames onComplete: done
}); };
reporter = env.opts.verbose ? new jasmineNode.TerminalVerboseReporter(reporterOpts) :
new jasmineNode.TerminalReporter(reporterOpts);
jasmineEnv.addReporter(reporter); jasmineEnv.addReporter(reporter);
//updateInterval is set to 0 because there were not-fully-understood // updateInterval is set to 0 because there were not-fully-understood
//issues with asynchronous behavior in jasmine otherwise. // issues with asynchronous behavior in jasmine otherwise.
jasmineEnv.updateInterval = 0; jasmineEnv.updateInterval = 0;
return jasmineEnv; return jasmineEnv;
@ -62,27 +73,32 @@ jasmine.initialize = function(done, verbose) {
* Execute the specs in the specified folder. Helpers in each folder will be * 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 * added to the environment. Helpers in parent directories will be available to child
* directories. * directories.
* @param {string} folder the folder in which the specs are to be found * @param {string} folder The folder in which the specs are to be found.
* @param {function?} done callback function to execute when finished * @param {function?} done Callback function to execute when finished.
* @param {boolean} verbose whether or not output verbose results * @param {object} opts Options for executing the specs.
* @param {RegExp} matcher a regular expression to filter specs by. Only matching specs will run * @param {boolean} opts.verbose Whether or not to output verbose results.
* @param {RegExp} opts.matcher A regular expression to filter specs by. Only matching specs run.
*/ */
jasmine.executeSpecsInFolder = function(folder, done, verbose, matcher) { jasmine.executeSpecsInFolder = function(folder, done, opts) {
var fileMatcher = matcher || new RegExp(".(js)$", "i"), var fileMatcher = opts.matcher || new RegExp(".(js)$", "i"),
specs = require('./spec-collection'), specs = require('./spec-collection'),
jasmineEnv = jasmine.initialize(done, verbose); jasmineEnv = jasmine.initialize(done, opts.verbose);
//Load the specs // Load the specs
specs.load(folder, fileMatcher, true); specs.load(folder, fileMatcher, true);
//Add the specs to the context
var specsList = specs.getSpecs(); var specsList = specs.getSpecs();
for ( var i = 0, len = specsList.length; i < len; ++i) { var filename;
var filename = specsList[i];
require(filename.path().replace(/\\/g, '/').replace(new RegExp('^' + env.dirname + '/'), "").replace(/\.\w+$/, "")); // Add the specs to the context
for (var i = 0, len = specsList.length; i < len; ++i) {
filename = specsList[i];
require(filename.path().replace(/\\/g, '/').
replace(new RegExp('^' + env.dirname + '/'), "").
replace(/\.\w+$/, ""));
} }
//Run Jasmine // Run Jasmine
jasmineEnv.execute(); jasmineEnv.execute();
}; };
@ -112,17 +128,8 @@ jasmine.asyncSpecDone = function() {
jasmine.asyncSpecWait.done = true; jasmine.asyncSpecWait.done = true;
}; };
for ( var key in jasmine) { for (var key in jasmine) {
exports[key] = jasmine[key]; if ( jasmine.hasOwnProperty(key) ) {
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;

File diff suppressed because one or more lines are too long

View File

@ -1,54 +1,61 @@
/*global env: true */
/* /*
* Tests Steps: * Test Steps:
* 1. Get Jasmine * 1. Get Jasmine
* 2. Get the test options * 2. Get the test options
* 3. Get the list of directories to run tests from * 3. Get the list of directories to run tests from
* 4. Run Jasmine on each directory * 4. Run Jasmine on each directory
*/ */
var fs = require('fs');
var jasmine = require('test/jasmine-jsdoc'); var jasmine = require('test/jasmine-jsdoc');
var extensions = "js"; var path = require('path');
var match = ".";
var verbose = env.opts.verbose || false; fs.existsSync = fs.existsSync || path.existsSync;
var coffee = env.opts.coffee || false;
var matches = env.opts.match || false; var hasOwnProp = Object.prototype.hasOwnProperty;
if (coffee) {
extensions = "js|coffee"; for (var key in jasmine) {
} if (hasOwnProp.call(jasmine, key)) {
if (matches) { this[key] = jasmine[key];
if (matches instanceof Array) {
match = matches.join("|");
} else {
match = matches;
} }
} }
var opts = {
verbose: env.opts.verbose || false,
showColors: env.opts.nocolor === true ? false : true
};
var extensions = 'js';
var match = env.opts.match || '.';
if (match instanceof Array) {
match = match.join("|");
}
opts.matcher = new RegExp("(" + match + ")\\.(" + extensions + ")$", 'i');
var helperCollection = require('test/spec-collection'); var helperCollection = require('test/spec-collection');
var specFolders = ['test/specs', 'plugins/test/specs']; var specFolders = ['test/specs', 'plugins/test/specs'];
var failedCount = 0; var failedCount = 0;
var index = 0; var index = 0;
for (var key in jasmine) { var onComplete;
this[key] = jasmine[key];
function runNextFolder() {
if (index < specFolders.length) {
jasmine.loadHelpersInFolder(specFolders[index],
new RegExp("helpers?\\.(" + extensions + ")$", 'i'));
jasmine.executeSpecsInFolder(specFolders[index], onComplete, opts);
}
} }
var onComplete = function(runner, log) { onComplete = function(runner, log) {
if (runner.results().failedCount != 0) { if (runner.results().failedCount !== 0) {
failedCount++; failedCount += runner.results().failedCount;
} }
index++; index++;
runNextFolder(); runNextFolder();
}; };
var specFolder = null;
var runNextFolder = function() {
if (index < specFolders.length) {
jasmine.loadHelpersInFolder(specFolders[index], new RegExp("helpers\\.(" + extensions + ")$", 'i'));
var regExpSpec = new RegExp("(" + match + ")\\.(" + extensions + ")$", 'i');
jasmine.executeSpecsInFolder(specFolders[index], onComplete, verbose, regExpSpec);
}
};
runNextFolder(); runNextFolder();
process.exit(failedCount); process.exit(failedCount);

View File

@ -1,24 +1,27 @@
/*global env: true */
var wrench = require('wrench/wrench'); var wrench = require('wrench/wrench');
var path = require('path'); var path = require('path');
var fs = require('fs'); var fs = require('fs');
var specs = []; var specs = [];
var createSpecObj = function(path, root) { var createSpecObj = function(_path, root) {
function relativePath() {
return _path.replace(root, '').replace(/^[\/\\]/, '').replace(/\\/g, '/');
}
return { return {
path : function() { path: function() {
return path; return _path;
}, },
relativePath : function() { relativePath: relativePath,
return path.replace(root, '').replace(/^[\/\\]/, '').replace(/\\/g, '/'); directory: function() {
return _path.replace(/[\/\\][\s\w\.\-]*$/, "").replace(/\\/g, '/');
}, },
directory : function() { relativeDirectory: function() {
return path.replace(/[\/\\][\s\w\.-]*$/, "").replace(/\\/g, '/'); return relativePath().replace(/[\/\\][\s\w\.\-]*$/, "").replace(/\\/g, '/');
}, },
relativeDirectory : function() { filename: function() {
return relativePath().replace(/[\/\\][\s\w\.-]*$/, "").replace(/\\/g, '/'); return _path.replace(/^.*[\\\/]/, '');
},
filename : function() {
return path.replace(/^.*[\\\/]/, '');
} }
}; };
}; };
@ -28,9 +31,10 @@ var clearSpecs = exports.clearSpecs = function() {
}; };
exports.load = function(loadpath, matcher, clear) { exports.load = function(loadpath, matcher, clear) {
if(clear === true) { if (clear === true) {
clearSpecs(); clearSpecs();
} }
var wannaBeSpecs = wrench.readdirSyncRecursive(loadpath); var wannaBeSpecs = wrench.readdirSyncRecursive(loadpath);
for (var i = 0; i < wannaBeSpecs.length; i++) { for (var i = 0; i < wannaBeSpecs.length; i++) {
var file = path.join(env.dirname, loadpath, wannaBeSpecs[i]); var file = path.join(env.dirname, loadpath, wannaBeSpecs[i]);

View File

@ -176,7 +176,7 @@ describe("jsdoc/opts/parser", function() {
expect(r.tutorials).toEqual('mytutorials'); expect(r.tutorials).toEqual('mytutorials');
}); });
it("should accept a naked option (i.e. no '-') and return an object with a '_' pproperty", function() { it("should accept a naked option (i.e. no '-') and return an object with a '_' property", function() {
opts.parse(['myfile1', 'myfile2']); opts.parse(['myfile1', 'myfile2']);
var r = opts.get(); var r = opts.get();
@ -190,11 +190,11 @@ describe("jsdoc/opts/parser", function() {
expect(r.verbose).toEqual(true); expect(r.verbose).toEqual(true);
}); });
it("should accept a '--coffee' option and return an object with a 'coffee' property", function() { it("should accept a '--nocolor' option and return an object with a 'nocolor' property", function() {
opts.parse(['--coffee']); opts.parse(['--nocolor']);
var r = opts.get(); var r = opts.get();
expect(r.coffee).toEqual(true); expect(r.nocolor).toEqual(true);
}); });
it("should accept a '--match' option and return an object with a 'match' property", function() { it("should accept a '--match' option and return an object with a 'match' property", function() {