You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
1.8 KiB
68 lines
1.8 KiB
var async = require('async'),
|
|
PhantomJS = require(
|
|
'phantomjs-prebuilt'
|
|
);
|
|
module.exports = function(grunt){
|
|
grunt.registerMultiTask('examples', 'Run all the examples.', function(){
|
|
var phantomjs = PhantomJS.init(grunt),
|
|
errors = [],
|
|
// This task is async.
|
|
done = this.async(),
|
|
|
|
urls = grunt.file.expand(this.data);
|
|
|
|
phantomjs.on('error.onError', function(msg, stack, foo) {
|
|
grunt.log.write('X'.red);
|
|
errors.push(msg + "\n" + stack.map(function(frame){
|
|
return "- "+ frame.file.split("/").slice(-2).join("/") +
|
|
":" + frame.line;
|
|
}).join("\n"));
|
|
});
|
|
|
|
phantomjs.on('onResourceReceived', function(res){
|
|
if(res.stage === 'end' && res.status && res.status >= 400){
|
|
errors.push(res.status + " " + res.status_text + " " +
|
|
res.url.split("/").slice(-2).join("/"));
|
|
}
|
|
});
|
|
|
|
// Built-in error handlers.
|
|
phantomjs.on('fail.load', function(url) {
|
|
phantomjs.halt();
|
|
});
|
|
|
|
phantomjs.on('fail.timeout', function() {
|
|
phantomjs.halt();
|
|
});
|
|
|
|
phantomjs.on('onLoadFinished', function() {
|
|
grunt.log.write('.');
|
|
phantomjs.halt();
|
|
});
|
|
|
|
async.eachLimit(urls, 10,
|
|
function(url, next){
|
|
// try to load each example page
|
|
phantomjs.spawn(url, {
|
|
options: {},
|
|
done: function(err) {
|
|
err ? done() : next();
|
|
}
|
|
});
|
|
},
|
|
// All tests have been run.
|
|
function(err) {
|
|
// Log results.
|
|
grunt.log.writeln();
|
|
if (errors.length) {
|
|
grunt.fail.warn(errors.join("\n"));
|
|
} else {
|
|
grunt.log.ok();
|
|
}
|
|
// All done!
|
|
done();
|
|
}
|
|
);
|
|
});
|
|
};
|