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 QtLocation module 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_qgeomaneuver.h"
30#include <QtLocation/private/qgeomaneuver_p.h>
31
32class QGeoManeuverPrivateDefaultAlt : public QGeoManeuverPrivateDefault
33{
34public:
35 QGeoManeuverPrivateDefaultAlt() {}
36 QGeoManeuverPrivateDefaultAlt(const QGeoManeuverPrivateDefaultAlt &other)
37 : QGeoManeuverPrivateDefault(other) {}
38 ~QGeoManeuverPrivateDefaultAlt() {}
39
40 QString text() const override
41 {
42 return QStringLiteral("QGeoManeuverPrivateDefaultAlt"); // To identify this is actually a QGeoManeuverPrivateDefaultAlt
43 }
44};
45
46class QGeoManeuverAlt : public QGeoManeuver
47{
48public:
49 QGeoManeuverAlt()
50 : QGeoManeuver(QSharedDataPointer<QGeoManeuverPrivate>(new QGeoManeuverPrivateDefaultAlt()))
51 {
52 }
53};
54
55tst_QGeoManeuver::tst_QGeoManeuver()
56{
57}
58
59void tst_QGeoManeuver::initTestCase()
60{
61
62}
63
64void tst_QGeoManeuver::cleanupTestCase()
65{
66
67}
68
69void tst_QGeoManeuver::init()
70{
71
72 qgeomaneuver = new QGeoManeuver();
73}
74
75void tst_QGeoManeuver::cleanup()
76{
77 delete qgeomaneuver;
78}
79
80void tst_QGeoManeuver::constructor()
81{
82 QString empty ="";
83
84 QVERIFY(!qgeomaneuver->isValid());
85 QCOMPARE(qgeomaneuver->direction(),QGeoManeuver::NoDirection);
86 QCOMPARE(qgeomaneuver->distanceToNextInstruction(), qreal(0.0));
87 QCOMPARE(qgeomaneuver->instructionText(),empty);
88 QCOMPARE(qgeomaneuver->timeToNextInstruction(),0);
89}
90
91void tst_QGeoManeuver::copy_constructor()
92{
93 QGeoManeuver *qgeomaneuvercopy = new QGeoManeuver (*qgeomaneuver);
94
95 QCOMPARE(*qgeomaneuver,*qgeomaneuvercopy);
96
97 delete qgeomaneuvercopy;
98}
99
100void tst_QGeoManeuver::destructor()
101{
102 QGeoManeuver *qgeomaneuvercopy;
103
104 qgeomaneuvercopy = new QGeoManeuver();
105 delete qgeomaneuvercopy;
106
107 qgeomaneuvercopy = new QGeoManeuver(*qgeomaneuver);
108 delete qgeomaneuvercopy;
109}
110
111void tst_QGeoManeuver::direction()
112{
113 QFETCH(QGeoManeuver::InstructionDirection,direction);
114
115 qgeomaneuver->setDirection(direction);
116
117 QCOMPARE(qgeomaneuver->direction(),direction);
118}
119void tst_QGeoManeuver::direction_data()
120{
121 QTest::addColumn<QGeoManeuver::InstructionDirection>(name: "direction");
122
123 QTest::newRow(dataTag: "instruction1") << QGeoManeuver::NoDirection;
124 QTest::newRow(dataTag: "instruction2") << QGeoManeuver::DirectionForward;
125 QTest::newRow(dataTag: "instruction3") << QGeoManeuver::DirectionBearRight;
126 QTest::newRow(dataTag: "instruction4") << QGeoManeuver::DirectionLightRight;
127 QTest::newRow(dataTag: "instruction5") << QGeoManeuver::DirectionRight;
128 QTest::newRow(dataTag: "instruction6") << QGeoManeuver::DirectionHardRight;
129 QTest::newRow(dataTag: "instruction7") << QGeoManeuver::DirectionUTurnRight;
130 QTest::newRow(dataTag: "instruction8") << QGeoManeuver::DirectionUTurnLeft;
131 QTest::newRow(dataTag: "instruction9") << QGeoManeuver::DirectionHardLeft;
132 QTest::newRow(dataTag: "instruction10") << QGeoManeuver::DirectionLeft;
133 QTest::newRow(dataTag: "instruction11") << QGeoManeuver::DirectionLightLeft;
134 QTest::newRow(dataTag: "instruction12") << QGeoManeuver::DirectionBearLeft;
135}
136
137void tst_QGeoManeuver::distanceToNextInstruction()
138{
139 qreal distance = 0.0;
140 qgeomaneuver->setDistanceToNextInstruction(distance);
141
142 QCOMPARE (qgeomaneuver->distanceToNextInstruction(), distance);
143
144 distance = -3423.4324;
145
146 QVERIFY (qgeomaneuver->distanceToNextInstruction() != distance);
147
148 qgeomaneuver->setDistanceToNextInstruction(distance);
149 QCOMPARE (qgeomaneuver->distanceToNextInstruction(),distance);
150}
151
152void tst_QGeoManeuver::instructionText()
153{
154 QString text = "After 50m turn left";
155
156 qgeomaneuver->setInstructionText(text);
157
158 QCOMPARE (qgeomaneuver->instructionText(),text);
159
160 text="After 40m, turn left";
161 QVERIFY (qgeomaneuver->instructionText() != text);
162
163}
164
165void tst_QGeoManeuver::position()
166{
167 QFETCH(double, latitude);
168 QFETCH(double, longitude);
169
170 qgeocoordinate = new QGeoCoordinate (latitude,longitude);
171
172 qgeomaneuver->setPosition(*qgeocoordinate);
173
174 QCOMPARE(qgeomaneuver->position(),*qgeocoordinate);
175
176 delete qgeocoordinate;
177}
178
179void tst_QGeoManeuver::position_data()
180{
181 QTest::addColumn<double>(name: "latitude");
182 QTest::addColumn<double>(name: "longitude");
183
184 QTest::newRow(dataTag: "invalid0") << -12220.0 << 0.0;
185 QTest::newRow(dataTag: "invalid1") << 0.0 << 181.0;
186
187 QTest::newRow(dataTag: "correct0") << 0.0 << 0.0;
188 QTest::newRow(dataTag: "correct1") << 90.0 << 0.0;
189 QTest::newRow(dataTag: "correct2") << 0.0 << 180.0;
190 QTest::newRow(dataTag: "correct3") << -90.0 << 0.0;
191 QTest::newRow(dataTag: "correct4") << 0.0 << -180.0;
192 QTest::newRow(dataTag: "correct5") << 45.0 << 90.0;
193}
194
195void tst_QGeoManeuver::timeToNextInstruction()
196{
197 int time = 0;
198 qgeomaneuver->setTimeToNextInstruction(time);
199
200 QCOMPARE (qgeomaneuver->timeToNextInstruction(),time);
201
202 time = 35;
203
204 QVERIFY (qgeomaneuver->timeToNextInstruction() != time);
205
206 qgeomaneuver->setTimeToNextInstruction(time);
207 QCOMPARE (qgeomaneuver->timeToNextInstruction(),time);
208}
209
210void tst_QGeoManeuver::waypoint()
211{
212 QFETCH(double, latitude);
213 QFETCH(double, longitude);
214
215 qgeocoordinate = new QGeoCoordinate (latitude,longitude);
216
217 qgeomaneuver->setWaypoint(*qgeocoordinate);
218
219 QCOMPARE(qgeomaneuver->waypoint(),*qgeocoordinate);
220
221 qgeocoordinate->setLatitude(30.3);
222 QVERIFY(qgeomaneuver->waypoint() != *qgeocoordinate);
223
224
225 delete qgeocoordinate;
226}
227void tst_QGeoManeuver::waypoint_data()
228{
229 QTest::addColumn<double>(name: "latitude");
230 QTest::addColumn<double>(name: "longitude");
231
232 QTest::newRow(dataTag: "invalid0") << -12220.0 << 0.0;
233 QTest::newRow(dataTag: "invalid1") << 0.0 << 181.0;
234
235 QTest::newRow(dataTag: "correct0") << 0.0 << 0.0;
236 QTest::newRow(dataTag: "correct1") << 90.0 << 0.0;
237 QTest::newRow(dataTag: "correct2") << 0.0 << 180.0;
238 QTest::newRow(dataTag: "correct3") << -90.0 << 0.0;
239 QTest::newRow(dataTag: "correct4") << 0.0 << -180.0;
240 QTest::newRow(dataTag: "correct5") << 45.0 << 90.0;
241}
242
243void tst_QGeoManeuver::isValid()
244{
245 QVERIFY(!qgeomaneuver->isValid());
246 qgeomaneuver->setDirection(QGeoManeuver::DirectionBearLeft);
247 QVERIFY(qgeomaneuver->isValid());
248}
249
250void tst_QGeoManeuver::operators(){
251
252 QGeoManeuver *qgeomaneuvercopy = new QGeoManeuver(*qgeomaneuver);
253
254 QVERIFY(qgeomaneuver->operator ==(*qgeomaneuvercopy));
255 QVERIFY(!qgeomaneuver->operator !=(*qgeomaneuvercopy));
256
257 qgeomaneuver->setDirection(QGeoManeuver::DirectionBearLeft);
258 qgeomaneuver->setInstructionText("Turn left in 50m");
259 qgeomaneuver->setTimeToNextInstruction(60);
260 qgeomaneuver->setDistanceToNextInstruction(560.45);
261
262 qgeomaneuvercopy->setDirection(QGeoManeuver::DirectionForward);
263 qgeomaneuvercopy->setInstructionText("Turn left in 80m");
264 qgeomaneuvercopy->setTimeToNextInstruction(70);
265 qgeomaneuvercopy->setDistanceToNextInstruction(56065.45);
266
267 QVERIFY(!(qgeomaneuver->operator ==(*qgeomaneuvercopy)));
268 QVERIFY(qgeomaneuver->operator !=(*qgeomaneuvercopy));
269
270 *qgeomaneuvercopy = qgeomaneuvercopy->operator =(other: *qgeomaneuver);
271 QVERIFY(qgeomaneuver->operator ==(*qgeomaneuvercopy));
272 QVERIFY(!qgeomaneuver->operator !=(*qgeomaneuvercopy));
273
274 delete qgeomaneuvercopy;
275}
276
277void tst_QGeoManeuver::alternateImplementation()
278{
279 QGeoManeuver qgeomaneuvercopy = *qgeomaneuver;
280
281 QVERIFY(qgeomaneuvercopy == (*qgeomaneuver));
282
283 qgeomaneuvercopy.setDirection(QGeoManeuver::DirectionForward);
284 qgeomaneuvercopy.setInstructionText("Turn left in 80m");
285 qgeomaneuvercopy.setTimeToNextInstruction(70);
286 qgeomaneuvercopy.setDistanceToNextInstruction(56065.45);
287
288 QVERIFY(qgeomaneuvercopy != (*qgeomaneuver));
289
290 QGeoManeuverAlt mAlt;
291 QGeoManeuver m = mAlt;
292
293 QCOMPARE(m.instructionText(), "QGeoManeuverPrivateDefaultAlt");
294 m = qgeomaneuvercopy;
295 QCOMPARE(m.instructionText(), "Turn left in 80m");
296 m = mAlt;
297 QCOMPARE(m.instructionText(), "QGeoManeuverPrivateDefaultAlt");
298}
299
300
301QTEST_APPLESS_MAIN(tst_QGeoManeuver);
302

source code of qtlocation/tests/auto/qgeomaneuver/tst_qgeomaneuver.cpp