/services/sync/tests/unit/test_utils_catch.js
http://github.com/zpao/v8monkey · JavaScript · 86 lines · 77 code · 9 blank · 0 comment · 7 complexity · dc922aaf943e3c7062a63e7a34eeffd8 MD5 · raw file
- Cu.import("resource://services-sync/util.js");
- Cu.import("resource://services-sync/service.js");
- function run_test() {
- _("Make sure catch when copied to an object will correctly catch stuff");
- let ret, rightThis, didCall, didThrow, wasTen, wasLocked;
- let obj = {
- catch: Utils.catch,
- _log: {
- debug: function(str) {
- didThrow = str.search(/^Exception: /) == 0;
- },
- info: function(str) {
- wasLocked = str.indexOf("Cannot start sync: already syncing?") == 0;
- }
- },
- func: function() this.catch(function() {
- rightThis = this == obj;
- didCall = true;
- return 5;
- })(),
- throwy: function() this.catch(function() {
- rightThis = this == obj;
- didCall = true;
- throw 10;
- })(),
-
- callbacky: function() this.catch(function() {
- rightThis = this == obj;
- didCall = true;
- throw 10;
- }, function(ex) {
- wasTen = (ex == 10)
- })(),
-
- lockedy: function() this.catch(function() {
- rightThis = this == obj;
- didCall = true;
- throw("Could not acquire lock.");
- })()
- };
- _("Make sure a normal call will call and return");
- rightThis = didCall = didThrow = wasLocked = false;
- ret = obj.func();
- do_check_eq(ret, 5);
- do_check_true(rightThis);
- do_check_true(didCall);
- do_check_false(didThrow);
- do_check_eq(wasTen, undefined);
- do_check_false(wasLocked);
- _("Make sure catch/throw results in debug call and caller doesn't need to handle exception");
- rightThis = didCall = didThrow = wasLocked = false;
- ret = obj.throwy();
- do_check_eq(ret, undefined);
- do_check_true(rightThis);
- do_check_true(didCall);
- do_check_true(didThrow);
- do_check_eq(wasTen, undefined);
- do_check_false(wasLocked);
-
- _("Test callback for exception testing.");
- rightThis = didCall = didThrow = wasLocked = false;
- ret = obj.callbacky();
- do_check_eq(ret, undefined);
- do_check_true(rightThis);
- do_check_true(didCall);
- do_check_true(didThrow);
- do_check_true(wasTen);
- do_check_false(wasLocked);
-
- _("Test the lock-aware catch that Service uses.");
- obj.catch = Service._catch;
- rightThis = didCall = didThrow = wasLocked = false;
- wasTen = undefined;
- ret = obj.lockedy();
- do_check_eq(ret, undefined);
- do_check_true(rightThis);
- do_check_true(didCall);
- do_check_true(didThrow);
- do_check_eq(wasTen, undefined);
- do_check_true(wasLocked);
- }