diff options
Diffstat (limited to 'tests')
18 files changed, 201 insertions, 71 deletions
diff --git a/tests/autopilot/unity/emulators/__init__.py b/tests/autopilot/unity/emulators/__init__.py index f10173c37..fd6c6aee1 100644 --- a/tests/autopilot/unity/emulators/__init__.py +++ b/tests/autopilot/unity/emulators/__init__.py @@ -20,7 +20,14 @@ from autopilot.introspection.backends import DBusAddress from dbus import DBusException - +keys = { + "Left/launcher/keynav/prev": "launcher/keynav/prev", + "Left/launcher/keynav/next": "launcher/keynav/next", + "Left/launcher/keynav/open-quicklist": "launcher/keynav/open-quicklist", + "Bottom/launcher/keynav/prev": "launcher/keynav/close-quicklist", + "Bottom/launcher/keynav/next": "launcher/keynav/open-quicklist", + "Bottom/launcher/keynav/open-quicklist": "launcher/keynav/prev", +} class UnityIntrospectionObject(CustomEmulatorBase): DBUS_SERVICE = "com.canonical.Unity" diff --git a/tests/autopilot/unity/emulators/launcher.py b/tests/autopilot/unity/emulators/launcher.py index 5786079f8..f846f3c75 100644 --- a/tests/autopilot/unity/emulators/launcher.py +++ b/tests/autopilot/unity/emulators/launcher.py @@ -17,6 +17,7 @@ from testtools.matchers import NotEquals from time import sleep from unity.emulators import UnityIntrospectionObject +from unity.emulators import keys from unity.emulators.icons import ( ApplicationLauncherIcon, BFBLauncherIcon, @@ -37,6 +38,10 @@ class IconDragType: BEFORE = 3 AFTER = 4 +class LauncherPosition: + """Define launcher possible positions""" + LEFT = "Left" + BOTTOM = "Bottom" class LauncherController(UnityIntrospectionObject): """The LauncherController class.""" @@ -104,12 +109,16 @@ class Launcher(UnityIntrospectionObject, KeybindingsHelper): """Places the mouse on the screen of this launcher.""" move_mouse_to_screen(self.monitor) - def move_mouse_to_right_of_launcher(self): + def move_mouse_beside_launcher(self): """Places the mouse to the right of this launcher.""" move_mouse_to_screen(self.monitor) (x, y, w, h) = self.geometry - target_x = x + w + 10 - target_y = y + h / 2 + if h > w: + target_x = x + w + 10 + target_y = y + h / 2 + else: + target_x = x + w / 2 + target_y = y - 10 logger.debug("Moving mouse away from launcher.") self._mouse.move(target_x, target_y, False) @@ -153,8 +162,13 @@ class Launcher(UnityIntrospectionObject, KeybindingsHelper): move_mouse_to_screen(self.monitor) (x, y, w, h) = self.geometry - target_x = x - 300 # this is the pressure we need to reveal the launcher. - target_y = y + h / 2 + if h > w: + target_x = x - 300 # this is the pressure we need to reveal the launcher. + target_y = y + h / 2 + else: + target_x = x + w / 2 + target_y = y + h + 300 + logger.debug("Revealing launcher on monitor %d with mouse.", self.monitor) self._mouse.move(target_x, target_y, True, 5, .002) @@ -177,7 +191,7 @@ class Launcher(UnityIntrospectionObject, KeybindingsHelper): if self.hidemode == 1: self.is_showing.wait_for(False) - def keyboard_select_icon(self, **kwargs): + def keyboard_select_icon(self, launcher_position = LauncherPosition.LEFT, **kwargs): """Using either keynav mode or the switcher, select an icon in the launcher. The desired mode (keynav or switcher) must be started already before @@ -218,7 +232,7 @@ class Launcher(UnityIntrospectionObject, KeybindingsHelper): if matches: return if self.in_keynav_mode: - self.key_nav_next() + self.key_nav_next(launcher_position) elif self.in_switcher_mode: self.switcher_next() raise ValueError("No icon found that matches: %r", kwargs) @@ -244,23 +258,23 @@ class Launcher(UnityIntrospectionObject, KeybindingsHelper): self._perform_key_nav_exit_binding("launcher/keynav/activate") self._get_controller().key_nav_is_active.wait_for(False) - def key_nav_next(self): + def key_nav_next(self, launcher_position = LauncherPosition.LEFT): """Moves the launcher keynav focus to the next launcher icon""" logger.debug("Selecting next item in keyboard navigation mode.") old_selection = self._get_controller().key_nav_selection - self._perform_key_nav_binding("launcher/keynav/next") + self._perform_key_nav_binding(keys[launcher_position + "/launcher/keynav/next"]) self._get_controller().key_nav_selection.wait_for(NotEquals(old_selection)) - def key_nav_prev(self): + def key_nav_prev(self, launcher_position = LauncherPosition.LEFT): """Moves the launcher keynav focus to the previous launcher icon""" logger.debug("Selecting previous item in keyboard navigation mode.") old_selection = self._get_controller().key_nav_selection - self._perform_key_nav_binding("launcher/keynav/prev") + self._perform_key_nav_binding(keys[launcher_position + "/launcher/keynav/prev"]) self._get_controller().key_nav_selection.wait_for(NotEquals(old_selection)) - def key_nav_enter_quicklist(self): + def key_nav_enter_quicklist(self, launcher_position = LauncherPosition.LEFT): logger.debug("Opening quicklist for currently selected icon.") - self._perform_key_nav_binding("launcher/keynav/open-quicklist") + self._perform_key_nav_binding(keys[launcher_position + "/launcher/keynav/open-quicklist"]) self.quicklist_open.wait_for(True) def key_nav_exit_quicklist(self): @@ -329,9 +343,9 @@ class Launcher(UnityIntrospectionObject, KeybindingsHelper): self._mouse.click(button) if (move_mouse_after): - self.move_mouse_to_right_of_launcher() + self.move_mouse_beside_launcher() - def drag_icon_to_position(self, icon, pos, target, drag_type=IconDragType.INSIDE): + def drag_icon_to_position(self, icon, pos, target, drag_type=IconDragType.INSIDE, launcher_position=LauncherPosition.LEFT): """Drag a launcher icon to a new position. 'icon' is the icon to move. It must be either a ApplicationLauncherIcon or an @@ -345,9 +359,14 @@ class Launcher(UnityIntrospectionObject, KeybindingsHelper): 'drag_type' must be one of IconDragType.INSIDE or IconDragType.OUTSIDE. This specifies whether the icon is gragged inside the launcher, or to the - right of it. The default is to drag inside the launcher. If it is + right/top of it. The default is to drag inside the launcher. If it is specified, and not one of the allowed values, a ValueError will be raised. + 'launcher_position' must be one of LauncherPosition.LEFT or LauncherPosition.BOTTOM. + This specifies the launcher position when dragging the icon. The default launcher + position is at left. If it is specified, and not one of the allowed values, a + ValueError will be raised. + For example: >>> drag_icon_to_position(calc_icon, IconDragType.BEFORE, switcher_icon) @@ -374,29 +393,41 @@ class Launcher(UnityIntrospectionObject, KeybindingsHelper): if drag_type not in (IconDragType.INSIDE, IconDragType.OUTSIDE): raise ValueError("'drag_type' parameter must be one of IconDragType.INSIDE, IconDragType.OUTSIDE") - icon_height = get_compiz_option("unityshell", "icon_size") + icon_size = get_compiz_option("unityshell", "icon_size") self.move_mouse_to_icon(icon) self._mouse.press() sleep(1) if drag_type == IconDragType.OUTSIDE: - shift_over = self._mouse.x + (icon_height * 2) - self._mouse.move(shift_over, self._mouse.y, rate=20, time_between_events=0.005) + if launcher_position == LauncherPosition.LEFT: + shift_over = self._mouse.x + (icon_size * 3) + self._mouse.move(shift_over, self._mouse.y, rate=20, time_between_events=0.005) + else: + shift_over = self._mouse.y - (icon_size * 3) + self._mouse.move(self._mouse.x, shift_over, rate=20, time_between_events=0.005) sleep(0.5) self.move_mouse_to_icon(target) - target_y = target.center.y - if target_y < icon.center.y: - target_y += icon_height - if pos == IconDragType.BEFORE: - target_y -= icon_height + (icon_height / 2) + if launcher_position == LauncherPosition.LEFT: + target_y = target.center.y + if target_y < icon.center.y: + target_y += icon_size + if pos == IconDragType.BEFORE: + target_y -= icon_size + (icon_size / 2) + self._mouse.move(self._mouse.x, target_y, rate=20, time_between_events=0.005) + else: + target_x = target.center.x + if target_x < icon.center.x: + target_x += icon_size + if pos == IconDragType.BEFORE: + target_x -= icon_size + (icon_size / 2) + self._mouse.move(target_x, self._mouse.y, rate=20, time_between_events=0.005) - self._mouse.move(self._mouse.x, target_y, rate=20, time_between_events=0.005) sleep(1) self._mouse.release() - self.move_mouse_to_right_of_launcher() + self.move_mouse_beside_launcher() def lock_to_launcher(self, icon): """lock 'icon' to the launcher, if it's not already. diff --git a/tests/autopilot/unity/tests/launcher/__init__.py b/tests/autopilot/unity/tests/launcher/__init__.py index ef0852bf1..6371cb339 100644 --- a/tests/autopilot/unity/tests/launcher/__init__.py +++ b/tests/autopilot/unity/tests/launcher/__init__.py @@ -13,6 +13,7 @@ from autopilot.testcase import multiply_scenarios from unity.tests import UnityTestCase from unity.emulators.X11 import set_primary_monitor +from unity.emulators.launcher import LauncherPosition def _make_scenarios(): @@ -35,7 +36,11 @@ class LauncherTestCase(UnityTestCase): """A base class for all launcher tests that uses scenarios to run on each launcher (for multi-monitor setups). """ - scenarios = _make_scenarios() + scenarios = multiply_scenarios(_make_scenarios(), + [ + ('left', {'launcher_position': LauncherPosition.LEFT}), + ('bottom', {'launcher_position': LauncherPosition.BOTTOM}), + ]) def setUp(self): super(LauncherTestCase, self).setUp() @@ -45,6 +50,10 @@ class LauncherTestCase(UnityTestCase): self.set_unity_option('num_launchers', int(self.only_primary)) self.launcher_instance = self.get_launcher() + old_pos = self.call_gsettings_cmd('get', 'com.canonical.Unity.Launcher', 'launcher-position') + self.call_gsettings_cmd('set', 'com.canonical.Unity.Launcher', 'launcher-position', '"%s"' % self.launcher_position) + self.addCleanup(self.call_gsettings_cmd, 'set', 'com.canonical.Unity.Launcher', 'launcher-position', old_pos) + if not self.launcher_instance: self.skipTest("Cannot run test with no Launcher on monitor %d." % self.launcher_monitor) diff --git a/tests/autopilot/unity/tests/launcher/test_icon_behavior.py b/tests/autopilot/unity/tests/launcher/test_icon_behavior.py index cec00f6da..b51267dee 100644 --- a/tests/autopilot/unity/tests/launcher/test_icon_behavior.py +++ b/tests/autopilot/unity/tests/launcher/test_icon_behavior.py @@ -17,6 +17,7 @@ from time import sleep from unity.emulators.icons import ApplicationLauncherIcon, ExpoLauncherIcon from unity.emulators.launcher import IconDragType +from unity.emulators.launcher import LauncherPosition from unity.tests.launcher import LauncherTestCase, _make_scenarios from Xlib import Xutil @@ -196,7 +197,8 @@ class LauncherIconsTests(LauncherTestCase): self.launcher_instance.drag_icon_to_position( calc_icon, IconDragType.AFTER, - bfb_icon) + bfb_icon, + launcher_position = self.launcher_position) self.launcher_instance.keyboard_reveal_launcher() self.addCleanup(self.launcher_instance.keyboard_unreveal_launcher) @@ -354,6 +356,10 @@ class LauncherDragIconsBehavior(LauncherTestCase): [ ('inside', {'drag_type': IconDragType.INSIDE}), ('outside', {'drag_type': IconDragType.OUTSIDE}), + ], + [ + ('left', {'launcher_position': LauncherPosition.LEFT}), + ('bottom', {'launcher_position': LauncherPosition.BOTTOM}), ]) def setUp(self): @@ -386,7 +392,8 @@ class LauncherDragIconsBehavior(LauncherTestCase): calc_icon, IconDragType.AFTER, bfb_icon, - self.drag_type) + self.drag_type, + self.launcher_position) moved_icon = self.unity.launcher.model.\ get_launcher_icons_for_monitor(self.launcher_monitor)[1] self.assertThat(moved_icon, Equals(calc_icon)) @@ -406,14 +413,16 @@ class LauncherDragIconsBehavior(LauncherTestCase): calc_icon, IconDragType.AFTER, bfb_icon, - self.drag_type) + self.drag_type, + self.launcher_position) sleep(1) self.launcher_instance.drag_icon_to_position( calc_icon, IconDragType.BEFORE, trash_icon, - self.drag_type) + self.drag_type, + self.launcher_position) # Must be the last bamf icon - not necessarily the third-from-end icon. expected_pos = -2 if self.workspace.num_workspaces < 2 else -1 diff --git a/tests/autopilot/unity/tests/launcher/test_keynav.py b/tests/autopilot/unity/tests/launcher/test_keynav.py index dda2b88ec..f8e787d2c 100644 --- a/tests/autopilot/unity/tests/launcher/test_keynav.py +++ b/tests/autopilot/unity/tests/launcher/test_keynav.py @@ -68,7 +68,7 @@ class LauncherKeyNavTests(LauncherTestCase): def test_launcher_keynav_forward(self): """Must be able to move forwards while in keynav mode.""" self.start_keynav_with_cleanup_cancel() - self.launcher_instance.key_nav_next() + self.launcher_instance.key_nav_next(self.launcher_position) # The launcher model has hidden items, so the keynav indexes do not # increase by 1 each time. This test was failing because the 2nd icon # had an index of 2, not 1 as expected. The best we can do here is to @@ -80,9 +80,9 @@ class LauncherKeyNavTests(LauncherTestCase): def test_launcher_keynav_prev_works(self): """Must be able to move backwards while in keynav mode.""" self.start_keynav_with_cleanup_cancel() - self.launcher_instance.key_nav_next() + self.launcher_instance.key_nav_next(self.launcher_position) self.assertThat(self.unity.launcher.key_nav_selection, Eventually(GreaterThan(0))) - self.launcher_instance.key_nav_prev() + self.launcher_instance.key_nav_prev(self.launcher_position) self.assertThat(self.unity.launcher.key_nav_selection, Eventually(Equals(0))) def test_launcher_keynav_cycling_forward(self): @@ -90,29 +90,29 @@ class LauncherKeyNavTests(LauncherTestCase): self.start_keynav_with_cleanup_cancel() prev_icon = 0 for icon in range(1, self.unity.launcher.model.num_launcher_icons()): - self.launcher_instance.key_nav_next() + self.launcher_instance.key_nav_next(self.launcher_position) # FIXME We can't directly check for selection/icon number equalty # since the launcher model also contains "hidden" icons that aren't # shown, so the selection index can increment by more than 1. self.assertThat(self.unity.launcher.key_nav_selection, Eventually(GreaterThan(prev_icon))) prev_icon = self.unity.launcher.key_nav_selection - self.launcher_instance.key_nav_next() + self.launcher_instance.key_nav_next(self.launcher_position) self.assertThat(self.unity.launcher.key_nav_selection, Eventually(Equals(0))) def test_launcher_keynav_cycling_backward(self): """Launcher keynav must loop through icons when cycling backwards""" self.start_keynav_with_cleanup_cancel() - self.launcher_instance.key_nav_prev() + self.launcher_instance.key_nav_prev(self.launcher_position) # FIXME We can't directly check for self.unity.launcher.num_launcher_icons - 1 self.assertThat(self.unity.launcher.key_nav_selection, Eventually(GreaterThan(1))) def test_launcher_keynav_can_open_and_close_quicklist(self): """Tests that we can open and close a quicklist from keynav mode.""" self.start_keynav_with_cleanup_cancel() - self.launcher_instance.key_nav_next() + self.launcher_instance.key_nav_next(self.launcher_position) self.addCleanup(self.keyboard.press_and_release, "Escape") - self.launcher_instance.key_nav_enter_quicklist() + self.launcher_instance.key_nav_enter_quicklist(self.launcher_position) self.assertThat(self.launcher_instance.quicklist_open, Eventually(Equals(True))) self.launcher_instance.key_nav_exit_quicklist() self.assertThat(self.launcher_instance.quicklist_open, Eventually(Equals(False))) @@ -135,7 +135,7 @@ class LauncherKeyNavTests(LauncherTestCase): self.start_keynav_with_cleanup_cancel() - self.launcher_instance.keyboard_select_icon(tooltip_text=calc.name) + self.launcher_instance.keyboard_select_icon(self.launcher_position, tooltip_text=calc.name) self.launcher_instance.key_nav_activate() self.assertTrue(calc.is_active) @@ -148,7 +148,7 @@ class LauncherKeyNavTests(LauncherTestCase): self.start_keynav_with_cleanup_cancel() - self.launcher_instance.keyboard_select_icon(tooltip_text="Workspace Switcher") + self.launcher_instance.keyboard_select_icon(self.launcher_position, tooltip_text="Workspace Switcher") self.launcher_instance.key_nav_activate() self.addCleanup(self.keybinding, "expo/cancel") @@ -160,7 +160,7 @@ class LauncherKeyNavTests(LauncherTestCase): self.skipTest("This test requires enabled more than one workspace.") self.start_keynav_with_cleanup_cancel() - self.launcher_instance.keyboard_select_icon(tooltip_text="Workspace Switcher") + self.launcher_instance.keyboard_select_icon(self.launcher_position, tooltip_text="Workspace Switcher") self.launcher_instance.key_nav_activate() self.keyboard.press_and_release("Escape") @@ -209,7 +209,7 @@ class LauncherKeyNavTests(LauncherTestCase): """A single click outside of launcher must cancel keynav.""" self.start_keynav_with_cleanup_cancel() - self.launcher_instance.move_mouse_to_right_of_launcher() + self.launcher_instance.move_mouse_beside_launcher() self.mouse.click() self.assertThat(self.unity.launcher.key_nav_is_active, Eventually(Equals(False))) @@ -229,7 +229,7 @@ class LauncherKeyNavTests(LauncherTestCase): def test_launcher_keynav_cancel_on_quicklist_activate(self): """A single click on a quicklist item must cancel keynav.""" self.start_keynav_with_cleanup_cancel() - self.launcher_instance.key_nav_enter_quicklist() + self.launcher_instance.key_nav_enter_quicklist(self.launcher_position) bfb_icon = self.unity.launcher.model.get_bfb_icon() bfb_ql = bfb_icon.get_quicklist() diff --git a/tests/autopilot/unity/tests/launcher/test_reveal.py b/tests/autopilot/unity/tests/launcher/test_reveal.py index 922cc1efd..7d57f12b2 100644 --- a/tests/autopilot/unity/tests/launcher/test_reveal.py +++ b/tests/autopilot/unity/tests/launcher/test_reveal.py @@ -39,7 +39,7 @@ class LauncherRevealTests(LauncherTestCase): def test_reveal_on_mouse_to_edge(self): """Tests reveal of launchers by mouse pressure.""" - self.launcher_instance.move_mouse_to_right_of_launcher() + self.launcher_instance.move_mouse_beside_launcher() self.launcher_instance.mouse_reveal_launcher() self.assertThat(self.launcher_instance.is_showing, Eventually(Equals(True))) @@ -58,7 +58,7 @@ class LauncherRevealTests(LauncherTestCase): """Tests reveal of launchers by mouse pressure to ensure it doesn't automatically hide again. """ - self.launcher_instance.move_mouse_to_right_of_launcher() + self.launcher_instance.move_mouse_beside_launcher() self.launcher_instance.mouse_reveal_launcher() self.assertThat(self.launcher_instance.is_showing, Eventually(Equals(True))) diff --git a/tests/autopilot/unity/tests/launcher/test_scroll.py b/tests/autopilot/unity/tests/launcher/test_scroll.py index 59814d0f6..5e500c765 100644 --- a/tests/autopilot/unity/tests/launcher/test_scroll.py +++ b/tests/autopilot/unity/tests/launcher/test_scroll.py @@ -88,8 +88,9 @@ class LauncherScrollTests(LauncherTestCase): launcher_instance.move_mouse_to_icon(last_icon) # Make sure the first icon is off the screen or else there is no - # scrolling. - self.assertThat(first_icon.center.y, LessThan(y)) + # scrolling when launcher at left + if w < h: + self.assertThat(first_icon.center.y, LessThan(y)) # Autoscroll to the first icon launcher_instance.move_mouse_to_icon(first_icon, autoscroll_offset) diff --git a/tests/autopilot/unity/tests/launcher/test_switcher.py b/tests/autopilot/unity/tests/launcher/test_switcher.py index 06f82792b..657cc2357 100644 --- a/tests/autopilot/unity/tests/launcher/test_switcher.py +++ b/tests/autopilot/unity/tests/launcher/test_switcher.py @@ -152,7 +152,7 @@ class LauncherSwitcherTests(LauncherTestCase): self.start_switcher_with_cleanup_cancel() - self.launcher_instance.keyboard_select_icon(tooltip_text=calc.name) + self.launcher_instance.keyboard_select_icon(self.launcher_position, tooltip_text=calc.name) self.launcher_instance.switcher_activate() self.assertThat(lambda: calc.is_active, Eventually(Equals(True))) diff --git a/tests/autopilot/unity/tests/launcher/test_tooltips.py b/tests/autopilot/unity/tests/launcher/test_tooltips.py index f403a8a80..c2eaaf9a0 100644 --- a/tests/autopilot/unity/tests/launcher/test_tooltips.py +++ b/tests/autopilot/unity/tests/launcher/test_tooltips.py @@ -18,7 +18,7 @@ class LauncherTooltipTests(LauncherTestCase): def setUp(self): super(LauncherTooltipTests, self).setUp() self.set_unity_option('launcher_hide_mode', 0) - self.launcher_instance.move_mouse_to_right_of_launcher() + self.launcher_instance.move_mouse_beside_launcher() self.icons = self.unity.launcher.model.get_launcher_icons(visible_only=True) def test_launcher_tooltip_show(self): @@ -49,7 +49,7 @@ class LauncherTooltipTests(LauncherTestCase): b -= 1 # leaving launcher clears tooltips, and instant reveal - self.launcher_instance.move_mouse_to_right_of_launcher() + self.launcher_instance.move_mouse_beside_launcher() self.assertEqual(self.get_reveal_behavior(self.icons[b]), self.DELAYED) def test_launcher_tooltip_disabling(self): diff --git a/tests/autopilot/unity/tests/test_dash.py b/tests/autopilot/unity/tests/test_dash.py index 606144b8e..8e488750e 100644 --- a/tests/autopilot/unity/tests/test_dash.py +++ b/tests/autopilot/unity/tests/test_dash.py @@ -689,8 +689,10 @@ class DashVisualTests(DashTestCase): self.unity.dash.ensure_visible() - self.assertThat(self.unity.dash.view.x, Eventually(Equals(launcher.geometry.x + launcher.geometry.width - 1))) - + if launcher.geometry.width < launcher.geometry.height: + self.assertThat(self.unity.dash.view.x, Eventually(Equals(launcher.geometry.x + launcher.geometry.width - 1))) + else: + self.assertThat(self.unity.dash.view.x, Eventually(Equals(0))) def test_see_more_result_alignment(self): """The see more results label should be baseline aligned @@ -740,7 +742,7 @@ class DashBorderTests(DashTestCase): if (self.unity.dash.view.form_factor != "desktop"): self.skip("Not in desktop form-factor.") - x = self.unity.dash.view.x + self.unity.dash.view.width + self.unity.dash.view.right_border_width / 2 + x = self.unity.dash.view.x + self.unity.dash.view.width + self.unity.dash.view.vertical_border_width / 2 y = self.unity.dash.view.y + self.unity.dash.view.height / 2 self.mouse.move(x, y) @@ -756,7 +758,7 @@ class DashBorderTests(DashTestCase): self.skip("Not in desktop form-factor.") x = self.unity.dash.view.x + self.unity.dash.view.width / 2 - y = self.unity.dash.view.y + self.unity.dash.view.height + self.unity.dash.view.bottom_border_height / 2 + y = self.unity.dash.view.y + self.unity.dash.view.height + self.unity.dash.view.horizontal_border_height / 2 self.mouse.move(x, y) self.mouse.click() diff --git a/tests/autopilot/unity/tests/test_hud.py b/tests/autopilot/unity/tests/test_hud.py index de0929338..8467caa53 100644 --- a/tests/autopilot/unity/tests/test_hud.py +++ b/tests/autopilot/unity/tests/test_hud.py @@ -471,10 +471,10 @@ class HudBehaviorTests(HudTestsBase): self.unity.hud.ensure_visible() - # Click bottom right of the screen, but take into account the non-maximized window - + # Click right of the screen, but take into account the non-maximized window - # we do not want to click on it as it focuses the wrong window w = self.display.get_screen_width() - 1 - h = self.display.get_screen_height() - 1 + h = (self.display.get_screen_height() - 1) / 2 # If the mouse is over the non-maximized window, move it away from it. (calc_x, calc_y, calc_w, calc_h) = calc_win.get_windows()[0].geometry @@ -671,10 +671,11 @@ class HudVisualTests(HudTestsBase): monitor_geo = self.display.get_screen_geometry(self.hud_monitor) monitor_x = monitor_geo[0] monitor_w = monitor_geo[2] + launcher = self.unity.launcher.get_launcher_for_monitor(self.hud_monitor) hud_x = self.unity.hud.geometry[0] hud_w = self.unity.hud.geometry[2] - if self.hud_locked: + if self.hud_locked and launcher.geometry.w < launcher.geometry.h: self.assertThat(hud_x, GreaterThan(monitor_x)) self.assertThat(hud_x, LessThan(monitor_x + monitor_w)) self.assertThat(hud_w, Equals(monitor_x + monitor_w - hud_x)) diff --git a/tests/autopilot/unity/tests/test_quicklist.py b/tests/autopilot/unity/tests/test_quicklist.py index c54ccc3b8..a6a197196 100644 --- a/tests/autopilot/unity/tests/test_quicklist.py +++ b/tests/autopilot/unity/tests/test_quicklist.py @@ -17,7 +17,9 @@ from testtools.matchers import Contains, Equals, NotEquals, Not, Raises from time import sleep from xdg.DesktopEntry import DesktopEntry +from unity.emulators import keys from unity.emulators.quicklist import QuicklistMenuItemLabel +from unity.emulators.launcher import LauncherPosition from unity.tests import UnityTestCase @@ -193,12 +195,12 @@ class QuicklistActionTests(UnityTestCase): icons = self.unity.launcher.model.get_launcher_icons() - icon0_ql = self.open_quicklist_for_icon(icons[0]) - self.assertThat(icon0_ql.active, Eventually(Equals(True))) - icon1_ql = self.open_quicklist_for_icon(icons[1]) self.assertThat(icon1_ql.active, Eventually(Equals(True))) - self.assertThat(icon0_ql.wait_until_destroyed, Not(Raises())) + + icon0_ql = self.open_quicklist_for_icon(icons[0]) + self.assertThat(icon0_ql.active, Eventually(Equals(True))) + self.assertThat(icon1_ql.wait_until_destroyed, Not(Raises())) def test_right_clicking_same_icon_doesnt_reopen_ql(self): """A right click to the same icon in the launcher must @@ -224,6 +226,10 @@ class QuicklistActionTests(UnityTestCase): class QuicklistKeyNavigationTests(UnityTestCase): """Tests for the quicklist key navigation.""" + scenarios = [ + ('left', {'launcher_position': LauncherPosition.LEFT}), + ('bottom', {'launcher_position': LauncherPosition.BOTTOM}), + ] def setUp(self): super(QuicklistKeyNavigationTests, self).setUp() @@ -239,6 +245,10 @@ class QuicklistKeyNavigationTests(UnityTestCase): self.ql_launcher = self.unity.launcher.get_launcher_for_monitor(0) + old_pos = self.call_gsettings_cmd('get', 'com.canonical.Unity.Launcher', 'launcher-position') + self.call_gsettings_cmd('set', 'com.canonical.Unity.Launcher', 'launcher-position', '"%s"' % self.launcher_position) + self.addCleanup(self.call_gsettings_cmd, 'set', 'com.canonical.Unity.Launcher', 'launcher-position', old_pos) + def open_quicklist_with_mouse(self): """Opens a quicklist with the mouse.""" self.ql_launcher.click_launcher_icon(self.ql_launcher_icon, button=3) @@ -256,8 +266,8 @@ class QuicklistKeyNavigationTests(UnityTestCase): self.ql_launcher.key_nav_start() self.addCleanup(self.ql_launcher.key_nav_cancel) - self.ql_launcher.keyboard_select_icon(tooltip_text=self.ql_app.name) - self.keybinding("launcher/keynav/open-quicklist") + self.ql_launcher.keyboard_select_icon(self.launcher_position, tooltip_text=self.ql_app.name) + self.keybinding(keys[self.launcher_position + "/launcher/keynav/open-quicklist"]) self.addCleanup(self.keybinding, "launcher/keynav/close-quicklist") self.assertThat(self.ql_launcher_icon.get_quicklist, diff --git a/tests/autopilot/unity/tests/test_spread.py b/tests/autopilot/unity/tests/test_spread.py index c3c5b769d..0cc91a10e 100644 --- a/tests/autopilot/unity/tests/test_spread.py +++ b/tests/autopilot/unity/tests/test_spread.py @@ -150,7 +150,7 @@ class SpreadTests(UnityTestCase): """Test that the screen spread desaturates the launcher icons""" self.start_test_application_windows("Calculator", 1) self.initiate_spread_for_screen() - self.launcher.move_mouse_to_right_of_launcher() + self.launcher.move_mouse_beside_launcher() self.assertLauncherIconsDesaturated() def test_spread_saturate_launcher_icons_on_mouse_over(self): diff --git a/tests/autopilot/unity/tests/test_wm_keybindings.py b/tests/autopilot/unity/tests/test_wm_keybindings.py index f6dec986a..fe5418d6a 100644 --- a/tests/autopilot/unity/tests/test_wm_keybindings.py +++ b/tests/autopilot/unity/tests/test_wm_keybindings.py @@ -99,10 +99,16 @@ class WindowManagerKeybindingsForWindowHandling(UnityTestCase): monitor = self.bamf_win.monitor monitor_geo = self.display.get_screen_geometry(monitor) launcher = self.unity.launcher.get_launcher_for_monitor(monitor) - launcher_w = 0 if launcher.hidemode else launcher.geometry[2] + # When launcher at left, do not use launcher_h, otherwise, do not use launcher_w + if launcher.geometry[2] < launcher.geometry[3]: + launcher_h = 0 + launcher_w = 0 if launcher.hidemode else launcher.geometry[2] + else: + launcher_h = 0 if launcher.hidemode else launcher.geometry[3] + launcher_w = 0 panel_h = self.unity.panels.get_panel_for_monitor(monitor).geometry[3] return (monitor_geo[0] + launcher_w, monitor_geo[1] + panel_h, - monitor_geo[2] - launcher_w, monitor_geo[3] - panel_h) + monitor_geo[2] - launcher_w, monitor_geo[3] - panel_h - launcher_h) def test_maximize_window(self): if self.start_restored: diff --git a/tests/test_bfb_launcher_icon.cpp b/tests/test_bfb_launcher_icon.cpp index e4e0cb3f7..cd9519b9f 100644 --- a/tests/test_bfb_launcher_icon.cpp +++ b/tests/test_bfb_launcher_icon.cpp @@ -31,7 +31,7 @@ class MockBFBLauncherIcon : public BFBLauncherIcon { public: MockBFBLauncherIcon() - : BFBLauncherIcon(LauncherHideMode::LAUNCHER_HIDE_NEVER) + : BFBLauncherIcon() {} }; diff --git a/tests/test_hud_launcher_icon.cpp b/tests/test_hud_launcher_icon.cpp index 26b8aa978..a9b88936e 100644 --- a/tests/test_hud_launcher_icon.cpp +++ b/tests/test_hud_launcher_icon.cpp @@ -32,7 +32,7 @@ class MockHudLauncherIcon : public HudLauncherIcon { public: MockHudLauncherIcon() - : HudLauncherIcon(LauncherHideMode::LAUNCHER_HIDE_NEVER) + : HudLauncherIcon() {} }; diff --git a/tests/test_launcher.cpp b/tests/test_launcher.cpp index 33893151a..0a2b8a9a5 100644 --- a/tests/test_launcher.cpp +++ b/tests/test_launcher.cpp @@ -31,6 +31,7 @@ using namespace testing; #include "unity-shared/PanelStyle.h" #include "unity-shared/IconRenderer.h" #include "unity-shared/UBusMessages.h" +#include "unity-shared/UnitySettings.h" #include "test_standalone_wm.h" #include "test_utils.h" @@ -537,11 +538,13 @@ TEST_F(TestLauncher, EdgeBarriersIgnoreEvents) TEST_F(TestLauncher, EdgeBarriersHandlesEvent) { - auto const& launcher_geo = launcher_->GetAbsoluteGeometry(); + glib::Object<GSettings> gsettings(g_settings_new("com.canonical.Unity.Launcher")); + auto launcher_geo = launcher_->GetAbsoluteGeometry(); auto barrier = std::make_shared<ui::PointerBarrierWrapper>(); auto event = std::make_shared<ui::BarrierEvent>(0, 0, 0, 100); launcher_->SetHidden(true); + g_settings_set_enum(gsettings, "launcher-position", static_cast<int>(LauncherPosition::LEFT)); options_->reveal_trigger = RevealTrigger::EDGE; for (int x = launcher_geo.x; x < launcher_geo.x+launcher_geo.width; ++x) @@ -567,6 +570,37 @@ TEST_F(TestLauncher, EdgeBarriersHandlesEvent) ui::EdgeBarrierSubscriber::Result::HANDLED); } } + + g_settings_set_enum(gsettings, "launcher-position", static_cast<int>(LauncherPosition::BOTTOM)); + launcher_geo = launcher_->GetAbsoluteGeometry(); + options_->reveal_trigger = RevealTrigger::EDGE; + int panel_height = panel::Style::Instance().PanelHeight(launcher_->monitor()); + + for (int y = launcher_geo.y; y < launcher_geo.y+launcher_geo.height; ++y) + { + for (int x = launcher_geo.x + panel_height; x < launcher_geo.x+launcher_geo.width; ++x) + { + event->x = x; + event->y = y; + ASSERT_EQ(launcher_->HandleBarrierEvent(barrier, event), + ui::EdgeBarrierSubscriber::Result::HANDLED); + } + } + + options_->reveal_trigger = RevealTrigger::CORNER; + + for (int y = launcher_geo.y; y < launcher_geo.y+launcher_geo.height; ++y) + { + for (int x = launcher_geo.x; x < launcher_geo.x + panel_height; ++x) + { + event->x = x; + event->y = y; + ASSERT_EQ(launcher_->HandleBarrierEvent(barrier, event), + ui::EdgeBarrierSubscriber::Result::HANDLED); + } + } + + g_settings_reset(gsettings, "launcher-position"); } TEST_F(TestLauncher, DndIsSpecialRequest) diff --git a/tests/test_launcher_controller.cpp b/tests/test_launcher_controller.cpp index eee05c0bf..7cf9455b0 100644 --- a/tests/test_launcher_controller.cpp +++ b/tests/test_launcher_controller.cpp @@ -42,6 +42,7 @@ #include "mock-application.h" #include "BamfApplicationManager.h" #include "bamf-mock-application.h" +#include "unity-shared/UnitySettings.h" using namespace testmocks; using namespace unity::launcher; @@ -490,6 +491,25 @@ TEST_F(TestLauncherController, MonitorResizesLauncher) ASSERT_EQ(launcher_geo.height, monitor_geo.height - panel_style.PanelHeight()); } +TEST_F(TestLauncherController, LauncherPositionResetsOnGsettingsUpdated) +{ + glib::Object<GSettings> gsettings(g_settings_new("com.canonical.Unity.Launcher")); + g_settings_set_enum(gsettings, "launcher-position", static_cast<int>(LauncherPosition::LEFT)); + nux::Geometry const& monitor_geo = uscreen.GetMonitorGeometry(0); + nux::Geometry launcher_geo = lc.launcher().GetAbsoluteGeometry(); + ASSERT_EQ(launcher_geo.x, monitor_geo.x); + ASSERT_EQ(launcher_geo.y, monitor_geo.y + panel_style.PanelHeight(0)); + ASSERT_EQ(launcher_geo.height, monitor_geo.height - panel_style.PanelHeight(0)); + + g_settings_set_enum(gsettings, "launcher-position", static_cast<int>(LauncherPosition::BOTTOM)); + launcher_geo = lc.launcher().GetAbsoluteGeometry(); + ASSERT_EQ(launcher_geo.x, monitor_geo.x); + ASSERT_EQ(launcher_geo.y, monitor_geo.y + monitor_geo.height - launcher_geo.height + 1); + ASSERT_EQ(launcher_geo.width, monitor_geo.width); + + g_settings_reset(gsettings, "launcher-position"); +} + TEST_F(TestLauncherController, IconCentersResetsOnMonitorsUpdated) { uscreen.SetupFakeMultiMonitor(); |
