diff options
Diffstat (limited to 'tests/auto/qnmeapositioninfosource')
19 files changed, 0 insertions, 1412 deletions
diff --git a/tests/auto/qnmeapositioninfosource/CMakeLists.txt b/tests/auto/qnmeapositioninfosource/CMakeLists.txt deleted file mode 100644 index 6ac0e05c..00000000 --- a/tests/auto/qnmeapositioninfosource/CMakeLists.txt +++ /dev/null @@ -1,7 +0,0 @@ -# Generated from qnmeapositioninfosource.pro. - -add_subdirectory(dummynmeapositioninfosource) -add_subdirectory(qnmeapositioninfosource_realtime) -add_subdirectory(qnmeapositioninfosource_simulation) -add_subdirectory(qnmeapositioninfosource_realtime_generic) -add_subdirectory(qnmeapositioninfosource_simulation_generic) diff --git a/tests/auto/qnmeapositioninfosource/dummynmeapositioninfosource/CMakeLists.txt b/tests/auto/qnmeapositioninfosource/dummynmeapositioninfosource/CMakeLists.txt deleted file mode 100644 index d152dc72..00000000 --- a/tests/auto/qnmeapositioninfosource/dummynmeapositioninfosource/CMakeLists.txt +++ /dev/null @@ -1,23 +0,0 @@ -# Generated from dummynmeapositioninfosource.pro. - -##################################################################### -## tst_dummynmeapositioninfosource Test: -##################################################################### - -qt_internal_add_test(tst_dummynmeapositioninfosource - SOURCES - ../../utils/qlocationtestutils.cpp ../../utils/qlocationtestutils_p.h - ../../utils/qnmeaproxyfactory.cpp ../../utils/qnmeaproxyfactory.h - tst_dummynmeapositioninfosource.cpp - DEFINES - QT_DISABLE_DEPRECATED_BEFORE=0 - INCLUDE_DIRECTORIES - .. - LIBRARIES - Qt::Core - Qt::Network - Qt::Positioning -) - -#### Keys ignored in scope 1:.:.:dummynmeapositioninfosource.pro:<TRUE>: -# TEMPLATE = "app" diff --git a/tests/auto/qnmeapositioninfosource/dummynmeapositioninfosource/dummynmeapositioninfosource.pro b/tests/auto/qnmeapositioninfosource/dummynmeapositioninfosource/dummynmeapositioninfosource.pro deleted file mode 100644 index d32e2e31..00000000 --- a/tests/auto/qnmeapositioninfosource/dummynmeapositioninfosource/dummynmeapositioninfosource.pro +++ /dev/null @@ -1,17 +0,0 @@ -TEMPLATE = app -CONFIG+=testcase -QT += network positioning testlib -TARGET = tst_dummynmeapositioninfosource - -INCLUDEPATH += .. - -HEADERS += ../../utils/qlocationtestutils_p.h \ - ../../qgeopositioninfosource/testqgeopositioninfosource_p.h \ - ../../utils/qnmeaproxyfactory.h - -SOURCES += ../../utils/qlocationtestutils.cpp \ - ../../qgeopositioninfosource/testqgeopositioninfosource.cpp \ - ../../utils/qnmeaproxyfactory.cpp \ - tst_dummynmeapositioninfosource.cpp - -DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 diff --git a/tests/auto/qnmeapositioninfosource/dummynmeapositioninfosource/tst_dummynmeapositioninfosource.cpp b/tests/auto/qnmeapositioninfosource/dummynmeapositioninfosource/tst_dummynmeapositioninfosource.cpp deleted file mode 100644 index 70059550..00000000 --- a/tests/auto/qnmeapositioninfosource/dummynmeapositioninfosource/tst_dummynmeapositioninfosource.cpp +++ /dev/null @@ -1,149 +0,0 @@ -/**************************************************************************** -** -** 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$ -** -****************************************************************************/ - -//TESTED_COMPONENT=src/location - -#include "../utils/qnmeaproxyfactory.h" -#include "../utils/qlocationtestutils_p.h" - -#include <QtPositioning/qnmeapositioninfosource.h> -#include <QSignalSpy> -#include <QTest> - -Q_DECLARE_METATYPE(QNmeaPositionInfoSource::UpdateMode) - -class DummyNmeaPositionInfoSource : public QNmeaPositionInfoSource -{ - Q_OBJECT - -public: - DummyNmeaPositionInfoSource(QNmeaPositionInfoSource::UpdateMode mode, QObject *parent = 0); - -protected: - bool parsePosInfoFromNmeaData(const char *data, - int size, - QGeoPositionInfo *posInfo, - bool *hasFix) override; - -private: - int callCount; -}; - -DummyNmeaPositionInfoSource::DummyNmeaPositionInfoSource(QNmeaPositionInfoSource::UpdateMode mode, QObject *parent) : - QNmeaPositionInfoSource(mode, parent), - callCount(0) -{ -} - -bool DummyNmeaPositionInfoSource::parsePosInfoFromNmeaData(const char* data, - int size, - QGeoPositionInfo *posInfo, - bool *hasFix) -{ - Q_UNUSED(data); - Q_UNUSED(size); - - posInfo->setCoordinate(QGeoCoordinate(callCount * 1.0, callCount * 1.0, callCount * 1.0)); - posInfo->setTimestamp(QDateTime::currentDateTimeUtc()); - *hasFix = true; - ++callCount; - - return true; -} - -class tst_DummyNmeaPositionInfoSource : public QObject -{ - Q_OBJECT - -public: - tst_DummyNmeaPositionInfoSource(); - -private slots: - void initTestCase(); - void testOverloadedParseFunction(); -}; - - -tst_DummyNmeaPositionInfoSource::tst_DummyNmeaPositionInfoSource() {} - -void tst_DummyNmeaPositionInfoSource::initTestCase() -{ - -} - -void tst_DummyNmeaPositionInfoSource::testOverloadedParseFunction() -{ - DummyNmeaPositionInfoSource source(QNmeaPositionInfoSource::RealTimeMode); - QNmeaProxyFactory factory; - // proxy is deleted by the source - QNmeaPositionInfoSourceProxy *proxy = static_cast<QNmeaPositionInfoSourceProxy *>( - factory.createPositionInfoSourceProxy(&source)); - - QSignalSpy spy(proxy->source(), SIGNAL(positionUpdated(QGeoPositionInfo))); - - QGeoPositionInfo pos; - - proxy->source()->startUpdates(); - - proxy->feedBytes(QString("The parser converts\n").toLatin1()); - - QTRY_VERIFY_WITH_TIMEOUT((spy.count() == 1), 10000); - pos = spy.at(0).at(0).value<QGeoPositionInfo>(); - - QVERIFY((pos.coordinate().latitude() == 0.0) - && (pos.coordinate().longitude() == 0.0) - && (pos.coordinate().altitude() == 0.0)); - - spy.clear(); - - proxy->feedBytes(QString("any data it receives\n").toLatin1()); - - QTRY_VERIFY_WITH_TIMEOUT((spy.count() == 1), 10000); - pos = spy.at(0).at(0).value<QGeoPositionInfo>(); - - QVERIFY((pos.coordinate().latitude() == 1.0) - && (pos.coordinate().longitude() == 1.0) - && (pos.coordinate().altitude() == 1.0)); - - spy.clear(); - - proxy->feedBytes(QString("into positions\n").toLatin1()); - - QTRY_VERIFY_WITH_TIMEOUT((spy.count() == 1), 10000); - pos = spy.at(0).at(0).value<QGeoPositionInfo>(); - - QVERIFY((pos.coordinate().latitude() == 2.0) - && (pos.coordinate().longitude() == 2.0) - && (pos.coordinate().altitude() == 2.0)); - - spy.clear(); -} - -#include "tst_dummynmeapositioninfosource.moc" - -QTEST_GUILESS_MAIN(tst_DummyNmeaPositionInfoSource); diff --git a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource.pro b/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource.pro deleted file mode 100644 index 8c168d52..00000000 --- a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource.pro +++ /dev/null @@ -1,8 +0,0 @@ -TEMPLATE = subdirs -SUBDIRS += \ - dummynmeapositioninfosource \ - qnmeapositioninfosource_realtime \ - qnmeapositioninfosource_simulation \ - qnmeapositioninfosource_realtime_generic \ - qnmeapositioninfosource_simulation_generic - diff --git a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime/CMakeLists.txt b/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime/CMakeLists.txt deleted file mode 100644 index 4ca5f9a2..00000000 --- a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -# Generated from qnmeapositioninfosource_realtime.pro. - -##################################################################### -## tst_qnmeapositioninfosource_realtime Test: -##################################################################### - -qt_internal_add_test(tst_qnmeapositioninfosource_realtime - SOURCES - ../../qgeopositioninfosource/testqgeopositioninfosource.cpp ../../qgeopositioninfosource/testqgeopositioninfosource_p.h - ../../utils/qlocationtestutils.cpp ../../utils/qlocationtestutils_p.h - ../../utils/qnmeaproxyfactory.cpp ../../utils/qnmeaproxyfactory.h - ../tst_qnmeapositioninfosource.cpp ../tst_qnmeapositioninfosource.h - tst_qnmeapositioninfosource_realtime.cpp - DEFINES - QT_DISABLE_DEPRECATED_BEFORE=0 - INCLUDE_DIRECTORIES - .. - LIBRARIES - Qt::Core - Qt::Network - Qt::Positioning - Qt::TestPrivate -) - -#### Keys ignored in scope 1:.:.:qnmeapositioninfosource_realtime.pro:<TRUE>: -# TEMPLATE = "app" diff --git a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime/qnmeapositioninfosource_realtime.pro b/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime/qnmeapositioninfosource_realtime.pro deleted file mode 100644 index fcff3d7a..00000000 --- a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime/qnmeapositioninfosource_realtime.pro +++ /dev/null @@ -1,19 +0,0 @@ -TEMPLATE = app -CONFIG+=testcase -QT += network positioning testlib -TARGET = tst_qnmeapositioninfosource_realtime - -INCLUDEPATH += .. - -HEADERS += ../../utils/qlocationtestutils_p.h \ - ../../qgeopositioninfosource/testqgeopositioninfosource_p.h \ - ../../utils/qnmeaproxyfactory.h \ - ../tst_qnmeapositioninfosource.h - -SOURCES += ../../utils/qlocationtestutils.cpp \ - ../../qgeopositioninfosource/testqgeopositioninfosource.cpp \ - ../../utils/qnmeaproxyfactory.cpp \ - ../tst_qnmeapositioninfosource.cpp \ - tst_qnmeapositioninfosource_realtime.cpp - -DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 diff --git a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime/tst_qnmeapositioninfosource_realtime.cpp b/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime/tst_qnmeapositioninfosource_realtime.cpp deleted file mode 100644 index 423f6573..00000000 --- a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime/tst_qnmeapositioninfosource_realtime.cpp +++ /dev/null @@ -1,44 +0,0 @@ -/**************************************************************************** -** -** 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$ -** -****************************************************************************/ - -//TESTED_COMPONENT=src/location - -#include "tst_qnmeapositioninfosource.h" - -class tst_QNmeaPositionInfoSource_RealTime : public tst_QNmeaPositionInfoSource -{ - Q_OBJECT - -public: - tst_QNmeaPositionInfoSource_RealTime() - : tst_QNmeaPositionInfoSource(QNmeaPositionInfoSource::RealTimeMode) {} -}; - -#include "tst_qnmeapositioninfosource_realtime.moc" - -QTEST_GUILESS_MAIN(tst_QNmeaPositionInfoSource_RealTime); diff --git a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime_generic/CMakeLists.txt b/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime_generic/CMakeLists.txt deleted file mode 100644 index d7f2bfdd..00000000 --- a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime_generic/CMakeLists.txt +++ /dev/null @@ -1,27 +0,0 @@ -# Generated from qnmeapositioninfosource_realtime_generic.pro. - -##################################################################### -## tst_qnmeapositioninfosource_realtime_generic Test: -##################################################################### - -qt_internal_add_test(tst_qnmeapositioninfosource_realtime_generic - SOURCES - ../../qgeopositioninfosource/testqgeopositioninfosource.cpp ../../qgeopositioninfosource/testqgeopositioninfosource_p.h - ../../utils/qlocationtestutils.cpp ../../utils/qlocationtestutils_p.h - ../../utils/qnmeaproxyfactory.cpp ../../utils/qnmeaproxyfactory.h - ../tst_qnmeapositioninfosource.cpp ../tst_qnmeapositioninfosource.h - tst_qnmeapositioninfosource_realtime_generic.cpp - DEFINES - QT_DISABLE_DEPRECATED_BEFORE=0 - INCLUDE_DIRECTORIES - .. - LIBRARIES - Qt::Core - Qt::Network - Qt::Positioning - Qt::TestPrivate -) - -#### Keys ignored in scope 1:.:.:qnmeapositioninfosource_realtime_generic.pro:<TRUE>: -# TEMPLATE = "app" -# testcase.timeout = "400" diff --git a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime_generic/qnmeapositioninfosource_realtime_generic.pro b/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime_generic/qnmeapositioninfosource_realtime_generic.pro deleted file mode 100644 index 0fbbd76e..00000000 --- a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime_generic/qnmeapositioninfosource_realtime_generic.pro +++ /dev/null @@ -1,22 +0,0 @@ -TEMPLATE = app -CONFIG+=testcase -testcase.timeout = 400 # this test is slow -QT += network positioning testlib -TARGET = tst_qnmeapositioninfosource_realtime_generic - -INCLUDEPATH += .. - -HEADERS += ../../utils/qlocationtestutils_p.h \ - ../../qgeopositioninfosource/testqgeopositioninfosource_p.h \ - ../../utils/qnmeaproxyfactory.h \ - ../tst_qnmeapositioninfosource.h - -SOURCES += ../../utils/qlocationtestutils.cpp \ - ../../qgeopositioninfosource/testqgeopositioninfosource.cpp \ - ../../utils/qnmeaproxyfactory.cpp \ - ../tst_qnmeapositioninfosource.cpp \ - tst_qnmeapositioninfosource_realtime_generic.cpp - -CONFIG -= app_bundle - -DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 diff --git a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime_generic/tst_qnmeapositioninfosource_realtime_generic.cpp b/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime_generic/tst_qnmeapositioninfosource_realtime_generic.cpp deleted file mode 100644 index abb5e9ae..00000000 --- a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime_generic/tst_qnmeapositioninfosource_realtime_generic.cpp +++ /dev/null @@ -1,77 +0,0 @@ -/**************************************************************************** -** -** 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$ -** -****************************************************************************/ - -//TESTED_COMPONENT=src/location - -#include "tst_qnmeapositioninfosource.h" - -class tst_QNmeaPositionInfoSource_RealTime_Generic : public TestQGeoPositionInfoSource -{ - Q_OBJECT - -public: - tst_QNmeaPositionInfoSource_RealTime_Generic() - { - m_factory = new QNmeaProxyFactory; -#if QT_CONFIG(library) - /* - * Set custom path since CI doesn't install test plugins - */ -#ifdef Q_OS_WIN - QCoreApplication::addLibraryPath(QCoreApplication::applicationDirPath() + - QStringLiteral("/../../../../plugins")); -#else - QCoreApplication::addLibraryPath(QCoreApplication::applicationDirPath() - + QStringLiteral("/../../../../plugins")); -#endif -#endif - } - - ~tst_QNmeaPositionInfoSource_RealTime_Generic() - { - delete m_factory; - } - -protected: - QGeoPositionInfoSource *createTestSource() override - { - QNmeaPositionInfoSource *source = new QNmeaPositionInfoSource(QNmeaPositionInfoSource::RealTimeMode); - QNmeaPositionInfoSourceProxy *proxy = static_cast<QNmeaPositionInfoSourceProxy *>( - m_factory->createPositionInfoSourceProxy(source)); - Feeder *feeder = new Feeder(source); - feeder->start(proxy); - return source; - } - -private: - QNmeaProxyFactory *m_factory; -}; - -#include "tst_qnmeapositioninfosource_realtime_generic.moc" - -QTEST_GUILESS_MAIN(tst_QNmeaPositionInfoSource_RealTime_Generic); diff --git a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation/CMakeLists.txt b/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation/CMakeLists.txt deleted file mode 100644 index f0ea5cec..00000000 --- a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation/CMakeLists.txt +++ /dev/null @@ -1,26 +0,0 @@ -# Generated from qnmeapositioninfosource_simulation.pro. - -##################################################################### -## tst_qnmeapositioninfosource_simulation Test: -##################################################################### - -qt_internal_add_test(tst_qnmeapositioninfosource_simulation - SOURCES - ../../qgeopositioninfosource/testqgeopositioninfosource.cpp ../../qgeopositioninfosource/testqgeopositioninfosource_p.h - ../../utils/qlocationtestutils.cpp ../../utils/qlocationtestutils_p.h - ../../utils/qnmeaproxyfactory.cpp ../../utils/qnmeaproxyfactory.h - ../tst_qnmeapositioninfosource.cpp ../tst_qnmeapositioninfosource.h - tst_qnmeapositioninfosource_simulation.cpp - DEFINES - QT_DISABLE_DEPRECATED_BEFORE=0 - INCLUDE_DIRECTORIES - .. - LIBRARIES - Qt::Core - Qt::Network - Qt::Positioning - Qt::TestPrivate -) - -#### Keys ignored in scope 1:.:.:qnmeapositioninfosource_simulation.pro:<TRUE>: -# TEMPLATE = "app" diff --git a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation/qnmeapositioninfosource_simulation.pro b/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation/qnmeapositioninfosource_simulation.pro deleted file mode 100644 index 88bb18f9..00000000 --- a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation/qnmeapositioninfosource_simulation.pro +++ /dev/null @@ -1,19 +0,0 @@ -TEMPLATE = app -CONFIG+=testcase -QT += network positioning testlib -TARGET = tst_qnmeapositioninfosource_simulation - -INCLUDEPATH += .. - -HEADERS += ../../utils/qlocationtestutils_p.h \ - ../../qgeopositioninfosource/testqgeopositioninfosource_p.h \ - ../../utils/qnmeaproxyfactory.h \ - ../tst_qnmeapositioninfosource.h - -SOURCES += ../../utils/qlocationtestutils.cpp \ - ../../qgeopositioninfosource/testqgeopositioninfosource.cpp \ - ../../utils/qnmeaproxyfactory.cpp \ - ../tst_qnmeapositioninfosource.cpp \ - tst_qnmeapositioninfosource_simulation.cpp - -DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 diff --git a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation/tst_qnmeapositioninfosource_simulation.cpp b/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation/tst_qnmeapositioninfosource_simulation.cpp deleted file mode 100644 index ffe5e1d0..00000000 --- a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation/tst_qnmeapositioninfosource_simulation.cpp +++ /dev/null @@ -1,43 +0,0 @@ -/**************************************************************************** -** -** 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$ -** -****************************************************************************/ - -//TESTED_COMPONENT=src/location - -#include "tst_qnmeapositioninfosource.h" - -class tst_QNmeaPositionInfoSource_Simulation : public tst_QNmeaPositionInfoSource -{ - Q_OBJECT -public: - tst_QNmeaPositionInfoSource_Simulation() - : tst_QNmeaPositionInfoSource(QNmeaPositionInfoSource::SimulationMode) {} -}; - -#include "tst_qnmeapositioninfosource_simulation.moc" - -QTEST_GUILESS_MAIN(tst_QNmeaPositionInfoSource_Simulation); diff --git a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation_generic/CMakeLists.txt b/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation_generic/CMakeLists.txt deleted file mode 100644 index 9232f9a8..00000000 --- a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation_generic/CMakeLists.txt +++ /dev/null @@ -1,32 +0,0 @@ -# Generated from qnmeapositioninfosource_simulation_generic.pro. - -##################################################################### -## tst_qnmeapositioninfosource_simulation_generic Test: -##################################################################### - -# special case begin - -# Renamed the target due to problems with the maximum full path on -# Windows systems (which is 250 characters only) -qt_internal_add_test(tst_qnmeaposinfosource_sim_generic -# special case end - SOURCES - ../../qgeopositioninfosource/testqgeopositioninfosource.cpp ../../qgeopositioninfosource/testqgeopositioninfosource_p.h - ../../utils/qlocationtestutils.cpp ../../utils/qlocationtestutils_p.h - ../../utils/qnmeaproxyfactory.cpp ../../utils/qnmeaproxyfactory.h - ../tst_qnmeapositioninfosource.cpp ../tst_qnmeapositioninfosource.h - tst_qnmeapositioninfosource_simulation_generic.cpp - DEFINES - QT_DISABLE_DEPRECATED_BEFORE=0 - INCLUDE_DIRECTORIES - .. - LIBRARIES - Qt::Core - Qt::Network - Qt::Positioning - Qt::TestPrivate -) - -#### Keys ignored in scope 1:.:.:qnmeapositioninfosource_simulation_generic.pro:<TRUE>: -# TEMPLATE = "app" -# testcase.timeout = "400" diff --git a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation_generic/qnmeapositioninfosource_simulation_generic.pro b/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation_generic/qnmeapositioninfosource_simulation_generic.pro deleted file mode 100644 index b198bf7c..00000000 --- a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation_generic/qnmeapositioninfosource_simulation_generic.pro +++ /dev/null @@ -1,22 +0,0 @@ -TEMPLATE = app -CONFIG+=testcase -testcase.timeout = 400 # this test is slow -QT += network positioning testlib -TARGET = tst_qnmeapositioninfosource_simulation_generic - -INCLUDEPATH += .. - -HEADERS += ../../utils/qlocationtestutils_p.h \ - ../../qgeopositioninfosource/testqgeopositioninfosource_p.h \ - ../../utils/qnmeaproxyfactory.h \ - ../tst_qnmeapositioninfosource.h - -SOURCES += ../../utils/qlocationtestutils.cpp \ - ../../qgeopositioninfosource/testqgeopositioninfosource.cpp \ - ../../utils/qnmeaproxyfactory.cpp \ - ../tst_qnmeapositioninfosource.cpp \ - tst_qnmeapositioninfosource_simulation_generic.cpp - -CONFIG -= app_bundle - -DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 diff --git a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation_generic/tst_qnmeapositioninfosource_simulation_generic.cpp b/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation_generic/tst_qnmeapositioninfosource_simulation_generic.cpp deleted file mode 100644 index 2f2827de..00000000 --- a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation_generic/tst_qnmeapositioninfosource_simulation_generic.cpp +++ /dev/null @@ -1,64 +0,0 @@ -/**************************************************************************** -** -** 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$ -** -****************************************************************************/ - -//TESTED_COMPONENT=src/location - -#include "tst_qnmeapositioninfosource.h" - -class tst_QNmeaPositionInfoSource_Simulation_Generic : public TestQGeoPositionInfoSource -{ - Q_OBJECT -public: - tst_QNmeaPositionInfoSource_Simulation_Generic() - { -#if QT_CONFIG(library) - /* - * Set custom path since CI doesn't install test plugins - */ -#ifdef Q_OS_WIN - QCoreApplication::addLibraryPath(QCoreApplication::applicationDirPath() + - QStringLiteral("/../../../../plugins")); -#else - QCoreApplication::addLibraryPath(QCoreApplication::applicationDirPath() - + QStringLiteral("/../../../../plugins")); -#endif -#endif - } - -protected: - QGeoPositionInfoSource *createTestSource() override - { - QNmeaPositionInfoSource *source = new QNmeaPositionInfoSource(QNmeaPositionInfoSource::SimulationMode); - source->setDevice(new UnlimitedNmeaStream(source)); - return source; - } -}; - -#include "tst_qnmeapositioninfosource_simulation_generic.moc" - -QTEST_GUILESS_MAIN(tst_QNmeaPositionInfoSource_Simulation_Generic); diff --git a/tests/auto/qnmeapositioninfosource/tst_qnmeapositioninfosource.cpp b/tests/auto/qnmeapositioninfosource/tst_qnmeapositioninfosource.cpp deleted file mode 100644 index e99faa6d..00000000 --- a/tests/auto/qnmeapositioninfosource/tst_qnmeapositioninfosource.cpp +++ /dev/null @@ -1,605 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 Jolla Ltd. -** Contact: Aaron McCarthy <aaron.mccarthy@jollamobile.com> -** 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$ -** -****************************************************************************/ - -//TESTED_COMPONENT=src/location - -#include "tst_qnmeapositioninfosource.h" - -#include <QtCore/QDateTime> -#include <QtCore/QElapsedTimer> -#include <QtCore/QtNumeric> - -#ifdef Q_OS_WIN - -// Windows seems to require longer timeouts and step length -// We override the standard QTestCase related macros - -#ifdef QTRY_COMPARE_WITH_TIMEOUT -#undef QTRY_COMPARE_WITH_TIMEOUT -#endif -#define QTRY_COMPARE_WITH_TIMEOUT(__expr, __expected, __timeout) \ -do { \ - const int __step = 100; \ - const int __timeoutValue = __timeout; \ - if ((__expr) != (__expected)) { \ - QTest::qWait(0); \ - } \ - for (int __i = 0; __i < __timeoutValue && ((__expr) != (__expected)); __i+=__step) { \ - QTest::qWait(__step); \ - } \ - QCOMPARE(__expr, __expected); \ -} while (0) - -#ifdef QTRY_COMPARE -#undef QTRY_COMPARE -#endif -#define QTRY_COMPARE(__expr, __expected) QTRY_COMPARE_WITH_TIMEOUT(__expr, __expected, 10000) - -#endif - -tst_QNmeaPositionInfoSource::tst_QNmeaPositionInfoSource(QNmeaPositionInfoSource::UpdateMode mode, QObject *parent) - : QObject(parent), - m_mode(mode) -{ -} - -void tst_QNmeaPositionInfoSource::initTestCase() -{ - qRegisterMetaType<QNmeaPositionInfoSource::UpdateMode>(); -} - -void tst_QNmeaPositionInfoSource::constructor() -{ - QObject o; - QNmeaPositionInfoSource source(m_mode, &o); - QCOMPARE(source.updateMode(), m_mode); - QCOMPARE(source.parent(), &o); -} - -void tst_QNmeaPositionInfoSource::supportedPositioningMethods() -{ - QNmeaPositionInfoSource source(m_mode); - QCOMPARE(source.supportedPositioningMethods(), QNmeaPositionInfoSource::SatellitePositioningMethods); -} - -void tst_QNmeaPositionInfoSource::minimumUpdateInterval() -{ - QNmeaPositionInfoSource source(m_mode); - QCOMPARE(source.minimumUpdateInterval(), 2); -} - -void tst_QNmeaPositionInfoSource::userEquivalentRangeError() -{ - QNmeaPositionInfoSource source(m_mode); - QVERIFY(qIsNaN(source.userEquivalentRangeError())); - source.setUserEquivalentRangeError(5.1); - QVERIFY(qFuzzyCompare(source.userEquivalentRangeError(), 5.1)); -} - -void tst_QNmeaPositionInfoSource::setUpdateInterval_delayedUpdate() -{ - // If an update interval is set, and an update is not available at a - // particular interval, the source should emit the next update as soon - // as it becomes available - - QNmeaPositionInfoSource source(m_mode); - QNmeaProxyFactory factory; - QNmeaPositionInfoSourceProxy *proxy = static_cast<QNmeaPositionInfoSourceProxy *>( - factory.createPositionInfoSourceProxy(&source)); - - QSignalSpy spyUpdate(proxy->source(), SIGNAL(positionUpdated(QGeoPositionInfo))); - proxy->source()->setUpdateInterval(500); - proxy->source()->startUpdates(); - - QTest::qWait(600); - QDateTime now = QDateTime::currentDateTime(); - proxy->feedUpdate(now); - QTRY_COMPARE(spyUpdate.count(), 1); - - // should have gotten the update immediately, and not have needed to - // wait until the next interval - QVERIFY(now.time().msecsTo(QDateTime::currentDateTime().time()) < 400); -} - -void tst_QNmeaPositionInfoSource::lastKnownPosition() -{ - QNmeaPositionInfoSource source(m_mode); - QNmeaProxyFactory factory; - QNmeaPositionInfoSourceProxy *proxy = static_cast<QNmeaPositionInfoSourceProxy *>( - factory.createPositionInfoSourceProxy(&source)); - - QCOMPARE(proxy->source()->lastKnownPosition(), QGeoPositionInfo()); - - // source may need requestUpdate() or startUpdates() to be called to - // trigger reading of data channel - QSignalSpy spyTimeout(proxy->source(), SIGNAL(errorOccurred(QGeoPositionInfoSource::Error))); - proxy->source()->requestUpdate(proxy->source()->minimumUpdateInterval()); - QTRY_COMPARE(spyTimeout.count(), 1); - const QList<QVariant> arguments = spyTimeout.takeFirst(); - const auto error = arguments.at(0).value<QGeoPositionInfoSource::Error>(); - QCOMPARE(error, QGeoPositionInfoSource::UpdateTimeoutError); - - // If an update is received and startUpdates() or requestUpdate() hasn't - // been called, it should still be available through lastKnownPosition() - QDateTime dt = QDateTime::currentDateTimeUtc(); - proxy->feedUpdate(dt); - QTRY_COMPARE(proxy->source()->lastKnownPosition().timestamp(), dt); - - QList<QDateTime> dateTimes = createDateTimes(5); - for (int i=0; i<dateTimes.count(); i++) { - proxy->source()->requestUpdate(); // Irrelevant for this test - proxy->feedUpdate(dateTimes[i]); - QTRY_COMPARE(proxy->source()->lastKnownPosition().timestamp(), dateTimes[i]); - } - - proxy->source()->startUpdates(); - // if dateTimes are older than before, they will be ignored. - dateTimes = createDateTimes(dateTimes.last().addMSecs(100), 5); - for (int i=0; i<dateTimes.count(); i++) { - proxy->feedUpdate(dateTimes[i]); - QTRY_COMPARE(proxy->source()->lastKnownPosition().timestamp(), dateTimes[i]); - } -} - -void tst_QNmeaPositionInfoSource::beginWithBufferedData() -{ - // In SimulationMode, data stored in the QIODevice is read when - // startUpdates() or requestUpdate() is called. - // In RealTimeMode, all existing data in the QIODevice is ignored - - // only new data will be read. - - QFETCH(QList<QDateTime>, dateTimes); - QFETCH(UpdateTriggerMethod, trigger); - - QByteArray bytes; - for (int i=0; i<dateTimes.count(); i++) - bytes += QLocationTestUtils::createRmcSentence(dateTimes[i]).toLatin1(); - QBuffer buffer; - buffer.setData(bytes); - - QNmeaPositionInfoSource source(m_mode); - QSignalSpy spy(&source, SIGNAL(positionUpdated(QGeoPositionInfo))); - source.setDevice(&buffer); - - if (trigger == StartUpdatesMethod) - source.startUpdates(); - else if (trigger == RequestUpdatesMethod) - source.requestUpdate(); - - if (m_mode == QNmeaPositionInfoSource::RealTimeMode) { - QTRY_COMPARE_WITH_TIMEOUT(spy.count(), 0, 300); - } else { - if (trigger == StartUpdatesMethod) { - QTRY_COMPARE(spy.count(), dateTimes.count()); - for (int i=0; i<dateTimes.count(); i++) - QCOMPARE(spy.at(i).at(0).value<QGeoPositionInfo>().timestamp(), dateTimes[i]); - } else if (trigger == RequestUpdatesMethod) { - QTRY_COMPARE(spy.count(), 1); - QCOMPARE(spy.at(0).at(0).value<QGeoPositionInfo>().timestamp(), dateTimes.first()); - } - } -} - -void tst_QNmeaPositionInfoSource::beginWithBufferedData_data() -{ - QTest::addColumn<QList<QDateTime> >("dateTimes"); - QTest::addColumn<UpdateTriggerMethod>("trigger"); - - QList<QDateTime> dateTimes; - dateTimes << QDateTime::currentDateTime().toUTC(); - - QTest::newRow("startUpdates(), 1 update in buffer") << dateTimes << StartUpdatesMethod; - QTest::newRow("requestUpdate(), 1 update in buffer") << dateTimes << RequestUpdatesMethod; - - for (int i=1; i<3; i++) - dateTimes << dateTimes[0].addMSecs(i * 100); - QTest::newRow("startUpdates(), multiple updates in buffer") << dateTimes << StartUpdatesMethod; - QTest::newRow("requestUpdate(), multiple updates in buffer") << dateTimes << RequestUpdatesMethod; -} - -void tst_QNmeaPositionInfoSource::startUpdates() -{ - QFETCH(QList<QDateTime>, dateTimes); - - QNmeaPositionInfoSource source(m_mode); - QNmeaProxyFactory factory; - QNmeaPositionInfoSourceProxy *proxy = static_cast<QNmeaPositionInfoSourceProxy *>( - factory.createPositionInfoSourceProxy(&source)); - - QSignalSpy spyUpdate(proxy->source(), SIGNAL(positionUpdated(QGeoPositionInfo))); - proxy->source()->startUpdates(); - - for (int i=0; i<dateTimes.count(); i++) - proxy->feedUpdate(dateTimes[i]); - QTRY_COMPARE(spyUpdate.count(), dateTimes.count()); -} - -void tst_QNmeaPositionInfoSource::startUpdates_data() -{ - QTest::addColumn<QList<QDateTime> >("dateTimes"); - - QTest::newRow("1 update") << createDateTimes(1); - QTest::newRow("2 updates") << createDateTimes(2); - QTest::newRow("10 updates") << createDateTimes(10); -} - -void tst_QNmeaPositionInfoSource::startUpdates_withTimeout() -{ - QNmeaPositionInfoSource source(m_mode); - QNmeaProxyFactory factory; - QNmeaPositionInfoSourceProxy *proxy = static_cast<QNmeaPositionInfoSourceProxy *>( - factory.createPositionInfoSourceProxy(&source)); - - QSignalSpy spyUpdate(proxy->source(), SIGNAL(positionUpdated(QGeoPositionInfo))); - QSignalSpy spyTimeout(proxy->source(), SIGNAL(errorOccurred(QGeoPositionInfoSource::Error))); - - proxy->source()->setUpdateInterval(1000); - proxy->source()->startUpdates(); - - QDateTime dt = QDateTime::currentDateTimeUtc(); - - if (m_mode == QNmeaPositionInfoSource::SimulationMode) { - // the first sentence primes the simulation - proxy->feedBytes(QLocationTestUtils::createRmcSentence(dt).toLatin1()); - proxy->feedBytes(QLocationTestUtils::createRmcSentence(dt.addMSecs(10)).toLatin1()); - proxy->feedBytes(QLocationTestUtils::createRmcSentence(dt.addMSecs(1100)).toLatin1()); - proxy->feedBytes(QLocationTestUtils::createRmcSentence(dt.addMSecs(2200)).toLatin1()); - proxy->feedBytes(QLocationTestUtils::createRmcSentence(dt.addSecs(9)).toLatin1()); - - QElapsedTimer t; - t.start(); - - for (int j = 1; j < 4; ++j) { - QTRY_COMPARE(spyUpdate.count(), j); - QCOMPARE(spyTimeout.count(), 0); - int time = t.elapsed(); - QVERIFY((time > j*1000 - 300) && (time < j*1000 + 300)); - } - - spyUpdate.clear(); - - QTRY_VERIFY_WITH_TIMEOUT((spyUpdate.count() == 0) && (spyTimeout.count() == 1), 7500); - const QList<QVariant> arguments = spyTimeout.takeFirst(); - const auto error = arguments.at(0).value<QGeoPositionInfoSource::Error>(); - QCOMPARE(error, QGeoPositionInfoSource::UpdateTimeoutError); - spyTimeout.clear(); - - QTRY_VERIFY_WITH_TIMEOUT((spyUpdate.count() == 1) && (spyTimeout.count() == 0), 7500); - - } else { - // dt + 900 - QTRY_VERIFY(spyUpdate.count() == 0 && spyTimeout.count() == 0); - - proxy->feedBytes(QLocationTestUtils::createRmcSentence(dt.addSecs(1)).toLatin1()); - // dt + 1200 - QTRY_VERIFY(spyUpdate.count() == 1 && spyTimeout.count() == 0); - spyUpdate.clear(); - - // dt + 1900 - QTRY_VERIFY(spyUpdate.count() == 0 && spyTimeout.count() == 0); - proxy->feedBytes(QLocationTestUtils::createRmcSentence(dt.addSecs(2)).toLatin1()); - - // dt + 2200 - QTRY_VERIFY(spyUpdate.count() == 1 && spyTimeout.count() == 0); - spyUpdate.clear(); - - // dt + 2900 - QTRY_VERIFY(spyUpdate.count() == 0 && spyTimeout.count() == 0); - proxy->feedBytes(QLocationTestUtils::createRmcSentence(dt.addSecs(3)).toLatin1()); - - // dt + 3200 - QTRY_VERIFY(spyUpdate.count() == 1 && spyTimeout.count() == 0); - spyUpdate.clear(); - - // dt + 6900 - QTRY_VERIFY(spyUpdate.count() == 0 && spyTimeout.count() == 1); - const QList<QVariant> arguments = spyTimeout.takeFirst(); - const auto error = arguments.at(0).value<QGeoPositionInfoSource::Error>(); - QCOMPARE(error, QGeoPositionInfoSource::UpdateTimeoutError); - spyTimeout.clear(); - proxy->feedBytes(QLocationTestUtils::createRmcSentence(dt.addSecs(7)).toLatin1()); - - // dt + 7200 - QTRY_VERIFY(spyUpdate.count() == 1 && spyTimeout.count() == 0); - spyUpdate.clear(); - } -} - -void tst_QNmeaPositionInfoSource::startUpdates_expectLatestUpdateOnly() -{ - // If startUpdates() is called and an interval has been set, if multiple' - // updates are in the buffer, only the latest update should be emitted - - QNmeaPositionInfoSource source(m_mode); - QNmeaProxyFactory factory; - QNmeaPositionInfoSourceProxy *proxy = static_cast<QNmeaPositionInfoSourceProxy *>( - factory.createPositionInfoSourceProxy(&source)); - - QSignalSpy spyUpdate(proxy->source(), SIGNAL(positionUpdated(QGeoPositionInfo))); - proxy->source()->setUpdateInterval(500); - proxy->source()->startUpdates(); - - QList<QDateTime> dateTimes = createDateTimes(3); - for (int i=0; i<dateTimes.count(); i++) - proxy->feedUpdate(dateTimes[i]); - - QTRY_COMPARE(spyUpdate.count(), 1); - QCOMPARE(spyUpdate[0][0].value<QGeoPositionInfo>().timestamp(), dateTimes.last()); -} - -void tst_QNmeaPositionInfoSource::startUpdates_waitForValidDateTime() -{ - // Tests that the class does not emit an update until it receives a - // sentences with a valid date *and* time. All sentences before this - // should be ignored, and any sentences received after this that do - // not have a date should use the known date. - - QFETCH(QByteArray, bytes); - QFETCH(QList<QDateTime>, dateTimes); - QFETCH(QList<bool>, expectHorizontalAccuracy); - QFETCH(QList<bool>, expectVerticalAccuracy); - - QNmeaPositionInfoSource source(m_mode); - source.setUserEquivalentRangeError(5.1); - QNmeaProxyFactory factory; - QNmeaPositionInfoSourceProxy *proxy = static_cast<QNmeaPositionInfoSourceProxy *>( - factory.createPositionInfoSourceProxy(&source)); - - QSignalSpy spy(proxy->source(), SIGNAL(positionUpdated(QGeoPositionInfo))); - QObject::connect(proxy->source(), &QNmeaPositionInfoSource::positionUpdated, [](const QGeoPositionInfo &info) { - qDebug() << info.timestamp(); - }); - - proxy->source()->startUpdates(); - proxy->feedBytes(bytes); - QTest::qWait(1000); // default push delay is 20ms - QTRY_COMPARE(spy.count(), dateTimes.count()); - - for (int i=0; i<spy.count(); i++) { - QGeoPositionInfo pInfo = spy[i][0].value<QGeoPositionInfo>(); - - QCOMPARE(pInfo.timestamp(), dateTimes[i]); - - // Generated GGA/GSA sentences have hard coded HDOP of 3.5, which corrisponds to a - // horizontal accuracy of 35.7, for the user equivalent range error of 5.1 set above. - QCOMPARE(pInfo.hasAttribute(QGeoPositionInfo::HorizontalAccuracy), - expectHorizontalAccuracy[i]); - if (pInfo.hasAttribute(QGeoPositionInfo::HorizontalAccuracy)) - QVERIFY(qFuzzyCompare(pInfo.attribute(QGeoPositionInfo::HorizontalAccuracy), 35.7)); - - // Generated GSA sentences have hard coded VDOP of 4.0, which corrisponds to a vertical - // accuracy of 40.8, for the user equivalent range error of 5.1 set above. - QCOMPARE(pInfo.hasAttribute(QGeoPositionInfo::VerticalAccuracy), - expectVerticalAccuracy[i]); - if (pInfo.hasAttribute(QGeoPositionInfo::VerticalAccuracy)) - QVERIFY(qFuzzyCompare(pInfo.attribute(QGeoPositionInfo::VerticalAccuracy), 40.8)); - } -} - -void tst_QNmeaPositionInfoSource::startUpdates_waitForValidDateTime_data() -{ - QTest::addColumn<QByteArray>("bytes"); - QTest::addColumn<QList<QDateTime> >("dateTimes"); - QTest::addColumn<QList<bool> >("expectHorizontalAccuracy"); - QTest::addColumn<QList<bool> >("expectVerticalAccuracy"); - - QDateTime dt = QDateTime::currentDateTime().toUTC(); - QByteArray bytes; - - // should only receive RMC sentence and the GGA sentence *after* it - bytes += QLocationTestUtils::createGgaSentence(dt.addMSecs(100).time()).toLatin1(); - bytes += QLocationTestUtils::createRmcSentence(dt.addMSecs(200)).toLatin1(); - bytes += QLocationTestUtils::createGgaSentence(dt.addMSecs(300).time()).toLatin1(); - // The first GGA does not have date, and there's no cached date to inject, so that update will be invalid - QTest::newRow("Feed GGA,RMC,GGA; expect RMC, second GGA only") - << bytes << (QList<QDateTime>() << dt.addMSecs(200) << dt.addMSecs(300)) - << (QList<bool>() << true << true) // accuracies are currently cached and injected in QGeoPositionInfos that do not have it - << (QList<bool>() << false << false); - - // should not receive ZDA (has no coordinates) but should get the GGA - // sentence after it since it got the date/time from ZDA - bytes.clear(); - bytes += QLocationTestUtils::createGgaSentence(dt.addMSecs(100).time()).toLatin1(); - bytes += QLocationTestUtils::createZdaSentence(dt.addMSecs(200)).toLatin1(); - bytes += QLocationTestUtils::createGgaSentence(dt.addMSecs(300).time()).toLatin1(); - QTest::newRow("Feed GGA,ZDA,GGA; expect second GGA only") - << bytes << (QList<QDateTime>() << dt.addMSecs(300)) - << (QList<bool>() << true) - << (QList<bool>() << false); - - // Feed ZDA,GGA,GSA,GGA; expect vertical accuracy from second GGA. - bytes.clear(); - bytes += QLocationTestUtils::createZdaSentence(dt.addMSecs(100)).toLatin1(); - bytes += QLocationTestUtils::createGgaSentence(dt.addMSecs(200).time()).toLatin1(); - bytes += QLocationTestUtils::createGsaSentence().toLatin1(); - bytes += QLocationTestUtils::createGgaSentence(dt.addMSecs(300).time()).toLatin1(); - if (m_mode == QNmeaPositionInfoSource::SimulationMode) { - QTest::newRow("Feed ZDA,GGA,GSA,GGA; expect vertical accuracy from second GGA") - << bytes << (QList<QDateTime>() << dt.addMSecs(200) << dt.addMSecs(300)) - << (QList<bool>() << true << true) - << (QList<bool>() << true << true); // First GGA gets VDOP from GSA bundled into previous, as it has no timestamp, second GGA gets the cached value. - } - - if (m_mode == QNmeaPositionInfoSource::SimulationMode) { - // In sim m_mode, should ignore sentence with a date/time before the known date/time - // (in real time m_mode, everything is passed on regardless) - bytes.clear(); - bytes += QLocationTestUtils::createRmcSentence(dt.addMSecs(100)).toLatin1(); - bytes += QLocationTestUtils::createRmcSentence(dt.addMSecs(-200)).toLatin1(); - bytes += QLocationTestUtils::createRmcSentence(dt.addMSecs(200)).toLatin1(); - QTest::newRow("Feed good RMC, RMC with bad date/time, good RMC; expect first and third RMC only") - << bytes << (QList<QDateTime>() << dt.addMSecs(100) << dt.addMSecs(200)) - << (QList<bool>() << false << false) - << (QList<bool>() << false << false); - } -} - -void tst_QNmeaPositionInfoSource::requestUpdate_waitForValidDateTime() -{ - QFETCH(QByteArray, bytes); - QFETCH(QList<QDateTime>, dateTimes); - - QNmeaPositionInfoSource source(m_mode); - QNmeaProxyFactory factory; - QNmeaPositionInfoSourceProxy *proxy = static_cast<QNmeaPositionInfoSourceProxy *>( - factory.createPositionInfoSourceProxy(&source)); - - QSignalSpy spy(proxy->source(), SIGNAL(positionUpdated(QGeoPositionInfo))); - proxy->source()->requestUpdate(); - - proxy->feedBytes(bytes); - QTRY_COMPARE(spy.count(), 1); - QCOMPARE(spy[0][0].value<QGeoPositionInfo>().timestamp(), dateTimes[0]); -} - -void tst_QNmeaPositionInfoSource::requestUpdate_waitForValidDateTime_data() -{ - startUpdates_waitForValidDateTime_data(); -} - -void tst_QNmeaPositionInfoSource::requestUpdate() -{ - QNmeaPositionInfoSource source(m_mode); - QNmeaProxyFactory factory; - QNmeaPositionInfoSourceProxy *proxy = static_cast<QNmeaPositionInfoSourceProxy *>( - factory.createPositionInfoSourceProxy(&source)); - - QSignalSpy spyUpdate(proxy->source(), SIGNAL(positionUpdated(QGeoPositionInfo))); - QSignalSpy spyTimeout(proxy->source(), SIGNAL(errorOccurred(QGeoPositionInfoSource::Error))); - QDateTime dt; - - proxy->source()->requestUpdate(100); - QTRY_COMPARE(spyTimeout.count(), 1); - auto error = spyTimeout[0][0].value<QGeoPositionInfoSource::Error>(); - QCOMPARE(error, QGeoPositionInfoSource::UpdateTimeoutError); - spyTimeout.clear(); - - dt = QDateTime::currentDateTimeUtc(); - proxy->feedUpdate(dt); - proxy->source()->requestUpdate(); - QTRY_COMPARE(spyUpdate.count(), 1); - QCOMPARE(spyUpdate[0][0].value<QGeoPositionInfo>().timestamp(), dt); - QCOMPARE(spyTimeout.count(), 0); - spyUpdate.clear(); - - // delay the update and expect it to be emitted after 300ms - dt = QDateTime::currentDateTimeUtc(); - proxy->source()->requestUpdate(1000); - QTest::qWait(300); - proxy->feedUpdate(dt); - QTRY_COMPARE(spyUpdate.count(), 1); - QCOMPARE(spyUpdate[0][0].value<QGeoPositionInfo>().timestamp(), dt); - QCOMPARE(spyTimeout.count(), 0); - spyUpdate.clear(); - - // delay the update and expect errorOccurred() to be emitted - dt = QDateTime::currentDateTimeUtc(); - proxy->source()->requestUpdate(500); - QTest::qWait(1000); - proxy->feedUpdate(dt); - QCOMPARE(spyTimeout.count(), 1); - error = spyTimeout[0][0].value<QGeoPositionInfoSource::Error>(); - QCOMPARE(error, QGeoPositionInfoSource::UpdateTimeoutError); - QCOMPARE(spyUpdate.count(), 0); - spyUpdate.clear(); -} - -void tst_QNmeaPositionInfoSource::requestUpdate_after_start() -{ - QNmeaPositionInfoSource source(m_mode); - QNmeaProxyFactory factory; - QNmeaPositionInfoSourceProxy *proxy = static_cast<QNmeaPositionInfoSourceProxy *>( - factory.createPositionInfoSourceProxy(&source)); - - QSignalSpy spyUpdate(proxy->source(), SIGNAL(positionUpdated(QGeoPositionInfo))); - QSignalSpy spyTimeout(proxy->source(), SIGNAL(errorOccurred(QGeoPositionInfoSource::Error))); - - // Start updates with 500ms interval and requestUpdate() with 100ms - // timeout. Feed an update, and it should be emitted immediately due to - // the requestUpdate(). The update should not be emitted again after that - // (i.e. the startUpdates() interval should not cause it to be re-emitted). - - QDateTime dt = QDateTime::currentDateTimeUtc(); - proxy->source()->setUpdateInterval(500); - proxy->source()->startUpdates(); - proxy->source()->requestUpdate(100); - proxy->feedUpdate(dt); - QTRY_COMPARE(spyUpdate.count(), 1); - QCOMPARE(spyUpdate[0][0].value<QGeoPositionInfo>().timestamp(), dt); - QCOMPARE(spyTimeout.count(), 0); - spyUpdate.clear(); - - // Update has been emitted for requestUpdate(), shouldn't be emitted for startUpdates() - QTRY_COMPARE_WITH_TIMEOUT(spyUpdate.count(), 0, 1000); -} - -void tst_QNmeaPositionInfoSource::testWithBadNmea() -{ - QFETCH(QByteArray, bytes); - QFETCH(QList<QDateTime>, dateTimes); - QFETCH(UpdateTriggerMethod, trigger); - - QNmeaPositionInfoSource source(m_mode); - QNmeaProxyFactory factory; - QNmeaPositionInfoSourceProxy *proxy = static_cast<QNmeaPositionInfoSourceProxy *>( - factory.createPositionInfoSourceProxy(&source)); - - QSignalSpy spy(proxy->source(), SIGNAL(positionUpdated(QGeoPositionInfo))); - if (trigger == StartUpdatesMethod) - proxy->source()->startUpdates(); - else - proxy->source()->requestUpdate(); - - proxy->feedBytes(bytes); - QTRY_COMPARE(spy.count(), dateTimes.count()); - for (int i=0; i<dateTimes.count(); i++) - QCOMPARE(spy[i][0].value<QGeoPositionInfo>().timestamp(), dateTimes[i]); -} - -void tst_QNmeaPositionInfoSource::testWithBadNmea_data() -{ - QTest::addColumn<QByteArray>("bytes"); - QTest::addColumn<QList<QDateTime> >("dateTimes"); - QTest::addColumn<UpdateTriggerMethod>("trigger"); - - QDateTime firstDateTime = QDateTime::currentDateTimeUtc(); - QByteArray bad = QLocationTestUtils::createRmcSentence(firstDateTime.addSecs(1)).toLatin1(); - bad = bad.mid(bad.length()/2); - QDateTime lastDateTime = firstDateTime.addSecs(2); - - QByteArray bytes; - bytes += QLocationTestUtils::createRmcSentence(firstDateTime).toLatin1(); - bytes += bad; - bytes += QLocationTestUtils::createRmcSentence(lastDateTime).toLatin1(); - QTest::newRow("requestUpdate(), bad second sentence") << bytes - << (QList<QDateTime>() << firstDateTime) << RequestUpdatesMethod; - QTest::newRow("startUpdates(), bad second sentence") << bytes - << (QList<QDateTime>() << firstDateTime << lastDateTime) << StartUpdatesMethod; -} diff --git a/tests/auto/qnmeapositioninfosource/tst_qnmeapositioninfosource.h b/tests/auto/qnmeapositioninfosource/tst_qnmeapositioninfosource.h deleted file mode 100644 index 83cd284d..00000000 --- a/tests/auto/qnmeapositioninfosource/tst_qnmeapositioninfosource.h +++ /dev/null @@ -1,182 +0,0 @@ -/**************************************************************************** -** -** 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 "../qgeopositioninfosource/testqgeopositioninfosource_p.h" -#include "../utils/qnmeaproxyfactory.h" -#include "../utils/qlocationtestutils_p.h" - -#include <QtPositioning/qnmeapositioninfosource.h> - -#include <QTest> -#include <QDir> -#include <QDebug> -#include <QBuffer> -#include <QSignalSpy> -#include <QMetaType> -#include <QFile> -#include <QTemporaryFile> -#include <QHash> -#include <QTimer> - -QT_USE_NAMESPACE -Q_DECLARE_METATYPE(QNmeaPositionInfoSource::UpdateMode) -Q_DECLARE_METATYPE(QList<QDateTime>) - -class tst_QNmeaPositionInfoSource : public QObject -{ - Q_OBJECT - -public: - enum UpdateTriggerMethod - { - StartUpdatesMethod, - RequestUpdatesMethod - }; - - tst_QNmeaPositionInfoSource(QNmeaPositionInfoSource::UpdateMode mode, QObject *parent = 0); - -private: - QList<QDateTime> createDateTimes(const QDateTime &dt, int count) const - { - QList<QDateTime> dateTimes; - int interval = 100; - for (int i=0; i<count; i++) { - dateTimes << dt.addMSecs(interval); - interval += 100; - } - return dateTimes; - } - - QList<QDateTime> createDateTimes(int count) const - { - return createDateTimes(QDateTime::currentDateTime().toUTC(), count); - } - -private slots: - void initTestCase(); - - void constructor(); - - void supportedPositioningMethods(); - - void minimumUpdateInterval(); - - void userEquivalentRangeError(); - - void setUpdateInterval_delayedUpdate(); - - void lastKnownPosition(); - - void beginWithBufferedData(); - void beginWithBufferedData_data(); - - void startUpdates(); - void startUpdates_data(); - - void startUpdates_withTimeout(); - - void startUpdates_expectLatestUpdateOnly(); - - void startUpdates_waitForValidDateTime(); - void startUpdates_waitForValidDateTime_data(); - - void requestUpdate_waitForValidDateTime(); - void requestUpdate_waitForValidDateTime_data(); - - void requestUpdate(); - void requestUpdate_after_start(); - - void testWithBadNmea(); - void testWithBadNmea_data(); - -private: - QNmeaPositionInfoSource::UpdateMode m_mode; -}; - -Q_DECLARE_METATYPE(tst_QNmeaPositionInfoSource::UpdateTriggerMethod) - -//--------------------------------------------------- - -class Feeder : public QObject -{ - Q_OBJECT - -public: - Feeder(QObject *parent) - : QObject(parent) - { - } - - void start(QNmeaPositionInfoSourceProxy *proxy) - { - m_proxy = proxy; - QTimer *timer = new QTimer(this); - QObject::connect(timer, SIGNAL(timeout()), this, SLOT(timeout())); - timer->setInterval(proxy->source()->minimumUpdateInterval()*2); - timer->start(); - } - -public slots: - void timeout() - { - m_proxy->feedBytes(QLocationTestUtils::createRmcSentence(QDateTime::currentDateTime()).toLatin1()); - } - -private: - QNmeaPositionInfoSourceProxy *m_proxy; -}; - -//--------------------------------------------------- - - -class UnlimitedNmeaStream : public QIODevice -{ - Q_OBJECT - -public: - UnlimitedNmeaStream(QObject *parent) : QIODevice(parent) {} - -protected: - qint64 readData(char *data, qint64 maxSize) override - { - QByteArray bytes = QLocationTestUtils::createRmcSentence(QDateTime::currentDateTime()).toLatin1(); - qint64 sz = qMin(qint64(bytes.size()), maxSize); - memcpy(data, bytes.constData(), sz); - return sz; - } - - qint64 writeData(const char *, qint64) override - { - return -1; - } - - qint64 bytesAvailable() const override - { - return 1024 + QIODevice::bytesAvailable(); - } -}; |