|
1 /* Any copyright is dedicated to the Public Domain. |
|
2 http://creativecommons.org/publicdomain/zero/1.0/ */ |
|
3 |
|
4 Cu.import("resource://services-sync/engines/tabs.js"); |
|
5 Cu.import("resource://services-sync/service.js"); |
|
6 Cu.import("resource://services-sync/util.js"); |
|
7 |
|
8 let clientsEngine = Service.clientsEngine; |
|
9 |
|
10 function fakeSvcWinMediator() { |
|
11 // actions on windows are captured in logs |
|
12 let logs = []; |
|
13 delete Services.wm; |
|
14 Services.wm = { |
|
15 getEnumerator: function() { |
|
16 return { |
|
17 cnt: 2, |
|
18 hasMoreElements: function() this.cnt-- > 0, |
|
19 getNext: function() { |
|
20 let elt = {addTopics: [], remTopics: []}; |
|
21 logs.push(elt); |
|
22 return { |
|
23 addEventListener: function(topic) { |
|
24 elt.addTopics.push(topic); |
|
25 }, |
|
26 removeEventListener: function(topic) { |
|
27 elt.remTopics.push(topic); |
|
28 } |
|
29 }; |
|
30 } |
|
31 }; |
|
32 } |
|
33 }; |
|
34 return logs; |
|
35 } |
|
36 |
|
37 function run_test() { |
|
38 let engine = Service.engineManager.get("tabs"); |
|
39 |
|
40 _("We assume that tabs have changed at startup."); |
|
41 let tracker = engine._tracker; |
|
42 tracker.persistChangedIDs = false; |
|
43 |
|
44 do_check_true(tracker.modified); |
|
45 do_check_true(Utils.deepEquals(Object.keys(engine.getChangedIDs()), |
|
46 [clientsEngine.localID])); |
|
47 |
|
48 let logs; |
|
49 |
|
50 _("Test listeners are registered on windows"); |
|
51 logs = fakeSvcWinMediator(); |
|
52 Svc.Obs.notify("weave:engine:start-tracking"); |
|
53 do_check_eq(logs.length, 2); |
|
54 for each (let log in logs) { |
|
55 do_check_eq(log.addTopics.length, 5); |
|
56 do_check_true(log.addTopics.indexOf("pageshow") >= 0); |
|
57 do_check_true(log.addTopics.indexOf("TabOpen") >= 0); |
|
58 do_check_true(log.addTopics.indexOf("TabClose") >= 0); |
|
59 do_check_true(log.addTopics.indexOf("TabSelect") >= 0); |
|
60 do_check_true(log.addTopics.indexOf("unload") >= 0); |
|
61 do_check_eq(log.remTopics.length, 0); |
|
62 } |
|
63 |
|
64 _("Test listeners are unregistered on windows"); |
|
65 logs = fakeSvcWinMediator(); |
|
66 Svc.Obs.notify("weave:engine:stop-tracking"); |
|
67 do_check_eq(logs.length, 2); |
|
68 for each (let log in logs) { |
|
69 do_check_eq(log.addTopics.length, 0); |
|
70 do_check_eq(log.remTopics.length, 5); |
|
71 do_check_true(log.remTopics.indexOf("pageshow") >= 0); |
|
72 do_check_true(log.remTopics.indexOf("TabOpen") >= 0); |
|
73 do_check_true(log.remTopics.indexOf("TabClose") >= 0); |
|
74 do_check_true(log.remTopics.indexOf("TabSelect") >= 0); |
|
75 do_check_true(log.remTopics.indexOf("unload") >= 0); |
|
76 } |
|
77 |
|
78 _("Test tab listener"); |
|
79 for each (let evttype in ["TabOpen", "TabClose", "TabSelect"]) { |
|
80 // Pretend we just synced. |
|
81 tracker.clearChangedIDs(); |
|
82 do_check_false(tracker.modified); |
|
83 |
|
84 // Send a fake tab event |
|
85 tracker.onTab({type: evttype , originalTarget: evttype}); |
|
86 do_check_true(tracker.modified); |
|
87 do_check_true(Utils.deepEquals(Object.keys(engine.getChangedIDs()), |
|
88 [clientsEngine.localID])); |
|
89 } |
|
90 |
|
91 // Pretend we just synced. |
|
92 tracker.clearChangedIDs(); |
|
93 do_check_false(tracker.modified); |
|
94 |
|
95 tracker.onTab({type: "pageshow", originalTarget: "pageshow"}); |
|
96 do_check_true(Utils.deepEquals(Object.keys(engine.getChangedIDs()), |
|
97 [clientsEngine.localID])); |
|
98 } |