|
1 Cu.import("resource://services-sync/util.js"); |
|
2 Cu.import("resource://services-sync/service.js"); |
|
3 |
|
4 function run_test() { |
|
5 _("Make sure catch when copied to an object will correctly catch stuff"); |
|
6 let ret, rightThis, didCall, didThrow, wasTen, wasLocked; |
|
7 let obj = { |
|
8 catch: Utils.catch, |
|
9 _log: { |
|
10 debug: function(str) { |
|
11 didThrow = str.search(/^Exception: /) == 0; |
|
12 }, |
|
13 info: function(str) { |
|
14 wasLocked = str.indexOf("Cannot start sync: already syncing?") == 0; |
|
15 } |
|
16 }, |
|
17 |
|
18 func: function() this.catch(function() { |
|
19 rightThis = this == obj; |
|
20 didCall = true; |
|
21 return 5; |
|
22 })(), |
|
23 |
|
24 throwy: function() this.catch(function() { |
|
25 rightThis = this == obj; |
|
26 didCall = true; |
|
27 throw 10; |
|
28 })(), |
|
29 |
|
30 callbacky: function() this.catch(function() { |
|
31 rightThis = this == obj; |
|
32 didCall = true; |
|
33 throw 10; |
|
34 }, function(ex) { |
|
35 wasTen = (ex == 10) |
|
36 })(), |
|
37 |
|
38 lockedy: function() this.catch(function() { |
|
39 rightThis = this == obj; |
|
40 didCall = true; |
|
41 throw("Could not acquire lock."); |
|
42 })() |
|
43 }; |
|
44 |
|
45 _("Make sure a normal call will call and return"); |
|
46 rightThis = didCall = didThrow = wasLocked = false; |
|
47 ret = obj.func(); |
|
48 do_check_eq(ret, 5); |
|
49 do_check_true(rightThis); |
|
50 do_check_true(didCall); |
|
51 do_check_false(didThrow); |
|
52 do_check_eq(wasTen, undefined); |
|
53 do_check_false(wasLocked); |
|
54 |
|
55 _("Make sure catch/throw results in debug call and caller doesn't need to handle exception"); |
|
56 rightThis = didCall = didThrow = wasLocked = false; |
|
57 ret = obj.throwy(); |
|
58 do_check_eq(ret, undefined); |
|
59 do_check_true(rightThis); |
|
60 do_check_true(didCall); |
|
61 do_check_true(didThrow); |
|
62 do_check_eq(wasTen, undefined); |
|
63 do_check_false(wasLocked); |
|
64 |
|
65 _("Test callback for exception testing."); |
|
66 rightThis = didCall = didThrow = wasLocked = false; |
|
67 ret = obj.callbacky(); |
|
68 do_check_eq(ret, undefined); |
|
69 do_check_true(rightThis); |
|
70 do_check_true(didCall); |
|
71 do_check_true(didThrow); |
|
72 do_check_true(wasTen); |
|
73 do_check_false(wasLocked); |
|
74 |
|
75 _("Test the lock-aware catch that Service uses."); |
|
76 obj.catch = Service._catch; |
|
77 rightThis = didCall = didThrow = wasLocked = false; |
|
78 wasTen = undefined; |
|
79 ret = obj.lockedy(); |
|
80 do_check_eq(ret, undefined); |
|
81 do_check_true(rightThis); |
|
82 do_check_true(didCall); |
|
83 do_check_true(didThrow); |
|
84 do_check_eq(wasTen, undefined); |
|
85 do_check_true(wasLocked); |
|
86 } |