Merge lp:~zsombi/ubuntu-ui-toolkit/datepicker-fix1287009 into lp:ubuntu-ui-toolkit

Proposed by Zsombor Egri
Status: Merged
Approved by: Cris Dywan
Approved revision: 971
Merged at revision: 968
Proposed branch: lp:~zsombi/ubuntu-ui-toolkit/datepicker-fix1287009
Merge into: lp:ubuntu-ui-toolkit
Diff against target: 952 lines (+227/-150)
12 files modified
components.api (+3/-0)
modules/Ubuntu/Components/Pickers/DatePicker.qml (+16/-0)
modules/Ubuntu/Components/Pickers/Picker.qml (+66/-0)
modules/Ubuntu/Components/Pickers/PickerDelegate.qml (+1/-1)
modules/Ubuntu/Components/Pickers/PickerModelBase.qml (+8/-1)
modules/Ubuntu/Components/Pickers/PickerRow.qml (+46/-3)
modules/Ubuntu/Components/Pickers/SecondsModel.qml (+2/-2)
modules/Ubuntu/Components/Themes/Ambiance/PickerDelegateStyle.qml (+1/-1)
modules/Ubuntu/Components/plugin/quickutils.cpp (+3/-0)
tests/resources/pickers/DatePickerTest.qml (+5/-0)
tests/resources/pickers/PickerTest.qml (+6/-0)
tests/unit_x11/tst_components/tst_datepicker.qml (+70/-142)
To merge this branch: bzr merge lp:~zsombi/ubuntu-ui-toolkit/datepicker-fix1287009
Reviewer Review Type Date Requested Status
Cris Dywan Approve
PS Jenkins bot continuous-integration Approve
Timo Jyrinki Approve
Review via email: mp+209641@code.launchpad.net

Commit message

DatePicker flaky test fix.

To post a comment you must log in.
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
Revision history for this message
Timo Jyrinki (timo-jyrinki) wrote :
review: Approve
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
Revision history for this message
Cris Dywan (kalikiana) wrote :

