gecko/js/xpconnect/tests/unit/test_bug641378.js

47 lines
1.2 KiB
JavaScript
Raw Normal View History

const Cc = Components.classes;
const Ci = Components.interfaces;
var timer;
// This test XPConnect's ability to deal with a certain type of exception. In
// particular, bug 641378 meant that if an exception had both 'message' and
// 'result' properties, then it wouldn't successfully read the 'result' field
// out of the exception (and sometimes crash).
//
// In order to make the test not fail completely on a negative result, we use
// a timer. The first time through the timer, we throw our special exception.
// Then, the second time through, we can test to see if XPConnect properly
// dealt with our exception.
var exception = {
message: "oops, something failed!",
tries: 0,
get result() {
++this.tries;
return 3;
}
};
var callback = {
tries: 0,
notify: function (timer) {
if (++this.tries === 1)
throw exception;
try {
do_check_true(exception.tries >= 1);
} finally {
timer.cancel();
timer = null;
do_test_finished();
}
}
};
function run_test() {
do_test_pending();
timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
timer.initWithCallback(callback, 0, timer.TYPE_REPEATING_SLACK);
}