on xenial help sign in
Make UnityTestCase.touchFlick properly map event coordinates

Just like tap() already does. It was working so far just because items under test were top-left aligned (ie, had x=0 and y=0).

commite3a18fd6e4f9dc1d738a67462c97c62f732baedc authorDaniel d'Andrada <daniel.dandrada@canonical.com> dateMon 24 Nov 2014, 09:17 (12 years ago) parent07e4d0d
1 file changed+11−7
tests/utils/modules/Unity/Test/UnityTestCase.qml+11−7
tests/utils/modules/Unity/Test/UnityTestCase.qml+11−7
@@ -221,6 +221,10 @@ TestCase {
221221 // Make sure the item is rendered
222222 waitForRendering(item);
223223
224+ var root = fetchRootItem(item);
225+ var rootFrom = item.mapToItem(root, x, y);
226+ var rootTo = item.mapToItem(root, toX, toY);
227+
224228 // Default to true for beginTouch if not present
225229 beginTouch = (beginTouch !== undefined) ? beginTouch : true
226230
@@ -233,17 +237,17 @@ TestCase {
233237 // Set a default iterations if not specified
234238 var iterations = (iterations !== undefined) ? iterations : 5
235239
236− var distance = Math.sqrt(Math.pow(toX - x, 2) + Math.pow(toY - y, 2))
240+ var distance = Math.sqrt(Math.pow(rootTo.x - rootFrom.x, 2) + Math.pow(rootTo.Y - rootFrom.y, 2))
237241 var totalTime = (distance / speed) * 1000 /* converting speed to pixels/ms */
238242
239243 var timeStep = totalTime / iterations
240− var diffX = (toX - x) / iterations
241− var diffY = (toY - y) / iterations
244+ var diffX = (rootTo.x - rootFrom.x) / iterations
245+ var diffY = (rootTo.y - rootFrom.y) / iterations
242246 if (beginTouch) {
243247 fakeDateTime.currentTimeMs += timeStep
244248
245249 var event = touchEvent()
246− event.press(0 /* touchId */, x, y)
250+ event.press(0 /* touchId */, rootFrom.x, rootFrom.y)
247251 event.commit()
248252 }
249253 for (var i = 0; i < iterations; ++i) {
@@ -253,19 +257,19 @@ TestCase {
253257 // the point specified
254258 wait(iterations / speed)
255259 var event = touchEvent()
256− event.move(0 /* touchId */, toX, toY)
260+ event.move(0 /* touchId */, rootTo.x, rootTo.y)
257261 event.commit()
258262 } else {
259263 wait(iterations / speed)
260264 var event = touchEvent()
261− event.move(0 /* touchId */, x + (i + 1) * diffX, y + (i + 1) * diffY)
265+ event.move(0 /* touchId */, rootFrom.x + (i + 1) * diffX, rootFrom.y + (i + 1) * diffY)
262266 event.commit()
263267 }
264268 }
265269 if (endTouch) {
266270 fakeDateTime.currentTimeMs += timeStep
267271 var event = touchEvent()
268− event.release(0 /* touchId */, toX, toY)
272+ event.release(0 /* touchId */, rootTo.x, rootTo.y)
269273 event.commit()
270274 }
271275 }