test to verify hanging on failed load of iframe

This commit is contained in:
Heiko Behrens 2013-03-22 18:07:20 +01:00
parent ea5334ec7e
commit af73f349f8
3 changed files with 59 additions and 3 deletions

View File

@ -9,7 +9,22 @@
'use strict'; 'use strict';
module.exports = function(grunt) { module.exports = function(grunt) {
grunt.initConfig({ grunt.initConfig({
connect: {
return500: {
options: {
port: 9000,
middleware: function(connect, options) {
return [function(req, res, next){
res.statusCode = 500;
res.end();
}];
}
}
}
},
jshint: { jshint: {
all: [ all: [
'Gruntfile.js', 'Gruntfile.js',
@ -45,8 +60,16 @@ module.exports = function(grunt) {
consolidate: true consolidate: true
} }
} }
},
selfTest: {
options: {
specs:["test/selfTest/*.js"],
"--web-security": "no"
}
} }
}, },
nodeunit: { nodeunit: {
tasks: ['test/*_test.js'] tasks: ['test/*_test.js']
} }
@ -57,7 +80,8 @@ module.exports = function(grunt) {
grunt.loadNpmTasks('grunt-contrib-jshint'); grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.loadNpmTasks('grunt-contrib-nodeunit'); grunt.loadNpmTasks('grunt-contrib-nodeunit');
grunt.loadNpmTasks('grunt-contrib-internal'); grunt.loadNpmTasks('grunt-contrib-internal');
grunt.loadNpmTasks('grunt-contrib-connect');
grunt.registerTask('test', ['jshint', 'jasmine', 'nodeunit']); grunt.registerTask('test', ['connect:return500', 'jasmine', 'nodeunit']);
grunt.registerTask('default', ['test', 'build-contrib']); grunt.registerTask('default', ['jshint', 'test', 'build-contrib']);
}; };

View File

@ -28,7 +28,7 @@
"test": "grunt test" "test": "grunt test"
}, },
"dependencies": { "dependencies": {
"grunt-lib-phantomjs": "~0.2.0", "grunt-lib-phantomjs": "git://github.com/HBehrens/grunt-lib-phantomjs.git#20f675c331893ee4b1a328ae7a1ce82d75099e50",
"rimraf": "~2.0.3" "rimraf": "~2.0.3"
}, },
"devDependencies": { "devDependencies": {

32
test/selfTest/TaskSpec.js Normal file
View File

@ -0,0 +1,32 @@
describe("Task", function() {
/*
when running this test with `grunt jasmine:selfTest -d` you got this output
[D] ["phantomjs","onLoadFinished","success"]
[D] ["phantomjs","onResourceRequested","http://httpbin.org/status/500"]
[D] ["phantomjs","onResourceReceived","http://httpbin.org/status/500"]
[D] ["phantomjs","onLoadFinished","fail"]
[D] ["phantomjs","fail.load","_SpecRunner.html"]
phantomjs.page.onLoadFinished seems to be called for iframes, too.
A failing onLoadFinished caused this grunt taks to hang.
Now, after removing the event handler, this following test should work as expected
*/
it("can handle fail on iframe", function(){
var waitedLongEnough;
runs(function(){
iframe = document.createElement("iframe");
iframe.src = "http://localhost:9000";
document.body.appendChild(iframe);
setTimeout(function(){waitedLongEnough=true;}, 50);
});
waitsFor(function(){
return waitedLongEnough;
});
runs(function(){
expect(true).toBeTruthy("without change in grunt-lib-phantomjs, jasmine would never reach this line");
});
});
});