gecko/services/sync/tests/unit/test_tab_store.js

119 lines
3.2 KiB
JavaScript

Cu.import("resource://services-sync/engines/tabs.js");
Cu.import("resource://services-sync/util.js");
function test_create() {
let store = new TabEngine()._store;
_("Create a first record");
let rec = {id: "id1",
clientName: "clientName1",
cleartext: "cleartext1",
modified: 1000};
store.applyIncoming(rec);
do_check_eq(store._remoteClients["id1"], "cleartext1");
do_check_eq(Svc.Prefs.get("notifyTabState"), 1);
_("Create a second record");
let rec = {id: "id2",
clientName: "clientName2",
cleartext: "cleartext2",
modified: 2000};
store.applyIncoming(rec);
do_check_eq(store._remoteClients["id2"], "cleartext2");
do_check_eq(Svc.Prefs.get("notifyTabState"), 0);
_("Create a third record");
let rec = {id: "id3",
clientName: "clientName3",
cleartext: "cleartext3",
modified: 3000};
store.applyIncoming(rec);
do_check_eq(store._remoteClients["id3"], "cleartext3");
do_check_eq(Svc.Prefs.get("notifyTabState"), 0);
// reset the notifyTabState
Svc.Prefs.reset("notifyTabState");
}
function fakeSessionSvc(url, numtabs) {
// first delete the getter, or the previously
// created fake Session
delete Svc.Session;
Svc.Session = {
getBrowserState: function() {
let obj = {
windows: [{
tabs: [{
index: 1,
entries: [{
url: url,
title: "title"
}],
attributes: {
image: "image"
},
extData: {
weaveLastUsed: 1
}
}]
}]
};
if (numtabs) {
let tabs = obj.windows[0].tabs;
for (let i = 0; i < numtabs-1; i++)
tabs.push(Utils.deepCopy(tabs[0]));
}
return JSON.stringify(obj);
}
};
};
function test_getAllTabs() {
let store = new TabEngine()._store, tabs;
_("get all tabs");
fakeSessionSvc("http://foo.com");
tabs = store.getAllTabs();
do_check_eq(tabs.length, 1);
do_check_eq(tabs[0].title, "title");
do_check_eq(tabs[0].urlHistory.length, 1);
do_check_eq(tabs[0].urlHistory[0], ["http://foo.com"]);
do_check_eq(tabs[0].icon, "image");
do_check_eq(tabs[0].lastUsed, 1);
_("get all tabs, and check that filtering works");
// we don't bother testing every URL type here, the
// filteredUrls regex really should have it own tests
fakeSessionSvc("about:foo");
tabs = store.getAllTabs(true);
do_check_eq(tabs.length, 0);
}
function test_createRecord() {
let store = new TabEngine()._store, record;
// get some values before testing
fakeSessionSvc("http://foo.com");
let tabs = store.getAllTabs();
let tabsize = JSON.stringify(tabs[0]).length;
let numtabs = Math.ceil(20000./77.);
_("create a record");
fakeSessionSvc("http://foo.com");
record = store.createRecord("fake-guid");
do_check_true(record instanceof TabSetRecord);
do_check_eq(record.tabs.length, 1);
_("create a big record");
fakeSessionSvc("http://foo.com", numtabs);
record = store.createRecord("fake-guid");
do_check_true(record instanceof TabSetRecord);
do_check_eq(record.tabs.length, 256);
}
function run_test() {
test_create();
test_getAllTabs();
test_createRecord();
}