1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/services/sync/tests/unit/test_tab_tracker.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,98 @@ 1.4 +/* Any copyright is dedicated to the Public Domain. 1.5 + http://creativecommons.org/publicdomain/zero/1.0/ */ 1.6 + 1.7 +Cu.import("resource://services-sync/engines/tabs.js"); 1.8 +Cu.import("resource://services-sync/service.js"); 1.9 +Cu.import("resource://services-sync/util.js"); 1.10 + 1.11 +let clientsEngine = Service.clientsEngine; 1.12 + 1.13 +function fakeSvcWinMediator() { 1.14 + // actions on windows are captured in logs 1.15 + let logs = []; 1.16 + delete Services.wm; 1.17 + Services.wm = { 1.18 + getEnumerator: function() { 1.19 + return { 1.20 + cnt: 2, 1.21 + hasMoreElements: function() this.cnt-- > 0, 1.22 + getNext: function() { 1.23 + let elt = {addTopics: [], remTopics: []}; 1.24 + logs.push(elt); 1.25 + return { 1.26 + addEventListener: function(topic) { 1.27 + elt.addTopics.push(topic); 1.28 + }, 1.29 + removeEventListener: function(topic) { 1.30 + elt.remTopics.push(topic); 1.31 + } 1.32 + }; 1.33 + } 1.34 + }; 1.35 + } 1.36 + }; 1.37 + return logs; 1.38 +} 1.39 + 1.40 +function run_test() { 1.41 + let engine = Service.engineManager.get("tabs"); 1.42 + 1.43 + _("We assume that tabs have changed at startup."); 1.44 + let tracker = engine._tracker; 1.45 + tracker.persistChangedIDs = false; 1.46 + 1.47 + do_check_true(tracker.modified); 1.48 + do_check_true(Utils.deepEquals(Object.keys(engine.getChangedIDs()), 1.49 + [clientsEngine.localID])); 1.50 + 1.51 + let logs; 1.52 + 1.53 + _("Test listeners are registered on windows"); 1.54 + logs = fakeSvcWinMediator(); 1.55 + Svc.Obs.notify("weave:engine:start-tracking"); 1.56 + do_check_eq(logs.length, 2); 1.57 + for each (let log in logs) { 1.58 + do_check_eq(log.addTopics.length, 5); 1.59 + do_check_true(log.addTopics.indexOf("pageshow") >= 0); 1.60 + do_check_true(log.addTopics.indexOf("TabOpen") >= 0); 1.61 + do_check_true(log.addTopics.indexOf("TabClose") >= 0); 1.62 + do_check_true(log.addTopics.indexOf("TabSelect") >= 0); 1.63 + do_check_true(log.addTopics.indexOf("unload") >= 0); 1.64 + do_check_eq(log.remTopics.length, 0); 1.65 + } 1.66 + 1.67 + _("Test listeners are unregistered on windows"); 1.68 + logs = fakeSvcWinMediator(); 1.69 + Svc.Obs.notify("weave:engine:stop-tracking"); 1.70 + do_check_eq(logs.length, 2); 1.71 + for each (let log in logs) { 1.72 + do_check_eq(log.addTopics.length, 0); 1.73 + do_check_eq(log.remTopics.length, 5); 1.74 + do_check_true(log.remTopics.indexOf("pageshow") >= 0); 1.75 + do_check_true(log.remTopics.indexOf("TabOpen") >= 0); 1.76 + do_check_true(log.remTopics.indexOf("TabClose") >= 0); 1.77 + do_check_true(log.remTopics.indexOf("TabSelect") >= 0); 1.78 + do_check_true(log.remTopics.indexOf("unload") >= 0); 1.79 + } 1.80 + 1.81 + _("Test tab listener"); 1.82 + for each (let evttype in ["TabOpen", "TabClose", "TabSelect"]) { 1.83 + // Pretend we just synced. 1.84 + tracker.clearChangedIDs(); 1.85 + do_check_false(tracker.modified); 1.86 + 1.87 + // Send a fake tab event 1.88 + tracker.onTab({type: evttype , originalTarget: evttype}); 1.89 + do_check_true(tracker.modified); 1.90 + do_check_true(Utils.deepEquals(Object.keys(engine.getChangedIDs()), 1.91 + [clientsEngine.localID])); 1.92 + } 1.93 + 1.94 + // Pretend we just synced. 1.95 + tracker.clearChangedIDs(); 1.96 + do_check_false(tracker.modified); 1.97 + 1.98 + tracker.onTab({type: "pageshow", originalTarget: "pageshow"}); 1.99 + do_check_true(Utils.deepEquals(Object.keys(engine.getChangedIDs()), 1.100 + [clientsEngine.localID])); 1.101 +}