services/sync/tests/unit/test_tab_tracker.js

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     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 }

mercurial