blob: 709597f8e6597dafc435d36cefadf8a814203592 [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$
**
****************************************************************************/
#include "tst_qgeoroute.h"
#include "../geotestplugin/qgeoroutingmanagerengine_test.h"
tst_QGeoRoute::tst_QGeoRoute()
{
}
void tst_QGeoRoute::initTestCase()
{
}
void tst_QGeoRoute::cleanupTestCase()
{
}
void tst_QGeoRoute::init()
{
qgeoroute = new QGeoRoute();
qgeocoordinate = new QGeoCoordinate();
}
void tst_QGeoRoute::cleanup()
{
delete qgeoroute;
delete qgeocoordinate;
}
void tst_QGeoRoute::constructor()
{
QString empty = "";
QGeoRectangle *boundingbox = new QGeoRectangle();
QCOMPARE(qgeoroute->bounds(), *boundingbox);
QCOMPARE(qgeoroute->distance(), qreal(0.0));
QCOMPARE(qgeoroute->path().size(), 0);
QCOMPARE(qgeoroute->routeId(), empty);
QCOMPARE(qgeoroute->travelTime(), 0);
delete boundingbox;
}
void tst_QGeoRoute::copy_constructor()
{
QGeoRoute *qgeoroutecopy = new QGeoRoute(*qgeoroute);
QCOMPARE(*qgeoroute, *qgeoroutecopy);
// CoW
qreal distance = qgeoroute->distance();
qgeoroutecopy->setDistance(distance + 10.0);
QVERIFY(*qgeoroute == *qgeoroutecopy); // QGeoRoute uses a QExplicitlySharedDataPointer. no implicit detach()
delete qgeoroutecopy;
}
void tst_QGeoRoute::destructor()
{
QGeoRoute *qgeoroutecopy;
qgeoroutecopy = new QGeoRoute();
delete qgeoroutecopy;
qgeoroutecopy = new QGeoRoute(*qgeoroute);
delete qgeoroutecopy;
}
void tst_QGeoRoute::bounds()
{
qgeocoordinate->setLatitude(13.3851);
qgeocoordinate->setLongitude(52.5312);
QGeoRectangle *qgeoboundingbox = new QGeoRectangle(*qgeocoordinate,0.4,0.4);
qgeoroute->setBounds(*qgeoboundingbox);
QCOMPARE(qgeoroute->bounds(), *qgeoboundingbox);
qgeoboundingbox->setWidth(23.1);
QVERIFY(qgeoroute->bounds().width() != qgeoboundingbox->width());
delete qgeoboundingbox;
}
void tst_QGeoRoute::distance()
{
qreal distance = 0.0;
qgeoroute->setDistance(distance);
QCOMPARE(qgeoroute->distance(), distance);
distance = 34.4324;
QVERIFY(qgeoroute->distance() != distance);
qgeoroute->setDistance(distance);
QCOMPARE(qgeoroute->distance(), distance);
}
void tst_QGeoRoute::path()
{
QFETCH(QList<double>, coordinates);
QList<QGeoCoordinate> path;
for (int i = 0; i < coordinates.size(); i += 2) {
path.append(QGeoCoordinate(coordinates.at(i),coordinates.at(i+1)));
}
qgeoroute->setPath(path);
QList<QGeoCoordinate> pathRetrieved = qgeoroute->path();
QCOMPARE(pathRetrieved, path);
for (int i = 0; i < pathRetrieved.size(); i++) {
QCOMPARE(pathRetrieved.at(i), path.at(i));
}
}
void tst_QGeoRoute::path_data()
{
QTest::addColumn<QList<double> >("coordinates");
QList<double> coordinates;
coordinates << 0.0 << 0.0;
QTest::newRow("path1") << coordinates ;
coordinates << -23.23 << 54.45345;
QTest::newRow("path2") << coordinates ;
coordinates << -85.4324 << -121.343;
QTest::newRow("path3") << coordinates ;
coordinates << 1.323 << 12.323;
QTest::newRow("path4") << coordinates ;
coordinates << 1324.323 << 143242.323;
QTest::newRow("path5") << coordinates ;
}
void tst_QGeoRoute::request()
{
qgeocoordinate->setLatitude(65.654);
qgeocoordinate->setLongitude(0.4324);
QGeoCoordinate *qgeocoordinatecopy = new QGeoCoordinate(34.54 , -21.32);
QList<QGeoCoordinate> path;
path.append(*qgeocoordinate);
path.append(*qgeocoordinatecopy);
qgeorouterequest = new QGeoRouteRequest(path);
qgeoroute->setRequest(*qgeorouterequest);
QCOMPARE(qgeoroute->request(), *qgeorouterequest);
QGeoCoordinate *qgeocoordinatecopy2 = new QGeoCoordinate(4.7854 , -121.32);
path.append(*qgeocoordinatecopy2);
QGeoRouteRequest *qgeorouterequestcopy = new QGeoRouteRequest(path);
QVERIFY(qgeoroute->request() != *qgeorouterequestcopy);
delete qgeocoordinatecopy;
delete qgeocoordinatecopy2;
delete qgeorouterequest;
delete qgeorouterequestcopy;
}
void tst_QGeoRoute::routeId()
{
QString text = "routeId 4504";
qgeoroute->setRouteId(text);
QCOMPARE(qgeoroute->routeId(), text);
text = "routeId 1111";
QVERIFY(qgeoroute->routeId() != text);
}
void tst_QGeoRoute::firstrouteSegments()
{
qgeoroutesegment = new QGeoRouteSegment();
qgeoroutesegment->setDistance(35.453);
qgeoroutesegment->setTravelTime(56);
qgeoroute->setFirstRouteSegment(*qgeoroutesegment);
QCOMPARE(qgeoroute->firstRouteSegment(), *qgeoroutesegment);
QGeoRouteSegment *qgeoroutesegmentcopy = new QGeoRouteSegment ();
qgeoroutesegmentcopy->setDistance(435.432);
qgeoroutesegmentcopy->setTravelTime(786);
QVERIFY(qgeoroute->firstRouteSegment() != *qgeoroutesegmentcopy);
delete qgeoroutesegment;
delete qgeoroutesegmentcopy;
}
void tst_QGeoRoute::travelMode()
{
QFETCH(QGeoRouteRequest::TravelMode, mode);
qgeoroute->setTravelMode(mode);
QCOMPARE(qgeoroute->travelMode(), mode);
}
void tst_QGeoRoute::travelMode_data()
{
QTest::addColumn<QGeoRouteRequest::TravelMode>("mode");
QTest::newRow("mode1") << QGeoRouteRequest::CarTravel;
QTest::newRow("mode2") << QGeoRouteRequest::PedestrianTravel;
QTest::newRow("mode3") << QGeoRouteRequest::BicycleTravel;
QTest::newRow("mode4") << QGeoRouteRequest::PublicTransitTravel;
QTest::newRow("mode5") << QGeoRouteRequest::TruckTravel;
}
void tst_QGeoRoute::travelTime()
{
int time = 0;
qgeoroute->setTravelTime(time);
QCOMPARE (qgeoroute->travelTime(), time);
time = 35;
QVERIFY (qgeoroute->travelTime() != time);
qgeoroute->setTravelTime(time);
QCOMPARE (qgeoroute->travelTime(), time);
}
void tst_QGeoRoute::operators()
{
QGeoRoute *qgeoroutecopy = new QGeoRoute(*qgeoroute);
QVERIFY(qgeoroute->operator ==(*qgeoroutecopy));
QVERIFY(!qgeoroute->operator !=(*qgeoroutecopy));
qgeoroute->setDistance(543.324); // QExplicitlySharedDataPointer does not detach implicitly.
qgeoroute->setRouteId("RouteId 111");
qgeoroute->setTravelMode(QGeoRouteRequest::PedestrianTravel);
qgeoroute->setTravelTime(10);
qgeoroutecopy->setDistance(12.21);
qgeoroutecopy->setRouteId("RouteId 666");
qgeoroutecopy->setTravelMode(QGeoRouteRequest::BicycleTravel);
qgeoroutecopy->setTravelTime(99);
QEXPECT_FAIL("", "QGeoRoute equality operators broken", Continue);
QVERIFY(!(qgeoroute->operator ==(*qgeoroutecopy)));
QEXPECT_FAIL("", "QGeoRoute equality operators broken", Continue);
QVERIFY(qgeoroute->operator !=(*qgeoroutecopy));
*qgeoroutecopy = qgeoroutecopy->operator =(*qgeoroute);
QVERIFY(qgeoroute->operator ==(*qgeoroutecopy));
QVERIFY(!qgeoroute->operator !=(*qgeoroutecopy));
QGeoRouteAlt rAlt;
QGeoRoute r;
QCOMPARE(rAlt.travelTime(), 123456);
QCOMPARE(r.travelTime(), 0);
r = rAlt;
QCOMPARE(r.travelTime(), 123456);
delete qgeoroutecopy;
}
QTEST_APPLESS_MAIN(tst_QGeoRoute);