From f897775850dfbe0e668e9c8b428537e8bb096c01 Mon Sep 17 00:00:00 2001 From: Michal Klocek Date: Mon, 23 May 2016 19:15:10 +0200 Subject: Replace waitForRendering calls in qml unit tests Changes eea315187d1add70aaf69745c031b8d6342b2303 moved map items final position calculation to "polish" call of sg. In unit testing "waitForRendering" was introduced to sync between input events processing and items being polished. Unfortunately this approach is race condition prone, since render can run in separate thread and frame swapped signals are emitted from render thread. Replace waitForRendering with waitForPolished instead. Improve test execution by providing init() and intTestCase() functions for map items unit tests, so test can be run "out of order" manner. Add missing namespace macros for location test qml plugin. Task-number: QTBUG-31797 Task-number: QTBUG-53455 Change-Id: Iec083143ae621e5be603d03f43d6ef260b056d0f Reviewed-by: Paolo Angelelli Reviewed-by: Simon Hausmann Reviewed-by: Alex Blasche --- tests/auto/declarative_ui/tst_map_flick.qml | 1 - tests/auto/declarative_ui/tst_map_item.qml | 176 ++++++++++----------- tests/auto/declarative_ui/tst_map_item_details.qml | 88 +++++------ .../declarative_ui/tst_map_item_fit_viewport.qml | 2 - .../declarativetestplugin.pro | 16 +- .../plugins/declarativetestplugin/locationtest.cpp | 10 ++ .../qdeclarativelocationtestmodel.cpp | 4 + .../qdeclarativelocationtestmodel_p.h | 4 + .../qdeclarativepinchgenerator.cpp | 4 + .../qdeclarativepinchgenerator_p.h | 4 + tests/plugins/declarativetestplugin/testhelper.h | 58 +++++++ 11 files changed, 215 insertions(+), 152 deletions(-) create mode 100644 tests/plugins/declarativetestplugin/testhelper.h diff --git a/tests/auto/declarative_ui/tst_map_flick.qml b/tests/auto/declarative_ui/tst_map_flick.qml index e225480d..4094a7c7 100644 --- a/tests/auto/declarative_ui/tst_map_flick.qml +++ b/tests/auto/declarative_ui/tst_map_flick.qml @@ -288,7 +288,6 @@ Item { { map.center.latitude = 50 map.center.longitude = 50 - waitForRendering(map) mousePress(page, 0, 0) for (var i = 0; i < 50; i += 5) { wait(20) diff --git a/tests/auto/declarative_ui/tst_map_item.qml b/tests/auto/declarative_ui/tst_map_item.qml index 5be8896f..09657f78 100644 --- a/tests/auto/declarative_ui/tst_map_item.qml +++ b/tests/auto/declarative_ui/tst_map_item.qml @@ -35,6 +35,7 @@ import QtQuick 2.0 import QtTest 1.0 import QtLocation 5.6 import QtPositioning 5.5 +import QtLocation.Test 5.6 /* @@ -67,7 +68,6 @@ Item { height: 240 Plugin { id: testPlugin; name : "qmlgeo.test.plugin"; allowExperimental: true } - property variant mapDefaultCenter: QtPositioning.coordinate(20, 20) property variant someCoordinate1: QtPositioning.coordinate(15, 15) property variant someCoordinate2: QtPositioning.coordinate(16, 16) @@ -115,21 +115,10 @@ Item { id: map; x: 20; y: 20; width: 200; height: 200 zoomLevel: 9 - center: mapDefaultCenter plugin: testPlugin; MapRectangle { id: preMapRect - color: 'darkcyan' - border.width: 0 - topLeft { - latitude: 20 - longitude: 20 - } - bottomRight { - latitude: 10 - longitude: 30 - } MouseArea { id: preMapRectMa anchors.fill: parent @@ -144,13 +133,6 @@ Item { } MapCircle { id: preMapCircle - color: 'darkmagenta' - border.width: 0 - center { - latitude: 10 - longitude: 30 - } - radius: 10000 MouseArea { id: preMapCircleMa anchors.fill: parent @@ -175,11 +157,8 @@ Item { SignalSpy { id: preMapQuickItemClicked; target: parent; signalName: "clicked" } SignalSpy { id: preMapQuickItemActiveChanged; target: parent.drag; signalName: "activeChanged" } } - coordinate { - latitude: 35 - longitude: 3 - } sourceItem: Rectangle { + id: preMapQuickItemSource color: 'darkgreen' width: 20 height: 20 @@ -240,21 +219,69 @@ Item { name: "MapItems" when: windowShown - function test_aa_items_on_map() { // aa et al. for execution order - wait(10) + function initTestCase() + { // sanity check that the coordinate conversion works, as // rest of the case relies on it. for robustness cut // a little slack with fuzzy compare var mapcenter = map.fromCoordinate(map.center) verify (fuzzy_compare(mapcenter.x, 100, 2)) verify (fuzzy_compare(mapcenter.y, 100, 2)) + } - // precondition - compare(preMapRectClicked.count, 0) - compare(preMapCircleClicked.count, 0) + function init() + { + map.center = QtPositioning.coordinate(20, 20) + preMapCircle.center = QtPositioning.coordinate(10,30) + preMapCircle.border.width = 0 + preMapCircle.color = 'red' + preMapCircle.radius = 10000 + preMapCircleClicked.clear() + preMapCircleCenterChanged.clear() + preMapCircleColorChanged.clear() + preMapCircleRadiusChanged.clear() + preMapCircleBorderColorChanged.clear() + preMapCircleBorderWidthChanged.clear() + + preMapRect.color = 'red' + preMapRect.border.width = 0 + preMapRect.topLeft = QtPositioning.coordinate(20, 20) + preMapRect.bottomRight = QtPositioning.coordinate(10, 30) + preMapRectTopLeftChanged.clear() + preMapRectBottomRightChanged.clear() + preMapRectColorChanged.clear() + preMapRectClicked.clear() + preMapRectActiveChanged.clear() + + preMapQuickItem.sourceItem = preMapQuickItemSource + preMapQuickItem.zoomLevel = 0 + preMapQuickItem.coordinate = QtPositioning.coordinate(35, 3) + preMapQuickItemClicked.clear() + preMapQuickItem.anchorPoint = Qt.point(0,0) + preMapQuickItemCoordinateChanged.clear() + preMapQuickItemAnchorPointChanged.clear() + preMapQuickItemZoomLevelChanged.clear() + preMapQuickItemSourceItemChanged.clear() + + preMapPolygonClicked.clear() + preMapPolylineColorChanged.clear() + preMapPolylineWidthChanged.clear() + preMapPolylinePathChanged.clear() + preMapPolygonPathChanged.clear() + preMapPolygonColorChanged.clear() + preMapPolygonBorderColorChanged.clear() + preMapPolygonBorderWidthChanged.clear() + preMapRouteRouteChanged.clear() + preMapRouteLineColorChanged.clear() + preMapRouteLineWidthChanged.clear() + verify(LocationTestHelper.waitForPolished(map)) + } + function test_items_on_map() + { // click rect map.center = preMapRect.topLeft + verify(LocationTestHelper.waitForPolished(map)) var point = map.fromCoordinate(preMapRect.topLeft) mouseClick(map, point.x + 5, point.y + 5) tryCompare(preMapRectClicked, "count", 1) @@ -264,11 +291,11 @@ Item { // click circle, overlaps and is above rect map.center = preMapCircle.center - verify(waitForRendering(map)) + verify(LocationTestHelper.waitForPolished(map)) point = map.fromCoordinate(preMapCircle.center) mouseClick(map, point.x - 5, point.y - 5) - tryCompare(preMapRectClicked, "count", 1) - compare(preMapCircleClicked.count, 1) + tryCompare(preMapCircleClicked, "count", 1) + compare(preMapRectClicked.count, 1) // click within circle bounding rect but not inside the circle geometry map.center = preMapCircle.center.atDistanceAndAzimuth(preMapCircle.radius, -45) @@ -279,7 +306,7 @@ Item { // click quick item compare(preMapQuickItemClicked.count, 0) map.center = preMapQuickItem.coordinate - verify(waitForRendering(map)) + verify(LocationTestHelper.waitForPolished(map)) point = map.fromCoordinate(preMapQuickItem.coordinate) mouseClick(map, point.x + 5, point.y + 5) tryCompare(preMapQuickItemClicked, "count", 1) @@ -287,20 +314,22 @@ Item { // click polygon compare (preMapPolygonClicked.count, 0) map.center = preMapPolygon.path[1] - verify(waitForRendering(map)) + verify(LocationTestHelper.waitForPolished(map)) point = map.fromCoordinate(preMapPolygon.path[1]) mouseClick(map, point.x - 5, point.y) tryCompare(preMapPolygonClicked, "count", 1) + } + function test_no_items_on_map() + { // remove items and repeat clicks to verify they are gone map.clearMapItems() - clear_data() compare (map.mapItems.length, 0) map.center = preMapRect.topLeft - point = map.fromCoordinate(preMapRect.topLeft) + var point = map.fromCoordinate(preMapRect.topLeft) mouseClick(map, point.x + 5, point.y + 5) compare(preMapRectClicked.count, 0) - visualInspectionPoint() + verify(LocationTestHelper.waitForPolished(map)) map.center = preMapCircle.center point = map.fromCoordinate(preMapCircle.center) mouseClick(map, point.x - 5, point.y - 5) @@ -329,30 +358,31 @@ Item { map.addMapItem(preMapPolyline) map.addMapItem(preMapRoute) compare (map.mapItems.length, 6) - visualInspectionPoint() + map.center = preMapRect.topLeft - verify(waitForRendering(map)) + verify(LocationTestHelper.waitForPolished(map)) point = map.fromCoordinate(preMapRect.topLeft) mouseClick(map, point.x + 5, point.y + 5) tryCompare(preMapRectClicked, "count", 1) map.center = preMapCircle.center - verify(waitForRendering(map)) + verify(LocationTestHelper.waitForPolished(map)) point = map.fromCoordinate(preMapCircle.center) mouseClick(map, point.x - 5, point.y - 5) tryCompare(preMapRectClicked, "count", 1) compare(preMapCircleClicked.count, 1) map.center = preMapCircle.center.atDistanceAndAzimuth(preMapCircle.radius, -45) + verify(LocationTestHelper.waitForPolished(map)) mouseClick(map, preMapCircle.x + 4, preMapCircle.y + 4) tryCompare(preMapRectClicked, "count", 2) compare(preMapCircleClicked.count, 1) compare(preMapQuickItemClicked.count, 0) map.center = preMapQuickItem.coordinate - verify(waitForRendering(map)) + verify(LocationTestHelper.waitForPolished(map)) point = map.fromCoordinate(preMapQuickItem.coordinate) mouseClick(map, point.x + 5, point.y + 5) tryCompare(preMapQuickItemClicked, "count", 1) map.center = preMapPolygon.path[1] - verify(waitForRendering(map)) + verify(LocationTestHelper.waitForPolished(map)) point = map.fromCoordinate(preMapPolygon.path[1]) mouseClick(map, point.x - 5, point.y) tryCompare(preMapPolygonClicked, "count", 1) @@ -361,8 +391,7 @@ Item { // item clips to map. not sure if this is sensible test map.addMapItem(extMapCircle) map.center = extMapCircle.center - verify(waitForRendering(map)) - visualInspectionPoint(); + verify(LocationTestHelper.waitForPolished(map)) point = map.fromCoordinate(extMapCircle.center) mouseClick(map, point.x, point.y) tryCompare(extMapCircleClicked, "count", 1) @@ -372,8 +401,7 @@ Item { map.addMapItem(extMapQuickItem) map.center = extMapQuickItem.coordinate - verify(waitForRendering(map)) - visualInspectionPoint(); + verify(LocationTestHelper.waitForPolished(map)) point = map.fromCoordinate(extMapQuickItem.coordinate) mouseClick(map, point.x + 5, point.y + 5) tryCompare(extMapQuickItemClicked, "count", 1) @@ -382,13 +410,12 @@ Item { map.removeMapItem(extMapQuickItem) } - function test_ab_drag() { - clear_data() + function test_drag() + { // basic drags, drag rectangle compare (preMapRectActiveChanged.count, 0) map.center = preMapRect.topLeft - verify(waitForRendering(map)) - + verify(LocationTestHelper.waitForPolished(map)) var i var point = map.fromCoordinate(preMapRect.topLeft) var targetCoordinate = map.toCoordinate(51, 51) @@ -411,7 +438,7 @@ Item { // drag circle compare (preMapCircleActiveChanged.count, 0) map.center = preMapCircle.center - verify(waitForRendering(map)) + verify(LocationTestHelper.waitForPolished(map)) point = map.fromCoordinate(preMapCircle.center) targetCoordinate = map.toCoordinate(51, 51) mousePress(map, point.x, point.y) @@ -420,7 +447,7 @@ Item { mouseMove(map, point.x - i, point.y - i) } mouseRelease(map, point.x - i, point.y - i) - visualInspectionPoint() + verify(LocationTestHelper.waitForPolished(map)) compare(preMapRectActiveChanged.count, 2) compare(preMapCircleActiveChanged.count, 2) verify(preMapCircleCenterChanged.count > 1) @@ -430,7 +457,7 @@ Item { // drag quick item compare (preMapQuickItemActiveChanged.count, 0) map.center = preMapQuickItem.coordinate - verify(waitForRendering(map)) + verify(LocationTestHelper.waitForPolished(map)) point = map.fromCoordinate(preMapQuickItem.coordinate) targetCoordinate = map.toCoordinate(51, 51) mousePress(map, point.x + 5, point.y + 5) @@ -439,15 +466,15 @@ Item { mouseMove(map, point.x - i, point.y - i) } mouseRelease(map, point.x - i, point.y - i) - visualInspectionPoint() + verify(LocationTestHelper.waitForPolished(map)) compare(preMapQuickItemActiveChanged.count, 2) verify(preMapQuickItemCoordinateChanged.count > 1) verify(fuzzy_compare(preMapQuickItem.coordinate.latitude, targetCoordinate.latitude, 0.2)) verify(fuzzy_compare(preMapQuickItem.coordinate.longitude, targetCoordinate.longitude, 0.2)) } - function test_ac_basic_properties() { - clear_data() + function test_basic_items_properties() + { // circle preMapCircle.center = someCoordinate1 compare (preMapCircleCenterChanged.count, 1) @@ -563,35 +590,6 @@ Item { compare (preMapQuickItemSourceItemChanged.count, 1) } - function clear_data() { - preMapRectClicked.clear() - preMapCircleClicked.clear() - preMapQuickItemClicked.clear() - preMapPolygonClicked.clear() - preMapCircleCenterChanged.clear() - preMapCircleColorChanged.clear() - preMapCircleRadiusChanged.clear() - preMapCircleBorderColorChanged.clear() - preMapCircleBorderWidthChanged.clear() - preMapRectTopLeftChanged.clear() - preMapRectBottomRightChanged.clear() - preMapRectColorChanged.clear() - preMapPolylineColorChanged.clear() - preMapPolylineWidthChanged.clear() - preMapPolylinePathChanged.clear() - preMapPolygonPathChanged.clear() - preMapPolygonColorChanged.clear() - preMapPolygonBorderColorChanged.clear() - preMapPolygonBorderWidthChanged.clear() - preMapRouteRouteChanged.clear() - preMapRouteLineColorChanged.clear() - preMapRouteLineWidthChanged.clear() - preMapQuickItemCoordinateChanged.clear() - preMapQuickItemAnchorPointChanged.clear() - preMapQuickItemZoomLevelChanged.clear() - preMapQuickItemSourceItemChanged.clear() - } - function fuzzy_compare(val, ref, tol) { var tolerance = 2 if (tol !== undefined) @@ -602,16 +600,6 @@ Item { return false; } - // call to visualInspectionPoint testcase (for dev time visual inspection) - function visualInspectionPoint(time) { - var waitTime = 0 // 300 - if (time !== undefined) - waitTime = time - if (waitTime > 0) { - console.log('halting for ' + waitTime + ' milliseconds') - wait (waitTime) - } - } // these 'real_' prefixed functions do sequences as // it would occur on real app (e.g. doubleclick is in fact // a sequence of press, release, doubleclick, release). diff --git a/tests/auto/declarative_ui/tst_map_item_details.qml b/tests/auto/declarative_ui/tst_map_item_details.qml index b29b3a82..fd9b0064 100644 --- a/tests/auto/declarative_ui/tst_map_item_details.qml +++ b/tests/auto/declarative_ui/tst_map_item_details.qml @@ -35,6 +35,7 @@ import QtQuick 2.0 import QtTest 1.0 import QtPositioning 5.5 import QtLocation 5.6 +import QtLocation.Test 5.6 Item { id: page @@ -308,22 +309,34 @@ Item { (0,240) ---------------------------------------------------- (240,240) */ - function test_aa_precondition() { - wait(10) + function initTestCase() + { // sanity check that the coordinate conversion works var mapcenter = map.fromCoordinate(map.center) verify (fuzzy_compare(mapcenter.x, 100, 2)) verify (fuzzy_compare(mapcenter.y, 100, 2)) } - function test_polygon() { + function init() + { map.clearMapItems() - clear_data() - compare (extMapPolygon.border.width, 1.0) - compare (extMapPolygonClicked.count, 0) + extMapPolygon.border.width = 1.0 + extMapPolygonClicked.clear() + extMapPolylineColorChanged.clear() + extMapPolylineWidthChanged.clear() + extMapPolylinePathChanged.clear() + extMapPolygonPathChanged.clear() + extMapPolygonColorChanged.clear() + extMapPolygonBorderColorChanged.clear() + extMapPolygonBorderWidthChanged.clear() + } + + function test_polygon() + { map.center = extMapPolygon.path[1] var point = map.fromCoordinate(extMapPolygon.path[1]) map.addMapItem(extMapPolygon) + verify(LocationTestHelper.waitForPolished(map)) verify(extMapPolygon.path.length == 2) mouseClick(map, point.x - 5, point.y) compare(extMapPolygonClicked.count, 0) @@ -331,7 +344,7 @@ Item { verify(extMapPolygon0.path.length == 0) extMapPolygon.addCoordinate(polyCoordinate) verify(extMapPolygon.path.length == 3) - verify(waitForRendering(map)) + verify(LocationTestHelper.waitForPolished(map)) mouseClick(map, point.x - 5, point.y) tryCompare(extMapPolygonClicked, "count", 1) @@ -352,9 +365,8 @@ Item { verify(extMapPolygon.path.length == 0) } - function test_polyline() { - map.clearMapItems() - clear_data() + function test_polyline() + { compare (extMapPolyline.line.width, 1.0) var point = map.fromCoordinate(extMapPolyline.path[1]) map.addMapItem(extMapPolyline0) // mustn't crash or ill-behave @@ -411,14 +423,9 @@ Item { (0,240) ---------------------------------------------------- (600,240) */ - function test_yz_dateline() { - if (Qt.platform.os === "windows") - skip("QTBUG-53455"); - map.clearMapItems() - clear_data() + function test_dateline() { map.center = datelineCoordinate map.zoomLevel = 2.2 - // rectangle // item spanning across dateline map.addMapItem(extMapRectDateline) @@ -434,10 +441,10 @@ Item { verify(point.x > map.width / 2.0) // move item edge onto dateline extMapRectDateline.topLeft.longitude = datelineCoordinate.longitude - verify(waitForRendering(map)) point = map.fromCoordinate(extMapRectDateline.topLeft) verify(point.x == map.width / 2.0) // drag item back onto dateline + verify(LocationTestHelper.waitForPolished(map)) mousePress(map, point.x + 5, point.y + 5) var i for (i=0; i < 20; i += 2) { @@ -445,6 +452,7 @@ Item { mouseMove(map, point.x + 5 - i, point.y + 5 ) } mouseRelease(map, point.x + 5 - i, point.y + 5) + verify(LocationTestHelper.waitForPolished(map)) point = map.fromCoordinate(extMapRectDateline.topLeft) verify(point.x < map.width / 2.0) point = map.fromCoordinate(extMapRectDateline.bottomRight) @@ -458,15 +466,16 @@ Item { point = map.fromCoordinate(extMapCircleDateline.center) verify(point.x == map.width / 2.0) extMapCircleDateline.center.longitude = datelineCoordinateRight.longitude - verify(waitForRendering(map)) point = map.fromCoordinate(extMapCircleDateline.center) verify(point.x > map.width / 2.0) + verify(LocationTestHelper.waitForPolished(map)) mousePress(map, point.x, point.y) for (i=0; i < 40; i += 4) { wait(1) mouseMove(map, point.x - i, point.y) } mouseRelease(map, point.x - i, point.y) + verify(LocationTestHelper.waitForPolished(map)) point = map.fromCoordinate(extMapCircleDateline.center) verify(point.x < map.width / 2.0) map.removeMapItem(extMapCircleDateline) @@ -478,15 +487,16 @@ Item { point = map.fromCoordinate(extMapQuickItemDateline.coordinate) verify(point.x < map.width / 2.0) extMapQuickItemDateline.coordinate.longitude = datelineCoordinateRight.longitude - verify(waitForRendering(map)) point = map.fromCoordinate(extMapQuickItemDateline.coordinate) verify(point.x > map.width / 2.0) + verify(LocationTestHelper.waitForPolished(map)) mousePress(map, point.x + 5, point.y + 5) for (i=0; i < 50; i += 5) { wait(1) mouseMove(map, point.x + 5 - i, point.y + 5 ) } mouseRelease(map, point.x + 5 - i, point.y + 5) + verify(LocationTestHelper.waitForPolished(map)) point = map.fromCoordinate(extMapQuickItemDateline.coordinate) verify(point.x < map.width / 2.0) map.removeMapItem(extMapQuickItemDateline) @@ -520,16 +530,16 @@ Item { path = extMapPolygonDateline.path; path[3].longitude = datelineCoordinate.longitude; extMapPolygonDateline.path = path; - verify(waitForRendering(map)) point = map.fromCoordinate(extMapPolygonDateline.path[3]) verify(point.x == map.width / 2.0) + verify(LocationTestHelper.waitForPolished(map)) mousePress(map, point.x + 5, point.y - 5) for (i=0; i < 16; i += 2) { wait(1) mouseMove(map, point.x + 5 - i, point.y - 5 ) } mouseRelease(map, point.x + 5 - i, point.y - 5) - verify(waitForRendering(map,10000)) + verify(LocationTestHelper.waitForPolished(map)) point = map.fromCoordinate(extMapPolygonDateline.path[0]) verify(point.x < map.width / 2.0) point = map.fromCoordinate(extMapPolygonDateline.path[1]) @@ -594,11 +604,7 @@ Item { (0,240) ---------------------------------------------------- (600,240) */ - function test_zz_border_drag() { - if (Qt.platform.os === "windows") - skip("QTBUG-53455"); - map.clearMapItems() - clear_data() + function test_border_drag() { map.center = datelineCoordinate // lower zoom level and change widths to reveal map border. @@ -607,10 +613,9 @@ Item { map.zoomLevel = 1 page.width = 600 map.width = 560 - // rectangle map.addMapItem(extMapRectEdge) - verify(waitForRendering(map)) + verify(LocationTestHelper.waitForPolished(map)) verify(extMapRectEdge.topLeft.longitude == -15) verify(extMapRectEdge.bottomRight.longitude == -5) var point = map.fromCoordinate(extMapRectEdge.topLeft) @@ -630,6 +635,7 @@ Item { mouseMove(map, point.x + 5 + i, point.y + 5) } mouseRelease(map, point.x + 5 + i, point.y + 5) + verify(LocationTestHelper.waitForPolished(map)) // currently the bottom right screen point is unwrapped and drawn // out of the map border, but in the future culling may take place // so tests for points outside the map border are ignored, @@ -643,6 +649,7 @@ Item { // circle map.addMapItem(extMapCircleEdge) map.center = datelineCoordinate + verify(LocationTestHelper.waitForPolished(map)) verify(extMapCircleEdge.center.longitude == -15) var point = map.fromCoordinate(extMapCircleEdge.center) verify(point.x < map.width) @@ -656,6 +663,7 @@ Item { mouseMove(map, point.x + i, point.y) } mouseRelease(map, point.x + i, point.y) + verify(LocationTestHelper.waitForPolished(map)) point = map.fromCoordinate(extMapCircleEdge.center) verify(point.x < map.width) verify(point.x > map.width / 2.0) @@ -665,7 +673,7 @@ Item { // quickitem map.addMapItem(extMapQuickItemEdge) map.center = datelineCoordinate - verify(waitForRendering(map)) + verify(LocationTestHelper.waitForPolished(map)) verify(extMapQuickItemEdge.coordinate.longitude == -15) point = map.fromCoordinate(extMapQuickItemEdge.coordinate) verify(point.x < map.width) @@ -678,6 +686,7 @@ Item { mouseMove(map, point.x + 5 + i, point.y + 5) } mouseRelease(map, point.x + 5 + i, point.y + 5) + verify(LocationTestHelper.waitForPolished(map)) point = map.fromCoordinate(extMapQuickItemEdge.coordinate) verify(point.x < map.width) verify(point.x > map.width / 2.0) @@ -687,7 +696,7 @@ Item { // polygon map.center = datelineCoordinate map.addMapItem(extMapPolygonEdge) - verify(waitForRendering(map)) + verify(LocationTestHelper.waitForPolished(map)) verify(extMapPolygonEdge.path[0].longitude == -15) verify(extMapPolygonEdge.path[1].longitude == -5) verify(extMapPolygonEdge.path[2].longitude == -5) @@ -712,6 +721,7 @@ Item { mouseMove(map, point.x + 5 + i, point.y - 5) } mouseRelease(map, point.x + 5 + i, point.y - 5) + verify(LocationTestHelper.waitForPolished(map)) point = map.fromCoordinate(extMapPolygonEdge.path[0]) verify(point.x < map.width) verify(point.x > map.width / 2.0) @@ -722,18 +732,6 @@ Item { map.removeMapItem(extMapPolygonEdge) } - - function clear_data() { - extMapPolygonClicked.clear() - extMapPolylineColorChanged.clear() - extMapPolylineWidthChanged.clear() - extMapPolylinePathChanged.clear() - extMapPolygonPathChanged.clear() - extMapPolygonColorChanged.clear() - extMapPolygonBorderColorChanged.clear() - extMapPolygonBorderWidthChanged.clear() - } - function fuzzy_compare(val, ref, tol) { var tolerance = 2 if (tol !== undefined) @@ -743,11 +741,5 @@ Item { console.log('map fuzzy cmp returns false for value, ref, tolerance: ' + val + ', ' + ref + ', ' + tolerance) return false; } - - // call to visualInspectionPoint testcase (only for development time visual inspection) - function visualInspectionPoint(text) { - progressText.text = text - //wait (500) - } } } diff --git a/tests/auto/declarative_ui/tst_map_item_fit_viewport.qml b/tests/auto/declarative_ui/tst_map_item_fit_viewport.qml index b3ac1d8f..8671d05d 100644 --- a/tests/auto/declarative_ui/tst_map_item_fit_viewport.qml +++ b/tests/auto/declarative_ui/tst_map_item_fit_viewport.qml @@ -240,7 +240,6 @@ Item { // normal case - fit viewport to items which are all already visible verify_visibility_all_items() map.fitViewportToMapItems() - verify(waitForRendering(map)) visualInspectionPoint() verify_visibility_all_items() } @@ -578,7 +577,6 @@ Item { map.addMapItem(preMapPolygon) map.addMapItem(preMapPolyline) map.addMapItem(preMapRoute) - verify(waitForRendering(map)) compare (map.mapItems.length, 6) calculate_bounds() } diff --git a/tests/plugins/declarativetestplugin/declarativetestplugin.pro b/tests/plugins/declarativetestplugin/declarativetestplugin.pro index a27267d7..0a99e7a7 100644 --- a/tests/plugins/declarativetestplugin/declarativetestplugin.pro +++ b/tests/plugins/declarativetestplugin/declarativetestplugin.pro @@ -7,13 +7,15 @@ QT += gui-private qml quick location testlib INCLUDEPATH += ../../../src/imports/location INCLUDEPATH += ../../../src/location -HEADERS += qdeclarativepinchgenerator_p.h \ - qdeclarativelocationtestmodel_p.h - - -SOURCES += locationtest.cpp \ - qdeclarativepinchgenerator.cpp \ - qdeclarativelocationtestmodel.cpp +HEADERS += \ + qdeclarativepinchgenerator_p.h \ + qdeclarativelocationtestmodel_p.h \ + testhelper.h + +SOURCES += \ + locationtest.cpp \ + qdeclarativepinchgenerator.cpp \ + qdeclarativelocationtestmodel.cpp IMPORT_FILES = \ qmldir diff --git a/tests/plugins/declarativetestplugin/locationtest.cpp b/tests/plugins/declarativetestplugin/locationtest.cpp index cde1d97f..7f579196 100644 --- a/tests/plugins/declarativetestplugin/locationtest.cpp +++ b/tests/plugins/declarativetestplugin/locationtest.cpp @@ -33,6 +33,7 @@ #include "qdeclarativepinchgenerator_p.h" #include "qdeclarativelocationtestmodel_p.h" +#include "testhelper.h" #include #include @@ -41,6 +42,14 @@ QT_BEGIN_NAMESPACE +static QObject *helper_factory(QQmlEngine *engine, QJSEngine *scriptEngine) +{ + Q_UNUSED(engine); + Q_UNUSED(scriptEngine); + TestHelper *helper = new TestHelper(); + return helper; +} + class QLocationDeclarativeTestModule: public QQmlExtensionPlugin { Q_OBJECT @@ -51,6 +60,7 @@ public: if (QLatin1String(uri) == QLatin1String("QtLocation.Test")) { qmlRegisterType(uri, 5, 5, "PinchGenerator"); qmlRegisterType(uri, 5, 5, "TestModel"); + qmlRegisterSingletonType(uri, 5, 6, "LocationTestHelper", helper_factory); } else { qWarning() << "Unsupported URI given to load location test QML plugin: " << QLatin1String(uri); } diff --git a/tests/plugins/declarativetestplugin/qdeclarativelocationtestmodel.cpp b/tests/plugins/declarativetestplugin/qdeclarativelocationtestmodel.cpp index f0b03746..87e5c9f2 100644 --- a/tests/plugins/declarativetestplugin/qdeclarativelocationtestmodel.cpp +++ b/tests/plugins/declarativetestplugin/qdeclarativelocationtestmodel.cpp @@ -36,6 +36,8 @@ #include #include +QT_BEGIN_NAMESPACE + QDeclarativeLocationTestModel::QDeclarativeLocationTestModel(QObject *parent): QAbstractListModel(parent), delay_(0), @@ -247,3 +249,5 @@ QHash QDeclarativeLocationTestModel::roleNames() const roles.insert(TestDataRole, "modeldata"); return roles; } + +QT_END_NAMESPACE diff --git a/tests/plugins/declarativetestplugin/qdeclarativelocationtestmodel_p.h b/tests/plugins/declarativetestplugin/qdeclarativelocationtestmodel_p.h index 19564336..91f152ac 100644 --- a/tests/plugins/declarativetestplugin/qdeclarativelocationtestmodel_p.h +++ b/tests/plugins/declarativetestplugin/qdeclarativelocationtestmodel_p.h @@ -41,6 +41,8 @@ #include #include +QT_BEGIN_NAMESPACE + class DataObject: public QObject { Q_OBJECT @@ -128,4 +130,6 @@ private: bool crazyMode_; }; +QT_END_NAMESPACE + #endif diff --git a/tests/plugins/declarativetestplugin/qdeclarativepinchgenerator.cpp b/tests/plugins/declarativetestplugin/qdeclarativepinchgenerator.cpp index 98da18d0..632f9fa9 100644 --- a/tests/plugins/declarativetestplugin/qdeclarativepinchgenerator.cpp +++ b/tests/plugins/declarativetestplugin/qdeclarativepinchgenerator.cpp @@ -38,6 +38,8 @@ #include #include +QT_BEGIN_NAMESPACE + QDeclarativePinchGenerator::QDeclarativePinchGenerator(): target_(0), state_(Invalid), @@ -381,3 +383,5 @@ int QDeclarativePinchGenerator::startDragDistance() { return qApp->styleHints()->startDragDistance(); } + +QT_END_NAMESPACE diff --git a/tests/plugins/declarativetestplugin/qdeclarativepinchgenerator_p.h b/tests/plugins/declarativetestplugin/qdeclarativepinchgenerator_p.h index b2a4e77c..db5c9131 100644 --- a/tests/plugins/declarativetestplugin/qdeclarativepinchgenerator_p.h +++ b/tests/plugins/declarativetestplugin/qdeclarativepinchgenerator_p.h @@ -46,6 +46,8 @@ #define SWIPES_REQUIRED 2 +QT_BEGIN_NAMESPACE + typedef struct { QList touchPoints; QList durations; @@ -137,4 +139,6 @@ private: QTouchDevice* device_; }; +QT_END_NAMESPACE + #endif diff --git a/tests/plugins/declarativetestplugin/testhelper.h b/tests/plugins/declarativetestplugin/testhelper.h new file mode 100644 index 00000000..c6d9f3b3 --- /dev/null +++ b/tests/plugins/declarativetestplugin/testhelper.h @@ -0,0 +1,58 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL21$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef TESTHELPER_H +#define TESTHELPER_H + +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class TestHelper: public QObject +{ + Q_OBJECT +public: + TestHelper(QObject *parent = Q_NULLPTR):QObject(parent){} + Q_INVOKABLE bool waitForPolished(QQuickItem *item, int timeout = 10000) const + { + QSignalSpy spy(item->window(), &QQuickWindow::afterAnimating); + return spy.wait(timeout); + } +}; + +QT_END_NAMESPACE + +#endif // TESTHELPER_H -- cgit v1.2.3