Added a filter flag, to filter through the *Spec files
This allows to filter through the *Spec.js files, without modifying Gruntfile.js
This commit is contained in:
parent
468c93729d
commit
c565e35142
@ -54,7 +54,10 @@ module.exports = function(grunt) {
|
|||||||
|
|
||||||
setup(options);
|
setup(options);
|
||||||
|
|
||||||
jasmine.buildSpecrunner(this.filesSrc,options);
|
// The filter returned no spec, let's skip phantom.
|
||||||
|
if(!jasmine.buildSpecrunner(this.filesSrc, options)) {
|
||||||
|
return removePhantomListeners();
|
||||||
|
}
|
||||||
|
|
||||||
// If we're just building (e.g. for web), skip phantom.
|
// If we're just building (e.g. for web), skip phantom.
|
||||||
if (this.flags.build) return;
|
if (this.flags.build) return;
|
||||||
@ -100,8 +103,7 @@ module.exports = function(grunt) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function teardown(options, cb) {
|
function teardown(options, cb) {
|
||||||
phantomjs.removeAllListeners();
|
removePhantomListeners();
|
||||||
phantomjs.listenersAny().length = 0;
|
|
||||||
|
|
||||||
if (!options.keepRunner && fs.statSync(options.outfile).isFile()) fs.unlink(options.outfile);
|
if (!options.keepRunner && fs.statSync(options.outfile).isFile()) fs.unlink(options.outfile);
|
||||||
if (!options.keepRunner) {
|
if (!options.keepRunner) {
|
||||||
@ -111,6 +113,11 @@ module.exports = function(grunt) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function removePhantomListeners() {
|
||||||
|
phantomjs.removeAllListeners();
|
||||||
|
phantomjs.listenersAny().length = 0;
|
||||||
|
}
|
||||||
|
|
||||||
function setup(options) {
|
function setup(options) {
|
||||||
var thisRun = {};
|
var thisRun = {};
|
||||||
|
|
||||||
|
@ -32,6 +32,23 @@ exports.init = function(grunt, phantomjs) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
exports.buildSpecrunner = function (src, options){
|
exports.buildSpecrunner = function (src, options){
|
||||||
|
var source = '',
|
||||||
|
outfile = options.outfile,
|
||||||
|
specrunner = path.join(baseDir,outfile),
|
||||||
|
outdir = path.dirname(outfile),
|
||||||
|
gruntfilter = grunt.option("filter"),
|
||||||
|
filteredSpecs = exports.getRelativeFileList(outdir, options.specs);
|
||||||
|
|
||||||
|
// Let's filter through the spec files here,
|
||||||
|
// there's no need to go on if no specs matches
|
||||||
|
if(gruntfilter) {
|
||||||
|
filteredSpecs = specFilter(gruntfilter, filteredSpecs);
|
||||||
|
|
||||||
|
if(filteredSpecs.length === 0) {
|
||||||
|
grunt.log.warn("the --filter flag did not match any spec within " + grunt.task.current.target);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
exports.copyTempFile(__dirname + '/../jasmine/reporters/PhantomReporter.js', 'reporter.js');
|
exports.copyTempFile(__dirname + '/../jasmine/reporters/PhantomReporter.js', 'reporter.js');
|
||||||
exports.copyTempFile(__dirname + '/../../vendor/jasmine-' + options.version + '/jasmine.css', 'jasmine.css');
|
exports.copyTempFile(__dirname + '/../../vendor/jasmine-' + options.version + '/jasmine.css', 'jasmine.css');
|
||||||
@ -48,11 +65,6 @@ exports.init = function(grunt, phantomjs) {
|
|||||||
tempDir + '/jasmine.css'
|
tempDir + '/jasmine.css'
|
||||||
];
|
];
|
||||||
|
|
||||||
var source = '',
|
|
||||||
outfile = options.outfile,
|
|
||||||
specrunner = path.join(baseDir,outfile),
|
|
||||||
outdir = path.dirname(outfile);
|
|
||||||
|
|
||||||
jasmineCss = jasmineCss.concat(options.styles);
|
jasmineCss = jasmineCss.concat(options.styles);
|
||||||
|
|
||||||
var polyfills = [
|
var polyfills = [
|
||||||
@ -73,7 +85,7 @@ exports.init = function(grunt, phantomjs) {
|
|||||||
polyfills : exports.getRelativeFileList(outdir, polyfills),
|
polyfills : exports.getRelativeFileList(outdir, polyfills),
|
||||||
jasmine : exports.getRelativeFileList(outdir, jasmineCore),
|
jasmine : exports.getRelativeFileList(outdir, jasmineCore),
|
||||||
helpers : exports.getRelativeFileList(outdir, options.helpers, { nonull : true }),
|
helpers : exports.getRelativeFileList(outdir, options.helpers, { nonull : true }),
|
||||||
specs : exports.getRelativeFileList(outdir, options.specs),
|
specs : filteredSpecs,
|
||||||
src : exports.getRelativeFileList(outdir, src, { nonull : true }),
|
src : exports.getRelativeFileList(outdir, src, { nonull : true }),
|
||||||
vendor : exports.getRelativeFileList(outdir, options.vendor, { nonull : true }),
|
vendor : exports.getRelativeFileList(outdir, options.vendor, { nonull : true }),
|
||||||
reporters : exports.getRelativeFileList(outdir, reporters),
|
reporters : exports.getRelativeFileList(outdir, reporters),
|
||||||
@ -116,6 +128,45 @@ exports.init = function(grunt, phantomjs) {
|
|||||||
return files;
|
return files;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Allows for a spec file to be specified via the command line
|
||||||
|
function specFilter(pattern, files) {
|
||||||
|
var specPattern,
|
||||||
|
patternArray,
|
||||||
|
filteredArray = [],
|
||||||
|
scriptSpecs = [],
|
||||||
|
matchPath = function(path) {
|
||||||
|
return !!path.match(specPattern);
|
||||||
|
};
|
||||||
|
|
||||||
|
if(pattern) {
|
||||||
|
// For '*' to work as a wildcard.
|
||||||
|
pattern = pattern.split("*").join("[\\S]*").replace(/\./g, "\\.");
|
||||||
|
// This allows for comma separated strings to which we can match the spec files.
|
||||||
|
patternArray = pattern.split(",");
|
||||||
|
|
||||||
|
while(patternArray.length > 0) {
|
||||||
|
pattern = (patternArray.splice(0, 1)[0]);
|
||||||
|
|
||||||
|
if(pattern.length > 0) {
|
||||||
|
if(pattern.indexOf('/') === -1) {
|
||||||
|
specPattern = new RegExp("("+pattern+"[^/]*)(?!/)$", "ig");
|
||||||
|
} else if(pattern.indexOf('/') === 0) {
|
||||||
|
specPattern = new RegExp("("+pattern+"[^/]*)(?=/)", "ig");
|
||||||
|
} else {
|
||||||
|
throw new TypeError("--filter flag seems to be in the wrong format.");
|
||||||
|
}
|
||||||
|
|
||||||
|
// push is usually faster than concat.
|
||||||
|
[].push.apply(scriptSpecs, files.filter(matchPath));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
filteredArray = grunt.util._.uniq(scriptSpecs);
|
||||||
|
}
|
||||||
|
|
||||||
|
return filteredArray;
|
||||||
|
}
|
||||||
|
|
||||||
return exports;
|
return exports;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user