blob: e7695288fe26a547804a55d61c29ea731b8ad9ee [file] [log] [blame]
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the test suite of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:GPL-EXCEPT$
** 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 https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/
import QtQuick 2.0
import QtTest 1.0
import QtPositioning 5.5
import QtLocation 5.6
import QtLocation.Test 5.6
Item {
id: page
x: 0; y: 0;
width: 240
height: 240
Plugin { id: testPlugin
name : "qmlgeo.test.plugin"
allowExperimental: true
parameters: [ PluginParameter { name: "finishRequestImmediately"; value: true}]
}
property variant mapDefaultCenter: QtPositioning.coordinate(20, 20)
property variant datelineCoordinate: QtPositioning.coordinate(20, 180)
property variant datelineCoordinateLeft: QtPositioning.coordinate(20, 170)
property variant datelineCoordinateRight: QtPositioning.coordinate(20, -170)
MapPolygon {
id: extMapPolygon
color: 'darkgrey'
path: [
{ latitude: 25, longitude: 5 },
{ latitude: 20, longitude: 10 }
]
MouseArea {
anchors.fill: parent
drag.target: parent
SignalSpy { id: extMapPolygonClicked; target: parent; signalName: "clicked" }
}
SignalSpy {id: extMapPolygonPathChanged; target: parent; signalName: "pathChanged"}
SignalSpy {id: extMapPolygonColorChanged; target: parent; signalName: "colorChanged"}
SignalSpy {id: extMapPolygonBorderWidthChanged; target: parent.border; signalName: "widthChanged"}
SignalSpy {id: extMapPolygonBorderColorChanged; target: parent.border; signalName: "colorChanged"}
}
property variant polyCoordinate: QtPositioning.coordinate(15, 6)
MapPolygon {
id: extMapPolygon0
color: 'darkgrey'
}
MapPolyline {
id: extMapPolyline0
}
MapPolyline {
id: extMapPolyline
path: [
{ latitude: 25, longitude: 5 },
{ latitude: 20, longitude: 10 }
]
SignalSpy {id: extMapPolylineColorChanged; target: parent.line; signalName: "colorChanged"}
SignalSpy {id: extMapPolylineWidthChanged; target: parent.line; signalName: "widthChanged"}
SignalSpy {id: extMapPolylinePathChanged; target: parent; signalName: "pathChanged"}
}
MapRectangle {
id: extMapRectDateline
color: 'darkcyan'
topLeft {
latitude: 20
longitude: 175
}
bottomRight {
latitude: 10
longitude: -175
}
MouseArea {
anchors.fill: parent
drag.target: parent
preventStealing: true
}
}
MapCircle {
id: extMapCircleDateline
color: 'darkmagenta'
center {
latitude: 20
longitude: 180
}
radius: 400000
MouseArea {
anchors.fill: parent
drag.target: parent
preventStealing: true
}
}
MapQuickItem {
id: extMapQuickItemDateline
MouseArea {
anchors.fill: parent
drag.target: parent
preventStealing: true
}
coordinate {
latitude: 20
longitude: 175
}
sourceItem: Rectangle {
color: 'darkgreen'
width: 20
height: 20
}
}
MapPolygon {
id: extMapPolygonDateline
color: 'darkmagenta'
path: [
{ latitude: 20, longitude: 175 },
{ latitude: 20, longitude: -175 },
{ latitude: 10, longitude: -175 },
{ latitude: 10, longitude: 175 }
]
MouseArea {
anchors.fill: parent
drag.target: parent
preventStealing: true
}
}
MapPolyline {
id: polylineForSetpath
line.width: 3
path: [
{ latitude: 20, longitude: 175 },
{ latitude: 20, longitude: -175 },
{ latitude: 10, longitude: -175 },
{ latitude: 10, longitude: 175 }
]
}
MapPolyline {
id: extMapPolylineDateline
line.width : 3
path: [
{ latitude: 20, longitude: 175 },
{ latitude: 25, longitude: -175 }
]
MouseArea {
anchors.fill: parent
drag.target: parent
}
}
MapRoute {
id: extMapRouteDateline
line.color: 'yellow'
route: Route {
path: [
{ latitude: 25, longitude: 175 },
{ latitude: 20, longitude: -175 }
]
}
}
MapRectangle {
id: extMapRectEdge
color: 'darkcyan'
topLeft {
latitude: 20
longitude: -15
}
bottomRight {
latitude: 10
longitude: -5
}
MouseArea {
anchors.fill: parent
drag.target: parent
}
}
MapCircle {
id: extMapCircleEdge
color: 'darkmagenta'
center {
latitude: 20
longitude: -15
}
radius: 400000
MouseArea {
anchors.fill: parent
drag.target: parent
}
}
MapQuickItem {
id: extMapQuickItemEdge
MouseArea {
anchors.fill: parent
drag.target: parent
}
coordinate {
latitude: 20
longitude: -15
}
sourceItem: Rectangle {
color: 'darkgreen'
width: 20
height: 20
}
}
MapPolygon {
id: extMapPolygonEdge
color: 'darkmagenta'
path: [
{ latitude: 20, longitude: -15 },
{ latitude: 20, longitude: -5 },
{ latitude: 10, longitude: -5 },
{ latitude: 10, longitude: -15 }
]
MouseArea {
anchors.fill: parent
drag.target: parent
}
}
MapPolyline {
id: extMapPolylineEdge
line.width : 3
path: [
{ latitude: 20, longitude: -15 },
{ latitude: 25, longitude: -5 }
]
MouseArea {
anchors.fill: parent
drag.target: parent
}
}
MapRoute {
id: extMapRouteEdge
line.color: 'yellow'
route: Route {
path: [
{ latitude: 25, longitude: -15 },
{ latitude: 20, longitude: -5 }
]
}
}
Map {
id: map;
x: 20; y: 20; width: 200; height: 200
center: mapDefaultCenter
plugin: testPlugin;
}
Text {id: progressText}
TestCase {
name: "MapItemDetails"
when: windowShown && map.mapReady
/*
(0,0) ---------------------------------------------------- (240,0)
| no map |
| (20,20) |
(0,20) | ------------------------------------------ | (240,20)
| | | |
| | map | |
| | | |
| | | |
| | | |
| | (lat 20, lon 20) | |
| | x | |
| | | |
| | | |
| | | |
| | | |
| | | |
| ------------------------------------------ |
| |
(0,240) ---------------------------------------------------- (240,240)
*/
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 init()
{
map.clearMapItems()
map.zoomLevel = 3
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)
map.addMapItem(extMapPolygon0) // mustn't crash or ill-behave
verify(extMapPolygon0.path.length == 0)
extMapPolygon.addCoordinate(polyCoordinate)
verify(extMapPolygon.path.length == 3)
verify(LocationTestHelper.waitForPolished(map))
mouseClick(map, point.x - 5, point.y)
tryCompare(extMapPolygonClicked, "count", 1)
extMapPolygon.path[0].latitude = 10
verify(extMapPolygon.path[0].latitude, 10)
extMapPolygon.path[0].latitude = polyCoordinate.latitude
verify(extMapPolygon.path[0].latitude, 15)
extMapPolygon.path[0].longitude = 2
verify(extMapPolygon.path[0].longitude, 2)
extMapPolygon.path[0].longitude = polyCoordinate.longitude
verify(extMapPolygon.path[0].longitude, 6)
extMapPolygon.removeCoordinate(polyCoordinate)
verify(extMapPolygon.path.length == 2)
extMapPolygon.removeCoordinate(extMapPolygon.path[1])
verify(extMapPolygon.path.length == 1)
extMapPolygon.removeCoordinate(extMapPolygon.path[0])
verify(extMapPolygon.path.length == 0)
}
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
verify(extMapPolyline0.path.length == 0)
map.addMapItem(extMapPolyline)
verify(extMapPolyline.path.length == 2)
extMapPolyline.addCoordinate(polyCoordinate)
verify(extMapPolyline.path.length == 3)
extMapPolyline.addCoordinate(extMapPolyline.path[0])
verify(extMapPolyline.path.length == 4)
extMapPolyline.path[0].latitude = 10
verify(extMapPolyline.path[0].latitude, 10)
extMapPolyline.path[0].latitude = polyCoordinate.latitude
verify(extMapPolyline.path[0].latitude, 15)
extMapPolyline.path[0].longitude = 2
verify(extMapPolyline.path[0].longitude, 2)
extMapPolyline.path[0].longitude = polyCoordinate.longitude
verify(extMapPolyline.path[0].longitude, 6)
// TODO when line rendering is ready
//mouseClick(map, point.x - 5, point.y)
//compare(extMapPolylineClicked.count, 1)
extMapPolyline.removeCoordinate(extMapPolyline.path[0])
verify(extMapPolyline.path.length == 3)
extMapPolyline.removeCoordinate(polyCoordinate)
verify(extMapPolyline.path.length == 2)
extMapPolyline.removeCoordinate(extMapPolyline.path[1])
verify(extMapPolyline.path.length == 1)
extMapPolyline.removeCoordinate(extMapPolyline.path[0])
verify(extMapPolyline.path.length == 0)
}
function test_polyline_setpath()
{
compare (polylineForSetpath.line.width, 3.0)
verify(polylineForSetpath.path.length == 4)
compare(polylineForSetpath.path[0], QtPositioning.coordinate(20, 175))
compare(polylineForSetpath.path[3], QtPositioning.coordinate(10, 175))
var originalPath = QtPositioning.shapeToPath(polylineForSetpath.geoShape)
var geoPath = QtPositioning.path([ { latitude: 20, longitude: -15 },
{ latitude: 20, longitude: -5 },
{ latitude: 10, longitude: -5 },
{ latitude: 10, longitude: -15 },
{ latitude: 10, longitude: -105 } ], 50)
polylineForSetpath.setPath(geoPath)
verify(polylineForSetpath.path.length == 5)
compare(polylineForSetpath.path[0], QtPositioning.coordinate(20, -15))
compare(polylineForSetpath.path[3], QtPositioning.coordinate(10, -15))
polylineForSetpath.setPath(originalPath)
verify(polylineForSetpath.path.length == 4)
compare(polylineForSetpath.path[0], QtPositioning.coordinate(20, 175))
compare(polylineForSetpath.path[3], QtPositioning.coordinate(10, 175))
}
/*
(0,0) ---------------------------------------------------- (600,0)
| no map |
| (20,20) |
(0,20) | ------------------------------------------ | (600,20)
| | | |
| | map | |
| | | |
| | | |
| | | |
| | (lat 20, lon 180) | |
| | x | |
| | | |
| | | |
| | | |
| | | |
| | | |
| ------------------------------------------ |
| |
(0,240) ---------------------------------------------------- (600,240)
*/
function test_dateline() {
map.center = datelineCoordinate
map.zoomLevel = 2.2
var inspectionTime = 0 // change this to inspect the behavior.
// rectangle
// item spanning across dateline
map.addMapItem(extMapRectDateline)
verify(extMapRectDateline.topLeft.longitude == 175)
verify(extMapRectDateline.bottomRight.longitude == -175)
var point = map.fromCoordinate(extMapRectDateline.topLeft)
verify(point.x < map.width / 2.0)
point = map.fromCoordinate(extMapRectDateline.bottomRight)
verify(point.x > map.width / 2.0)
// move item away from dataline by directly setting its coords
extMapRectDateline.bottomRight.longitude = datelineCoordinateRight.longitude
point = map.fromCoordinate(extMapRectDateline.bottomRight)
verify(point.x > map.width / 2.0)
// move item edge onto dateline
extMapRectDateline.topLeft.longitude = datelineCoordinate.longitude
point = map.fromCoordinate(extMapRectDateline.topLeft)
compare(point.x, map.width / 2.0)
// drag item back onto dateline
verify(LocationTestHelper.waitForPolished(map))
visualInspectionPoint(inspectionTime)
mousePress(map, point.x + 5, point.y + 5)
var i
for (i=0; i < 20; i += 2) {
wait(1)
mouseMove(map, point.x + 5 - i, point.y + 5 )
}
mouseRelease(map, point.x + 5 - i, point.y + 5)
verify(LocationTestHelper.waitForPolished(map))
visualInspectionPoint(inspectionTime)
point = map.fromCoordinate(extMapRectDateline.topLeft)
verify(point.x < map.width / 2.0)
point = map.fromCoordinate(extMapRectDateline.bottomRight)
verify(point.x > map.width / 2.0)
map.removeMapItem(extMapRectDateline)
// circle
map.addMapItem(extMapCircleDateline)
verify(extMapCircleDateline.center.longitude === 180)
map.center = datelineCoordinate
point = map.fromCoordinate(extMapCircleDateline.center)
compare(point.x, map.width / 2.0) // center of the screen
visualInspectionPoint()
extMapCircleDateline.center.longitude = datelineCoordinateRight.longitude // -170, moving the circle to the right
point = map.fromCoordinate(extMapCircleDateline.center)
verify(LocationTestHelper.waitForPolished(map))
verify(point.x > map.width / 2.0)
visualInspectionPoint(inspectionTime)
mousePress(map, point.x, point.y)
for (i=0; i < 50; i += 4) {
wait(1)
mouseMove(map, point.x - i, point.y)
}
mouseRelease(map, point.x - i, point.y)
verify(LocationTestHelper.waitForPolished(map))
visualInspectionPoint(inspectionTime)
point = map.fromCoordinate(extMapCircleDateline.center)
visualInspectionPoint()
verify(point.x < map.width / 2.0)
map.removeMapItem(extMapCircleDateline)
// quickitem
map.addMapItem(extMapQuickItemDateline)
map.center = datelineCoordinate
verify(extMapQuickItemDateline.coordinate.longitude === 175)
point = map.fromCoordinate(extMapQuickItemDateline.coordinate)
verify(point.x < map.width / 2.0)
visualInspectionPoint()
extMapQuickItemDateline.coordinate.longitude = datelineCoordinateRight.longitude
point = map.fromCoordinate(extMapQuickItemDateline.coordinate)
verify(point.x > map.width / 2.0)
verify(LocationTestHelper.waitForPolished(map))
visualInspectionPoint(inspectionTime)
mousePress(map, point.x + 5, point.y + 5)
for (i=0; i < 64; 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))
visualInspectionPoint(inspectionTime)
point = map.fromCoordinate(extMapQuickItemDateline.coordinate)
visualInspectionPoint()
verify(point.x < map.width / 2.0)
map.removeMapItem(extMapQuickItemDateline)
// polygon
map.addMapItem(extMapPolygonDateline)
map.center = datelineCoordinate
verify(extMapPolygonDateline.path[0].longitude == 175)
verify(extMapPolygonDateline.path[1].longitude == -175)
verify(extMapPolygonDateline.path[2].longitude == -175)
verify(extMapPolygonDateline.path[3].longitude == 175)
point = map.fromCoordinate(extMapPolygonDateline.path[0])
verify(point.x < map.width / 2.0)
point = map.fromCoordinate(extMapPolygonDateline.path[1])
verify(point.x > map.width / 2.0)
point = map.fromCoordinate(extMapPolygonDateline.path[2])
verify(point.x > map.width / 2.0)
point = map.fromCoordinate(extMapPolygonDateline.path[3])
verify(point.x < map.width / 2.0)
extMapPolygonDateline.path[1].longitude = datelineCoordinateRight.longitude
point = map.fromCoordinate(extMapPolygonDateline.path[1])
verify(point.x > map.width / 2.0)
extMapPolygonDateline.path[2].longitude = datelineCoordinateRight.longitude
point = map.fromCoordinate(extMapPolygonDateline.path[2])
verify(point.x > map.width / 2.0)
var path = extMapPolygonDateline.path;
path[0].longitude = datelineCoordinate.longitude;
extMapPolygonDateline.path = path;
point = map.fromCoordinate(extMapPolygonDateline.path[0])
compare(point.x, map.width / 2.0)
path = extMapPolygonDateline.path;
path[3].longitude = datelineCoordinate.longitude;
extMapPolygonDateline.path = path;
point = map.fromCoordinate(extMapPolygonDateline.path[3])
compare(point.x, map.width / 2.0)
verify(LocationTestHelper.waitForPolished(map))
visualInspectionPoint(inspectionTime)
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(LocationTestHelper.waitForPolished(map))
visualInspectionPoint(inspectionTime)
point = map.fromCoordinate(extMapPolygonDateline.path[0])
verify(point.x < map.width / 2.0)
point = map.fromCoordinate(extMapPolygonDateline.path[1])
verify(point.x > map.width / 2.0)
point = map.fromCoordinate(extMapPolygonDateline.path[2])
verify(point.x > map.width / 2.0)
point = map.fromCoordinate(extMapPolygonDateline.path[3])
verify(point.x < map.width / 2.0)
map.removeMapItem(extMapPolygonDateline)
// polyline
map.addMapItem(extMapPolylineDateline)
map.center = datelineCoordinate
verify(extMapPolylineDateline.path[0].longitude == 175)
verify(extMapPolylineDateline.path[1].longitude == -175)
point = map.fromCoordinate(extMapPolylineDateline.path[0])
verify(point.x < map.width / 2.0)
point = map.fromCoordinate(extMapPolylineDateline.path[1])
verify(point.x > map.width / 2.0)
extMapPolylineDateline.path[1].longitude = datelineCoordinateRight.longitude
point = map.fromCoordinate(extMapPolylineDateline.path[1])
verify(point.x > map.width / 2.0)
var path = extMapPolygonDateline.path;
path[0].longitude = datelineCoordinate.longitude;
extMapPolylineDateline.path = path;
point = map.fromCoordinate(extMapPolylineDateline.path[0])
compare(point.x, map.width / 2.0)
map.removeMapItem(extMapPolylineDateline)
// map route
// (does not support setting of path coords)
map.addMapItem(extMapRouteDateline)
verify(extMapRouteDateline.route.path[0].longitude == 175)
verify(extMapRouteDateline.route.path[1].longitude == -175)
point = map.fromCoordinate(extMapRouteDateline.route.path[0])
verify(point.x < map.width / 2.0)
point = map.fromCoordinate(extMapRouteDateline.route.path[1])
verify(point.x > map.width / 2.0)
map.removeMapItem(extMapRouteDateline)
}
function fuzzy_compare(val, ref, tol) {
var tolerance = 2
if (tol !== undefined)
tolerance = tol
if ((val >= ref - tolerance) && (val <= ref + tolerance))
return true;
console.log('map fuzzy cmp returns false for value, ref, tolerance: ' + val + ', ' + ref + ', ' + tolerance)
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)
}
}
}
}