17
17
from ubuntuuitoolkit import emulators as toolkit_emulators
18
18
from autopilot.matchers import Eventually
19
19
from testtools.matchers import Not, Is, Equals
20
from time import sleep
22
23
class MainView(toolkit_emulators.MainView):
25
def _drag_page(self, page, test_case, direction):
26
page_func = lambda: self.select_single(page)
27
test_case.assertThat(page_func, Eventually(Not(Is(None))))
28
page = self.select_single(page)
30
x, y, w, h = page.globalRect
34
if direction == "down":
35
self.pointing_device.drag(tx, ty, tx, ty + h / 3)
37
self.pointing_device.drag(tx, ty, tx, ty - h / 3)
39
test_case.assertThat(lambda: page.select_single(
40
"QQuickFlickable").moving,
41
Eventually(Equals(False)))
43
def drag_page_up(self, page, test_case):
44
"""Drag the given page up."""
45
self._drag_page(page, test_case, "up")
47
def drag_page_down(self, page, test_case):
48
"""Drag the given page down."""
49
self._drag_page(page, test_case, "down")
51
def longpress_object(self, obj):
52
self.pointing_device.move_to_object(obj)
53
self.pointing_device.press()
55
self.pointing_device.release()
23
58
def get_stopwatch_label(self):
24
59
"""Returns the select for the stopwatch label"""
25
60
return self.select_single("Label", objectName="labelStopwatch")
27
62
def get_stopwatch_button(self):
28
63
"""Returns the select for the stopwatch button"""
29
return self.select_single("AnalogStopwatch", objectName="buttonStopwatch")
64
return self.select_single("AnalogStopwatch",
65
objectName="buttonStopwatch")
31
67
def get_lap_button(self):
32
68
"""Returns the select for the lap button"""
93
125
"""Return the label with the timer countdown"""
94
126
return self.select_single("Label", objectName="currentTimeLabel")
128
def get_num_of_presets(self):
129
"""Returns the number of presets in the timer page."""
130
timer_page = self.select_single("TimerPage")
131
return int(timer_page.select_single("QQuickListView").count)
134
def get_addalarm_page(self):
135
"""Returns the add alarm page object"""
136
return self.select_single("Page", objectName="addAlarmPage")
138
def get_alarm_page(self):
139
"""Returns the alarm page object"""
140
return self.select_single("AlarmPage")
142
def get_alarm_name_label(self):
143
"""Returns the TextField where insert the name of the preset"""
144
return self.select_single("TextField", objectName="addAlarmName")
146
def get_label_alarm(self):
147
"""Return the label with the alarm"""
148
return self.select_single("Label", objectName="labelAlarmSetup")
150
def get_num_of_alarms(self):
151
"""Returns the number of alarms in the alarm page."""
152
listview = self.select_single("QQuickListView",
153
objectName="listSavedAlarm")
154
#each alarm has 3 labels
155
return len(listview.select_many("Label", visible=True)) / 3
157
#TODO: QQuickListView.count does not work as expected
158
#fix once this is working properly and use it
160
#TODO: all of the get_first functions need to
161
#be refactored where possible to get X item, not
164
def get_first_alarm_list_item(self):
165
"""Returns the first alarm list item in the alarm page."""
166
listview = self.select_single("QQuickListView",
167
objectName="listSavedAlarm")
168
return listview.select_many("Base")[0]
170
def toggle_first_alarm(self, test_case):
171
"""Toggles the alarm on and off in the alarm page."""
172
alarm = self.select_single("CheckBox",
173
objectName="listAlarmStatus")
174
self.pointing_device.click_object(alarm)
176
test_case.assertThat(lambda: self.get_alarm_page().select_single(
177
"QQuickFlickable").moving,
178
Eventually(Equals(False)))
180
def get_first_alarm_time(self):
181
"""Gets the first alarm time in the alarm page."""
182
alarm = self.get_first_alarm_list_item()
183
return alarm.select_single("Label",
184
objectName="listAlarmTime").text
186
def get_first_alarm_subtitle(self):
187
"""Gets the first alarm subtitle in the alarm page."""
188
alarm = self.get_first_alarm_list_item()
189
return alarm.select_single("Label",
190
objectName="listAlarmSubtitle").text
192
def get_first_alarm_label(self):
193
"""Gets the first alarm label in the alarm page."""
194
alarm = self.get_first_alarm_list_item()
195
return alarm.select_single("Label",
196
objectName="listAlarmLabel").text
198
def get_first_alarm_status(self):
199
"""Gets the first alarm checkbox status in the alarm page."""
200
alarm = self.get_first_alarm_list_item()
201
return alarm.select_single("CheckBox",
202
objectName="listAlarmStatus").checked
204
def get_alarm_minute_hand(self):
205
"""Returns the hour hand of clock in alarm tab"""
206
return self.select_single("AnalogClockHand",
207
objectName="alarmMinuteHand")
209
def get_alarm_hour_hand(self):
210
"""Returns the hour hand of clock in alarm tab"""
211
return self.select_single("AnalogClockHand",
212
objectName="alarmHourHand")
214
def set_alarm_week(self, day, test_case):
215
#TODO: add support for setting days of week
216
dayselectDialog = self.select_single("Dialog",
217
objectName="alarmDaysDialog")
219
return dayselectDialog
221
def _retry_selector_assert(self, clickobj, selector, status, test_case):
222
test_case.assertThat(lambda: self.get_alarm_page().select_single(
223
"QQuickFlickable").moving,
224
Eventually(Equals(False)))
226
test_case.assertThat(lambda: selector.select_single(
227
"OptionSelectorDelegate", selected=True),
228
Eventually(Not(Is(None))))
230
option = selector.select_single("OptionSelectorDelegate",
232
while option != status and timeout < 10:
233
self.pointing_device.click_object(clickobj)
234
option = selector.select_single("OptionSelectorDelegate",
239
test_case.assertThat(lambda: self.get_alarm_page().select_single(
240
"QQuickFlickable").moving,
241
Eventually(Equals(False)))
243
def set_alarm_day(self, day, test_case):
244
select = self.select_single("OptionSelector",
245
objectName="OccursSelector")
246
occur = select.select_single("StyledItem", objectName="listContainer")
247
#optionslist = occur.select_single("OptionSelectorDelegate",
249
occurlist = occur.select_many("Label", visible=True)
251
self.pointing_device.click_object(select)
252
self._retry_selector_assert(select, occur,
253
"dividerExpanded", test_case)
255
self.drag_page_up("AlarmPage", test_case)
256
self.pointing_device.click_object(occurlist[day])
257
self._retry_selector_assert(select, occur,
258
"dividerCollapsed", test_case)
261
#TODO: clock doesn't put things in in the proper order atm
262
#test_case.assertThat(lambda: self.select_single("OptionSelector",
263
# objectName="OccursSelector").selectedIndex+1,
264
# Eventually(Equals(day)))
266
def set_alarm_frequency(self, occurence, test_case):
267
select = self.select_single("OptionSelector",
268
objectName="RepeatSelector")
269
repeat = select.select_single("StyledItem",
270
objectName="listContainer")
271
#optionslist = occur.select_single("OptionSelectorDelegate",
273
repeatlist = repeat.select_many("Label", visible=True)
275
self.pointing_device.click_object(repeat)
276
self._retry_selector_assert(select, repeat,
277
"dividerExpanded", test_case)
279
self.drag_page_up("AlarmPage", test_case)
280
self.pointing_device.click_object(repeatlist[occurence])
281
self._retry_selector_assert(select, repeat,
282
"dividerCollapsed", test_case)
285
test_case.assertThat(lambda: self.select_single(
286
"OptionSelector", objectName="RepeatSelector").selectedIndex+1,
287
Eventually(Equals(occurence)))
96
290
def get_add_city_button(self):
97
291
"""Return the button for adding a new clock location."""
98
292
return self.select_single(