mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
52 lines
1.4 KiB
JavaScript
52 lines
1.4 KiB
JavaScript
Cu.import("resource://gre/modules/Services.jsm");
|
|
|
|
// A helper to run a suite of tests.
|
|
// The "test object" should be an object with function names as keys and a
|
|
// function as the value. The functions will be called with a "cbnext" param
|
|
// which should be called when the test is complete.
|
|
// eg:
|
|
// test = {
|
|
// foo: function(cbnext) {... cbnext();}
|
|
// }
|
|
function runTests(tests, cbPreTest, cbPostTest) {
|
|
waitForExplicitFinish();
|
|
let testIter = Iterator(tests);
|
|
|
|
if (cbPreTest === undefined) {
|
|
cbPreTest = function(cb) {cb()};
|
|
}
|
|
if (cbPostTest === undefined) {
|
|
cbPostTest = function(cb) {cb()};
|
|
}
|
|
|
|
let runNextTest = function() {
|
|
let name, func;
|
|
try {
|
|
[name, func] = testIter.next();
|
|
} catch (err if err instanceof StopIteration) {
|
|
// out of items:
|
|
finish();
|
|
return;
|
|
}
|
|
// We run on a timeout as the frameworker also makes use of timeouts, so
|
|
// this helps keep the debug messages sane.
|
|
window.setTimeout(function() {
|
|
function cleanupAndRunNextTest() {
|
|
info("sub-test " + name + " complete");
|
|
cbPostTest(runNextTest);
|
|
}
|
|
cbPreTest(function() {
|
|
info("sub-test " + name + " starting");
|
|
try {
|
|
func.call(tests, cleanupAndRunNextTest);
|
|
} catch (ex) {
|
|
ok(false, "sub-test " + name + " failed: " + ex.toString() +"\n"+ex.stack);
|
|
cleanupAndRunNextTest();
|
|
}
|
|
})
|
|
}, 0)
|
|
}
|
|
runNextTest();
|
|
}
|
|
|