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