~ubuntu-branches/ubuntu/trusty/enigmail/trusty-updates

« back to all changes in this revision

Viewing changes to services/sync/tests/unit/test_tab_tracker.js

  • Committer: Package Import Robot
  • Author(s): Chris Coulson
  • Date: 2011-06-07 14:35:53 UTC
  • mfrom: (0.12.1 upstream)
  • Revision ID: package-import@ubuntu.com-20110607143553-fbgqhhvh8g8h6j1y
Tags: 2:1.2~a2~cvs20110606t2200-0ubuntu1
* Update to latest trunk snapshot for Thunderbird beta compat

* Remove build/pgo/profileserver.py from debian/clean. The new build
  system has a target depending on this
  - update debian/clean
* Drop debian/patches/autoconf.diff, just generate this at build time
* Refresh debian/patches/build_system_dont_link_libxul.diff
* libipc seems to be renamed to libipc-pipe. Fix genxpi and chrome.manifest
  to fix this 
  - add debian/patches/ipc-pipe_rename.diff
  - update debian/patches/series
* The makefiles in extensions/enigmail/ipc have an incorrect DEPTH
  attribute. Fix this so that they can find the rest of the build system
  - add debian/patches/makefile_depth.diff
  - update debian/patches/series
* Drop debian/patches/makefile-in-empty-xpcom-fix.diff - fixed in the
  current version
* Don't register a class ID multiple times, as this breaks enigmail entirely
  - add debian/patches/dont_register_cids_multiple_times.diff
  - update debian/patches/series
* Look for the Thunderbird 5 SDK
  - update debian/rules
  - update debian/control
* Run autoconf2.13 at build time
  - update debian/rules
  - update debian/control
* Add useless mesa-common-dev build-dep, just to satisfy the build system.
  We should just patch this out entirely really, but that's for another upload
  - update debian/control

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
Cu.import("resource://services-sync/engines/tabs.js");
 
2
Cu.import("resource://services-sync/engines/clients.js");
 
3
Cu.import("resource://services-sync/util.js");
 
4
 
 
5
function fakeSvcWinMediator() {
 
6
  // actions on windows are captured in logs
 
7
  let logs = [];
 
8
  delete Svc.WinMediator;
 
9
  Svc.WinMediator = {
 
10
    getEnumerator: function() {
 
11
      return {
 
12
        cnt: 2,
 
13
        hasMoreElements: function() this.cnt-- > 0,
 
14
        getNext: function() {
 
15
          let elt = {addTopics: [], remTopics: []};
 
16
          logs.push(elt);
 
17
          return {
 
18
            addEventListener: function(topic) {
 
19
              elt.addTopics.push(topic);
 
20
            },
 
21
            removeEventListener: function(topic) {
 
22
              elt.remTopics.push(topic);
 
23
            }
 
24
          };
 
25
        }
 
26
      };
 
27
    }
 
28
  };
 
29
  return logs;
 
30
}
 
31
 
 
32
function fakeSvcSession() {
 
33
  // actions on Session are captured in logs
 
34
  let logs = [];
 
35
  delete Svc.Session;
 
36
  Svc.Session = {
 
37
    setTabValue: function(target, prop, value) {
 
38
      logs.push({target: target, prop: prop, value: value});
 
39
    }
 
40
  };
 
41
  return logs;
 
42
}
 
43
 
 
44
function run_test() {
 
45
  let engine = new TabEngine();
 
46
 
 
47
  _("We assume that tabs have changed at startup.");
 
48
  let tracker = engine._tracker;
 
49
  do_check_true(tracker.modified);
 
50
  do_check_true(Utils.deepEquals([id for (id in engine.getChangedIDs())],
 
51
                                 [Clients.localID]));
 
52
 
 
53
  let logs;
 
54
 
 
55
  _("Test listeners are registered on windows");
 
56
  logs = fakeSvcWinMediator();
 
57
  Svc.Obs.notify("weave:engine:start-tracking");
 
58
  do_check_eq(logs.length, 2);
 
59
  for each (let log in logs) {
 
60
    do_check_eq(log.addTopics.length, 5);
 
61
    do_check_true(log.addTopics.indexOf("pageshow") >= 0);
 
62
    do_check_true(log.addTopics.indexOf("TabOpen") >= 0);
 
63
    do_check_true(log.addTopics.indexOf("TabClose") >= 0);
 
64
    do_check_true(log.addTopics.indexOf("TabSelect") >= 0);
 
65
    do_check_true(log.addTopics.indexOf("unload") >= 0);
 
66
    do_check_eq(log.remTopics.length, 0);
 
67
  }
 
68
 
 
69
  _("Test listeners are unregistered on windows");
 
70
  logs = fakeSvcWinMediator();
 
71
  Svc.Obs.notify("weave:engine:stop-tracking");
 
72
  do_check_eq(logs.length, 2);
 
73
  for each (let log in logs) {
 
74
    do_check_eq(log.addTopics.length, 0);
 
75
    do_check_eq(log.remTopics.length, 5);
 
76
    do_check_true(log.remTopics.indexOf("pageshow") >= 0);
 
77
    do_check_true(log.remTopics.indexOf("TabOpen") >= 0);
 
78
    do_check_true(log.remTopics.indexOf("TabClose") >= 0);
 
79
    do_check_true(log.remTopics.indexOf("TabSelect") >= 0);
 
80
    do_check_true(log.remTopics.indexOf("unload") >= 0);
 
81
  }
 
82
 
 
83
  _("Test tab listener");
 
84
  logs = fakeSvcSession();
 
85
  let idx = 0;
 
86
  for each (let evttype in ["TabOpen", "TabClose", "TabSelect"]) {
 
87
    // Pretend we just synced.
 
88
    tracker.clearChangedIDs();
 
89
    do_check_false(tracker.modified);
 
90
 
 
91
    // Send a fake tab event
 
92
    tracker.onTab({type: evttype , originalTarget: evttype});
 
93
    do_check_true(tracker.modified);
 
94
    do_check_true(Utils.deepEquals([id for (id in engine.getChangedIDs())],
 
95
                                   [Clients.localID]));
 
96
    do_check_eq(logs.length, idx+1);
 
97
    do_check_eq(logs[idx].target, evttype);
 
98
    do_check_eq(logs[idx].prop, "weaveLastUsed");
 
99
    do_check_true(typeof logs[idx].value == "number");
 
100
    idx++;
 
101
  }
 
102
 
 
103
  // Pretend we just synced.
 
104
  tracker.clearChangedIDs();
 
105
  do_check_false(tracker.modified);
 
106
 
 
107
  tracker.onTab({type: "pageshow", originalTarget: "pageshow"});
 
108
  do_check_true(Utils.deepEquals([id for (id in engine.getChangedIDs())],
 
109
                                 [Clients.localID]));
 
110
  do_check_eq(logs.length, idx); // test that setTabValue isn't called
 
111
}