| /**************************************************************************** |
| ** |
| ** 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.2 |
| import QtLocation 5.5 |
| |
| Item { |
| id: testCase |
| |
| property variant coordinate1: QtPositioning.coordinate(1, 1) |
| property variant coordinate2: QtPositioning.coordinate(2, 2) |
| property variant coordinate3: QtPositioning.coordinate(80, 80) |
| |
| property variant emptyCircle: QtPositioning.circle() |
| property variant circle1: QtPositioning.circle(coordinate1, 200000) |
| |
| SignalSpy { id: circleChangedSpy; target: testCase; signalName: "emptyCircleChanged" } |
| |
| TestCase { |
| name: "Bounding circle" |
| function test_circle_defaults_and_setters() { |
| circleChangedSpy.clear(); |
| compare (emptyCircle.radius, -1) |
| compare (circle1.radius, 200000) |
| |
| emptyCircle.radius = 200 |
| compare(circleChangedSpy.count, 1); |
| emptyCircle.radius = 200; |
| compare(circleChangedSpy.count, 1); |
| |
| emptyCircle.center = coordinate1; |
| compare(circleChangedSpy.count, 2); |
| emptyCircle.center = coordinate1 |
| compare(circleChangedSpy.count, 2); |
| emptyCircle.center = coordinate2 |
| compare(circleChangedSpy.count, 3); |
| |
| emptyCircle.center = coordinate1 |
| emptyCircle.radius = 200000 |
| |
| compare(emptyCircle.contains(coordinate1), true); |
| compare(emptyCircle.contains(coordinate2), true); |
| compare(emptyCircle.contains(coordinate3), false); |
| } |
| } |
| |
| property variant trace1 : [ QtPositioning.coordinate(43.773175, 11.255386), |
| QtPositioning.coordinate(43.773546 , 11.255372) ] |
| property variant trace2 : [ QtPositioning.coordinate(43.773175, 11.255386), |
| QtPositioning.coordinate(43.773546 , 11.255372), |
| QtPositioning.coordinate(43.77453 , 11.255734)] |
| |
| |
| // coordinate unit square |
| property variant bl: QtPositioning.coordinate(0, 0) |
| property variant tl: QtPositioning.coordinate(1, 0) |
| property variant tr: QtPositioning.coordinate(1, 1) |
| property variant br: QtPositioning.coordinate(0, 1) |
| property variant ntr: QtPositioning.coordinate(3, 3) |
| |
| property variant invalid: QtPositioning.coordinate(100, 190) |
| property variant inside: QtPositioning.coordinate(0.5, 0.5) |
| property variant outside: QtPositioning.coordinate(2, 2) |
| |
| property variant box: QtPositioning.rectangle(tl, br) |
| |
| property variant coordinates: [bl, tl, tr, br] |
| property variant coordinates2: [bl, tl, tr, br, ntr] |
| property variant coordinates3: [tr] |
| property variant coordinates4: [invalid] |
| property variant coordinates5: [] |
| |
| property variant listBox: QtPositioning.rectangle(coordinates) |
| property variant listBox2: QtPositioning.rectangle(coordinates2) |
| property variant listBox3: QtPositioning.rectangle(coordinates3) |
| property variant listBox4: QtPositioning.rectangle(coordinates4) |
| property variant listBox5: QtPositioning.rectangle(coordinates5) |
| |
| property variant widthBox: QtPositioning.rectangle(inside, 1, 1); |
| |
| // C++ auto test exists for basics of bounding box, testing here |
| // only added functionality |
| TestCase { |
| name: "Bounding box" |
| function test_box_defaults_and_setters() { |
| compare (box.bottomRight.longitude, br.longitude) // sanity |
| compare (box.contains(bl), true) |
| compare (box.contains(inside), true) |
| compare (box.contains(outside), false) |
| box.topRight = ntr |
| compare (box.contains(outside), true) |
| |
| compare (listBox.isValid, true) |
| compare (listBox.contains(outside), false) |
| compare (listBox2.contains(outside), true) |
| compare (listBox3.isValid, true) |
| compare (listBox3.isEmpty, true) |
| compare (listBox4.isValid, false) |
| compare (listBox5.isValid, false) |
| |
| compare (widthBox.contains(inside), true) |
| compare (widthBox.contains(outside), false) |
| } |
| } |
| |
| TestCase { |
| name: "Shape" |
| |
| function test_shape_comparison_data() { |
| return [ |
| { tag: "invalid shape", shape1: QtPositioning.shape(), shape2: QtPositioning.shape(), result: true }, |
| { tag: "box equal", shape1: box, shape2: QtPositioning.rectangle(tl, br), result: true }, |
| { tag: "box not equal", shape1: box, shape2: QtPositioning.rectangle([inside, outside]), result: false }, |
| { tag: "box invalid shape", rect1: box, shape2: QtPositioning.shape(), result: false }, |
| { tag: "invalid rectangle", shape1: QtPositioning.rectangle(), shape2: QtPositioning.rectangle(), result: true }, |
| { tag: "invalid rectangle2", shape1: QtPositioning.rectangle(), shape2: QtPositioning.shape(), result: false }, |
| { tag: "circle1 equal", shape1: circle1, shape2: QtPositioning.circle(coordinate1, 200000), result: true }, |
| { tag: "circle1 not equal", shape1: circle1, shape2: QtPositioning.circle(coordinate2, 2000), result: false }, |
| { tag: "circle1 invalid shape", shape1: circle1, shape2: QtPositioning.shape(), result: false }, |
| { tag: "invalid circle", shape1: QtPositioning.circle(), shape2: QtPositioning.circle(), result: true }, |
| { tag: "invalid circle2", shape1: QtPositioning.circle(), shape2: QtPositioning.shape(), result: false } |
| ] |
| } |
| |
| function test_shape_comparison(data) { |
| compare(data.shape1 === data.shape2, data.result) |
| compare(data.shape1 !== data.shape2, !data.result) |
| compare(data.shape1 == data.shape2, data.result) |
| compare(data.shape1 != data.shape2, !data.result) |
| } |
| } |
| |
| TestCase { |
| name: "Conversions" |
| |
| function test_shape_circle_conversions() { |
| var circle = QtPositioning.shapeToCircle(QtPositioning.shape()) |
| verify(!circle.isValid) |
| circle = QtPositioning.shapeToCircle(QtPositioning.circle()) |
| verify(!circle.isValid) |
| circle = QtPositioning.shapeToCircle(QtPositioning.circle(tl, 10000)) |
| verify(circle.isValid) |
| compare(circle.center, tl) |
| compare(circle.radius, 10000) |
| circle = QtPositioning.shapeToCircle(QtPositioning.rectangle()) |
| verify(!circle.isValid) |
| circle = QtPositioning.shapeToCircle(QtPositioning.rectangle(tl, br)) |
| verify(!circle.isValid) |
| circle = QtPositioning.shapeToCircle(listBox) |
| verify(!circle.isValid) |
| } |
| |
| function test_shape_rectangle_conversions() { |
| var rectangle = QtPositioning.shapeToRectangle(QtPositioning.shape()) |
| verify(!rectangle.isValid) |
| rectangle = QtPositioning.shapeToRectangle(QtPositioning.circle()) |
| verify(!rectangle.isValid) |
| rectangle = QtPositioning.shapeToRectangle(QtPositioning.circle(tl, 10000)) |
| verify(!rectangle.isValid) |
| rectangle = QtPositioning.shapeToRectangle(QtPositioning.rectangle()) |
| verify(!rectangle.isValid) |
| rectangle = QtPositioning.shapeToRectangle(QtPositioning.rectangle(tl, br)) |
| verify(rectangle.isValid) |
| compare(rectangle.topLeft, tl) |
| compare(rectangle.bottomRight, br) |
| rectangle = QtPositioning.shapeToRectangle(listBox) |
| verify(rectangle.isValid) |
| } |
| |
| function test_shape_path_conversions() { |
| var path = QtPositioning.shapeToPath(QtPositioning.shape()) |
| verify(!path.isValid) |
| path = QtPositioning.shapeToPath(QtPositioning.circle()) |
| verify(!path.isValid) |
| path = QtPositioning.shapeToPath(QtPositioning.circle(tl, 10000)) |
| verify(!path.isValid) |
| path = QtPositioning.shapeToPath(QtPositioning.rectangle()) |
| verify(!path.isValid) |
| path = QtPositioning.shapeToPath(QtPositioning.rectangle(tl, br)) |
| verify(!path.isValid) |
| |
| path = QtPositioning.shapeToPath(QtPositioning.path()) |
| verify(!path.isValid) |
| path = QtPositioning.shapeToPath(QtPositioning.path(trace1, 1)) |
| verify(path.isValid) |
| path = QtPositioning.shapeToPath(QtPositioning.path(trace2, 2)) |
| verify(path.isValid) |
| verify(path !== QtPositioning.shapeToPath(QtPositioning.path(trace1, 1))) |
| compare(path, QtPositioning.shapeToPath(QtPositioning.path(trace2, 2))) |
| } |
| |
| function test_shape_polygon_conversions() { |
| var polygon = QtPositioning.shapeToPolygon(QtPositioning.shape()) |
| verify(!polygon.isValid) |
| polygon = QtPositioning.shapeToPolygon(QtPositioning.circle()) |
| verify(!polygon.isValid) |
| polygon = QtPositioning.shapeToPolygon(QtPositioning.circle(tl, 10000)) |
| verify(polygon.isValid) // fixed, polygon copy constructor can now initialize from a circle. |
| polygon = QtPositioning.shapeToPolygon(QtPositioning.rectangle()) |
| verify(!polygon.isValid) |
| polygon = QtPositioning.shapeToPolygon(QtPositioning.rectangle(tl, br)) |
| verify(polygon.isValid) // fixed, polygon copy constructor can now initialize from a rectangle. |
| |
| polygon = QtPositioning.shapeToPolygon(QtPositioning.polygon()) |
| verify(!polygon.isValid) |
| polygon = QtPositioning.shapeToPolygon(QtPositioning.polygon(trace1)) |
| verify(!polygon.isValid) // polygon needs 3 coords at least |
| polygon = QtPositioning.shapeToPolygon(QtPositioning.polygon(trace2)) |
| verify(polygon.isValid) |
| verify(polygon !== QtPositioning.shapeToPolygon(QtPositioning.polygon(trace1))) |
| compare(polygon, QtPositioning.shapeToPolygon(QtPositioning.polygon(trace2))) |
| } |
| } |
| |
| |
| MapPolyline { |
| id: mapPolyline |
| path: [ |
| { latitude: -27, longitude: 153.0 }, |
| { latitude: -27, longitude: 154.1 }, |
| { latitude: -28, longitude: 153.5 }, |
| { latitude: -29, longitude: 153.5 } |
| ] |
| } |
| |
| MapPolyline { |
| id: mapPolylineGeopath |
| } |
| |
| TestCase { |
| name: "MapPolyline path" |
| function test_path_operations() { |
| compare(mapPolyline.path[1].latitude, -27) |
| compare(mapPolyline.path[1].longitude, 154.1) |
| compare(mapPolyline.coordinateAt(1), QtPositioning.coordinate(-27, 154.1)) |
| compare(mapPolyline.path.length, mapPolyline.pathLength()) |
| |
| mapPolyline.removeCoordinate(1); |
| compare(mapPolyline.path[1].latitude, -28) |
| compare(mapPolyline.path[1].longitude, 153.5) |
| compare(mapPolyline.coordinateAt(1), QtPositioning.coordinate(-28, 153.5)) |
| compare(mapPolyline.path.length, mapPolyline.pathLength()) |
| |
| mapPolyline.addCoordinate(QtPositioning.coordinate(30, 153.1)) |
| compare(mapPolyline.path[mapPolyline.path.length-1].latitude, 30) |
| compare(mapPolyline.path[mapPolyline.path.length-1].longitude, 153.1) |
| compare(mapPolyline.containsCoordinate(QtPositioning.coordinate(30, 153.1)), true) |
| compare(mapPolyline.path.length, mapPolyline.pathLength()) |
| |
| mapPolyline.removeCoordinate(QtPositioning.coordinate(30, 153.1)) |
| compare(mapPolyline.path[mapPolyline.path.length-1].latitude, -29) |
| compare(mapPolyline.path[mapPolyline.path.length-1].longitude, 153.5) |
| compare(mapPolyline.containsCoordinate(QtPositioning.coordinate(30, 153.1)), false) |
| compare(mapPolyline.path.length, mapPolyline.pathLength()) |
| |
| mapPolyline.insertCoordinate(2, QtPositioning.coordinate(35, 153.1)) |
| compare(mapPolyline.path[2].latitude, 35) |
| compare(mapPolyline.path[2].longitude, 153.1) |
| compare(mapPolyline.containsCoordinate(QtPositioning.coordinate(35, 153.1)), true) |
| compare(mapPolyline.path.length, mapPolyline.pathLength()) |
| |
| mapPolyline.replaceCoordinate(2, QtPositioning.coordinate(45, 150.1)) |
| compare(mapPolyline.path[2].latitude, 45) |
| compare(mapPolyline.path[2].longitude, 150.1) |
| compare(mapPolyline.containsCoordinate(QtPositioning.coordinate(35, 153.1)), false) |
| compare(mapPolyline.containsCoordinate(QtPositioning.coordinate(45, 150.1)), true) |
| compare(mapPolyline.path.length, mapPolyline.pathLength()) |
| |
| mapPolyline.insertCoordinate(2, QtPositioning.coordinate(35, 153.1)) |
| compare(mapPolyline.coordinateAt(2).latitude, 35) |
| compare(mapPolyline.coordinateAt(2).longitude, 153.1) |
| compare(mapPolyline.containsCoordinate(QtPositioning.coordinate(35, 153.1)), true) |
| compare(mapPolyline.path.length, mapPolyline.pathLength()) |
| } |
| } |
| |
| TestCase { |
| name: "GeoPath path" |
| function test_qgeopath_path_operations() { |
| var geopath = QtPositioning.path() |
| |
| geopath.path = trace2 |
| compare(geopath.path.length, trace2.length) |
| |
| geopath.path = mapPolyline.path |
| compare(geopath.path.length, mapPolyline.pathLength()) |
| compare(geopath.boundingGeoRectangle(), mapPolyline.geoShape.boundingGeoRectangle()) |
| |
| mapPolylineGeopath.geoShape = geopath |
| compare(mapPolylineGeopath.pathLength(), mapPolyline.pathLength()) |
| compare(mapPolylineGeopath.geoShape.boundingGeoRectangle(), mapPolyline.geoShape.boundingGeoRectangle()) |
| |
| geopath.path = trace2 |
| geopath.path[0].longitude = 11.0 |
| compare(geopath.path.length, trace2.length) |
| compare(geopath.coordinateAt(0).latitude, trace2[0].latitude) |
| expectFail("", "Longitude comparison fails") |
| compare(geopath.coordinateAt(0).longitude, 11) |
| } |
| } |
| |
| TestCase { |
| name: "GeoPolygon path" |
| function test_qgeopolygon_path_operations() { |
| var geopolygon = QtPositioning.polygon() |
| |
| geopolygon.perimeter = trace2 |
| compare(geopolygon.perimeter.length, trace2.length) |
| |
| geopolygon.perimeter = mapPolyline.path |
| compare(geopolygon.perimeter.length, mapPolyline.pathLength()) |
| compare(geopolygon.boundingGeoRectangle(), mapPolyline.geoShape.boundingGeoRectangle()) |
| |
| geopolygon.perimeter = trace2 |
| compare(geopolygon.perimeter.length, trace2.length) |
| compare(geopolygon.coordinateAt(0).latitude, trace2[0].latitude) |
| compare(geopolygon.coordinateAt(0).longitude, trace2[0].longitude) |
| } |
| } |
| } |