summaryrefslogtreecommitdiff
path: root/tests
diff options
Diffstat (limited to 'tests')
-rw-r--r--tests/autopilot/unity/emulators/__init__.py9
-rw-r--r--tests/autopilot/unity/emulators/launcher.py83
-rw-r--r--tests/autopilot/unity/tests/launcher/__init__.py11
-rw-r--r--tests/autopilot/unity/tests/launcher/test_icon_behavior.py17
-rw-r--r--tests/autopilot/unity/tests/launcher/test_keynav.py26
-rw-r--r--tests/autopilot/unity/tests/launcher/test_reveal.py4
-rw-r--r--tests/autopilot/unity/tests/launcher/test_scroll.py5
-rw-r--r--tests/autopilot/unity/tests/launcher/test_switcher.py2
-rw-r--r--tests/autopilot/unity/tests/launcher/test_tooltips.py4
-rw-r--r--tests/autopilot/unity/tests/test_dash.py10
-rw-r--r--tests/autopilot/unity/tests/test_hud.py7
-rw-r--r--tests/autopilot/unity/tests/test_quicklist.py22
-rw-r--r--tests/autopilot/unity/tests/test_spread.py2
-rw-r--r--tests/autopilot/unity/tests/test_wm_keybindings.py10
-rw-r--r--tests/test_bfb_launcher_icon.cpp2
-rw-r--r--tests/test_hud_launcher_icon.cpp2
-rw-r--r--tests/test_launcher.cpp36
-rw-r--r--tests/test_launcher_controller.cpp20
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();