diff options
Diffstat (limited to 'comm/mail/components/extensions/test/browser/browser_ext_addressBooksUI.js')
-rw-r--r-- | comm/mail/components/extensions/test/browser/browser_ext_addressBooksUI.js | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/comm/mail/components/extensions/test/browser/browser_ext_addressBooksUI.js b/comm/mail/components/extensions/test/browser/browser_ext_addressBooksUI.js new file mode 100644 index 0000000000..4171bf47bf --- /dev/null +++ b/comm/mail/components/extensions/test/browser/browser_ext_addressBooksUI.js @@ -0,0 +1,116 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +add_task(async function testUI() { + async function background() { + async function checkNumberOfAddressBookTabs(expectedNumberOfTabs) { + let addressBookTabs = await browser.tabs.query({ type: "addressBook" }); + browser.test.assertEq( + expectedNumberOfTabs, + addressBookTabs.length, + "Should find the correct number of open address book tabs" + ); + } + + let addedTabs = new Set(); + let removedTabs = 0; + function tabCreateListener(tab) { + if (tab.type == "addressBook") { + addedTabs.add(tab.id); + } else { + browser.test.fail( + "Should not receive a onTabCreated event for a non address book tab" + ); + } + } + + function tabRemoveListener(tabId) { + console.log("Remove: " + tabId); + if (addedTabs.has(tabId)) { + removedTabs++; + } else { + browser.test.fail( + "Should not receive a onTabRemoved event for a non address book tab" + ); + } + } + + browser.tabs.onCreated.addListener(tabCreateListener); + browser.tabs.onRemoved.addListener(tabRemoveListener); + + await window.sendMessage("checkNumberOfAddressBookTabs", 0); + await checkNumberOfAddressBookTabs(0); + + let abTab1 = await browser.addressBooks.openUI(); + browser.test.log(JSON.stringify(abTab1)); + browser.test.assertEq( + "addressBook", + abTab1.type, + "Should have found an addressBook tab" + ); + await window.sendMessage("checkNumberOfAddressBookTabs", 1); + await checkNumberOfAddressBookTabs(1); + + await browser.addressBooks.openUI(); + let abTab2 = await browser.addressBooks.openUI(); + browser.test.log(JSON.stringify(abTab2)); + browser.test.assertEq( + "addressBook", + abTab2.type, + "Should have found an addressBook tab" + ); + await window.sendMessage("checkNumberOfAddressBookTabs", 1); + await checkNumberOfAddressBookTabs(1); + + browser.test.assertEq( + abTab1.id, + abTab2.id, + "addressBook tabs should be identical" + ); + + await browser.addressBooks.closeUI(); + await window.sendMessage("checkNumberOfAddressBookTabs", 0); + await checkNumberOfAddressBookTabs(0); + + browser.tabs.onCreated.removeListener(tabCreateListener); + browser.tabs.onRemoved.removeListener(tabRemoveListener); + + browser.test.assertEq( + 1, + removedTabs, + "Should have seen the correct number of address book tabs being removed" + ); + + browser.test.assertEq( + 1, + addedTabs.size, + "Should have seen the correct number of address book tabs being added" + ); + + browser.test.notifyPass("addressBooks"); + } + let extension = ExtensionTestUtils.loadExtension({ + files: { + "background.js": background, + "utils.js": await getUtilsJS(), + }, + manifest: { + background: { scripts: ["utils.js", "background.js"] }, + permissions: ["addressBooks"], + }, + }); + + extension.onMessage("checkNumberOfAddressBookTabs", count => { + let tabmail = document.getElementById("tabmail"); + let tabs = tabmail.tabInfo.filter( + tab => tab.browser?.currentURI.spec == "about:addressbook" + ); + Assert.equal(tabs.length, count, "Right number of address books open"); + extension.sendMessage(); + }); + + await extension.startup(); + await extension.awaitFinish("addressBooks"); + await extension.unload(); +}); |