1 /****************************************************************************
2 **
3 ** Copyright (C) 2016 The Qt Company Ltd.
4 ** Contact: https://www.qt.io/licensing/
5 **
6 ** This file is part of the test suite of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:GPL-EXCEPT$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and The Qt Company. For licensing terms
14 ** and conditions see https://www.qt.io/terms-conditions. For further
15 ** information use the contact form at https://www.qt.io/contact-us.
16 **
17 ** GNU General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU
19 ** General Public License version 3 as published by the Free Software
20 ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
21 ** included in the packaging of this file. Please review the following
22 ** information to ensure the GNU General Public License requirements will
23 ** be met: https://www.gnu.org/licenses/gpl-3.0.html.
24 **
25 ** $QT_END_LICENSE$
26 **
27 ****************************************************************************/
28
29 #include "tst_qgeoroute.h"
30 #include "../geotestplugin/qgeoroutingmanagerengine_test.h"
31
32
tst_QGeoRoute()33 tst_QGeoRoute::tst_QGeoRoute()
34 {
35 }
36
initTestCase()37 void tst_QGeoRoute::initTestCase()
38 {
39 }
40
cleanupTestCase()41 void tst_QGeoRoute::cleanupTestCase()
42 {
43 }
44
init()45 void tst_QGeoRoute::init()
46 {
47 qgeoroute = new QGeoRoute();
48 qgeocoordinate = new QGeoCoordinate();
49 }
50
cleanup()51 void tst_QGeoRoute::cleanup()
52 {
53 delete qgeoroute;
54 delete qgeocoordinate;
55 }
56
constructor()57 void tst_QGeoRoute::constructor()
58 {
59 QString empty = "";
60 QGeoRectangle *boundingbox = new QGeoRectangle();
61
62 QCOMPARE(qgeoroute->bounds(), *boundingbox);
63 QCOMPARE(qgeoroute->distance(), qreal(0.0));
64 QCOMPARE(qgeoroute->path().size(), 0);
65 QCOMPARE(qgeoroute->routeId(), empty);
66 QCOMPARE(qgeoroute->travelTime(), 0);
67
68 delete boundingbox;
69 }
70
copy_constructor()71 void tst_QGeoRoute::copy_constructor()
72 {
73 QGeoRoute *qgeoroutecopy = new QGeoRoute(*qgeoroute);
74 QCOMPARE(*qgeoroute, *qgeoroutecopy);
75
76 // CoW
77 qreal distance = qgeoroute->distance();
78 qgeoroutecopy->setDistance(distance + 10.0);
79
80 QVERIFY(*qgeoroute == *qgeoroutecopy); // QGeoRoute uses a QExplicitlySharedDataPointer. no implicit detach()
81
82 delete qgeoroutecopy;
83 }
84
destructor()85 void tst_QGeoRoute::destructor()
86 {
87 QGeoRoute *qgeoroutecopy;
88
89 qgeoroutecopy = new QGeoRoute();
90 delete qgeoroutecopy;
91
92 qgeoroutecopy = new QGeoRoute(*qgeoroute);
93 delete qgeoroutecopy;
94 }
95
bounds()96 void tst_QGeoRoute::bounds()
97 {
98 qgeocoordinate->setLatitude(13.3851);
99 qgeocoordinate->setLongitude(52.5312);
100
101 QGeoRectangle *qgeoboundingbox = new QGeoRectangle(*qgeocoordinate,0.4,0.4);
102
103 qgeoroute->setBounds(*qgeoboundingbox);
104
105 QCOMPARE(qgeoroute->bounds(), *qgeoboundingbox);
106
107 qgeoboundingbox->setWidth(23.1);
108
109 QVERIFY(qgeoroute->bounds().width() != qgeoboundingbox->width());
110
111 delete qgeoboundingbox;
112 }
113
distance()114 void tst_QGeoRoute::distance()
115 {
116 qreal distance = 0.0;
117
118 qgeoroute->setDistance(distance);
119 QCOMPARE(qgeoroute->distance(), distance);
120
121 distance = 34.4324;
122 QVERIFY(qgeoroute->distance() != distance);
123
124 qgeoroute->setDistance(distance);
125 QCOMPARE(qgeoroute->distance(), distance);
126 }
127
path()128 void tst_QGeoRoute::path()
129 {
130 QFETCH(QList<double>, coordinates);
131
132 QList<QGeoCoordinate> path;
133
134 for (int i = 0; i < coordinates.size(); i += 2) {
135 path.append(QGeoCoordinate(coordinates.at(i),coordinates.at(i+1)));
136 }
137
138 qgeoroute->setPath(path);
139
140 QList<QGeoCoordinate> pathRetrieved = qgeoroute->path();
141 QCOMPARE(pathRetrieved, path);
142
143 for (int i = 0; i < pathRetrieved.size(); i++) {
144 QCOMPARE(pathRetrieved.at(i), path.at(i));
145 }
146 }
147
path_data()148 void tst_QGeoRoute::path_data()
149 {
150 QTest::addColumn<QList<double> >("coordinates");
151
152 QList<double> coordinates;
153
154 coordinates << 0.0 << 0.0;
155 QTest::newRow("path1") << coordinates ;
156
157 coordinates << -23.23 << 54.45345;
158 QTest::newRow("path2") << coordinates ;
159
160 coordinates << -85.4324 << -121.343;
161 QTest::newRow("path3") << coordinates ;
162
163 coordinates << 1.323 << 12.323;
164 QTest::newRow("path4") << coordinates ;
165
166 coordinates << 1324.323 << 143242.323;
167 QTest::newRow("path5") << coordinates ;
168 }
169
request()170 void tst_QGeoRoute::request()
171 {
172 qgeocoordinate->setLatitude(65.654);
173 qgeocoordinate->setLongitude(0.4324);
174
175 QGeoCoordinate *qgeocoordinatecopy = new QGeoCoordinate(34.54 , -21.32);
176
177 QList<QGeoCoordinate> path;
178 path.append(*qgeocoordinate);
179 path.append(*qgeocoordinatecopy);
180
181 qgeorouterequest = new QGeoRouteRequest(path);
182
183 qgeoroute->setRequest(*qgeorouterequest);
184
185 QCOMPARE(qgeoroute->request(), *qgeorouterequest);
186
187 QGeoCoordinate *qgeocoordinatecopy2 = new QGeoCoordinate(4.7854 , -121.32);
188 path.append(*qgeocoordinatecopy2);
189
190 QGeoRouteRequest *qgeorouterequestcopy = new QGeoRouteRequest(path);
191
192 QVERIFY(qgeoroute->request() != *qgeorouterequestcopy);
193
194 delete qgeocoordinatecopy;
195 delete qgeocoordinatecopy2;
196 delete qgeorouterequest;
197 delete qgeorouterequestcopy;
198 }
199
routeId()200 void tst_QGeoRoute::routeId()
201 {
202 QString text = "routeId 4504";
203
204 qgeoroute->setRouteId(text);
205
206 QCOMPARE(qgeoroute->routeId(), text);
207
208 text = "routeId 1111";
209 QVERIFY(qgeoroute->routeId() != text);
210
211 }
212
firstrouteSegments()213 void tst_QGeoRoute::firstrouteSegments()
214 {
215 qgeoroutesegment = new QGeoRouteSegment();
216 qgeoroutesegment->setDistance(35.453);
217 qgeoroutesegment->setTravelTime(56);
218
219 qgeoroute->setFirstRouteSegment(*qgeoroutesegment);
220
221 QCOMPARE(qgeoroute->firstRouteSegment(), *qgeoroutesegment);
222
223 QGeoRouteSegment *qgeoroutesegmentcopy = new QGeoRouteSegment ();
224 qgeoroutesegmentcopy->setDistance(435.432);
225 qgeoroutesegmentcopy->setTravelTime(786);
226
227 QVERIFY(qgeoroute->firstRouteSegment() != *qgeoroutesegmentcopy);
228
229 delete qgeoroutesegment;
230 delete qgeoroutesegmentcopy;
231
232 }
233
travelMode()234 void tst_QGeoRoute::travelMode()
235 {
236 QFETCH(QGeoRouteRequest::TravelMode, mode);
237
238 qgeoroute->setTravelMode(mode);
239 QCOMPARE(qgeoroute->travelMode(), mode);
240 }
travelMode_data()241 void tst_QGeoRoute::travelMode_data()
242 {
243 QTest::addColumn<QGeoRouteRequest::TravelMode>("mode");
244
245 QTest::newRow("mode1") << QGeoRouteRequest::CarTravel;
246 QTest::newRow("mode2") << QGeoRouteRequest::PedestrianTravel;
247 QTest::newRow("mode3") << QGeoRouteRequest::BicycleTravel;
248 QTest::newRow("mode4") << QGeoRouteRequest::PublicTransitTravel;
249 QTest::newRow("mode5") << QGeoRouteRequest::TruckTravel;
250 }
251
travelTime()252 void tst_QGeoRoute::travelTime()
253 {
254 int time = 0;
255 qgeoroute->setTravelTime(time);
256
257 QCOMPARE (qgeoroute->travelTime(), time);
258
259 time = 35;
260
261 QVERIFY (qgeoroute->travelTime() != time);
262
263 qgeoroute->setTravelTime(time);
264 QCOMPARE (qgeoroute->travelTime(), time);
265 }
266
operators()267 void tst_QGeoRoute::operators()
268 {
269 QGeoRoute *qgeoroutecopy = new QGeoRoute(*qgeoroute);
270
271 QVERIFY(qgeoroute->operator ==(*qgeoroutecopy));
272 QVERIFY(!qgeoroute->operator !=(*qgeoroutecopy));
273
274 qgeoroute->setDistance(543.324); // QExplicitlySharedDataPointer does not detach implicitly.
275 qgeoroute->setRouteId("RouteId 111");
276 qgeoroute->setTravelMode(QGeoRouteRequest::PedestrianTravel);
277 qgeoroute->setTravelTime(10);
278
279 qgeoroutecopy->setDistance(12.21);
280 qgeoroutecopy->setRouteId("RouteId 666");
281 qgeoroutecopy->setTravelMode(QGeoRouteRequest::BicycleTravel);
282 qgeoroutecopy->setTravelTime(99);
283
284 QEXPECT_FAIL("", "QGeoRoute equality operators broken", Continue);
285 QVERIFY(!(qgeoroute->operator ==(*qgeoroutecopy)));
286 QEXPECT_FAIL("", "QGeoRoute equality operators broken", Continue);
287 QVERIFY(qgeoroute->operator !=(*qgeoroutecopy));
288
289 *qgeoroutecopy = qgeoroutecopy->operator =(*qgeoroute);
290 QVERIFY(qgeoroute->operator ==(*qgeoroutecopy));
291 QVERIFY(!qgeoroute->operator !=(*qgeoroutecopy));
292
293
294 QGeoRouteAlt rAlt;
295 QGeoRoute r;
296 QCOMPARE(rAlt.travelTime(), 123456);
297 QCOMPARE(r.travelTime(), 0);
298 r = rAlt;
299 QCOMPARE(r.travelTime(), 123456);
300
301 delete qgeoroutecopy;
302 }
303
304
305
306 QTEST_APPLESS_MAIN(tst_QGeoRoute);
307