Commit 016942d9 authored by Tristan Cavelier's avatar Tristan Cavelier

run-qunit.js passes jslint + modify default timeout to 10 seconds

Because 4 times over 5 the script fails on timeout.
parent e3b5e700
/*jslint indent: 2, maxlen: 80 */
/*global require: true, phantom: true, document: true */
"use strict";
var system = require('system'); var system = require('system');
/** /**
* Wait until the test condition is true or a timeout occurs. Useful for waiting * Wait until the test condition is true or a timeout occurs. Useful for waiting
* on a server response or for a ui change (fadeIn, etc.) to occur. * on a server response or for a ui change (fadeIn, etc.) to occur.
* *
* @param testFx javascript condition that evaluates to a boolean, * @method waitFor
* it can be passed in as a string (e.g.: "1 == 1" or "$('#bar').is(':visible')" or * @param {Function} testFx Condition that evaluates to a boolean
* as a callback function. * @param {Function} onReady What to do when testFx condition is fulfilled
* @param onReady what to do when testFx condition is fulfilled, * @param {Number} time_out_millis The max amount of time to wait.
* it can be passed in as a string (e.g.: "1 == 1" or "$('#bar').is(':visible')" or * If not specified, 10 sec is used.
* as a callback function.
* @param timeOutMillis the max amount of time to wait. If not specified, 3 sec is used.
*/ */
function waitFor(testFx, onReady, timeOutMillis) { function waitFor(testFx, onReady, time_out_millis) {
var maxtimeOutMillis = timeOutMillis ? timeOutMillis : 3001, //< Default Max Timout is 3s var maxtime_out_millis, start, condition, interval;
start = new Date().getTime(), maxtime_out_millis = time_out_millis || 10001;
condition = false, start = new Date().getTime();
interval = setInterval(function() { condition = false;
if ( (new Date().getTime() - start < maxtimeOutMillis) && !condition ) { interval = setInterval(function () {
if ((new Date().getTime() - start < maxtime_out_millis) && !condition) {
// If not time-out yet and condition not yet fulfilled // If not time-out yet and condition not yet fulfilled
condition = (typeof(testFx) === "string" ? eval(testFx) : testFx()); //< defensive code condition = testFx();
} else { } else {
if(!condition) { if (!condition) {
// If condition still not fulfilled (timeout but condition is 'false') // If condition still not fulfilled (timeout but condition is 'false')
console.log("'waitFor()' timeout"); console.log("'waitFor()' timeout");
phantom.exit(1); phantom.exit(1);
} else { } else {
// Condition fulfilled (timeout and/or condition is 'true') // Condition fulfilled (timeout and/or condition is 'true')
console.log("'waitFor()' finished in " + (new Date().getTime() - start) + "ms."); console.log("'waitFor()' finished in " +
typeof(onReady) === "string" ? eval(onReady) : onReady(); //< Do what it's supposed to do once the condition is fulfilled (new Date().getTime() - start) + "ms.");
onReady();
clearInterval(interval); //< Stop this interval clearInterval(interval); //< Stop this interval
} }
} }
}, 100); //< repeat check every 250ms }, 100); //< repeat check every 100ms
}; }
if (system.args.length !== 2) { if (system.args.length !== 2) {
console.log('Usage: run-qunit.js URL'); console.log('Usage: run-qunit.js URL');
...@@ -43,29 +47,30 @@ if (system.args.length !== 2) { ...@@ -43,29 +47,30 @@ if (system.args.length !== 2) {
var page = require('webpage').create(); var page = require('webpage').create();
// Route "console.log()" calls from within the Page context to the main Phantom context (i.e. current "this") // Route "console.log()" calls from within the Page context to the main Phantom
page.onConsoleMessage = function(msg) { // context (i.e. current "this")
page.onConsoleMessage = function (msg) {
console.log(msg); console.log(msg);
}; };
page.open(system.args[1], function(status){ page.open(system.args[1], function (status) {
if (status !== "success") { if (status !== "success") {
console.log("Unable to access network"); console.log("Unable to access network");
phantom.exit(1); phantom.exit(1);
} else { }
waitFor(function(){ waitFor(function () {
return page.evaluate(function(){ return page.evaluate(function () {
var el = document.getElementById('qunit-testresult'); var el = document.getElementById('qunit-testresult');
if (el && el.innerText.match('completed')) { if (el && el.innerText.match('completed')) {
return true; return true;
} }
return false; return false;
}); });
}, function(){ }, function () {
var failedNum = page.evaluate(function(){ var failedNum = page.evaluate(function () {
console.log("========================================================") console.log("========================================================");
console.log(document.documentElement.innerHTML); console.log(document.documentElement.innerHTML);
console.log("========================================================") console.log("========================================================");
var el = document.getElementById('qunit-testresult'); var el = document.getElementById('qunit-testresult');
console.log(el.innerText); console.log(el.innerText);
try { try {
...@@ -75,5 +80,4 @@ page.open(system.args[1], function(status){ ...@@ -75,5 +80,4 @@ page.open(system.args[1], function(status){
}); });
phantom.exit((parseInt(failedNum, 10) > 0) ? 1 : 0); phantom.exit((parseInt(failedNum, 10) > 0) ? 1 : 0);
}); });
}
}); });
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment