Merge lp:~elopio/ubuntu-ui-toolkit/slider-autopilot_helper into lp:ubuntu-ui-toolkit/staging

Proposed by Leo Arias
Status: Work in progress
Proposed branch: lp:~elopio/ubuntu-ui-toolkit/slider-autopilot_helper
Merge into: lp:ubuntu-ui-toolkit/staging
Prerequisite: lp:~elopio/ubuntu-ui-toolkit/clean_gallery_tests2
Diff against target: 356 lines (+282/-1)
6 files modified
modules/Ubuntu/Components/Themes/Ambiance/SliderStyle.qml (+4/-1)
tests/autopilot/ubuntuuitoolkit/__init__.py (+2/-0)
tests/autopilot/ubuntuuitoolkit/_custom_proxy_objects/__init__.py (+2/-0)
tests/autopilot/ubuntuuitoolkit/_custom_proxy_objects/_slider.py (+81/-0)
tests/autopilot/ubuntuuitoolkit/tests/custom_proxy_objects/test_slider.SliderTestCase.qml (+32/-0)
tests/autopilot/ubuntuuitoolkit/tests/custom_proxy_objects/test_slider.py (+161/-0)
To merge this branch: bzr merge lp:~elopio/ubuntu-ui-toolkit/slider-autopilot_helper
Reviewer Review Type Date Requested Status
PS Jenkins bot continuous-integration Needs Fixing
Chris Gagnon (community) Needs Fixing
Brendan Donegan (community) Needs Fixing
Ubuntu SDK team Pending
Review via email: mp+222311@code.launchpad.net

This proposal supersedes a proposal from 2014-06-06.

Commit message

Added the autopilot helper for Sliders.

To post a comment you must log in.
Revision history for this message
Brendan Donegan (brendan-donegan) wrote :

Don't leave todo's in the code

review: Needs Fixing
Revision history for this message
Leo Arias (elopio) wrote :

> Don't leave todo's in the code

Right, I forgot about it. Thanks.

Revision history for this message
Chris Gagnon (chris.gagnon) wrote :

This is redundant and should be combined/renamed to save the time it takes to run the tests

298 + ('positive value', {'value': 5}),
299 + ('negative value', {'value': -5}),
300 + ('minimum value', {'value': -10}),
301 + ('maximum value', {'value': 10}),

Revision history for this message
Chris Gagnon (chris.gagnon) :
review: Needs Fixing
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :

FAILED: Continuous integration, rev:1099
http://jenkins.qa.ubuntu.com/job/ubuntu-sdk-team-ubuntu-ui-toolkit-staging-ci/355/
Executed test runs:
    UNSTABLE: http://jenkins.qa.ubuntu.com/job/generic-deb-autopilot-utopic-touch/727
    UNSTABLE: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-utopic/671
    SUCCESS: http://jenkins.qa.ubuntu.com/job/ubuntu-sdk-team-ubuntu-ui-toolkit-staging-utopic-amd64-ci/187
    SUCCESS: http://jenkins.qa.ubuntu.com/job/ubuntu-sdk-team-ubuntu-ui-toolkit-staging-utopic-armhf-ci/187
        deb: http://jenkins.qa.ubuntu.com/job/ubuntu-sdk-team-ubuntu-ui-toolkit-staging-utopic-armhf-ci/187/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/ubuntu-sdk-team-ubuntu-ui-toolkit-staging-utopic-i386-ci/187
    UNSTABLE: http://jenkins.qa.ubuntu.com/job/generic-deb-autopilot-runner-mako/1156
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-utopic-armhf/1368
        deb: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-utopic-armhf/1368/artifact/work/output/*zip*/output.zip
    SUCCESS: http://s-jenkins.ubuntu-ci:8080/job/touch-flash-device/8185
    UNSTABLE: http://jenkins.qa.ubuntu.com/job/autopilot-testrunner-otto-utopic/598
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-utopic-amd64/810
        deb: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-utopic-amd64/810/artifact/work/output/*zip*/output.zip

