michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: http://creativecommons.org/publicdomain/zero/1.0/ */ michael@0: michael@0: Cu.import("resource://services-sync/engines/tabs.js"); michael@0: Cu.import("resource://services-sync/service.js"); michael@0: Cu.import("resource://services-sync/util.js"); michael@0: michael@0: let clientsEngine = Service.clientsEngine; michael@0: michael@0: function fakeSvcWinMediator() { michael@0: // actions on windows are captured in logs michael@0: let logs = []; michael@0: delete Services.wm; michael@0: Services.wm = { michael@0: getEnumerator: function() { michael@0: return { michael@0: cnt: 2, michael@0: hasMoreElements: function() this.cnt-- > 0, michael@0: getNext: function() { michael@0: let elt = {addTopics: [], remTopics: []}; michael@0: logs.push(elt); michael@0: return { michael@0: addEventListener: function(topic) { michael@0: elt.addTopics.push(topic); michael@0: }, michael@0: removeEventListener: function(topic) { michael@0: elt.remTopics.push(topic); michael@0: } michael@0: }; michael@0: } michael@0: }; michael@0: } michael@0: }; michael@0: return logs; michael@0: } michael@0: michael@0: function run_test() { michael@0: let engine = Service.engineManager.get("tabs"); michael@0: michael@0: _("We assume that tabs have changed at startup."); michael@0: let tracker = engine._tracker; michael@0: tracker.persistChangedIDs = false; michael@0: michael@0: do_check_true(tracker.modified); michael@0: do_check_true(Utils.deepEquals(Object.keys(engine.getChangedIDs()), michael@0: [clientsEngine.localID])); michael@0: michael@0: let logs; michael@0: michael@0: _("Test listeners are registered on windows"); michael@0: logs = fakeSvcWinMediator(); michael@0: Svc.Obs.notify("weave:engine:start-tracking"); michael@0: do_check_eq(logs.length, 2); michael@0: for each (let log in logs) { michael@0: do_check_eq(log.addTopics.length, 5); michael@0: do_check_true(log.addTopics.indexOf("pageshow") >= 0); michael@0: do_check_true(log.addTopics.indexOf("TabOpen") >= 0); michael@0: do_check_true(log.addTopics.indexOf("TabClose") >= 0); michael@0: do_check_true(log.addTopics.indexOf("TabSelect") >= 0); michael@0: do_check_true(log.addTopics.indexOf("unload") >= 0); michael@0: do_check_eq(log.remTopics.length, 0); michael@0: } michael@0: michael@0: _("Test listeners are unregistered on windows"); michael@0: logs = fakeSvcWinMediator(); michael@0: Svc.Obs.notify("weave:engine:stop-tracking"); michael@0: do_check_eq(logs.length, 2); michael@0: for each (let log in logs) { michael@0: do_check_eq(log.addTopics.length, 0); michael@0: do_check_eq(log.remTopics.length, 5); michael@0: do_check_true(log.remTopics.indexOf("pageshow") >= 0); michael@0: do_check_true(log.remTopics.indexOf("TabOpen") >= 0); michael@0: do_check_true(log.remTopics.indexOf("TabClose") >= 0); michael@0: do_check_true(log.remTopics.indexOf("TabSelect") >= 0); michael@0: do_check_true(log.remTopics.indexOf("unload") >= 0); michael@0: } michael@0: michael@0: _("Test tab listener"); michael@0: for each (let evttype in ["TabOpen", "TabClose", "TabSelect"]) { michael@0: // Pretend we just synced. michael@0: tracker.clearChangedIDs(); michael@0: do_check_false(tracker.modified); michael@0: michael@0: // Send a fake tab event michael@0: tracker.onTab({type: evttype , originalTarget: evttype}); michael@0: do_check_true(tracker.modified); michael@0: do_check_true(Utils.deepEquals(Object.keys(engine.getChangedIDs()), michael@0: [clientsEngine.localID])); michael@0: } michael@0: michael@0: // Pretend we just synced. michael@0: tracker.clearChangedIDs(); michael@0: do_check_false(tracker.modified); michael@0: michael@0: tracker.onTab({type: "pageshow", originalTarget: "pageshow"}); michael@0: do_check_true(Utils.deepEquals(Object.keys(engine.getChangedIDs()), michael@0: [clientsEngine.localID])); michael@0: }