var
system = require(
'system'
);
function
waitFor(testFx, onReady, timeOutMillis) {
var
maxtimeOutMillis = timeOutMillis ? timeOutMillis : 3001,
start =
new
Date().getTime(),
condition =
false
,
interval = setInterval(
function
() {
if
( (
new
Date().getTime() - start < maxtimeOutMillis) && !condition ) {
condition = (
typeof
(testFx) ===
"string"
? eval(testFx) : testFx());
}
else
{
if
(!condition) {
console.log(
"# 'waitFor()' timeout"
);
phantom.exit(1);
}
else
{
typeof
(onReady) ===
"string"
? eval(onReady) : onReady();
clearInterval(interval);
}
}
}, 100);
};
if
(system.args.length === 0 || system.args.length > 2) {
console.log('Usage: run-qunit.js URL
');
phantom.exit(1);
}
var page = new WebPage();
// Route "console.log()" calls from within the Page context to the main Phantom context (i.e. current "this")
page.onConsoleMessage = function(msg) {
console.log(msg);
};
page.open(system.args[1], function(status){
if (status !== "success") {
console.log("Unable to access network");
phantom.exit(1);
} else {
waitFor(function(){
return page.evaluate(function(){
var el = document.getElementById('
qunit-testresult
');
if (el && el.innerText.match('
completed
')) {
return true;
}
return false;
});
}, function(){
var failedNum = page.evaluate(function(){
var el = document.getElementById('
qunit-testresult
');
// console.log(el.innerText);
try {
return el.getElementsByClassName('
failed')[0].innerHTML;
}
catch
(e) { }
return
10000;
});
phantom.exit((parseInt(failedNum, 10) > 0) ? 1 : 0);
});
}
});