1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
Cu.import("resource://services-sync/engines/tabs.js");
Cu.import("resource://services-sync/service.js");
Cu.import("resource://services-sync/util.js");
Cu.import("resource://testing-common/services/common/utils.js");
function getMockStore() {
let engine = new TabEngine(Service);
let store = engine._store;
store.getTabState = mockGetTabState;
store.shouldSkipWindow = mockShouldSkipWindow;
return store;
}
function test_create() {
let store = new TabEngine(Service)._store;
_("Create a first record");
let rec = {id: "id1",
clientName: "clientName1",
cleartext: { "foo": "bar" },
modified: 1000};
store.applyIncoming(rec);
deepEqual(store._remoteClients["id1"], { lastModified: 1000, foo: "bar" });
_("Create a second record");
rec = {id: "id2",
clientName: "clientName2",
cleartext: { "foo2": "bar2" },
modified: 2000};
store.applyIncoming(rec);
deepEqual(store._remoteClients["id2"], { lastModified: 2000, foo2: "bar2" });
_("Create a third record");
rec = {id: "id3",
clientName: "clientName3",
cleartext: { "foo3": "bar3" },
modified: 3000};
store.applyIncoming(rec);
deepEqual(store._remoteClients["id3"], { lastModified: 3000, foo3: "bar3" });
}
function test_getAllTabs() {
let store = getMockStore();
let tabs;
let threeUrls = ["http://foo.com", "http://fuubar.com", "http://barbar.com"];
store.getWindowEnumerator = mockGetWindowEnumerator.bind(this, "http://bar.com", 1, 1, () => 2, () => threeUrls);
_("Get all tabs.");
tabs = store.getAllTabs();
_("Tabs: " + JSON.stringify(tabs));
equal(tabs.length, 1);
equal(tabs[0].title, "title");
equal(tabs[0].urlHistory.length, 2);
equal(tabs[0].urlHistory[0], "http://foo.com");
equal(tabs[0].urlHistory[1], "http://bar.com");
equal(tabs[0].icon, "image");
equal(tabs[0].lastUsed, 1);
_("Get all tabs, and check that filtering works.");
let twoUrls = ["about:foo", "http://fuubar.com"];
store.getWindowEnumerator = mockGetWindowEnumerator.bind(this, "http://foo.com", 1, 1, () => 2, () => twoUrls);
tabs = store.getAllTabs(true);
_("Filtered: " + JSON.stringify(tabs));
equal(tabs.length, 0);
_("Get all tabs, and check that the entries safety limit works.");
let allURLs = [];
for (let i = 0; i < 50; i++) {
allURLs.push("http://foo" + i + ".bar");
}
allURLs.splice(35, 0, "about:foo", "about:bar", "about:foobar");
store.getWindowEnumerator = mockGetWindowEnumerator.bind(this, "http://bar.com", 1, 1, () => 45, () => allURLs);
tabs = store.getAllTabs((url) => url.startsWith("about"));
_("Sliced: " + JSON.stringify(tabs));
equal(tabs.length, 1);
equal(tabs[0].urlHistory.length, 25);
equal(tabs[0].urlHistory[0], "http://foo40.bar");
equal(tabs[0].urlHistory[24], "http://foo16.bar");
}
function test_createRecord() {
let store = getMockStore();
let record;
store.getTabState = mockGetTabState;
store.shouldSkipWindow = mockShouldSkipWindow;
store.getWindowEnumerator = mockGetWindowEnumerator.bind(this, "http://foo.com", 1, 1);
let tabs = store.getAllTabs();
let tabsize = JSON.stringify(tabs[0]).length;
let numtabs = Math.ceil(20000./77.);
store.getWindowEnumerator = mockGetWindowEnumerator.bind(this, "http://foo.com", 1, 1);
record = store.createRecord("fake-guid");
ok(record instanceof TabSetRecord);
equal(record.tabs.length, 1);
_("create a big record");
store.getWindowEnumerator = mockGetWindowEnumerator.bind(this, "http://foo.com", 1, numtabs);
record = store.createRecord("fake-guid");
ok(record instanceof TabSetRecord);
equal(record.tabs.length, 256);
}
function run_test() {
test_create();
test_getAllTabs();
test_createRecord();
}
|