Click here to trigger a rebuild:
http://s-jenkins.ubuntu-ci:8080/job/ubuntu-sdk-team-ubuntu-ui-toolkit-staging-ci/355/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
Leo Arias (elopio) wrote :

Interesting, mako selects almost all the correct values. Back to the workshop.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :

FAILED: Continuous integration, rev:1101
http://jenkins.qa.ubuntu.com/job/ubuntu-sdk-team-ubuntu-ui-toolkit-staging-ci/356/
Executed test runs:
    UNSTABLE: http://jenkins.qa.ubuntu.com/job/generic-deb-autopilot-utopic-touch/733
    UNSTABLE: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-utopic/677
    SUCCESS: http://jenkins.qa.ubuntu.com/job/ubuntu-sdk-team-ubuntu-ui-toolkit-staging-utopic-amd64-ci/188
    SUCCESS: http://jenkins.qa.ubuntu.com/job/ubuntu-sdk-team-ubuntu-ui-toolkit-staging-utopic-armhf-ci/188
        deb: http://jenkins.qa.ubuntu.com/job/ubuntu-sdk-team-ubuntu-ui-toolkit-staging-utopic-armhf-ci/188/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/ubuntu-sdk-team-ubuntu-ui-toolkit-staging-utopic-i386-ci/188
    UNSTABLE: http://jenkins.qa.ubuntu.com/job/generic-deb-autopilot-runner-mako/1163
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-utopic-armhf/1377
        deb: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-utopic-armhf/1377/artifact/work/output/*zip*/output.zip
    SUCCESS: http://s-jenkins.ubuntu-ci:8080/job/touch-flash-device/8193
    UNSTABLE: http://jenkins.qa.ubuntu.com/job/autopilot-testrunner-otto-utopic/604
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-utopic-amd64/816
        deb: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-utopic-amd64/816/artifact/work/output/*zip*/output.zip

Click here to trigger a rebuild:
http://s-jenkins.ubuntu-ci:8080/job/ubuntu-sdk-team-ubuntu-ui-toolkit-staging-ci/356/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
1104. By Leo Arias

Merged with staging.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :

FAILED: Continuous integration, rev:1104
http://jenkins.qa.ubuntu.com/job/ubuntu-sdk-team-ubuntu-ui-toolkit-staging-ci/472/
Executed test runs:
    UNSTABLE: http://jenkins.qa.ubuntu.com/job/generic-deb-autopilot-utopic-touch/1223
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-utopic/1088
    SUCCESS: http://jenkins.qa.ubuntu.com/job/ubuntu-sdk-team-ubuntu-ui-toolkit-staging-utopic-amd64-ci/304
    SUCCESS: http://jenkins.qa.ubuntu.com/job/ubuntu-sdk-team-ubuntu-ui-toolkit-staging-utopic-armhf-ci/304
        deb: http://jenkins.qa.ubuntu.com/job/ubuntu-sdk-team-ubuntu-ui-toolkit-staging-utopic-armhf-ci/304/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/ubuntu-sdk-team-ubuntu-ui-toolkit-staging-utopic-i386-ci/304
    UNSTABLE: http://jenkins.qa.ubuntu.com/job/generic-deb-autopilot-runner-mako/1551
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-utopic-armhf/2104
        deb: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-utopic-armhf/2104/artifact/work/output/*zip*/output.zip
    SUCCESS: http://s-jenkins.ubuntu-ci:8080/job/touch-flash-device/8867
    SUCCESS: http://jenkins.qa.ubuntu.com/job/autopilot-testrunner-otto-utopic/902
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-utopic-amd64/1231
        deb: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-utopic-amd64/1231/artifact/work/output/*zip*/output.zip