I'm liking waitPickerMoving and your use of the loader status. So much cleaner and keeps the tests readable.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'components.api'
--- components.api 2014-03-04 13:01:20 +0000
+++ components.api 2014-03-06 14:36:38 +0000
@@ -271,6 +271,7 @@
271 readonly property int minutes271 readonly property int minutes
272 readonly property int seconds272 readonly property int seconds
273 property var locale273 property var locale
274 readonly property bool moving
274modules/Ubuntu/Components/Pickers/Dialer.qml275modules/Ubuntu/Components/Pickers/Dialer.qml
275StyledItem276StyledItem
276 property real minimumValue277 property real minimumValue
@@ -296,6 +297,8 @@
296 property Component delegate297 property Component delegate
297 property int selectedIndex298 property int selectedIndex
298 property bool live299 property bool live
300 readonly property bool moving
301 function positionViewAtIndex(index)
299 property int __clickedIndex302 property int __clickedIndex
300modules/Ubuntu/Components/Pickers/PickerDelegate.qml303modules/Ubuntu/Components/Pickers/PickerDelegate.qml
301AbstractButton304AbstractButton
302305
=== modified file 'modules/Ubuntu/Components/Pickers/DatePicker.qml'
--- modules/Ubuntu/Components/Pickers/DatePicker.qml 2014-01-10 15:33:02 +0000
+++ modules/Ubuntu/Components/Pickers/DatePicker.qml 2014-03-06 14:36:38 +0000
@@ -292,6 +292,14 @@
292 */292 */
293 property var locale: Qt.locale()293 property var locale: Qt.locale()
294294
295 /*!
296 \qmlproperty bool moving
297 \readonly
298 The property holds whether the component's pickers are moving.
299 \sa Picker::moving
300 */
301 readonly property alias moving: positioner.moving
302
295 implicitWidth: units.gu(36)303 implicitWidth: units.gu(36)
296 implicitHeight: units.gu(20)304 implicitHeight: units.gu(20)
297305
@@ -453,6 +461,13 @@
453 */461 */
454 id: tumblerModel462 id: tumblerModel
455463
464 /*
465 Signal triggered when the model is about to remove a picker. We cannot rely on
466 rowAboutToBeRemoved, as by the time the signal is called the list element is
467 already removed from the model.
468 */
469 signal pickerRemoved(int index)
470
456 // the function checks whether a pickerModel was added or not471 // the function checks whether a pickerModel was added or not
457 // returns the index of the model object the pickerModel was found472 // returns the index of the model object the pickerModel was found
458 // or -1 on error.473 // or -1 on error.
@@ -480,6 +495,7 @@
480 function removePicker(name) {495 function removePicker(name) {
481 var idx = pickerModelIndex(name);496 var idx = pickerModelIndex(name);
482 if (idx >= 0) {497 if (idx >= 0) {
498 pickerRemoved(idx);
483 remove(idx);499 remove(idx);
484 }500 }
485 }501 }
486502
=== modified file 'modules/Ubuntu/Components/Pickers/Picker.qml'
--- modules/Ubuntu/Components/Pickers/Picker.qml 2013-12-10 19:28:19 +0000
+++ modules/Ubuntu/Components/Pickers/Picker.qml 2014-03-06 14:36:38 +0000
@@ -121,6 +121,40 @@
121 */121 */
122 property bool live: false122 property bool live: false
123123
124 /*!
125 The property holds whether the picker's view is moving due to the user
126 interaction either by dragging, flicking or due to the manual change of
127 the selectedIndex property.
128 */
129 readonly property bool moving: (loader.item ? loader.item.moving : false) || movingPoll.indexChanging
130
131 /*!
132 The function positions the picker's view to the given index without animating
133 the view. The component must be ready when calling the function, e.g. to make
134 sure the Picker shows up at the given index, do the following:
135 \qml
136 Picker {
137 model: 120
138 delegate: PickerDelegate {
139 Label {
140 anchors.fill: parent
141 verticalCenter: Text.AlignVCenter
142 text: modelData
143 }
144 }
145 Component.onCompleted: positionViewAtIndex(10)
146 }
147 \endqml
148 */
149 function positionViewAtIndex(index) {
150 if (!loader.item || !internals.completed) {
151 return;
152 }
153 loader.item.positionViewAtIndex(index, loader.isListView ? ListView.SnapPosition : PathView.SnapPosition);
154 // update selectedIndex
155 selectedIndex = loader.item.currentIndex;
156 }
157
124 implicitWidth: units.gu(8)158 implicitWidth: units.gu(8)
125 implicitHeight: units.gu(20)159 implicitHeight: units.gu(20)
126160
@@ -137,6 +171,34 @@
137 when: __styleInstance.hasOwnProperty("view") && loader.item171 when: __styleInstance.hasOwnProperty("view") && loader.item
138 }172 }
139173
174 /*
175 ListView/PathView do not change moding property when the current index is
176 changed manually. Therefore we use an idle timer to poll the contentY to
177 detect whether the views are still moving.
178 PathView's currentIndex changes while the component is moving, however this
179 is not true for ListView.
180 */
181 Timer {
182 id: movingPoll
183 interval: 50
184 running: false
185 property bool indexChanging: false
186 property real prevContentY
187 onTriggered: {
188 if (prevContentY === loader.item.contentY) {
189 indexChanging = false;
190 } else {
191 kick();
192 }
193 }
194 function kick() {
195 if (!loader.item) return;
196 indexChanging = true;
197 prevContentY = loader.item.contentY;
198 running = true;
199 }
200 }
201
140 // tumbler202 // tumbler
141 Loader {203 Loader {
142 id: loader204 id: loader
@@ -171,12 +233,14 @@
171 }233 }
172 }234 }
173 onCurrentIndexChanged: {235 onCurrentIndexChanged: {
236 movingPoll.kick();
174 if (!loader.completed) return;237 if (!loader.completed) return;
175 if (picker.live || (modelWatcher.modelSize() <= 0)238 if (picker.live || (modelWatcher.modelSize() <= 0)
176 || (picker.__clickedIndex >= 0 && (picker.__clickedIndex === loader.item.currentIndex))239 || (picker.__clickedIndex >= 0 && (picker.__clickedIndex === loader.item.currentIndex))
177 || modelWatcher.cropping) {240 || modelWatcher.cropping) {
178 picker.selectedIndex = loader.item.currentIndex;241 picker.selectedIndex = loader.item.currentIndex;
179 modelWatcher.cropping = false;242 modelWatcher.cropping = false;
243 picker.__clickedIndex = -1;
180 }244 }
181 }245 }
182 onModelChanged: {246 onModelChanged: {
@@ -216,6 +280,8 @@
216 property Item pickerItem: picker280 property Item pickerItem: picker
217 // property holding view completion281 // property holding view completion
218 property bool viewCompleted: false282 property bool viewCompleted: false
283 // declared to ease moving detection
284 property real contentY: offset
219 anchors {285 anchors {
220 top: parent ? parent.top : undefined286 top: parent ? parent.top : undefined
221 bottom: parent ? parent.bottom : undefined287 bottom: parent ? parent.bottom : undefined
222288
=== modified file 'modules/Ubuntu/Components/Pickers/PickerDelegate.qml'
--- modules/Ubuntu/Components/Pickers/PickerDelegate.qml 2013-12-10 16:52:07 +0000
+++ modules/Ubuntu/Components/Pickers/PickerDelegate.qml 2014-03-06 14:36:38 +0000
@@ -51,7 +51,7 @@
5151
52 QtObject {52 QtObject {
53 id: internal53 id: internal
54 property bool inListView: QuickUtils.className(pickerDelegate.parent) !== "QQuickPathView"54 property bool inListView: pickerDelegate.parent && (QuickUtils.className(pickerDelegate.parent) !== "QQuickPathView")
55 property Item itemList: !inListView ? pickerDelegate.PathView.view : pickerDelegate.ListView.view55 property Item itemList: !inListView ? pickerDelegate.PathView.view : pickerDelegate.ListView.view
56 property Picker picker: itemList ? itemList.pickerItem : null56 property Picker picker: itemList ? itemList.pickerItem : null
57 }57 }
5858
=== modified file 'modules/Ubuntu/Components/Pickers/PickerModelBase.qml'
--- modules/Ubuntu/Components/Pickers/PickerModelBase.qml 2013-12-10 16:52:07 +0000
+++ modules/Ubuntu/Components/Pickers/PickerModelBase.qml 2014-03-06 14:36:38 +0000
@@ -141,7 +141,14 @@
141 if (!pickerCompleted || !pickerItem || resetting) {141 if (!pickerCompleted || !pickerItem || resetting) {
142 return;142 return;
143 }143 }
144 pickerItem.selectedIndex = indexOf();144 // use animated index update only if the change had happened because of the delegate update
145 if (pickerItem.__clickedIndex >= 0) {
146 pickerItem.selectedIndex = indexOf();
147 } else {
148 // in case the date property was changed due to binding/update,
149 // position tumbler without animating
150 pickerItem.positionViewAtIndex(indexOf());
151 }
145 }152 }
146153
147}154}
148155
=== modified file 'modules/Ubuntu/Components/Pickers/PickerRow.qml'
--- modules/Ubuntu/Components/Pickers/PickerRow.qml 2013-12-17 07:53:21 +0000
+++ modules/Ubuntu/Components/Pickers/PickerRow.qml 2014-03-06 14:36:38 +0000
@@ -35,10 +35,51 @@
35 */35 */
36 property real margins: units.gu(1.5)36 property real margins: units.gu(1.5)
3737
38 /*
39 Reports whether either of the pickers is moving
40 */
41 property bool moving
42
43 // the following functions/properties should be kept private in case the
44 // component is ever decided to be published
45
46 function pickerMoving(isMoving) {
47 if (isMoving === undefined) {
48 isMoving = this.moving;
49 }
50
51 if (isMoving) {
52 row.moving = true;
53 } else {
54 for (var i = 0; i < row.model.count; i++) {
55 var pickerItem = model.get(i).pickerModel.pickerItem;
56 if (!pickerItem) return;
57 if (pickerItem.moving) {
58 row.moving = true;
59 return;
60 }
61 }
62 row.moving = false;
63 }
64 }
65
66 function disconnectPicker(index) {
67 var pickerItem = model.get(index).pickerModel.pickerItem;
68 if (pickerItem) {
69 pickerItem.onMovingChanged.disconnect(pickerMoving);
70 }
71 }
72
73 Connections {
74 target: row.model
75 onPickerRemoved: disconnectPicker(index)
76 }
77
38 objectName: "PickerRow_Positioner";78 objectName: "PickerRow_Positioner";
3979
40 Repeater {80 Repeater {
41 id: rowRepeater81 id: rowRepeater
82 onModelChanged: row.pickerMoving(true)
42 Picker {83 Picker {
43 id: unitPicker84 id: unitPicker
44 objectName: "PickerRow_" + pickerName85 objectName: "PickerRow_" + pickerName
@@ -47,7 +88,7 @@
47 circular: pickerModel.circular88 circular: pickerModel.circular
48 live: false89 live: false
49 width: pickerModel.pickerWidth90 width: pickerModel.pickerWidth
50 height: parent.height91 height: parent ? parent.height : 0
5192
52 style: Rectangle {93 style: Rectangle {
53 anchors.fill: parent94 anchors.fill: parent
@@ -56,7 +97,7 @@
56 delegate: PickerDelegate {97 delegate: PickerDelegate {
57 Label {98 Label {
58 objectName: "PickerRow_PickerLabel"99 objectName: "PickerRow_PickerLabel"
59 text: pickerModel.text(modelData)100 text: pickerModel ? pickerModel.text(modelData) : ""
60 anchors.fill: parent101 anchors.fill: parent
61 verticalAlignment: Text.AlignVCenter102 verticalAlignment: Text.AlignVCenter
62 horizontalAlignment: Text.AlignHCenter103 horizontalAlignment: Text.AlignHCenter
@@ -82,12 +123,14 @@
82 pickerModel.reset();123 pickerModel.reset();
83 pickerModel.resetLimits(textSizer, margins);124 pickerModel.resetLimits(textSizer, margins);
84 pickerModel.resetCompleted();125 pickerModel.resetCompleted();
85 selectedIndex = pickerModel.indexOf();126 positionViewAtIndex(pickerModel.indexOf());
86 }127 }
87128
88 Component.onCompleted: {129 Component.onCompleted: {
89 // update model with the item instance130 // update model with the item instance
90 pickerModel.pickerItem = unitPicker;131 pickerModel.pickerItem = unitPicker;
132 unitPicker.onMovingChanged.connect(pickerMoving.bind(unitPicker));
133 row.pickerMoving(unitPicker.moving);
91 }134 }
92 }135 }
93 }136 }
94137
=== modified file 'modules/Ubuntu/Components/Pickers/SecondsModel.qml'
--- modules/Ubuntu/Components/Pickers/SecondsModel.qml 2013-12-13 11:22:51 +0000
+++ modules/Ubuntu/Components/Pickers/SecondsModel.qml 2014-03-06 14:36:38 +0000
@@ -26,8 +26,8 @@
2626
27 clear();27 clear();
28 from = minimum.getSeconds();28 from = minimum.getSeconds();
29 var distance = (!maximum.isValid() || (minimum.daysTo(maximum) > 1) || (minimum.secondsTo(maximum) >= 60)) ? 59 : minimum.secondsTo(maximum);29 var distance = (!maximum.isValid() || (minimum.secondsTo(maximum) >= 60)) ? 60 : minimum.secondsTo(maximum);
30 for (var i = 0; i <= distance; i++) {30 for (var i = 0; i < distance; i++) {
31 append({"seconds": (from + i) % 60});31 append({"seconds": (from + i) % 60});
32 }32 }
3333
3434
=== modified file 'modules/Ubuntu/Components/Themes/Ambiance/PickerDelegateStyle.qml'
--- modules/Ubuntu/Components/Themes/Ambiance/PickerDelegateStyle.qml 2013-12-09 06:39:07 +0000
+++ modules/Ubuntu/Components/Themes/Ambiance/PickerDelegateStyle.qml 2014-03-06 14:36:38 +0000
@@ -22,7 +22,7 @@
22 property real maxFade: 0.9522 property real maxFade: 0.95
23 property bool fadingEnabled: true23 property bool fadingEnabled: true
2424
25 property bool inListView: QuickUtils.className(styledItem.parent) !== "QQuickPathView"25 property bool inListView: styledItem.parent && (QuickUtils.className(styledItem.parent) !== "QQuickPathView")
26 property Item itemList: inListView ? styledItem.ListView.view : styledItem.PathView.view26 property Item itemList: inListView ? styledItem.ListView.view : styledItem.PathView.view
27 property Item picker: styledItem.picker27 property Item picker: styledItem.picker
28 property Item highlightItem: itemList.highlightItem28 property Item highlightItem: itemList.highlightItem
2929
=== modified file 'modules/Ubuntu/Components/plugin/quickutils.cpp'
--- modules/Ubuntu/Components/plugin/quickutils.cpp 2014-03-01 12:52:25 +0000
+++ modules/Ubuntu/Components/plugin/quickutils.cpp 2014-03-06 14:36:38 +0000
@@ -112,6 +112,9 @@
112 */112 */
113QString QuickUtils::className(QObject *item)113QString QuickUtils::className(QObject *item)
114{114{
115 if (!item) {
116 return QString();
117 }
115 QString result = item->metaObject()->className();118 QString result = item->metaObject()->className();
116 return result.left(result.indexOf("_QML"));119 return result.left(result.indexOf("_QML"));
117}120}
118121
=== modified file 'tests/resources/pickers/DatePickerTest.qml'
--- tests/resources/pickers/DatePickerTest.qml 2013-12-19 11:08:50 +0000
+++ tests/resources/pickers/DatePickerTest.qml 2014-03-06 14:36:38 +0000
@@ -32,6 +32,7 @@
32 date: new Date()32 date: new Date()
3333
34 onDateChanged: print("CHANGED DATE=" + Qt.formatDateTime(date, "yyyy/MM/dd, hh:mm:ss"))34 onDateChanged: print("CHANGED DATE=" + Qt.formatDateTime(date, "yyyy/MM/dd, hh:mm:ss"))
35 onMovingChanged: print("MOVING?", moving)
35 }36 }
36 Slider {37 Slider {
37 value: 0.0//units.gu(36)38 value: 0.0//units.gu(36)
@@ -47,21 +48,25 @@
47 spacing: units.gu(1)48 spacing: units.gu(1)
48 Button {49 Button {
49 text: "HU"50 text: "HU"
51 width: units.gu(5)
50 height: units.gu(2)52 height: units.gu(2)
51 onClicked: picker.locale = Qt.locale("hu_HU")53 onClicked: picker.locale = Qt.locale("hu_HU")
52 }54 }
53 Button {55 Button {
54 text: "DE"56 text: "DE"
57 width: units.gu(5)
55 height: units.gu(2)58 height: units.gu(2)
56 onClicked: picker.locale = Qt.locale("de_DE")59 onClicked: picker.locale = Qt.locale("de_DE")
57 }60 }
58 Button {61 Button {
59 text: "EN(US)"62 text: "EN(US)"
63 width: units.gu(9)
60 height: units.gu(2)64 height: units.gu(2)
61 onClicked: picker.locale = Qt.locale("en_US")65 onClicked: picker.locale = Qt.locale("en_US")
62 }66 }
63 Button {67 Button {
64 text: "FI"68 text: "FI"
69 width: units.gu(5)
65 height: units.gu(2)70 height: units.gu(2)
66 onClicked: {71 onClicked: {
67 picker.locale = Qt.locale("fi_FI")72 picker.locale = Qt.locale("fi_FI")
6873
=== modified file 'tests/resources/pickers/PickerTest.qml'
--- tests/resources/pickers/PickerTest.qml 2013-12-09 06:39:07 +0000
+++ tests/resources/pickers/PickerTest.qml 2014-03-06 14:36:38 +0000
@@ -42,6 +42,7 @@
42 height: units.gu(40)42 height: units.gu(40)
43 model: pickerModel43 model: pickerModel
44 delegate: PickerDelegate {44 delegate: PickerDelegate {
45 property string text: modelData ? modelData : ""
45 Label {46 Label {
46 anchors.fill: parent47 anchors.fill: parent
47 horizontalAlignment: Text.AlignHCenter48 horizontalAlignment: Text.AlignHCenter
@@ -50,6 +51,7 @@
50 }51 }
51 }52 }
52 onSelectedIndexChanged: print("circular index="+selectedIndex)53 onSelectedIndexChanged: print("circular index="+selectedIndex)
54 onMovingChanged: print("MOVING?", moving)
53 }55 }
5456
55 Picker {57 Picker {
@@ -59,6 +61,7 @@
59 model: pickerModel61 model: pickerModel
60 circular: false62 circular: false
61 delegate: PickerDelegate {63 delegate: PickerDelegate {
64 property string text: modelData ? modelData : ""
62 Label {65 Label {
63 anchors.fill: parent66 anchors.fill: parent
64 horizontalAlignment: Text.AlignHCenter67 horizontalAlignment: Text.AlignHCenter
@@ -67,6 +70,7 @@
67 }70 }
68 }71 }
69 onSelectedIndexChanged: print("linear index="+selectedIndex)72 onSelectedIndexChanged: print("linear index="+selectedIndex)
73 onMovingChanged: print("MOVING?", moving)
70 }74 }
7175
72 Picker {76 Picker {
@@ -82,6 +86,7 @@
82 }86 }
83 }87 }
84 onSelectedIndexChanged: print("circular index="+selectedIndex)88 onSelectedIndexChanged: print("circular index="+selectedIndex)
89 onMovingChanged: print("MOVING?", moving)
85 }90 }
8691
87 Picker {92 Picker {
@@ -98,6 +103,7 @@
98 }103 }
99 }104 }
100 onSelectedIndexChanged: print("linear index="+selectedIndex)105 onSelectedIndexChanged: print("linear index="+selectedIndex)
106 onMovingChanged: print("MOVING?", moving)
101 }107 }
102 }108 }
103109
104110
=== modified file 'tests/unit_x11/tst_components/tst_datepicker.qml'
--- tests/unit_x11/tst_components/tst_datepicker.qml 2014-01-07 14:41:57 +0000
+++ tests/unit_x11/tst_components/tst_datepicker.qml 2014-03-06 14:36:38 +0000
@@ -25,58 +25,44 @@
25 width: units.gu(40)25 width: units.gu(40)
26 height: units.gu(71)26 height: units.gu(71)
2727
28 DatePicker {28 Component {
29 id: picker29 id: testComponent
30 DatePicker {
31 width: testSuite.width
32 }
33 }
34 Loader {
35 id: pickerLoader
36 asynchronous: false
30 width: parent.width37 width: parent.width
31 }38 }
3239
33 SignalSpy {
34 id: modeChange
35 target: picker
36 signalName: "modeChanged"
37 }
38
39 SignalSpy {
40 id: dateChange
41 target: picker
42 signalName: "dateChanged"
43 }
44
45 SignalSpy {
46 id: yearChange
47 target: picker
48 signalName: "yearChanged"
49 }
50
51 SignalSpy {
52 id: monthChange
53 target: picker
54 signalName: "monthChanged"
55 }
56
57 SignalSpy {
58 id: dayChange
59 target: picker
60 signalName: "dayChanged"
61 }
62
63 SignalSpy {
64 id: weekChange
65 target: picker
66 signalName: "weekChanged"
67 }
68
69 UbuntuTestCase {40 UbuntuTestCase {
70 name: "DatePickerAPI"41 name: "DatePickerAPI"
71 when: windowShown42 when: windowShown
7243
44 readonly property DatePicker picker: pickerLoader.item
45
46 function init() {
47 pickerLoader.sourceComponent = testComponent;
48 tryCompareFunction(function(){return pickerLoader.status}, Loader.Ready);
49 waitPickerMoving();
50 }
51 function cleanup() {
52 pickerLoader.sourceComponent = undefined;
53 }
54 function waitPickerMoving() {
55 waitForRendering(picker);
56 tryCompareFunction(function(){return picker.moving}, false);
57 }
58
73 function getPickerLabel(picker, name) {59 function getPickerLabel(picker, name) {
74 var pickerItem = findChild(picker, name);60 var pickerItem = findChild(picker, name);
75 var pickerCurrent = findChild(pickerItem, "Picker_ViewLoader");61 var pickerCurrent = findChild(pickerItem, "Picker_ViewLoader");
76 return findChild(pickerCurrent.item.currentItem, "PickerRow_PickerLabel");62 return findChild(pickerCurrent.item.currentItem, "PickerRow_PickerLabel");
77 }63 }
78 function getPickerModel(picker, name) {64 function getPickerModel(picker, name) {
79 var pickerItem = findChild(picker, name);65 var pickerItem = findInvisibleChild(picker, name);
80 return pickerItem ? pickerItem.model : undefined;66 return pickerItem ? pickerItem.model : undefined;
81 }67 }
82 function setHMS(date, h, m, s) {68 function setHMS(date, h, m, s) {
@@ -114,213 +100,149 @@
114 var newMode = "Years|Months";100 var newMode = "Years|Months";
115 var pickerCount = 2 + 1; // +1 is the Repeater101 var pickerCount = 2 + 1; // +1 is the Repeater
116 picker.mode = newMode;102 picker.mode = newMode;
117 wait(500);103 waitPickerMoving();
118 var positioner = findChild(picker, "PickerRow_Positioner");104 var positioner = findChild(picker, "PickerRow_Positioner");
119 compare(positioner.children.length, pickerCount, "invalid amount of pickers");105 compare(positioner.children.length, pickerCount, "invalid amount of pickers");
120
121 picker.mode = "Years|Months|Days";
122 pickerCount = 3 + 1; // +1 is the Repeater
123 compare(positioner.children.length, pickerCount, "invalid amount of pickers");
124 }106 }
125107
126 function test_1_changeModeMD() {108 function test_1_changeModeMD() {
127 var newMode = "Days|Months";109 var newMode = "Days|Months";
128 var pickerCount = 2 + 1; // +1 is the Repeater110 var pickerCount = 2 + 1; // +1 is the Repeater
129 picker.mode = newMode;111 picker.mode = newMode;
130 wait(500);112 waitPickerMoving();
131 var positioner = findChild(picker, "PickerRow_Positioner");113 var positioner = findChild(picker, "PickerRow_Positioner");
132 compare(positioner.children.length, pickerCount, "invalid amount of pickers");114 compare(positioner.children.length, pickerCount, "invalid amount of pickers");
133
134 picker.mode = "Years|Months|Days";
135 pickerCount = 3 + 1; // +1 is the Repeater
136 compare(positioner.children.length, pickerCount, "invalid amount of pickers");
137 }115 }
138116
139 function test_1_changeModeYD() {117 function test_1_changeModeYD() {
140 var newMode = "Years|Days";118 var newMode = "Years|Days";
141 var pickerCount = 2 + 1; // +1 is the Repeater119 var pickerCount = 2 + 1; // +1 is the Repeater
142 picker.mode = newMode;120 picker.mode = newMode;
143 wait(500);121 // no rendering is expected, no need to wait
144 var positioner = findChild(picker, "PickerRow_Positioner");122 var positioner = findChild(picker, "PickerRow_Positioner");
145 expectFailContinue("", "Invalid mode");123 expectFailContinue("", "Invalid mode");
146 compare(positioner.children.length, pickerCount, "invalid amount of pickers");124 compare(positioner.children.length, pickerCount, "invalid amount of pickers");
147
148 picker.mode = "Years|Months|Days";
149 pickerCount = 3 + 1; // +1 is the Repeater
150 compare(positioner.children.length, pickerCount, "invalid amount of pickers");
151 }125 }
152126
153 function test_1_changeModeY() {127 function test_1_changeModeY() {
154 var newMode = "Years";128 var newMode = "Years";
155 var pickerCount = 1 + 1; // +1 is the Repeater129 var pickerCount = 1 + 1; // +1 is the Repeater
156 picker.mode = newMode;130 picker.mode = newMode;
157 wait(500);131 waitPickerMoving();
158 var positioner = findChild(picker, "PickerRow_Positioner");132 var positioner = findChild(picker, "PickerRow_Positioner");
159 compare(positioner.children.length, pickerCount, "invalid amount of pickers");133 compare(positioner.children.length, pickerCount, "invalid amount of pickers");
160
161 picker.mode = "Years|Months|Days";
162 pickerCount = 3 + 1; // +1 is the Repeater
163 compare(positioner.children.length, pickerCount, "invalid amount of pickers");
164 }134 }
165135
166 function test_1_changeModeM() {136 function test_1_changeModeM() {
167 var newMode = "Months";137 var newMode = "Months";
168 var pickerCount = 1 + 1; // +1 is the Repeater138 var pickerCount = 1 + 1; // +1 is the Repeater
169 picker.mode = newMode;139 picker.mode = newMode;
170 wait(500);140 waitPickerMoving();
171 var positioner = findChild(picker, "PickerRow_Positioner");141 var positioner = findChild(picker, "PickerRow_Positioner");
172 compare(positioner.children.length, pickerCount, "invalid amount of pickers");142 compare(positioner.children.length, pickerCount, "invalid amount of pickers");
173
174 picker.mode = "Years|Months|Days";
175 pickerCount = 3 + 1; // +1 is the Repeater
176 compare(positioner.children.length, pickerCount, "invalid amount of pickers");
177 }143 }
178144
179 function test_1_changeModeD() {145 function test_1_changeModeD() {
180 var newMode = "Days";146 var newMode = "Days";
181 var pickerCount = 1 + 1; // +1 is the Repeater147 var pickerCount = 1 + 1; // +1 is the Repeater
182 picker.mode = newMode;148 picker.mode = newMode;
183 wait(500);149 waitPickerMoving();
184 var positioner = findChild(picker, "PickerRow_Positioner");150 var positioner = findChild(picker, "PickerRow_Positioner");
185 compare(positioner.children.length, pickerCount, "invalid amount of pickers");151 compare(positioner.children.length, pickerCount, "invalid amount of pickers");
186
187 picker.mode = "Years|Months|Days";
188 pickerCount = 3 + 1; // +1 is the Repeater
189 compare(positioner.children.length, pickerCount, "invalid amount of pickers");
190 }152 }
191153
192 function test_1_changeModeHMS() {154 function test_1_changeModeHMS() {
193 var newMode = "Hours|Minutes|Seconds";155 var newMode = "Hours|Minutes|Seconds";
194 var pickerCount = 3 + 1; // +1 is the Repeater156 var pickerCount = 3 + 1; // +1 is the Repeater
195 picker.mode = newMode;157 picker.mode = newMode;
196 wait(500);158 waitPickerMoving();
197 var positioner = findChild(picker, "PickerRow_Positioner");159 var positioner = findChild(picker, "PickerRow_Positioner");
198 compare(positioner.children.length, pickerCount, "invalid amount of pickers");160 compare(positioner.children.length, pickerCount, "invalid amount of pickers");
199
200 picker.mode = "Years|Months|Days";
201 pickerCount = 3 + 1; // +1 is the Repeater
202 compare(positioner.children.length, pickerCount, "invalid amount of pickers");
203 }161 }
204162
205 function test_1_changeModeHM() {163 function test_1_changeModeHM() {
206 var newMode = "Hours|Minutes";164 var newMode = "Hours|Minutes";
207 var pickerCount = 2 + 1; // +1 is the Repeater165 var pickerCount = 2 + 1; // +1 is the Repeater
208 picker.mode = newMode;166 picker.mode = newMode;
209 wait(500);167 waitPickerMoving();
210 var positioner = findChild(picker, "PickerRow_Positioner");168 var positioner = findChild(picker, "PickerRow_Positioner");
211 compare(positioner.children.length, pickerCount, "invalid amount of pickers");169 compare(positioner.children.length, pickerCount, "invalid amount of pickers");
212
213 picker.mode = "Years|Months|Days";
214 pickerCount = 3 + 1; // +1 is the Repeater
215 compare(positioner.children.length, pickerCount, "invalid amount of pickers");
216 }170 }
217171
218 function test_1_changeModeMS() {172 function test_1_changeModeMS() {
219 var newMode = "Minutes|Seconds";173 var newMode = "Minutes|Seconds";
220 var pickerCount = 2 + 1; // +1 is the Repeater174 var pickerCount = 2 + 1; // +1 is the Repeater
221 picker.mode = newMode;175 picker.mode = newMode;
222 wait(500);176 waitPickerMoving();
223 var positioner = findChild(picker, "PickerRow_Positioner");177 var positioner = findChild(picker, "PickerRow_Positioner");
224 compare(positioner.children.length, pickerCount, "invalid amount of pickers");178 compare(positioner.children.length, pickerCount, "invalid amount of pickers");
225
226 picker.mode = "Years|Months|Days";
227 pickerCount = 3 + 1; // +1 is the Repeater
228 compare(positioner.children.length, pickerCount, "invalid amount of pickers");
229 }179 }
230180
231 function test_1_changeModeHS() {181 function test_1_changeModeHS() {
232 var newMode = "Hours|Seconds";182 var newMode = "Hours|Seconds";
233 var pickerCount = 2 + 1; // +1 is the Repeater183 var pickerCount = 2 + 1; // +1 is the Repeater
234 picker.mode = newMode;184 picker.mode = newMode;
235 wait(500);185 waitPickerMoving();
236 var positioner = findChild(picker, "PickerRow_Positioner");186 var positioner = findChild(picker, "PickerRow_Positioner");
237 expectFailContinue("", "cannot set mode to Hours|Minutes");187 expectFailContinue("", "cannot set mode to Hours|Minutes");
238 compare(positioner.children.length, pickerCount, "invalid amount of pickers");188 compare(positioner.children.length, pickerCount, "invalid amount of pickers");
239
240 picker.mode = "Years|Months|Days";
241 pickerCount = 3 + 1; // +1 is the Repeater
242 compare(positioner.children.length, pickerCount, "invalid amount of pickers");
243 }189 }
244190
245 function test_1_changeModeH() {191 function test_1_changeModeH() {
246 var newMode = "Hours";192 var newMode = "Hours";
247 var pickerCount = 1 + 1; // +1 is the Repeater193 var pickerCount = 1 + 1; // +1 is the Repeater
248 picker.mode = newMode;194 picker.mode = newMode;
249 wait(500);195 waitPickerMoving();
250 var positioner = findChild(picker, "PickerRow_Positioner");196 var positioner = findChild(picker, "PickerRow_Positioner");
251 compare(positioner.children.length, pickerCount, "invalid amount of pickers");197 compare(positioner.children.length, pickerCount, "invalid amount of pickers");
252
253 picker.mode = "Years|Months|Days";
254 pickerCount = 3 + 1; // +1 is the Repeater
255 compare(positioner.children.length, pickerCount, "invalid amount of pickers");
256 }198 }
257199
258 function test_1_changeModeMinute() {200 function test_1_changeModeMinute() {
259 var newMode = "Minutes";201 var newMode = "Minutes";
260 var pickerCount = 1 + 1; // +1 is the Repeater202 var pickerCount = 1 + 1; // +1 is the Repeater
261 picker.mode = newMode;203 picker.mode = newMode;
262 wait(500);204 waitPickerMoving();
263 var positioner = findChild(picker, "PickerRow_Positioner");205 var positioner = findChild(picker, "PickerRow_Positioner");
264 compare(positioner.children.length, pickerCount, "invalid amount of pickers");206 compare(positioner.children.length, pickerCount, "invalid amount of pickers");
265
266 picker.mode = "Years|Months|Days";
267 pickerCount = 3 + 1; // +1 is the Repeater
268 compare(positioner.children.length, pickerCount, "invalid amount of pickers");
269 }207 }
270208
271 function test_1_changeModeS() {209 function test_1_changeModeS() {
272 var newMode = "Seconds";210 var newMode = "Seconds";
273 var pickerCount = 1 + 1; // +1 is the Repeater211 var pickerCount = 1 + 1; // +1 is the Repeater
274 picker.mode = newMode;212 picker.mode = newMode;
275 wait(500);213 waitPickerMoving();
276 var positioner = findChild(picker, "PickerRow_Positioner");214 var positioner = findChild(picker, "PickerRow_Positioner");
277 compare(positioner.children.length, pickerCount, "invalid amount of pickers");215 compare(positioner.children.length, pickerCount, "invalid amount of pickers");
278
279 picker.mode = "Years|Months|Days";
280 pickerCount = 3 + 1; // +1 is the Repeater
281 compare(positioner.children.length, pickerCount, "invalid amount of pickers");
282 }216 }
283217
284 function test_1_changeModeYMDHMS() {218 function test_1_changeModeYMDHMS() {
285 var newMode = "Years|Months|Days|Hours|Minutes|Seconds";219 var newMode = "Years|Months|Days|Hours|Minutes|Seconds";
286 var pickerCount = 6 + 1; // +1 is the Repeater220 var pickerCount = 6 + 1; // +1 is the Repeater
287 picker.mode = newMode;221 picker.mode = newMode;
288 wait(500);222 waitPickerMoving();
289 var positioner = findChild(picker, "PickerRow_Positioner");223 var positioner = findChild(picker, "PickerRow_Positioner");
290 expectFailContinue("", "cannot combine date and time pickers");224 expectFailContinue("", "cannot combine date and time pickers");
291 compare(positioner.children.length, pickerCount, "invalid amount of pickers");225 compare(positioner.children.length, pickerCount, "invalid amount of pickers");
292
293 picker.mode = "Years|Months|Days";
294 pickerCount = 3 + 1; // +1 is the Repeater
295 compare(positioner.children.length, pickerCount, "invalid amount of pickers");
296 }226 }
297227
298 function test_1_changeModeYH() {228 function test_1_changeModeYH() {
299 var newMode = "Years|Hours";229 var newMode = "Years|Hours";
300 var pickerCount = 2 + 1; // +1 is the Repeater230 var pickerCount = 2 + 1; // +1 is the Repeater
301 picker.mode = newMode;231 picker.mode = newMode;
302 wait(500);232 waitPickerMoving();
303 var positioner = findChild(picker, "PickerRow_Positioner");233 var positioner = findChild(picker, "PickerRow_Positioner");
304 expectFailContinue("", "cannot combine date and time pickers");234 expectFailContinue("", "cannot combine date and time pickers");
305 compare(positioner.children.length, pickerCount, "invalid amount of pickers");235 compare(positioner.children.length, pickerCount, "invalid amount of pickers");
306
307 picker.mode = "Years|Months|Days";
308 pickerCount = 3 + 1; // +1 is the Repeater
309 compare(positioner.children.length, pickerCount, "invalid amount of pickers");
310 }236 }
311237
312 function test_1_changeModeUnhandled() {238 function test_1_changeModeUnhandled() {
313 var newMode = "Years|Whatever";239 var newMode = "Years|Whatever";
314 var pickerCount = 2 + 1; // +1 is the Repeater240 var pickerCount = 2 + 1; // +1 is the Repeater
315 picker.mode = newMode;241 picker.mode = newMode;
316 wait(500);242 // no rendering is expected, no need to wait
317 var positioner = findChild(picker, "PickerRow_Positioner");243 var positioner = findChild(picker, "PickerRow_Positioner");
318 expectFailContinue("", "unhandled mode flag should not pass");244 expectFailContinue("", "unhandled mode flag should not pass");
319 compare(positioner.children.length, pickerCount, "invalid amount of pickers");245 compare(positioner.children.length, pickerCount, "invalid amount of pickers");
320
321 picker.mode = "Years|Months|Days";
322 pickerCount = 3 + 1; // +1 is the Repeater
323 compare(positioner.children.length, pickerCount, "invalid amount of pickers");
324 }246 }
325247
326 function test_1_changeLocale() {248 function test_1_changeLocale() {
@@ -328,16 +250,14 @@
328 var locale = Qt.locale("hu_HU");250 var locale = Qt.locale("hu_HU");
329 picker.minimum = new Date(2012, 11, 1);251 picker.minimum = new Date(2012, 11, 1);
330 picker.date = new Date(2012, 11, 1);252 picker.date = new Date(2012, 11, 1);
331 wait(500)
332 picker.locale = Qt.locale("hu_HU");253 picker.locale = Qt.locale("hu_HU");
333 wait(500)254 waitPickerMoving();
334 var label = getPickerLabel(picker, "PickerRow_MonthPicker");255 var label = getPickerLabel(picker, "PickerRow_MonthPicker");
335 compare(label.text, locale.monthName(picker.date.getMonth(), Locale.LongFormat), "locale for month wrong");256 compare(label.text, locale.monthName(picker.date.getMonth(), Locale.LongFormat), "locale for month wrong");
336257
337 label = getPickerLabel(picker, "PickerRow_DayPicker");258 label = getPickerLabel(picker, "PickerRow_DayPicker");
338 var dayModel = getPickerModel(picker, "PickerRow_DayPicker");259 var dayModel = getPickerModel(picker, "PickerRow_DayPicker");
339 compare(label.text, dayModel.text(picker.date.getDate() - 1, testSuite.width), "locale for day name wrong");260 compare(label.text, dayModel.text(picker.date.getDate() - 1, testSuite.width), "locale for day name wrong");
340 picker.locale = prevLocale;
341 }261 }
342262
343 function test_1_changeMinimumBeforeDate() {263 function test_1_changeMinimumBeforeDate() {
@@ -346,7 +266,8 @@
346 date.setFullYear(date.getFullYear() - 1);266 date.setFullYear(date.getFullYear() - 1);
347 date.setDate(1);267 date.setDate(1);
348 picker.minimum = date;268 picker.minimum = date;
349 wait(500);269 // no rendering is expected, so no need to wait
270
350 var year = getPickerLabel(picker, "PickerRow_YearPicker");271 var year = getPickerLabel(picker, "PickerRow_YearPicker");
351 compare(year.text, originalDate.getFullYear().toString(), "year differs");272 compare(year.text, originalDate.getFullYear().toString(), "year differs");
352 var month = getPickerLabel(picker, "PickerRow_MonthPicker");273 var month = getPickerLabel(picker, "PickerRow_MonthPicker");
@@ -362,7 +283,7 @@
362 date.setFullYear(date.getFullYear() + 1);283 date.setFullYear(date.getFullYear() + 1);
363 date.setDate(1);284 date.setDate(1);
364 picker.maximum = date;285 picker.maximum = date;
365 wait(500);286 waitPickerMoving();
366 var year = getPickerLabel(picker, "PickerRow_YearPicker");287 var year = getPickerLabel(picker, "PickerRow_YearPicker");
367 compare(year.text, originalDate.getFullYear().toString(), "year differs");288 compare(year.text, originalDate.getFullYear().toString(), "year differs");
368 var month = getPickerLabel(picker, "PickerRow_MonthPicker");289 var month = getPickerLabel(picker, "PickerRow_MonthPicker");
@@ -375,26 +296,27 @@
375 // make infinite296 // make infinite
376 function test_1_changeMinimumInvalid() {297 function test_1_changeMinimumInvalid() {
377 picker.minimum = Date.prototype.getInvalidDate.call();298 picker.minimum = Date.prototype.getInvalidDate.call();
299 // no rendering is expected
378 compare(picker.minimum, picker.date, "invalid minimum hasn't been adjusted to date");300 compare(picker.minimum, picker.date, "invalid minimum hasn't been adjusted to date");
379 }301 }
380302
381 // make infinite303 // make infinite
382 function test_1_changeMaximumInvalid() {304 function test_1_changeMaximumInvalid() {
383 picker.maximum = Date.prototype.getInvalidDate.call();305 picker.maximum = Date.prototype.getInvalidDate.call();
384306 waitPickerMoving();
385 // check if the year picker model is autoExtending307 // check if the year picker model is autoExtending
386 var yearModel = getPickerModel(picker, "PickerRow_YearPicker");308 var yearModel = getPickerModel(picker, "PickerRow_YearPicker");
387 compare(yearModel.autoExtend, true, "the year picker is not auto-extending one");309 compare(yearModel.autoExtend, true, "the year picker is not auto-extending one");
388 }310 }
389311
390 function test_1_changeDate() {312 function test_1_changeDate() {
391 var date = picker.date;313 var date = new Date();
392 date.setFullYear(date.getFullYear() + 2);314 date.setFullYear(picker.date.getFullYear() + 2);
393 date.setMonth(5);315 date.setMonth(5);
394 date.setDate(21);316 date.setDate(21);
395 picker.date = date;317 picker.date = date;
396 picker.mode = "Years|Months|Days";318 picker.mode = "Years|Months|Days";
397 wait(500);319 waitPickerMoving();
398320
399 var yearLabel = getPickerLabel(picker, "PickerRow_YearPicker");321 var yearLabel = getPickerLabel(picker, "PickerRow_YearPicker");
400 var monthLabel = getPickerLabel(picker, "PickerRow_MonthPicker");322 var monthLabel = getPickerLabel(picker, "PickerRow_MonthPicker");
@@ -410,15 +332,15 @@
410 picker.minimum = new Date(2013, 9, 1);332 picker.minimum = new Date(2013, 9, 1);
411 picker.date = new Date(2013, 09, 31);333 picker.date = new Date(2013, 09, 31);
412 picker.locale = Qt.locale("hu_HU")334 picker.locale = Qt.locale("hu_HU")
413 wait(500);335 waitPickerMoving();
414336
415 // click on the month picker to set the next month337 // click on the month picker to set the next month
416 var monthPicker = findChild(picker, "PickerRow_MonthPicker");338 var monthPicker = findChild(picker, "PickerRow_MonthPicker");
417 var monthCurrent = findChild(monthPicker, "Picker_ViewLoader");339 var monthCurrent = findChild(monthPicker, "Picker_ViewLoader");
418 var my = monthPicker.y + (monthPicker.height / 2) + monthCurrent.item.currentItem.height;340 var my = monthPicker.y + (monthPicker.height / 2) + monthCurrent.item.currentItem.height;
419 var mx = monthPicker.x + monthPicker.width / 2;341 var mx = monthPicker.x + monthPicker.width / 2;
420 mouseClick(testSuite, mx, my);342 mouseClick(picker, mx, my);
421 wait(500);343 waitPickerMoving();
422344
423 var yearLabel = getPickerLabel(picker, "PickerRow_YearPicker");345 var yearLabel = getPickerLabel(picker, "PickerRow_YearPicker");
424 var monthLabel = getPickerLabel(picker, "PickerRow_MonthPicker");346 var monthLabel = getPickerLabel(picker, "PickerRow_MonthPicker");
@@ -433,8 +355,8 @@
433355
434 // set it back356 // set it back
435 my = monthPicker.y + (monthPicker.height / 2) - monthCurrent.item.currentItem.height;357 my = monthPicker.y + (monthPicker.height / 2) - monthCurrent.item.currentItem.height;
436 mouseClick(testSuite, mx, my);358 mouseClick(picker, mx, my);
437 wait(500);359 waitPickerMoving();
438360
439 compare(yearLabel.text, "2013", "different year value");361 compare(yearLabel.text, "2013", "different year value");
440 // October362 // October
@@ -451,8 +373,9 @@
451 var maxDate = new Date(2013, 11, 31);373 var maxDate = new Date(2013, 11, 31);
452 picker.minimum = minDate;374 picker.minimum = minDate;
453 picker.maximum = maxDate;375 picker.maximum = maxDate;
454 wait(500);376 waitPickerMoving();
455 picker.date = date;377 picker.date = date;
378 waitPickerMoving();
456379
457 var yearPicker = findChild(picker, "PickerRow_YearPicker");380 var yearPicker = findChild(picker, "PickerRow_YearPicker");
458 compare(yearPicker.enabled, false, "year picker should be disabled");381 compare(yearPicker.enabled, false, "year picker should be disabled");
@@ -465,6 +388,7 @@
465 picker.minimum = minDate;388 picker.minimum = minDate;
466 picker.maximum = maxDate;389 picker.maximum = maxDate;
467 picker.date = date;390 picker.date = date;
391 waitPickerMoving();
468392
469 var yearPicker = findChild(picker, "PickerRow_YearPicker");393 var yearPicker = findChild(picker, "PickerRow_YearPicker");
470 compare(yearPicker.enabled, false, "year picker should be disabled");394 compare(yearPicker.enabled, false, "year picker should be disabled");
@@ -491,10 +415,11 @@
491415
492 function test_3_changeHours() {416 function test_3_changeHours() {
493 picker.mode = "Hours|Minutes|Seconds";417 picker.mode = "Hours|Minutes|Seconds";
418 waitPickerMoving();
494 var date = new Date(picker.date);419 var date = new Date(picker.date);
495 date.setHours((date.getHours() + 10) % 24);420 date.setHours((date.getHours() + 10) % 24);
496 picker.date = date;421 picker.date = date;
497 wait(500);422 waitPickerMoving();
498423
499 var hoursLabel = getPickerLabel(picker, "PickerRow_HoursPicker");424 var hoursLabel = getPickerLabel(picker, "PickerRow_HoursPicker");
500 verify(hoursLabel, "hour label undefined");425 verify(hoursLabel, "hour label undefined");
@@ -512,7 +437,7 @@
512 var date = new Date(picker.date);437 var date = new Date(picker.date);
513 date.setMinutes((date.getMinutes() + 40) % 60);438 date.setMinutes((date.getMinutes() + 40) % 60);
514 picker.date = date;439 picker.date = date;
515 wait(500);440 waitPickerMoving();
516441
517 var hoursLabel = getPickerLabel(picker, "PickerRow_HoursPicker");442 var hoursLabel = getPickerLabel(picker, "PickerRow_HoursPicker");
518 verify(hoursLabel, "hour label undefined");443 verify(hoursLabel, "hour label undefined");
@@ -530,7 +455,7 @@
530 var date = new Date(picker.date);455 var date = new Date(picker.date);
531 date.setSeconds((date.getSeconds() + 50) % 60);456 date.setSeconds((date.getSeconds() + 50) % 60);
532 picker.date = date;457 picker.date = date;
533 wait(500);458 waitPickerMoving();
534459
535 var hoursLabel = getPickerLabel(picker, "PickerRow_HoursPicker");460 var hoursLabel = getPickerLabel(picker, "PickerRow_HoursPicker");
536 verify(hoursLabel, "hour label undefined");461 verify(hoursLabel, "hour label undefined");
@@ -550,7 +475,7 @@
550 date.setFullYear(date.getFullYear() - 1);475 date.setFullYear(date.getFullYear() - 1);
551 date.setDate(1);476 date.setDate(1);
552 picker.minimum = date;477 picker.minimum = date;
553 wait(500);478 waitPickerMoving();
554479
555 var hoursLabel = getPickerLabel(picker, "PickerRow_HoursPicker");480 var hoursLabel = getPickerLabel(picker, "PickerRow_HoursPicker");
556 verify(hoursLabel, "hour label undefined");481 verify(hoursLabel, "hour label undefined");
@@ -570,7 +495,7 @@
570 date.setFullYear(date.getFullYear() + 1);495 date.setFullYear(date.getFullYear() + 1);
571 date.setDate(1);496 date.setDate(1);
572 picker.maximum = date;497 picker.maximum = date;
573 wait(500);498 waitPickerMoving();
574 var hoursLabel = getPickerLabel(picker, "PickerRow_HoursPicker");499 var hoursLabel = getPickerLabel(picker, "PickerRow_HoursPicker");
575 verify(hoursLabel, "hour label undefined");500 verify(hoursLabel, "hour label undefined");
576 compare(hoursLabel.text, ("00" + originalDate.getHours()).slice(-2), "hours differ");501 compare(hoursLabel.text, ("00" + originalDate.getHours()).slice(-2), "hours differ");
@@ -583,12 +508,13 @@
583 }508 }
584509
585 function test_4_disabledHour() {510 function test_4_disabledHour() {
511 picker.mode = "Hours|Minutes|Seconds";
586 var date = setHMS(new Date(), 12, 10, 45);512 var date = setHMS(new Date(), 12, 10, 45);
587 var minDate = setHMS(new Date(), 12, 0, 0);513 var minDate = setHMS(new Date(), 12, 0, 0);
588 var maxDate = setHMS(new Date(), 12, 59, 59);514 var maxDate = setHMS(new Date(), 12, 59, 59);
589 picker.minimum = minDate;515 picker.minimum = minDate;
590 picker.maximum = maxDate;516 picker.maximum = maxDate;
591 wait(500);517 waitPickerMoving();
592 picker.date = date;518 picker.date = date;
593519
594 var hoursPicker = findChild(picker, "PickerRow_HoursPicker");520 var hoursPicker = findChild(picker, "PickerRow_HoursPicker");
@@ -596,13 +522,14 @@
596 }522 }
597523
598 function test_4_disabledHoursAndMinutes() {524 function test_4_disabledHoursAndMinutes() {
525 picker.mode = "Hours|Minutes|Seconds";
599 var date = setHMS(new Date(), 12, 10, 45);526 var date = setHMS(new Date(), 12, 10, 45);
600 var minDate = setHMS(new Date(), 12, 10, 0);527 var minDate = setHMS(new Date(), 12, 10, 0);
601 var maxDate = setHMS(new Date(), 12, 10, 59);528 var maxDate = setHMS(new Date(), 12, 10, 59);
602 picker.minimum = minDate;529 picker.minimum = minDate;
603 picker.maximum = maxDate;530 picker.maximum = maxDate;
604 picker.date = date;531 picker.date = date;
605 wait(500);532 waitPickerMoving();
606533
607 var hoursPicker = findChild(picker, "PickerRow_HoursPicker");534 var hoursPicker = findChild(picker, "PickerRow_HoursPicker");
608 compare(hoursPicker.enabled, false, "hours picker should be disabled");535 compare(hoursPicker.enabled, false, "hours picker should be disabled");
@@ -611,13 +538,14 @@
611 }538 }
612539
613 function test_4_linearSecondsPicker() {540 function test_4_linearSecondsPicker() {
541 picker.mode = "Hours|Minutes|Seconds";
614 var date = setHMS(new Date(), 12, 10, 45);542 var date = setHMS(new Date(), 12, 10, 45);
615 var minDate = setHMS(new Date(), 12, 10, 1);543 var minDate = setHMS(new Date(), 12, 10, 1);
616 var maxDate = setHMS(new Date(), 12, 10, 59);544 var maxDate = setHMS(new Date(), 12, 10, 59);
617 picker.minimum = minDate;545 picker.minimum = minDate;
618 picker.maximum = maxDate;546 picker.maximum = maxDate;
619 picker.date = date;547 picker.date = date;
620 wait(500);548 waitPickerMoving();
621549
622 var hoursPicker = findChild(picker, "PickerRow_HoursPicker");550 var hoursPicker = findChild(picker, "PickerRow_HoursPicker");
623 compare(hoursPicker.enabled, false, "hours picker should be disabled");551 compare(hoursPicker.enabled, false, "hours picker should be disabled");

Subscribers

People subscribed via source and target branches

to status/vote changes: