Cu.import("resource://services-sync/engines/tabs.js"); Cu.import("resource://services-sync/util.js"); Cu.import("resource://services-sync/type_records/tabs.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", "http://fake.uri/"); 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", "http://fake.uri/"); do_check_true(record instanceof TabSetRecord); do_check_eq(record.tabs.length, 256); } function run_test() { test_create(); test_getAllTabs(); test_createRecord(); }