summaryrefslogtreecommitdiffstats
path: root/testing/firefox-ui/tests/puppeteer/test_tabbar.py
diff options
context:
space:
mode:
Diffstat (limited to 'testing/firefox-ui/tests/puppeteer/test_tabbar.py')
-rw-r--r--testing/firefox-ui/tests/puppeteer/test_tabbar.py191
1 files changed, 191 insertions, 0 deletions
diff --git a/testing/firefox-ui/tests/puppeteer/test_tabbar.py b/testing/firefox-ui/tests/puppeteer/test_tabbar.py
new file mode 100644
index 000000000..7da3f7ee7
--- /dev/null
+++ b/testing/firefox-ui/tests/puppeteer/test_tabbar.py
@@ -0,0 +1,191 @@
+# 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()