thrift/lib/js/test/phantomjs-qunit.js
Christopher Tubbs 4646a3557b
Remove execute bit from plain text files in git (#2611)
Trivially change file mode from 755 to 644 for files in git that
shouldn't be marked as executable. These were probably marked as
executable due to some contributors developing on Windows using a
filesystem that doesn't support POSIX file modes, or aggressively marks
everything as executable.
2022-05-24 05:19:41 -04:00

92 lines
3.5 KiB
JavaScript

/*jshint evil:true*/
/* This file is only used by the test suite.
*
* Origin: https://github.com/ariya/phantomjs/blob/master/examples/run-qunit.js
* License: https://github.com/ariya/phantomjs/blob/master/LICENSE.BSD
*
* Inclusion into Apache products is allowed according to http://www.apache.org/legal/3party.html
*/
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.
*
* @param testFx javascript condition that evaluates to a boolean,
* it can be passed in as a string (e.g.: "1 == 1" or "$('#bar').is(':visible')" or
* as a callback function.
* @param onReady what to do when testFx condition is fulfilled,
* it can be passed in as a string (e.g.: "1 == 1" or "$('#bar').is(':visible')" or
* 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) {
var maxtimeOutMillis = timeOutMillis ? timeOutMillis : 3001, //< Default Max Timout is 3s
start = new Date().getTime(),
condition = false,
interval = setInterval(function() {
if ((new Date().getTime() - start < maxtimeOutMillis) && !condition) {
// If not time-out yet and condition not yet fulfilled
condition = (typeof(testFx) === 'string' ? eval(testFx) : testFx()); //< defensive code
} 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.');
if (typeof(onReady) === 'string') {
eval(onReady);
} else {
onReady(); //< Do what it's supposed to do once the condition is fulfilled
}
clearInterval(interval); //< Stop this interval
}
}
}, 100); //< repeat check every 250ms
}
if (system.args.length === 1 || system.args.length > 3) {
console.log('Usage: phantomjs phantomjs-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);
});
}
});