Dactyloidae/testing/firefox-ui/tests/puppeteer/test_tabbar.py

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()