mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-08-29 18:58:40 +09:00
191 lines
7.1 KiB
Python
191 lines
7.1 KiB
Python
# 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/.
|
|
|
|
from firefox_puppeteer import PuppeteerMixin
|
|
from firefox_puppeteer.errors import NoCertificateError
|
|
from marionette_harness import MarionetteTestCase
|
|
|
|
|
|
class TestTabBar(PuppeteerMixin, MarionetteTestCase):
|
|
|
|
def tearDown(self):
|
|
try:
|
|
self.browser.tabbar.close_all_tabs([self.browser.tabbar.tabs[0]])
|
|
finally:
|
|
super(TestTabBar, self).tearDown()
|
|
|
|
def test_basics(self):
|
|
tabbar = self.browser.tabbar
|
|
|
|
self.assertEqual(tabbar.window, self.browser)
|
|
|
|
self.assertEqual(len(tabbar.tabs), 1)
|
|
self.assertEqual(tabbar.tabs[0].handle, self.marionette.current_window_handle)
|
|
|
|
self.assertEqual(tabbar.newtab_button.get_property('localName'), 'toolbarbutton')
|
|
self.assertEqual(tabbar.toolbar.get_property('localName'), 'tabs')
|
|
|
|
def test_open_close(self):
|
|
tabbar = self.browser.tabbar
|
|
|
|
self.assertEqual(len(tabbar.tabs), 1)
|
|
self.assertEqual(tabbar.selected_index, 0)
|
|
|
|
# Open with default trigger, and force closing the tab
|
|
tabbar.open_tab()
|
|
tabbar.close_tab(force=True)
|
|
|
|
# Open a new tab by each trigger method
|
|
open_strategies = ('button',
|
|
'menu',
|
|
'shortcut',
|
|
lambda tab: tabbar.newtab_button.click()
|
|
)
|
|
for trigger in open_strategies:
|
|
new_tab = tabbar.open_tab(trigger=trigger)
|
|
self.assertEqual(len(tabbar.tabs), 2)
|
|
self.assertEqual(new_tab.handle, self.marionette.current_window_handle)
|
|
self.assertEqual(new_tab.handle, tabbar.tabs[1].handle)
|
|
|
|
tabbar.close_tab()
|
|
self.assertEqual(len(tabbar.tabs), 1)
|
|
self.assertEqual(tabbar.tabs[0].handle, self.marionette.current_window_handle)
|
|
self.assertNotEqual(new_tab.handle, tabbar.tabs[0].handle)
|
|
|
|
# Close a tab by each trigger method
|
|
close_strategies = ('button',
|
|
'menu',
|
|
'shortcut',
|
|
lambda tab: tab.close_button.click())
|
|
for trigger in close_strategies:
|
|
new_tab = tabbar.open_tab()
|
|
self.assertEqual(len(tabbar.tabs), 2)
|
|
self.assertEqual(new_tab.handle, self.marionette.current_window_handle)
|
|
self.assertEqual(new_tab.handle, tabbar.tabs[1].handle)
|
|
|
|
tabbar.close_tab(trigger=trigger)
|
|
self.assertEqual(len(tabbar.tabs), 1)
|
|
self.assertEqual(tabbar.tabs[0].handle, self.marionette.current_window_handle)
|
|
self.assertNotEqual(new_tab.handle, tabbar.tabs[0].handle)
|
|
|
|
def test_close_not_selected_tab(self):
|
|
tabbar = self.browser.tabbar
|
|
|
|
new_tab = tabbar.open_tab()
|
|
tabbar.close_tab(tabbar.tabs[0], trigger="button")
|
|
|
|
self.assertEqual(len(tabbar.tabs), 1)
|
|
self.assertEqual(new_tab, tabbar.tabs[0])
|
|
|
|
def test_close_all_tabs_except_first(self):
|
|
tabbar = self.browser.tabbar
|
|
|
|
orig_tab = tabbar.tabs[0]
|
|
|
|
for i in range(0, 3):
|
|
tabbar.open_tab()
|
|
|
|
tabbar.close_all_tabs([orig_tab])
|
|
self.assertEqual(len(tabbar.tabs), 1)
|
|
self.assertEqual(orig_tab.handle, self.marionette.current_window_handle)
|
|
|
|
def test_switch_to(self):
|
|
tabbar = self.browser.tabbar
|
|
|
|
# Open a new tab in the foreground (will be auto-selected)
|
|
new_tab = tabbar.open_tab()
|
|
self.assertEqual(new_tab.handle, self.marionette.current_window_handle)
|
|
self.assertEqual(tabbar.selected_index, 1)
|
|
self.assertEqual(tabbar.selected_tab, new_tab)
|
|
|
|
# Switch by index
|
|
tabbar.switch_to(0)
|
|
self.assertEqual(tabbar.tabs[0].handle, self.marionette.current_window_handle)
|
|
|
|
# Switch by tab
|
|
tabbar.switch_to(new_tab)
|
|
self.assertEqual(new_tab.handle, self.marionette.current_window_handle)
|
|
|
|
# Switch by callback
|
|
tabbar.switch_to(lambda tab: tab.window.tabbar.selected_tab != tab)
|
|
self.assertEqual(tabbar.tabs[0].handle, self.marionette.current_window_handle)
|
|
|
|
tabbar.close_tab(tabbar.tabs[1])
|
|
|
|
|
|
class TestTab(PuppeteerMixin, MarionetteTestCase):
|
|
|
|
def tearDown(self):
|
|
try:
|
|
self.browser.tabbar.close_all_tabs([self.browser.tabbar.tabs[0]])
|
|
finally:
|
|
super(TestTab, self).tearDown()
|
|
|
|
def test_basic(self):
|
|
tab = self.browser.tabbar.tabs[0]
|
|
|
|
self.assertEqual(tab.window, self.browser)
|
|
|
|
self.assertEqual(tab.tab_element.get_property('localName'), 'tab')
|
|
self.assertEqual(tab.close_button.get_property('localName'), 'toolbarbutton')
|
|
|
|
def test_certificate(self):
|
|
url = self.marionette.absolute_url('layout/mozilla.html')
|
|
|
|
with self.marionette.using_context(self.marionette.CONTEXT_CONTENT):
|
|
self.marionette.navigate(url)
|
|
with self.assertRaises(NoCertificateError):
|
|
self.browser.tabbar.tabs[0].certificate
|
|
|
|
def test_close(self):
|
|
tabbar = self.browser.tabbar
|
|
|
|
self.assertEqual(len(tabbar.tabs), 1)
|
|
self.assertEqual(tabbar.selected_index, 0)
|
|
|
|
# Force closing the tab
|
|
new_tab = tabbar.open_tab()
|
|
new_tab.close(force=True)
|
|
|
|
# Close a tab by each trigger method
|
|
close_strategies = ('button',
|
|
'menu',
|
|
'shortcut',
|
|
lambda tab: tab.close_button.click())
|
|
for trigger in close_strategies:
|
|
new_tab = tabbar.open_tab()
|
|
self.assertEqual(len(tabbar.tabs), 2)
|
|
self.assertEqual(new_tab.handle, self.marionette.current_window_handle)
|
|
self.assertEqual(new_tab.handle, tabbar.tabs[1].handle)
|
|
|
|
new_tab.close(trigger=trigger)
|
|
self.assertEqual(len(tabbar.tabs), 1)
|
|
self.assertEqual(tabbar.tabs[0].handle, self.marionette.current_window_handle)
|
|
self.assertNotEqual(new_tab.handle, tabbar.tabs[0].handle)
|
|
|
|
def test_location(self):
|
|
url = self.marionette.absolute_url('layout/mozilla.html')
|
|
with self.marionette.using_context(self.marionette.CONTEXT_CONTENT):
|
|
self.marionette.navigate(url)
|
|
self.assertEqual(self.browser.tabbar.tabs[0].location, url)
|
|
|
|
def test_switch_to(self):
|
|
tabbar = self.browser.tabbar
|
|
|
|
new_tab = tabbar.open_tab()
|
|
|
|
# Switch to the first tab, which will not select it
|
|
tabbar.tabs[0].switch_to()
|
|
self.assertEqual(tabbar.tabs[0].handle, self.marionette.current_window_handle)
|
|
# Bug 1128656: We cannot test as long as switch_to_window() auto-selects the tab
|
|
# self.assertEqual(tabbar.selected_index, 1)
|
|
# self.assertEqual(tabbar.selected_tab, new_tab)
|
|
|
|
# Now select the first tab
|
|
tabbar.tabs[0].select()
|
|
self.assertEqual(tabbar.tabs[0].handle, self.marionette.current_window_handle)
|
|
self.assertTrue(tabbar.tabs[0].selected)
|
|
self.assertFalse(tabbar.tabs[1].selected)
|
|
|
|
new_tab.close()
|