michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: http://creativecommons.org/publicdomain/zero/1.0/ */ michael@0: michael@0: Cu.import("resource://services-sync/engines/tabs.js"); michael@0: Cu.import("resource://services-sync/service.js"); michael@0: Cu.import("resource://services-sync/util.js"); michael@0: Cu.import("resource://testing-common/services-common/utils.js"); michael@0: michael@0: function getMockStore() { michael@0: let engine = new TabEngine(Service); michael@0: let store = engine._store; michael@0: store.getTabState = mockGetTabState; michael@0: store.shouldSkipWindow = mockShouldSkipWindow; michael@0: return store; michael@0: } michael@0: michael@0: function test_create() { michael@0: let store = new TabEngine(Service)._store; michael@0: michael@0: _("Create a first record"); michael@0: let rec = {id: "id1", michael@0: clientName: "clientName1", michael@0: cleartext: "cleartext1", michael@0: modified: 1000}; michael@0: store.applyIncoming(rec); michael@0: do_check_eq(store._remoteClients["id1"], "cleartext1"); michael@0: do_check_eq(Svc.Prefs.get("notifyTabState"), 1); michael@0: michael@0: _("Create a second record"); michael@0: let rec = {id: "id2", michael@0: clientName: "clientName2", michael@0: cleartext: "cleartext2", michael@0: modified: 2000}; michael@0: store.applyIncoming(rec); michael@0: do_check_eq(store._remoteClients["id2"], "cleartext2"); michael@0: do_check_eq(Svc.Prefs.get("notifyTabState"), 0); michael@0: michael@0: _("Create a third record"); michael@0: let rec = {id: "id3", michael@0: clientName: "clientName3", michael@0: cleartext: "cleartext3", michael@0: modified: 3000}; michael@0: store.applyIncoming(rec); michael@0: do_check_eq(store._remoteClients["id3"], "cleartext3"); michael@0: do_check_eq(Svc.Prefs.get("notifyTabState"), 0); michael@0: michael@0: // reset the notifyTabState michael@0: Svc.Prefs.reset("notifyTabState"); michael@0: } michael@0: michael@0: function test_getAllTabs() { michael@0: let store = getMockStore(); michael@0: let tabs; michael@0: michael@0: store.getWindowEnumerator = mockGetWindowEnumerator.bind(this, "http://foo.com", 1, 1); michael@0: michael@0: _("Get all tabs."); michael@0: tabs = store.getAllTabs(); michael@0: _("Tabs: " + JSON.stringify(tabs)); michael@0: do_check_eq(tabs.length, 1); michael@0: do_check_eq(tabs[0].title, "title"); michael@0: do_check_eq(tabs[0].urlHistory.length, 1); michael@0: do_check_eq(tabs[0].urlHistory[0], ["http://foo.com"]); michael@0: do_check_eq(tabs[0].icon, "image"); michael@0: do_check_eq(tabs[0].lastUsed, 1); michael@0: michael@0: _("Get all tabs, and check that filtering works."); michael@0: store.getWindowEnumerator = mockGetWindowEnumerator.bind(this, "about:foo", 1, 1); michael@0: tabs = store.getAllTabs(true); michael@0: _("Filtered: " + JSON.stringify(tabs)); michael@0: do_check_eq(tabs.length, 0); michael@0: } michael@0: michael@0: function test_createRecord() { michael@0: let store = getMockStore(); michael@0: let record; michael@0: michael@0: store.getTabState = mockGetTabState; michael@0: store.shouldSkipWindow = mockShouldSkipWindow; michael@0: store.getWindowEnumerator = mockGetWindowEnumerator.bind(this, "http://foo.com", 1, 1); michael@0: michael@0: let tabs = store.getAllTabs(); michael@0: let tabsize = JSON.stringify(tabs[0]).length; michael@0: let numtabs = Math.ceil(20000./77.); michael@0: michael@0: store.getWindowEnumerator = mockGetWindowEnumerator.bind(this, "http://foo.com", 1, 1); michael@0: record = store.createRecord("fake-guid"); michael@0: do_check_true(record instanceof TabSetRecord); michael@0: do_check_eq(record.tabs.length, 1); michael@0: michael@0: _("create a big record"); michael@0: store.getWindowEnumerator = mockGetWindowEnumerator.bind(this, "http://foo.com", 1, numtabs); michael@0: record = store.createRecord("fake-guid"); michael@0: do_check_true(record instanceof TabSetRecord); michael@0: do_check_eq(record.tabs.length, 256); michael@0: } michael@0: michael@0: function run_test() { michael@0: test_create(); michael@0: test_getAllTabs(); michael@0: test_createRecord(); michael@0: }