Wed, 31 Dec 2014 07:22:50 +0100
Correct previous dual key logic pending first delivery installment.
1 /* Any copyright is dedicated to the Public Domain.
2 http://creativecommons.org/publicdomain/zero/1.0/ */
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");
8 let clientsEngine = Service.clientsEngine;
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 }
37 function run_test() {
38 let engine = Service.engineManager.get("tabs");
40 _("We assume that tabs have changed at startup.");
41 let tracker = engine._tracker;
42 tracker.persistChangedIDs = false;
44 do_check_true(tracker.modified);
45 do_check_true(Utils.deepEquals(Object.keys(engine.getChangedIDs()),
46 [clientsEngine.localID]));
48 let logs;
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 }
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 }
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);
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 }
91 // Pretend we just synced.
92 tracker.clearChangedIDs();
93 do_check_false(tracker.modified);
95 tracker.onTab({type: "pageshow", originalTarget: "pageshow"});
96 do_check_true(Utils.deepEquals(Object.keys(engine.getChangedIDs()),
97 [clientsEngine.localID]));
98 }