Click here to trigger a rebuild:
http://s-jenkins.ubuntu-ci:8080/job/ubuntu-sdk-team-ubuntu-ui-toolkit-staging-ci/472/rebuild

review: Needs Fixing (continuous-integration)
1105. By Leo Arias

Merged with staging.

1106. By Leo Arias

Use the device simulation scenarios to reproduce slider problems.

Unmerged revisions

1106. By Leo Arias

Use the device simulation scenarios to reproduce slider problems.

1105. By Leo Arias

Merged with staging.

1104. By Leo Arias

Merged with staging.

1103. By Leo Arias

Changed the way we check for values not selectable, first try to select them.

1102. By Leo Arias

Merged with staging.

1101. By Leo Arias

Added a test for a negative float.

1100. By Leo Arias

Removed the TODOs.

1099. By Leo Arias

Added the docstring and logging.

1098. By Leo Arias

Added the last part of tests and checks to the slider helper.

1097. By Leo Arias

Fixed pep8.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'modules/Ubuntu/Components/Themes/Ambiance/SliderStyle.qml'
2--- modules/Ubuntu/Components/Themes/Ambiance/SliderStyle.qml 2014-04-23 08:50:20 +0000
3+++ modules/Ubuntu/Components/Themes/Ambiance/SliderStyle.qml 2014-07-16 05:06:34 +0000
4@@ -1,5 +1,5 @@
5 /*
6- * Copyright 2013 Canonical Ltd.
7+ * Copyright 2013, 2014 Canonical Ltd.
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU Lesser General Public License as published by
11@@ -35,6 +35,8 @@
12
13 UbuntuShape {
14 id: background
15+ objectName: 'sliderBar'
16+
17 anchors {
18 verticalCenter: parent.verticalCenter
19 right: parent.right
20@@ -56,6 +58,7 @@
21
22 UbuntuShape {
23 id: thumb
24+ objectName: 'sliderThumb'
25
26 anchors {
27 verticalCenter: parent.verticalCenter
28
29=== modified file 'tests/autopilot/ubuntuuitoolkit/__init__.py'
30--- tests/autopilot/ubuntuuitoolkit/__init__.py 2014-07-07 14:43:52 +0000
31+++ tests/autopilot/ubuntuuitoolkit/__init__.py 2014-07-16 05:06:34 +0000
32@@ -35,6 +35,7 @@
33 'popups',
34 'QQuickFlickable',
35 'QQuickListView',
36+ 'Slider',
37 'TabBar',
38 'Tabs',
39 'tests',
40@@ -69,6 +70,7 @@
41 popups,
42 QQuickFlickable,
43 QQuickListView,
44+ Slider,
45 TabBar,
46 Tabs,
47 TextField,
48
49=== modified file 'tests/autopilot/ubuntuuitoolkit/_custom_proxy_objects/__init__.py'
50--- tests/autopilot/ubuntuuitoolkit/_custom_proxy_objects/__init__.py 2014-06-30 10:49:51 +0000
51+++ tests/autopilot/ubuntuuitoolkit/_custom_proxy_objects/__init__.py 2014-07-16 05:06:34 +0000
52@@ -31,6 +31,7 @@
53 'popups',
54 'QQuickFlickable',
55 'QQuickListView',
56+ 'Slider',
57 'TabBar',
58 'Tabs',
59 'TextField',
60@@ -63,6 +64,7 @@
61 from ubuntuuitoolkit._custom_proxy_objects._qquicklistview import (
62 QQuickListView
63 )
64+from ubuntuuitoolkit._custom_proxy_objects._slider import Slider
65 from ubuntuuitoolkit._custom_proxy_objects._tabbar import TabBar
66 from ubuntuuitoolkit._custom_proxy_objects._tabs import Tabs
67 from ubuntuuitoolkit._custom_proxy_objects._textfield import TextField
68
69=== added file 'tests/autopilot/ubuntuuitoolkit/_custom_proxy_objects/_slider.py'
70--- tests/autopilot/ubuntuuitoolkit/_custom_proxy_objects/_slider.py 1970-01-01 00:00:00 +0000
71+++ tests/autopilot/ubuntuuitoolkit/_custom_proxy_objects/_slider.py 2014-07-16 05:06:34 +0000
72@@ -0,0 +1,81 @@
73+# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
74+#
75+# Copyright (C) 2014 Canonical Ltd.
76+#
77+# This program is free software; you can redistribute it and/or modify
78+# it under the terms of the GNU Lesser General Public License as published by
79+# the Free Software Foundation; version 3.
80+#
81+# This program is distributed in the hope that it will be useful,
82+# but WITHOUT ANY WARRANTY; without even the implied warranty of
83+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
84+# GNU Lesser General Public License for more details.
85+#
86+# You should have received a copy of the GNU Lesser General Public License
87+# along with this program. If not, see <http://www.gnu.org/licenses/>.
88+
89+import logging
90+
91+import autopilot.logging
92+
93+from ubuntuuitoolkit._custom_proxy_objects import _common
94+
95+
96+logger = logging.getLogger(__name__)
97+
98+
99+class Slider(_common.UbuntuUIToolkitCustomProxyObjectBase):
100+ """Autopilot helper for the Slider."""
101+
102+ @autopilot.logging.log_action(logger.info)
103+ def select_value(self, value):
104+ """Select a value from the slider.
105+
106+ :param value: The value to select.
107+ :raises ubuntuuitoolkit.ToolkitException: if the value is below the
108+ minimum or above the minimum, and if the value is not selectable.
109+
110+ """
111+ if value < self.minimumValue:
112+ raise _common.ToolkitException(
113+ 'The value is lower than the minimum permitted by the slider.')
114+ elif value > self.maximumValue:
115+ raise _common.ToolkitException(
116+ 'The value is higher than the maximum permitted by the '
117+ 'slider.')
118+ else:
119+ self._set_valid_value(value)
120+
121+ def _set_valid_value(self, value):
122+ x, y = self._get_value_point_in_bar(value)
123+ self.pointing_device.move(round(x), round(y))
124+ self.pointing_device.click()
125+ if self.value != value:
126+ raise _common.ToolkitException(
127+ 'The value is not selectable on the slider.')
128+
129+ def _get_value_point_in_bar(self, value):
130+ bar_start, bar_end = self._get_bar_start_and_end()
131+ # We have two points: (min, bar_start) and (max, bar_end).
132+ # With that we can use linear interpolation to get the x coordinate to
133+ # click.
134+ p_x_from_slider = (
135+ bar_start +
136+ (bar_end - bar_start) *
137+ (value - self.minimumValue) /
138+ (self.maximumValue - self.minimumValue))
139+ p_x = p_x_from_slider + self.globalRect.x
140+ # The point to click on the y coordinate is the center of the slider.
141+ p_y = self.globalRect.y + self.globalRect.height // 2
142+ return p_x, p_y
143+
144+ def _get_bar_start_and_end(self):
145+ # We subtract from the bar width the width of the thumb because the
146+ # center of the thumb never reaches the start or the end of the bar,
147+ # so we have to scale down the range of values that we can select.
148+ thumb = self.select_single(objectName='sliderThumb')
149+ half_thumb_width = thumb.globalRect.width / 2
150+ bar = self.select_single(objectName='sliderBar')
151+ bar_start = half_thumb_width
152+ bar_end = bar.globalRect.width - half_thumb_width
153+ return bar_start, bar_end
154
155=== added file 'tests/autopilot/ubuntuuitoolkit/tests/custom_proxy_objects/test_slider.SliderTestCase.qml'
156--- tests/autopilot/ubuntuuitoolkit/tests/custom_proxy_objects/test_slider.SliderTestCase.qml 1970-01-01 00:00:00 +0000
157+++ tests/autopilot/ubuntuuitoolkit/tests/custom_proxy_objects/test_slider.SliderTestCase.qml 2014-07-16 05:06:34 +0000
158@@ -0,0 +1,32 @@
159+/*
160+ * Copyright 2014 Canonical Ltd.
161+ *
162+ * This program is free software; you can redistribute it and/or modify
163+ * it under the terms of the GNU Lesser General Public License as published by
164+ * the Free Software Foundation; version 3.
165+ *
166+ * This program is distributed in the hope that it will be useful,
167+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
168+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
169+ * GNU Lesser General Public License for more details.
170+ *
171+ * You should have received a copy of the GNU Lesser General Public License
172+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
173+ */
174+
175+import QtQuick 2.0
176+import Ubuntu.Components 1.1
177+
178+MainView {
179+
180+ width: units.gu(48)
181+ height: units.gu(60)
182+
183+ Slider {
184+ objectName: 'testSlider'
185+
186+ minimumValue: -10
187+ maximumValue: 10
188+ value: 0.0
189+ }
190+}
191
192=== added file 'tests/autopilot/ubuntuuitoolkit/tests/custom_proxy_objects/test_slider.py'
193--- tests/autopilot/ubuntuuitoolkit/tests/custom_proxy_objects/test_slider.py 1970-01-01 00:00:00 +0000
194+++ tests/autopilot/ubuntuuitoolkit/tests/custom_proxy_objects/test_slider.py 2014-07-16 05:06:34 +0000
195@@ -0,0 +1,161 @@
196+# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
197+#
198+# Copyright (C) 2014 Canonical Ltd.
199+#
200+# This program is free software; you can redistribute it and/or modify
201+# it under the terms of the GNU Lesser General Public License as published by
202+# the Free Software Foundation; version 3.
203+#
204+# This program is distributed in the hope that it will be useful,
205+# but WITHOUT ANY WARRANTY; without even the implied warranty of
206+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
207+# GNU Lesser General Public License for more details.
208+#
209+# You should have received a copy of the GNU Lesser General Public License
210+# along with this program. If not, see <http://www.gnu.org/licenses/>.
211+
212+import os
213+
214+try:
215+ from unittest import mock
216+except ImportError:
217+ import mock
218+
219+import testscenarios
220+from autopilot.matchers import Eventually
221+from testtools.matchers import Equals
222+
223+import ubuntuuitoolkit
224+from ubuntuuitoolkit import fixture_setup, ubuntu_scenarios
225+
226+
227+class BaseSliderTestCase(ubuntuuitoolkit.tests.QMLFileAppTestCase):
228+
229+ path = os.path.abspath(__file__)
230+ dir_path = os.path.dirname(path)
231+ test_qml_file_path = os.path.join(
232+ dir_path, 'test_slider.SliderTestCase.qml')
233+
234+ def setUp(self):
235+ super(BaseSliderTestCase, self).setUp()
236+ # The test slider has a minimum value = -10, maximum value = 10 and
237+ # starts with value = 0.
238+ self.slider = self.main_view.select_single(
239+ ubuntuuitoolkit.Slider, objectName='testSlider')
240+
241+
242+class SliderCustomProxyObjectTestCase(BaseSliderTestCase):
243+
244+ def test_get_slider_must_return_custom_proxy_object(self):
245+ """Test the type of the returned object after selecting the slider.
246+
247+ It must be the custom proxy object for the Slider.
248+
249+ """
250+ self.assertIsInstance(self.slider, ubuntuuitoolkit.Slider)
251+
252+ def test_select_value_below_minimum_must_raise_exception(self):
253+ """Test to select a value that is below the slider minimum.
254+
255+ It must raise a ToolkitException.
256+
257+ """
258+ error = self.assertRaises(
259+ ubuntuuitoolkit.ToolkitException, self.slider.select_value, -15)
260+ self.assertEqual(
261+ 'The value is lower than the minimum permitted by the slider.',
262+ str(error))
263+
264+ def test_select_value_above_maximum_must_raise_exception(self):
265+ """Test to select a value that is above the slider maximum.
266+
267+ It must raise a ToolkitException.
268+
269+ """
270+ error = self.assertRaises(
271+ ubuntuuitoolkit.ToolkitException, self.slider.select_value, 15)
272+ self.assertEqual(
273+ 'The value is higher than the maximum permitted by the slider.',
274+ str(error))
275+
276+ def test_select_current_value_must_do_nothing(self):
277+ """Test selecting the current value on the slider.
278+
279+ The value must be kept the same and the slider should not be touched.
280+
281+ """
282+ with mock.patch.object(self.slider, 'pointing_device') as mock_device:
283+ self.slider.select_value(0)
284+
285+ self.assertFalse(mock_device.called)
286+ self.assertEqual(self.slider.value, 0)
287+
288+ def test_select_value_not_selectable_must_raise_exception(self):
289+ """Test selecting a value that's not selectable with the thumb.
290+
291+ It must raise a ubuntuuitoolkit.ToolkitException.
292+
293+ """
294+ error = self.assertRaises(
295+ ubuntuuitoolkit.ToolkitException, self.slider.select_value, 2.2222)
296+ self.assertEqual(
297+ 'The value is not selectable on the slider.', str(error))
298+
299+
300+class SelectSliderValueTestCase(BaseSliderTestCase):
301+
302+ value_scenarios = [
303+ ('positive value', {'value': 5}),
304+ ('negative value', {'value': -5}),
305+ ('minimum value', {'value': -10}),
306+ ('maximum value', {'value': 10}),
307+ ('positive float value', {'value': 2.152777777777777}),
308+ ('negative float value', {'value': -1.1805555555555554}),
309+ ]
310+ scenarios = testscenarios.multiply_scenarios(
311+ ubuntu_scenarios.get_device_simulation_scenarios(),
312+ value_scenarios)
313+
314+ def setUp(self):
315+ if self.should_simulate_device():
316+ # Hide the Unity7 launcher because it takes space that might be
317+ # needed by the app with the simulated size.
318+ self.useFixture(fixture_setup.HideUnity7Launcher())
319+ # This sets the grid units, so it should be called before launching
320+ # the app.
321+ self.simulate_device()
322+ super(SelectSliderValueTestCase, self).setUp()
323+
324+ if self.should_simulate_device():
325+ # XXX Currently we have no way to launch the application with a
326+ # specific size, so we must resize it after it's launched.
327+ # --elopio - 2014-06-25
328+ self.resize_window()
329+
330+ def should_simulate_device(self):
331+ return (hasattr(self, 'app_width') and hasattr(self, 'app_height') and
332+ hasattr(self, 'grid_unit_px'))
333+
334+ def simulate_device(self):
335+ simulate_device_fixture = self.useFixture(fixture_setup.SimulateDevice(
336+ self.app_width, self.app_height, self.grid_unit_px))
337+ self.app_width = simulate_device_fixture.app_width
338+ self.app_height = simulate_device_fixture.app_height
339+
340+ def resize_window(self):
341+ application = self.process_manager.get_running_applications()[0]
342+ window = application.get_windows()[0]
343+ window.resize(self.app_width, self.app_height)
344+
345+ def get_window_size():
346+ _, _, window_width, window_height = window.geometry
347+ return window_width, window_height
348+
349+ self.assertThat(
350+ get_window_size,
351+ Eventually(Equals((self.app_width, self.app_height))))
352+
353+ def test_select_valid_value_must_update_slider_value(self):
354+ """Test that selecting a valid value on the slider must update it."""
355+ self.slider.select_value(self.value)
356+ self.assertEqual(self.slider.value, self.value)

Subscribers

People subscribed via source and target branches