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
33tst_QGeoRoute::tst_QGeoRoute()
34{
35}
36
37void tst_QGeoRoute::initTestCase()
38{
39}
40
41void tst_QGeoRoute::cleanupTestCase()
42{
43}
44
45void tst_QGeoRoute::init()
46{
47 qgeoroute = new QGeoRoute();
48 qgeocoordinate = new QGeoCoordinate();
49}
50
51void tst_QGeoRoute::cleanup()
52{
53 delete qgeoroute;
54 delete qgeocoordinate;
55}
56
57void 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
71void 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
85void 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
96void 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
114void 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
128void 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(t: QGeoCoordinate(coordinates.at(i),coordinates.at(i: 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
148void tst_QGeoRoute::path_data()
149{
150 QTest::addColumn<QList<double> >(name: "coordinates");
151
152 QList<double> coordinates;
153
154 coordinates << 0.0 << 0.0;
155 QTest::newRow(dataTag: "path1") << coordinates ;
156
157 coordinates << -23.23 << 54.45345;
158 QTest::newRow(dataTag: "path2") << coordinates ;
159
160 coordinates << -85.4324 << -121.343;
161 QTest::newRow(dataTag: "path3") << coordinates ;
162
163 coordinates << 1.323 << 12.323;
164 QTest::newRow(dataTag: "path4") << coordinates ;
165
166 coordinates << 1324.323 << 143242.323;
167 QTest::newRow(dataTag: "path5") << coordinates ;
168}
169
170void 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(t: *qgeocoordinate);
179 path.append(t: *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(t: *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
200void 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
213void 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
234void tst_QGeoRoute::travelMode()
235{
236 QFETCH(QGeoRouteRequest::TravelMode, mode);
237
238 qgeoroute->setTravelMode(mode);
239 QCOMPARE(qgeoroute->travelMode(), mode);
240}
241void tst_QGeoRoute::travelMode_data()
242{
243 QTest::addColumn<QGeoRouteRequest::TravelMode>(name: "mode");
244
245 QTest::newRow(dataTag: "mode1") << QGeoRouteRequest::CarTravel;
246 QTest::newRow(dataTag: "mode2") << QGeoRouteRequest::PedestrianTravel;
247 QTest::newRow(dataTag: "mode3") << QGeoRouteRequest::BicycleTravel;
248 QTest::newRow(dataTag: "mode4") << QGeoRouteRequest::PublicTransitTravel;
249 QTest::newRow(dataTag: "mode5") << QGeoRouteRequest::TruckTravel;
250}
251
252void 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
267void 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 =(other: *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
306QTEST_APPLESS_MAIN(tst_QGeoRoute);
307

source code of qtlocation/tests/auto/qgeoroute/tst_qgeoroute.cpp