|
1 /* Any copyright is dedicated to the Public Domain. |
|
2 http://creativecommons.org/publicdomain/zero/1.0/ */ |
|
3 |
|
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"); |
|
7 Cu.import("resource://testing-common/services-common/utils.js"); |
|
8 |
|
9 function getMockStore() { |
|
10 let engine = new TabEngine(Service); |
|
11 let store = engine._store; |
|
12 store.getTabState = mockGetTabState; |
|
13 store.shouldSkipWindow = mockShouldSkipWindow; |
|
14 return store; |
|
15 } |
|
16 |
|
17 function test_create() { |
|
18 let store = new TabEngine(Service)._store; |
|
19 |
|
20 _("Create a first record"); |
|
21 let rec = {id: "id1", |
|
22 clientName: "clientName1", |
|
23 cleartext: "cleartext1", |
|
24 modified: 1000}; |
|
25 store.applyIncoming(rec); |
|
26 do_check_eq(store._remoteClients["id1"], "cleartext1"); |
|
27 do_check_eq(Svc.Prefs.get("notifyTabState"), 1); |
|
28 |
|
29 _("Create a second record"); |
|
30 let rec = {id: "id2", |
|
31 clientName: "clientName2", |
|
32 cleartext: "cleartext2", |
|
33 modified: 2000}; |
|
34 store.applyIncoming(rec); |
|
35 do_check_eq(store._remoteClients["id2"], "cleartext2"); |
|
36 do_check_eq(Svc.Prefs.get("notifyTabState"), 0); |
|
37 |
|
38 _("Create a third record"); |
|
39 let rec = {id: "id3", |
|
40 clientName: "clientName3", |
|
41 cleartext: "cleartext3", |
|
42 modified: 3000}; |
|
43 store.applyIncoming(rec); |
|
44 do_check_eq(store._remoteClients["id3"], "cleartext3"); |
|
45 do_check_eq(Svc.Prefs.get("notifyTabState"), 0); |
|
46 |
|
47 // reset the notifyTabState |
|
48 Svc.Prefs.reset("notifyTabState"); |
|
49 } |
|
50 |
|
51 function test_getAllTabs() { |
|
52 let store = getMockStore(); |
|
53 let tabs; |
|
54 |
|
55 store.getWindowEnumerator = mockGetWindowEnumerator.bind(this, "http://foo.com", 1, 1); |
|
56 |
|
57 _("Get all tabs."); |
|
58 tabs = store.getAllTabs(); |
|
59 _("Tabs: " + JSON.stringify(tabs)); |
|
60 do_check_eq(tabs.length, 1); |
|
61 do_check_eq(tabs[0].title, "title"); |
|
62 do_check_eq(tabs[0].urlHistory.length, 1); |
|
63 do_check_eq(tabs[0].urlHistory[0], ["http://foo.com"]); |
|
64 do_check_eq(tabs[0].icon, "image"); |
|
65 do_check_eq(tabs[0].lastUsed, 1); |
|
66 |
|
67 _("Get all tabs, and check that filtering works."); |
|
68 store.getWindowEnumerator = mockGetWindowEnumerator.bind(this, "about:foo", 1, 1); |
|
69 tabs = store.getAllTabs(true); |
|
70 _("Filtered: " + JSON.stringify(tabs)); |
|
71 do_check_eq(tabs.length, 0); |
|
72 } |
|
73 |
|
74 function test_createRecord() { |
|
75 let store = getMockStore(); |
|
76 let record; |
|
77 |
|
78 store.getTabState = mockGetTabState; |
|
79 store.shouldSkipWindow = mockShouldSkipWindow; |
|
80 store.getWindowEnumerator = mockGetWindowEnumerator.bind(this, "http://foo.com", 1, 1); |
|
81 |
|
82 let tabs = store.getAllTabs(); |
|
83 let tabsize = JSON.stringify(tabs[0]).length; |
|
84 let numtabs = Math.ceil(20000./77.); |
|
85 |
|
86 store.getWindowEnumerator = mockGetWindowEnumerator.bind(this, "http://foo.com", 1, 1); |
|
87 record = store.createRecord("fake-guid"); |
|
88 do_check_true(record instanceof TabSetRecord); |
|
89 do_check_eq(record.tabs.length, 1); |
|
90 |
|
91 _("create a big record"); |
|
92 store.getWindowEnumerator = mockGetWindowEnumerator.bind(this, "http://foo.com", 1, numtabs); |
|
93 record = store.createRecord("fake-guid"); |
|
94 do_check_true(record instanceof TabSetRecord); |
|
95 do_check_eq(record.tabs.length, 256); |
|
96 } |
|
97 |
|
98 function run_test() { |
|
99 test_create(); |
|
100 test_getAllTabs(); |
|
101 test_createRecord(); |
|
102 } |