Commit 76d6f567 authored by Tristan Cavelier's avatar Tristan Cavelier

run-qunit restored for phantomjs unit tests

parent a26e91e9
/*jslint indent: 2, maxlen: 80, sloppy: true */
/*global require, phantom, document, console, setInterval, clearInterval */
var system = require('system');
/**
* 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.
*
* @method waitFor
* @param {Function} testFx Condition that evaluates to a boolean
* @param {Function} onReady What to do when testFx condition is fulfilled
* @param {Number} time_out_millis The max amount of time to wait.
* If not specified, 10 sec is used.
*/
function waitFor(testFx, onReady, time_out_millis) {
var maxtime_out_millis, start, condition, interval;
maxtime_out_millis = time_out_millis || (5 * 60 * 1000 + 1);
start = new Date().getTime();
condition = false;
interval = setInterval(function () {
if ((new Date().getTime() - start < maxtime_out_millis) && !condition) {
// If not time-out yet and condition not yet fulfilled
condition = testFx();
} else {
if (!condition) {
// If condition still not fulfilled (timeout but condition is 'false')
console.log("'waitFor()' timeout");
phantom.exit(1);
} else {
// Condition fulfilled (timeout and/or condition is 'true')
console.log("'waitFor()' finished in " +
(new Date().getTime() - start) + "ms.");
onReady();
clearInterval(interval); //< Stop this interval
}
}
}, 100); //< repeat check every 100ms
}
if (system.args.length !== 2) {
console.log('Usage: run-qunit.js URL');
phantom.exit(1);
}
var page = require('webpage').create();
// 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);
}
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 () {
console.log("========================================================");
console.log("<!DOCTYPE html><html>");
console.log(document.documentElement.innerHTML);
console.log("</html>");
console.log("========================================================");
var el = document.getElementById('qunit-testresult');
console.log(el.innerText);
try {
return el.getElementsByClassName('failed')[0].innerHTML;
} catch (ignore) {}
return 10000;
});
phantom.exit((parseInt(failedNum, 10) > 0) ? 1 : 0);
});
});
...@@ -17,7 +17,7 @@ class JIOTest(TestCase): ...@@ -17,7 +17,7 @@ class JIOTest(TestCase):
command = ["%s %s %s; exit 0" % ( command = ["%s %s %s; exit 0" % (
'%s/bin/phantomjs' % root_directory, '%s/bin/phantomjs' % root_directory,
'%s/parts/jio/test/run-qunit.js' % root_directory, '%s/parts/jio/test/run-qunit.js' % root_directory,
'%s/parts/jio/test/jiotests_withoutrequirejs.html' % root_directory)] '%s/parts/jio/test/tests.html' % root_directory)]
print command print command
result = subprocess.check_output( result = subprocess.check_output(
command, command,
......
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