Merge lp:~tpeeters/ubuntu-ui-toolkit/pagestack-unit-tests into lp:ubuntu-ui-toolkit/staging
- pagestack-unit-tests
- Merge into staging
Status: | Merged | ||||
---|---|---|---|---|---|
Approved by: | Cris Dywan | ||||
Approved revision: | 1933 | ||||
Merged at revision: | 1940 | ||||
Proposed branch: | lp:~tpeeters/ubuntu-ui-toolkit/pagestack-unit-tests | ||||
Merge into: | lp:ubuntu-ui-toolkit/staging | ||||
Diff against target: |
336 lines (+221/-33) 5 files modified
src/Ubuntu/Components/1.3/PageStack.qml (+1/-1) tests/unit_x11/tst_components/MyExternalPage.DEPRECATED_APPHEADER.qml (+1/-1) tests/unit_x11/tst_components/tst_multicolumnheader.qml (+2/-2) tests/unit_x11/tst_components/tst_pagestack.DEPRECATED_APPHEADER_TABS.qml (+3/-29) tests/unit_x11/tst_components/tst_pagestack.qml (+214/-0) |
||||
To merge this branch: | bzr merge lp:~tpeeters/ubuntu-ui-toolkit/pagestack-unit-tests | ||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
ubuntu-sdk-build-bot | continuous-integration | Approve | |
Cris Dywan | Approve | ||
Review via email:
|
Commit message
Update PageStack unit tests to use PageHeader.
Description of the change
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
ubuntu-sdk-build-bot (ubuntu-sdk-build-bot) wrote : | # |
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
ubuntu-sdk-build-bot (ubuntu-sdk-build-bot) wrote : | # |
PASSED: Continuous integration, rev:1933
https:/
Executed test runs:
None: https:/
Click here to trigger a rebuild:
https:/
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
ubuntu-sdk-build-bot (ubuntu-sdk-build-bot) wrote : | # |
PASSED: Continuous integration, rev:1933
https:/
Executed test runs:
None: https:/
Click here to trigger a rebuild:
https:/
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
ubuntu-sdk-build-bot (ubuntu-sdk-build-bot) wrote : | # |
PASSED: Continuous integration, rev:1933
https:/
Executed test runs:
None: https:/
Click here to trigger a rebuild:
https:/
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
ubuntu-sdk-build-bot (ubuntu-sdk-build-bot) wrote : | # |
PASSED: Continuous integration, rev:1933
https:/
Executed test runs:
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
None: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
Click here to trigger a rebuild:
https:/
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
Cris Dywan (kalikiana) wrote : | # |
For the record, the key here is indeed that the new tests use the PageHeader whilst the old ones go back to AppHeader, the internal default.
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
ubuntu-sdk-build-bot (ubuntu-sdk-build-bot) wrote : | # |
PASSED: Continuous integration, rev:1933
https:/
Executed test runs:
None: https:/
Click here to trigger a rebuild:
https:/
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
ubuntu-sdk-build-bot (ubuntu-sdk-build-bot) wrote : | # |
PASSED: Continuous integration, rev:1933
https:/
Executed test runs:
None: https:/
Click here to trigger a rebuild:
https:/
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
ubuntu-sdk-build-bot (ubuntu-sdk-build-bot) wrote : | # |
PASSED: Continuous integration, rev:1933
https:/
Executed test runs:
None: https:/
Click here to trigger a rebuild:
https:/
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
ubuntu-sdk-build-bot (ubuntu-sdk-build-bot) wrote : | # |
PASSED: Continuous integration, rev:1933
https:/
Executed test runs:
None: https:/
Click here to trigger a rebuild:
https:/
Preview Diff
1 | === modified file 'src/Ubuntu/Components/1.3/PageStack.qml' | |||
2 | --- src/Ubuntu/Components/1.3/PageStack.qml 2016-04-07 14:35:59 +0000 | |||
3 | +++ src/Ubuntu/Components/1.3/PageStack.qml 2016-04-13 10:52:21 +0000 | |||
4 | @@ -185,7 +185,7 @@ | |||
5 | 185 | 185 | ||
6 | 186 | /*! | 186 | /*! |
7 | 187 | Pop the top item from the stack if the stack size is at least 1. | 187 | Pop the top item from the stack if the stack size is at least 1. |
9 | 188 | Do not do anything if 0 or 1 items are on the stack. | 188 | Do not do anything if 0 items are on the stack. |
10 | 189 | */ | 189 | */ |
11 | 190 | function pop() { | 190 | function pop() { |
12 | 191 | internal.finishPreviousAction(); | 191 | internal.finishPreviousAction(); |
13 | 192 | 192 | ||
14 | === renamed file 'tests/unit_x11/tst_components/MyExternalPage.qml' => 'tests/unit_x11/tst_components/MyExternalPage.DEPRECATED_APPHEADER.qml' | |||
15 | --- tests/unit_x11/tst_components/MyExternalPage.qml 2016-03-07 06:19:27 +0000 | |||
16 | +++ tests/unit_x11/tst_components/MyExternalPage.DEPRECATED_APPHEADER.qml 2016-04-13 10:52:21 +0000 | |||
17 | @@ -21,6 +21,6 @@ | |||
18 | 21 | title: "Page from QML file" | 21 | title: "Page from QML file" |
19 | 22 | Label { | 22 | Label { |
20 | 23 | anchors.centerIn: parent | 23 | anchors.centerIn: parent |
22 | 24 | text: "This page was created from MyExternalPage.qml." | 24 | text: "This page was created from MyExternalPage.DEPRECATED_APPHEADER.qml." |
23 | 25 | } | 25 | } |
24 | 26 | } | 26 | } |
25 | 27 | 27 | ||
26 | === modified file 'tests/unit_x11/tst_components/tst_multicolumnheader.qml' | |||
27 | --- tests/unit_x11/tst_components/tst_multicolumnheader.qml 2015-10-22 12:42:42 +0000 | |||
28 | +++ tests/unit_x11/tst_components/tst_multicolumnheader.qml 2016-04-13 10:52:21 +0000 | |||
29 | @@ -59,7 +59,7 @@ | |||
30 | 59 | ListItemWithLabel { | 59 | ListItemWithLabel { |
31 | 60 | text: "Add external page right" | 60 | text: "Add external page right" |
32 | 61 | onClicked: layout.addPageToNextColumn( | 61 | onClicked: layout.addPageToNextColumn( |
34 | 62 | rootPage, Qt.resolvedUrl("MyExternalPage.qml")) | 62 | rootPage, Qt.resolvedUrl("MyExternalPage.DEPRECATED_APPHEADER.qml")) |
35 | 63 | } | 63 | } |
36 | 64 | ListItemWithLabel { | 64 | ListItemWithLabel { |
37 | 65 | text: "Add page with head contents left" | 65 | text: "Add page with head contents left" |
38 | @@ -305,7 +305,7 @@ | |||
39 | 305 | } | 305 | } |
40 | 306 | 306 | ||
41 | 307 | function test_header_title_for_external_page() { | 307 | function test_header_title_for_external_page() { |
43 | 308 | var incubator = layout.addPageToNextColumn(rootPage, Qt.resolvedUrl("MyExternalPage.qml")); | 308 | var incubator = layout.addPageToNextColumn(rootPage, Qt.resolvedUrl("MyExternalPage.DEPRECATED_APPHEADER.qml")); |
44 | 309 | var pageLoaded = false; | 309 | var pageLoaded = false; |
45 | 310 | incubator.onStatusChanged = function (status) { | 310 | incubator.onStatusChanged = function (status) { |
46 | 311 | pageLoaded = (incubator.object != null); | 311 | pageLoaded = (incubator.object != null); |
47 | 312 | 312 | ||
48 | === renamed file 'tests/unit_x11/tst_components/tst_pagestack.qml' => 'tests/unit_x11/tst_components/tst_pagestack.DEPRECATED_APPHEADER_TABS.qml' | |||
49 | --- tests/unit_x11/tst_components/tst_pagestack.qml 2016-04-07 14:52:32 +0000 | |||
50 | +++ tests/unit_x11/tst_components/tst_pagestack.DEPRECATED_APPHEADER_TABS.qml 2016-04-13 10:52:21 +0000 | |||
51 | @@ -1,5 +1,5 @@ | |||
52 | 1 | /* | 1 | /* |
54 | 2 | * Copyright 2012-2015 Canonical Ltd. | 2 | * Copyright 2012-2016 Canonical Ltd. |
55 | 3 | * | 3 | * |
56 | 4 | * This program is free software; you can redistribute it and/or modify | 4 | * This program is free software; you can redistribute it and/or modify |
57 | 5 | * it under the terms of the GNU Lesser General Public License as published by | 5 | * it under the terms of the GNU Lesser General Public License as published by |
58 | @@ -61,10 +61,6 @@ | |||
59 | 61 | onClicked: pageStack.push(tabs) | 61 | onClicked: pageStack.push(tabs) |
60 | 62 | } | 62 | } |
61 | 63 | Button { | 63 | Button { |
62 | 64 | text: "pageWithHeader" | ||
63 | 65 | onClicked: pageStack.push(pageWithHeader) | ||
64 | 66 | } | ||
65 | 67 | Button { | ||
66 | 68 | text: "pageComponent" | 64 | text: "pageComponent" |
67 | 69 | onClicked: pageStack.push(pageComponent) | 65 | onClicked: pageStack.push(pageComponent) |
68 | 70 | } | 66 | } |
69 | @@ -100,13 +96,6 @@ | |||
70 | 100 | } | 96 | } |
71 | 101 | } | 97 | } |
72 | 102 | } | 98 | } |
73 | 103 | Page { | ||
74 | 104 | id: pageWithHeader | ||
75 | 105 | title: "Page with PageHeader" | ||
76 | 106 | header: PageHeader { | ||
77 | 107 | title: pageWithHeader.title | ||
78 | 108 | } | ||
79 | 109 | } | ||
80 | 110 | 99 | ||
81 | 111 | Component { | 100 | Component { |
82 | 112 | id: pageComponent | 101 | id: pageComponent |
83 | @@ -116,7 +105,7 @@ | |||
84 | 116 | } | 105 | } |
85 | 117 | 106 | ||
86 | 118 | UbuntuTestCase { | 107 | UbuntuTestCase { |
88 | 119 | name: "PageStackAPI" | 108 | name: "PageStackDeprecatedAppHeaderAPI" |
89 | 120 | when: windowShown | 109 | when: windowShown |
90 | 121 | id: testCase | 110 | id: testCase |
91 | 122 | 111 | ||
92 | @@ -268,24 +257,9 @@ | |||
93 | 268 | pushedPage = pageStack.push(pageComponent); | 257 | pushedPage = pageStack.push(pageComponent); |
94 | 269 | compare(pushedPage.title, "Page from component", | 258 | compare(pushedPage.title, "Page from component", |
95 | 270 | "PageStack.push() returns Page created from Component"); | 259 | "PageStack.push() returns Page created from Component"); |
97 | 271 | pushedPage = pageStack.push(Qt.resolvedUrl("MyExternalPage.qml")); | 260 | pushedPage = pageStack.push(Qt.resolvedUrl("MyExternalPage.DEPRECATED_APPHEADER.qml")); |
98 | 272 | compare(pushedPage.title, "Page from QML file", | 261 | compare(pushedPage.title, "Page from QML file", |
99 | 273 | "PageStack.push() returns Page created from QML file"); | 262 | "PageStack.push() returns Page created from QML file"); |
100 | 274 | } | 263 | } |
101 | 275 | |||
102 | 276 | function test_page_header_back_button_bug1565811() { | ||
103 | 277 | pageStack.push(pageWithHeader); | ||
104 | 278 | var backButton = findChild(pageWithHeader.header.leadingActionBar, | ||
105 | 279 | "pagestack_back_action_button"); | ||
106 | 280 | compare(backButton, null, | ||
107 | 281 | "Page header shows back button with only one page on the stack."); | ||
108 | 282 | pageStack.pop(); | ||
109 | 283 | pageStack.push(page1); | ||
110 | 284 | pageStack.push(pageWithHeader); | ||
111 | 285 | waitForHeaderAnimation(mainView); | ||
112 | 286 | backButton = findChild(pageWithHeader.header, "pagestack_back_action_button"); | ||
113 | 287 | compare(backButton && backButton.visible, true, | ||
114 | 288 | "Page header has no back button with two pages on the stack."); | ||
115 | 289 | } | ||
116 | 290 | } | 264 | } |
117 | 291 | } | 265 | } |
118 | 292 | 266 | ||
119 | === added file 'tests/unit_x11/tst_components/tst_pagestack.qml' | |||
120 | --- tests/unit_x11/tst_components/tst_pagestack.qml 1970-01-01 00:00:00 +0000 | |||
121 | +++ tests/unit_x11/tst_components/tst_pagestack.qml 2016-04-13 10:52:21 +0000 | |||
122 | @@ -0,0 +1,214 @@ | |||
123 | 1 | /* | ||
124 | 2 | * Copyright 2016 Canonical Ltd. | ||
125 | 3 | * | ||
126 | 4 | * This program is free software; you can redistribute it and/or modify | ||
127 | 5 | * it under the terms of the GNU Lesser General Public License as published by | ||
128 | 6 | * the Free Software Foundation; version 3. | ||
129 | 7 | * | ||
130 | 8 | * This program is distributed in the hope that it will be useful, | ||
131 | 9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
132 | 10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
133 | 11 | * GNU Lesser General Public License for more details. | ||
134 | 12 | * | ||
135 | 13 | * You should have received a copy of the GNU Lesser General Public License | ||
136 | 14 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
137 | 15 | */ | ||
138 | 16 | |||
139 | 17 | import QtQuick 2.4 | ||
140 | 18 | import Ubuntu.Components 1.3 | ||
141 | 19 | import Ubuntu.Test 1.3 | ||
142 | 20 | |||
143 | 21 | Item { | ||
144 | 22 | width: units.gu(50) | ||
145 | 23 | height: units.gu(80) | ||
146 | 24 | |||
147 | 25 | MainView { | ||
148 | 26 | id: mainView | ||
149 | 27 | anchors.fill: parent | ||
150 | 28 | PageStack { | ||
151 | 29 | id: pageStack | ||
152 | 30 | Page { | ||
153 | 31 | id: pageInStack | ||
154 | 32 | } | ||
155 | 33 | } | ||
156 | 34 | |||
157 | 35 | Column { | ||
158 | 36 | // for manual testing | ||
159 | 37 | visible: pageStack.depth === 0 | ||
160 | 38 | anchors { | ||
161 | 39 | left: parent.left | ||
162 | 40 | right: parent.right | ||
163 | 41 | top: parent.top | ||
164 | 42 | margins: units.gu(1) | ||
165 | 43 | } | ||
166 | 44 | Button { | ||
167 | 45 | text: "page1" | ||
168 | 46 | onClicked: pageStack.push(page1) | ||
169 | 47 | } | ||
170 | 48 | Button { | ||
171 | 49 | text: "page2" | ||
172 | 50 | onClicked: pageStack.push(page2) | ||
173 | 51 | } | ||
174 | 52 | Button { | ||
175 | 53 | text: "pageWithPage" | ||
176 | 54 | onClicked: pageStack.push(pageWithPage) | ||
177 | 55 | } | ||
178 | 56 | Button { | ||
179 | 57 | text: "pageComponent" | ||
180 | 58 | onClicked: pageStack.push(pageComponent) | ||
181 | 59 | } | ||
182 | 60 | } | ||
183 | 61 | } | ||
184 | 62 | Page { | ||
185 | 63 | id: page1 | ||
186 | 64 | header: PageHeader { | ||
187 | 65 | title: "Title 1" | ||
188 | 66 | } | ||
189 | 67 | } | ||
190 | 68 | Page { | ||
191 | 69 | id: page2 | ||
192 | 70 | header: PageHeader { | ||
193 | 71 | title: "Title 2" | ||
194 | 72 | } | ||
195 | 73 | } | ||
196 | 74 | Page { | ||
197 | 75 | id: pageWithPage | ||
198 | 76 | header: PageHeader { | ||
199 | 77 | title: "Outer" | ||
200 | 78 | } | ||
201 | 79 | Page { | ||
202 | 80 | header: PageHeader { | ||
203 | 81 | title: "Inner" | ||
204 | 82 | } | ||
205 | 83 | } | ||
206 | 84 | } | ||
207 | 85 | |||
208 | 86 | Component { | ||
209 | 87 | id: pageComponent | ||
210 | 88 | Page { | ||
211 | 89 | header: PageHeader { | ||
212 | 90 | title: "Page from component" | ||
213 | 91 | } | ||
214 | 92 | } | ||
215 | 93 | } | ||
216 | 94 | |||
217 | 95 | UbuntuTestCase { | ||
218 | 96 | name: "PageStackAPI" | ||
219 | 97 | when: windowShown | ||
220 | 98 | id: testCase | ||
221 | 99 | |||
222 | 100 | function initTestCase() { | ||
223 | 101 | waitForHeaderAnimation(mainView); | ||
224 | 102 | compare(pageStack.currentPage, null, "is not set by default"); | ||
225 | 103 | compare(pageStack.__propagated, mainView.__propagated, "propagated property of pageStack equals mainView.__propagated") | ||
226 | 104 | compare(mainView.__propagated.header.title, "", "empty title by default"); | ||
227 | 105 | } | ||
228 | 106 | |||
229 | 107 | function cleanup() { | ||
230 | 108 | pageStack.clear(); | ||
231 | 109 | waitForHeaderAnimation(mainView); | ||
232 | 110 | compare(pageStack.depth, 0, "depth is not 0 after clearing."); | ||
233 | 111 | compare(pageStack.currentPage, null, "currentPage is not null after clearing."); | ||
234 | 112 | } | ||
235 | 113 | |||
236 | 114 | function test_depth() { | ||
237 | 115 | compare(pageStack.depth, 0, "depth is 0 by default"); | ||
238 | 116 | pageStack.push(page1); | ||
239 | 117 | waitForHeaderAnimation(mainView); | ||
240 | 118 | compare(pageStack.depth, 1, "depth is correctly increased when pushing a page"); | ||
241 | 119 | pageStack.push(page2); | ||
242 | 120 | waitForHeaderAnimation(mainView); | ||
243 | 121 | compare(pageStack.depth, 2, "depth is correctly updated when pushing a page"); | ||
244 | 122 | pageStack.pop(); | ||
245 | 123 | waitForHeaderAnimation(mainView); | ||
246 | 124 | compare(pageStack.depth, 1, "depth is correctly decreased when popping a page"); | ||
247 | 125 | } | ||
248 | 126 | |||
249 | 127 | function test_currentPage() { | ||
250 | 128 | compare(pageStack.currentPage, null, "currentPage is null by default"); | ||
251 | 129 | pageStack.push(page1); | ||
252 | 130 | waitForHeaderAnimation(mainView); | ||
253 | 131 | compare(pageStack.currentPage, page1, "currentPage properly updated"); | ||
254 | 132 | } | ||
255 | 133 | |||
256 | 134 | function test_page_order() { | ||
257 | 135 | compare(pageStack.depth, 0, "depth is 0 initially"); | ||
258 | 136 | pageStack.push(page1); | ||
259 | 137 | pageStack.push(page2); | ||
260 | 138 | waitForHeaderAnimation(mainView); | ||
261 | 139 | compare(pageStack.currentPage, page2, "last pushed page is on top"); | ||
262 | 140 | pageStack.pop(); | ||
263 | 141 | waitForHeaderAnimation(mainView); | ||
264 | 142 | compare(pageStack.currentPage, page1, "popping puts previously pushed page on top"); | ||
265 | 143 | } | ||
266 | 144 | |||
267 | 145 | function test_multipop_bug1461729() { | ||
268 | 146 | for (var i=0; i < 10; i++) { | ||
269 | 147 | pageStack.push(pageComponent); | ||
270 | 148 | } | ||
271 | 149 | waitForHeaderAnimation(mainView); | ||
272 | 150 | compare(pageStack.depth, 10, "couldn't push 10 new pages"); | ||
273 | 151 | // When updating depth after animating out the header, depth | ||
274 | 152 | // is not reliable to be used to guard a loop: | ||
275 | 153 | while(pageStack.depth > 1) { | ||
276 | 154 | pageStack.pop(); | ||
277 | 155 | } | ||
278 | 156 | waitForHeaderAnimation(mainView); | ||
279 | 157 | compare(pageStack.depth, 1, "popping until one page is left failed. " + | ||
280 | 158 | pageStack.depth + " pages left on stack"); | ||
281 | 159 | } | ||
282 | 160 | |||
283 | 161 | function test_active_bug1260116() { | ||
284 | 162 | pageStack.push(page1); | ||
285 | 163 | waitForHeaderAnimation(mainView); | ||
286 | 164 | |||
287 | 165 | compare(page1.active, true, "Page is active after pushing"); | ||
288 | 166 | pageStack.push(page2); | ||
289 | 167 | waitForHeaderAnimation(mainView); | ||
290 | 168 | |||
291 | 169 | compare(page1.active, false, "Page no longer active after pushing a new page"); | ||
292 | 170 | compare(page2.active, true, "New page is active after pushing"); | ||
293 | 171 | pageStack.pop(); | ||
294 | 172 | waitForHeaderAnimation(mainView); | ||
295 | 173 | compare(page1.active, true, "Page re-activated when on top of the stack"); | ||
296 | 174 | compare(page2.active, false, "Page no longer active after being popped"); | ||
297 | 175 | pageStack.clear(); | ||
298 | 176 | waitForHeaderAnimation(mainView); | ||
299 | 177 | |||
300 | 178 | compare(pageInStack.active, false, "Page defined inside PageStack is not active by default"); | ||
301 | 179 | pageStack.push(pageInStack); | ||
302 | 180 | waitForHeaderAnimation(mainView); | ||
303 | 181 | compare(pageInStack.active, true, "Pushing a page on PageStack makes it active"); | ||
304 | 182 | pageStack.pop(); | ||
305 | 183 | waitForHeaderAnimation(mainView); | ||
306 | 184 | compare(pageInStack.active, false, "Popping a page from PageStack makes it inactive"); | ||
307 | 185 | } | ||
308 | 186 | |||
309 | 187 | function test_push_return_values() { | ||
310 | 188 | var pushedPage = pageStack.push(page1); | ||
311 | 189 | compare(pushedPage, page1, | ||
312 | 190 | "PageStack.push() returns pushed Page"); | ||
313 | 191 | pushedPage = pageStack.push(pageComponent); | ||
314 | 192 | compare(pushedPage.header.title, "Page from component", | ||
315 | 193 | "PageStack.push() returns Page created from Component"); | ||
316 | 194 | pushedPage = pageStack.push(Qt.resolvedUrl("MyExternalPageWithNewHeader.qml")); | ||
317 | 195 | compare(pushedPage.header.title, "Page from QML file", | ||
318 | 196 | "PageStack.push() returns Page created from QML file"); | ||
319 | 197 | } | ||
320 | 198 | |||
321 | 199 | function test_page_header_back_button_bug1565811() { | ||
322 | 200 | pageStack.push(page2); | ||
323 | 201 | var backButton = findChild(page2.header.leadingActionBar, | ||
324 | 202 | "pagestack_back_action_button"); | ||
325 | 203 | compare(backButton, null, | ||
326 | 204 | "Page header shows back button with only one page on the stack."); | ||
327 | 205 | pageStack.pop(); | ||
328 | 206 | pageStack.push(page1); | ||
329 | 207 | pageStack.push(page2); | ||
330 | 208 | waitForHeaderAnimation(mainView); | ||
331 | 209 | backButton = findChild(page2.header, "pagestack_back_action_button"); | ||
332 | 210 | compare(backButton && backButton.visible, true, | ||
333 | 211 | "Page header has no back button with two pages on the stack."); | ||
334 | 212 | } | ||
335 | 213 | } | ||
336 | 214 | } |
PASSED: Continuous integration, rev:1933 /jenkins. ubuntu. com/ubuntu- sdk/job/ ubuntu- ui-toolkit- ci-amd64- devel/456/ /jenkins. ubuntu. com/ubuntu- sdk/job/ generic- update- mp/2573/ console
https:/
Executed test runs:
None: https:/
Click here to trigger a rebuild: /jenkins. ubuntu. com/ubuntu- sdk/job/ ubuntu- ui-toolkit- ci-amd64- devel/456/ rebuild
https:/