@@ -145,7 +145,34 @@ Rectangle {
148+ // holds some of the internal ApplicationWindow objects we probe during the tests
149+ property var stateGroup: null
151+ function findInterestingApplicationWindowChildren() {
152+ stateGroup = findInvisibleChild(applicationWindowLoader.item, "applicationWindowStateGroup");
156+ function forgetApplicationWindowChildren() {
160+ // wait until any transition animation has finished
161+ function waitUntilTransitionsEnd() {
162+ var transitions = stateGroup.transitions;
163+ for (var i = 0; i < transitions.length; ++i) {
164+ var transition = transitions[i];
165+ tryCompare(transition, "running", false, 2000);
170+ findInterestingApplicationWindowChildren();
148 function cleanup() {
173 function cleanup() {
174+ forgetApplicationWindowChildren();
149 // reload our test subject to get it in a fresh state once again
176 // reload our test subject to get it in a fresh state once again
150 applicationWindowLoader.active = false;
177 applicationWindowLoader.active = false;
@@ -167,8 +194,6 @@ Rectangle {
169 function test_showSplashUntilAppFullyInit() {
196 function test_showSplashUntilAppFullyInit() {
170− var stateGroup = findInvisibleChild(applicationWindowLoader.item, "applicationWindowStateGroup");
172 verify(stateGroup.state === "splashScreen");
197 verify(stateGroup.state === "splashScreen");
174 if (data.swapInitOrder) {
199 if (data.swapInitOrder) {
@@ -189,25 +214,20 @@ Rectangle {
191 function test_suspendedAppShowsSurface() {
216 function test_suspendedAppShowsSurface() {
192− var stateGroup = findInvisibleChild(applicationWindowLoader.item, "applicationWindowStateGroup");
194 surfaceCheckbox.checked = true;
217 surfaceCheckbox.checked = true;
195 setApplicationState(appRunning);
218 setApplicationState(appRunning);
197 tryCompare(stateGroup, "state", "surface");
220 tryCompare(stateGroup, "state", "surface");
199− // wait until any transition animation has finished
222+ waitUntilTransitionsEnd();
200− tryCompare(stateGroup, "transitioning", false, 2000);
202 setApplicationState(appSuspended);
224 setApplicationState(appSuspended);
204 verify(stateGroup.state === "surface");
226 verify(stateGroup.state === "surface");
205− verify(stateGroup.transitioning === false);
227+ waitUntilTransitionsEnd();
208 function test_killedAppShowsScreenshot() {
230 function test_killedAppShowsScreenshot() {
209− var stateGroup = findInvisibleChild(applicationWindowLoader.item, "applicationWindowStateGroup");
211 surfaceCheckbox.checked = true;
231 surfaceCheckbox.checked = true;
212 setApplicationState(appRunning);
232 setApplicationState(appRunning);
213 tryCompare(stateGroup, "state", "surface");
233 tryCompare(stateGroup, "state", "surface");
@@ -225,13 +245,12 @@ Rectangle {
227 function test_restartApp() {
247 function test_restartApp() {
228− var stateGroup = findInvisibleChild(applicationWindowLoader.item, "applicationWindowStateGroup");
229 var screenshotImage = findChild(applicationWindowLoader.item, "screenshotImage");
248 var screenshotImage = findChild(applicationWindowLoader.item, "screenshotImage");
231 surfaceCheckbox.checked = true;
250 surfaceCheckbox.checked = true;
232 setApplicationState(appRunning);
251 setApplicationState(appRunning);
233 tryCompare(stateGroup, "state", "surface");
252 tryCompare(stateGroup, "state", "surface");
234− tryCompare(stateGroup, "transitioning", false, 2000);
253+ waitUntilTransitionsEnd();
236 setApplicationState(appSuspended);
255 setApplicationState(appSuspended);
@@ -239,19 +258,19 @@ Rectangle {
239 setApplicationState(appStopped);
258 setApplicationState(appStopped);
241 tryCompare(stateGroup, "state", "screenshot");
260 tryCompare(stateGroup, "state", "screenshot");
242− tryCompare(stateGroup, "transitioning", false, 2000);
261+ waitUntilTransitionsEnd();
243 tryCompare(fakeApplication, "surface", null);
262 tryCompare(fakeApplication, "surface", null);
245 // and restart it
264 // and restart it
246 setApplicationState(appStarting);
265 setApplicationState(appStarting);
248− verify(stateGroup.transitioning === false);
267+ waitUntilTransitionsEnd();
249 verify(stateGroup.state === "screenshot");
268 verify(stateGroup.state === "screenshot");
250 verify(fakeApplication.surface === null);
269 verify(fakeApplication.surface === null);
252 setApplicationState(appRunning);
271 setApplicationState(appRunning);
254− verify(stateGroup.transitioning === false);
273+ waitUntilTransitionsEnd();
255 verify(stateGroup.state === "screenshot");
274 verify(stateGroup.state === "screenshot");
257 surfaceCheckbox.checked = true;
276 surfaceCheckbox.checked = true;
@@ -261,12 +280,10 @@ Rectangle {
263 function test_appCrashed() {
282 function test_appCrashed() {
264− var stateGroup = findInvisibleChild(applicationWindowLoader.item, "applicationWindowStateGroup");
266 surfaceCheckbox.checked = true;
283 surfaceCheckbox.checked = true;
267 setApplicationState(appRunning);
284 setApplicationState(appRunning);
268 tryCompare(stateGroup, "state", "surface");
285 tryCompare(stateGroup, "state", "surface");
269− tryCompare(stateGroup, "transitioning", false, 2000);
286+ waitUntilTransitionsEnd();
271 // oh, it crashed...
288 // oh, it crashed...
272 setApplicationState(appStopped);
289 setApplicationState(appStopped);
@@ -276,37 +293,32 @@ Rectangle {
278 function test_keepSurfaceWhileInvisible() {
295 function test_keepSurfaceWhileInvisible() {
279− var stateGroup = findInvisibleChild(applicationWindowLoader.item, "applicationWindowStateGroup");
281 surfaceCheckbox.checked = true;
296 surfaceCheckbox.checked = true;
282 setApplicationState(appRunning);
297 setApplicationState(appRunning);
283 tryCompare(stateGroup, "state", "surface");
298 tryCompare(stateGroup, "state", "surface");
284− tryCompare(stateGroup, "transitioning", false, 2000);
299+ waitUntilTransitionsEnd();
285 verify(fakeApplication.surface !== null);
300 verify(fakeApplication.surface !== null);
287 applicationWindowLoader.item.visible = false;
302 applicationWindowLoader.item.visible = false;
289− verify(stateGroup.transitioning === false);
304+ waitUntilTransitionsEnd();
290 verify(stateGroup.state === "surface");
305 verify(stateGroup.state === "surface");
291 verify(fakeApplication.surface !== null);
306 verify(fakeApplication.surface !== null);
293 applicationWindowLoader.item.visible = true;
308 applicationWindowLoader.item.visible = true;
295− verify(stateGroup.transitioning === false);
310+ waitUntilTransitionsEnd();
296 verify(stateGroup.state === "surface");
311 verify(stateGroup.state === "surface");
297 verify(fakeApplication.surface !== null);
312 verify(fakeApplication.surface !== null);
300 function test_touchesReachSurfaceWhenItsShown() {
315 function test_touchesReachSurfaceWhenItsShown() {
301− var stateGroup = findInvisibleChild(applicationWindowLoader.item, "applicationWindowStateGroup");
303 setApplicationState(appRunning);
316 setApplicationState(appRunning);
304 surfaceCheckbox.checked = true;
317 surfaceCheckbox.checked = true;
306 tryCompare(stateGroup, "state", "surface");
319 tryCompare(stateGroup, "state", "surface");
308− // wait until any transition animation has finished
321+ waitUntilTransitionsEnd();
309− tryCompare(stateGroup, "transitioning", false, 2000);
311 // Because doing stuff in C++ is a PITA we keep the counter in the interal qml impl.
323 // Because doing stuff in C++ is a PITA we keep the counter in the interal qml impl.
312 var fakeSurface = findChild(fakeApplication.surface, "fakeSurfaceQML");
324 var fakeSurface = findChild(fakeApplication.surface, "fakeSurfaceQML");