Unity 8
__init__.py
1 # -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
2 #
3 # Unity Indicators Autopilot Test Suite
4 # Copyright (C) 2015 Canonical
5 #
6 # This program is free software: you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation, either version 3 of the License, or
9 # (at your option) any later version.
10 #
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 # GNU General Public License for more details.
15 # You should have received a copy of the GNU General Public License
16 # along with this program. If not, see <http://www.gnu.org/licenses/>.
17 
18 import ubuntuuitoolkit
19 from autopilot import introspection
20 
21 from unity8.shell import emulators
22 
23 
24 class IndicatorPage(emulators.UnityEmulatorBase):
25 
26  """Autopilot helper for the IndicatorPage component."""
27 
28  # XXX Because of https://bugs.launchpad.net/autopilot-qt/+bug/1341671
29  # we need to make sure it does not match in any selection.
30  # --elopio - 2015-01-20
31 
32  @classmethod
33  def validate_dbus_object(cls, path, state):
34  return False
35 
36 
37 class DisplayIndicator(object):
38 
39  def __init__(self, main_window):
40  self._main_window = main_window
41 
42  def is_indicator_icon_visible(self):
43  panel_item = self._main_window.wait_select_single(
44  objectName='indicator-rotation-lock-panelItem')
45  return panel_item.indicatorVisible
46 
47  def open(self):
48  """Open the display indicator page.
49 
50  :return: The custom proxy object for the display indicator page.
51 
52  """
53  if self.is_indicator_icon_visible():
54  return self._main_window.open_indicator_page(
55  'indicator-rotation-lock')
56  else:
57  return self._open_indicator_with_icon_not_visible()
58 
59  def _open_indicator_with_icon_not_visible(self):
60  # Open any displayed indicator.
61  self._main_window.open_indicator_page('indicator-datetime')
62  self._make_indicator_icon_visible()
63  indicator_rotation_icon = self._main_window.select_single(
64  objectName='indicator-rotation-lock-panelItem')
65  self._main_window.pointing_device.click_object(indicator_rotation_icon)
66  return self._main_window.wait_select_single(
67  objectName='indicator-rotation-lock-page')
68 
69  def _make_indicator_icon_visible(self):
70  indicators_bar_flickable = self._main_window.select_single(
71  'IndicatorsBar').select_single(
72  ubuntuuitoolkit.QQuickFlickable, objectName='flickable')
73  self._swipe_flickable_to_x_end(indicators_bar_flickable)
74 
75  def _swipe_flickable_to_x_end(self, flickable):
76  # XXX this should be implemented as a general horizontal swiping in
77  # the toolkit custom proxy object. -- elopio - 2015-01-20
78  if not flickable.atXEnd:
79  while not flickable.atXEnd:
80  start_y = stop_y = (
81  flickable.globalRect.y +
82  (flickable.globalRect.height // 2))
83  # We can't start the swipe from the border because it would
84  # open the launcher
85  start_x = flickable.globalRect.x + 45
86  stop_x = (
87  flickable.globalRect.x + flickable.globalRect.width - 5)
88  flickable.pointing_device.drag(
89  start_x, start_y, stop_x, stop_y)
90  flickable.dragging.wait_for(False)
91  flickable.moving.wait_for(False)
92 
93  def close(self):
94  """Close the indicator page."""
95  self._main_window.close_indicator_page()
96 
97 
99 
100  """Autopilot helper for the display indicator page."""
101 
102  @classmethod
103  def validate_dbus_object(cls, path, state):
104  name = introspection.get_classname_from_path(path)
105  if name == b'IndicatorPage':
106  if state['objectName'][1] == 'indicator-rotation-lock-page':
107  return True
108  return False
109 
110  def lock_rotation(self):
111  """Toggle the rotation lock indicator to locked."""
112  switcher = self._get_switcher()
113  switcher.check()
114  switcher.checked.wait_for(True)
115 
116  def _get_switcher(self):
117  return self.select_single(
118  ubuntuuitoolkit.CheckBox, objectName='switcher')
119 
120  def unlock_rotation(self):
121  """Toggle the rotation lock indicator to unlocked."""
122  switcher = self._get_switcher()
123  switcher.uncheck()
124  switcher.checked.wait_for(False)