summaryrefslogtreecommitdiff
path: root/tests/auto/qgeopositioninfosource/testqgeopositioninfosource.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/qgeopositioninfosource/testqgeopositioninfosource.cpp')
-rw-r--r--tests/auto/qgeopositioninfosource/testqgeopositioninfosource.cpp807
1 files changed, 0 insertions, 807 deletions
diff --git a/tests/auto/qgeopositioninfosource/testqgeopositioninfosource.cpp b/tests/auto/qgeopositioninfosource/testqgeopositioninfosource.cpp
deleted file mode 100644
index 2ddcc9a0..00000000
--- a/tests/auto/qgeopositioninfosource/testqgeopositioninfosource.cpp
+++ /dev/null
@@ -1,807 +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 <QMetaType>
-#include <QSignalSpy>
-#include <QDebug>
-#include <QTimer>
-
-#include <limits.h>
-
-#include <qnumeric.h>
-#include <QtPositioning/qgeopositioninfosource.h>
-#include <QtPositioning/qgeopositioninfo.h>
-
-#include "testqgeopositioninfosource_p.h"
-#include "../utils/qlocationtestutils_p.h"
-
-Q_DECLARE_METATYPE(QGeoPositionInfoSource::PositioningMethod)
-Q_DECLARE_METATYPE(QGeoPositionInfoSource::PositioningMethods)
-
-#define MAX_WAITING_TIME 50000
-
-// Must provide a valid source, unless testing the source
-// returned by QGeoPositionInfoSource::createDefaultSource() on a system
-// that has no default source
-#define CHECK_SOURCE_VALID { \
- if (!m_source) { \
- if (m_testingDefaultSource && QGeoPositionInfoSource::createDefaultSource(0) == 0) \
- QSKIP("No default position source on this system"); \
- else \
- QFAIL("createTestSource() must return a valid source!"); \
- } \
- }
-
-class MyPositionSource : public QGeoPositionInfoSource
-{
- Q_OBJECT
-public:
- MyPositionSource(QObject *parent = 0)
- : QGeoPositionInfoSource(parent) {
- }
-
- QGeoPositionInfo lastKnownPosition(bool /*fromSatellitePositioningMethodsOnly = false*/) const override {
- return QGeoPositionInfo();
- }
-
- void setSupportedPositioningMethods(PositioningMethods methods) {
- m_methods = methods;
- }
-
- virtual PositioningMethods supportedPositioningMethods() const override {
- return m_methods;
- }
- virtual int minimumUpdateInterval() const override {
- return 0;
- }
-
- virtual void startUpdates() override {}
- virtual void stopUpdates() override {}
-
- virtual void requestUpdate(int) override {}
-
- Error error() const override { return QGeoPositionInfoSource::NoError; }
-
-private:
- PositioningMethods m_methods;
-};
-
-class DefaultSourceTest : public TestQGeoPositionInfoSource
-{
- Q_OBJECT
-protected:
- QGeoPositionInfoSource *createTestSource() override {
- return QGeoPositionInfoSource::createSource(QStringLiteral("test.source"), 0);
- }
-};
-
-
-TestQGeoPositionInfoSource::TestQGeoPositionInfoSource(QObject *parent)
- : QObject(parent)
-{
- m_testingDefaultSource = false;
-#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
-}
-
-TestQGeoPositionInfoSource *TestQGeoPositionInfoSource::createDefaultSourceTest()
-{
- DefaultSourceTest *test = new DefaultSourceTest;
- test->m_testingDefaultSource = true;
- return test;
-}
-
-void TestQGeoPositionInfoSource::test_slot1()
-{
-}
-
-void TestQGeoPositionInfoSource::test_slot2()
-{
- m_testSlot2Called = true;
-}
-
-void TestQGeoPositionInfoSource::base_initTestCase()
-{
-
-}
-
-void TestQGeoPositionInfoSource::base_init()
-{
- m_source = createTestSource();
- m_testSlot2Called = false;
-}
-
-void TestQGeoPositionInfoSource::base_cleanup()
-{
- delete m_source;
- m_source = 0;
-}
-
-void TestQGeoPositionInfoSource::base_cleanupTestCase()
-{
-}
-
-void TestQGeoPositionInfoSource::initTestCase()
-{
- base_initTestCase();
-}
-
-void TestQGeoPositionInfoSource::init()
-{
- base_init();
-}
-
-void TestQGeoPositionInfoSource::cleanup()
-{
- base_cleanup();
-}
-
-void TestQGeoPositionInfoSource::cleanupTestCase()
-{
- base_cleanupTestCase();
-}
-
-// TC_ID_3_x_1
-void TestQGeoPositionInfoSource::constructor_withParent()
-{
- auto parent = std::make_unique<QObject>();
- new MyPositionSource(parent.get());
-}
-
-// TC_ID_3_x_2
-void TestQGeoPositionInfoSource::constructor_noParent()
-{
- MyPositionSource *obj = new MyPositionSource();
- delete obj;
-}
-
-void TestQGeoPositionInfoSource::updateInterval()
-{
- MyPositionSource s;
- QCOMPARE(s.updateInterval(), 0);
-}
-
-void TestQGeoPositionInfoSource::setPreferredPositioningMethods()
-{
- QFETCH(QGeoPositionInfoSource::PositioningMethod, supported);
- QFETCH(QGeoPositionInfoSource::PositioningMethod, preferred);
- QFETCH(QGeoPositionInfoSource::PositioningMethod, resulting);
-
- MyPositionSource s;
- s.setSupportedPositioningMethods(supported);
- s.setPreferredPositioningMethods(preferred);
- QCOMPARE(s.preferredPositioningMethods(), resulting);
-}
-
-void TestQGeoPositionInfoSource::setPreferredPositioningMethods_data()
-{
- QTest::addColumn<QGeoPositionInfoSource::PositioningMethod>("supported");
- QTest::addColumn<QGeoPositionInfoSource::PositioningMethod>("preferred");
- QTest::addColumn<QGeoPositionInfoSource::PositioningMethod>("resulting");
-
- QTest::newRow("Sat supported, Sat preferred")
- << QGeoPositionInfoSource::SatellitePositioningMethods
- << QGeoPositionInfoSource::SatellitePositioningMethods
- << QGeoPositionInfoSource::SatellitePositioningMethods;
- QTest::newRow("Sat supported, Non-Sat preferred")
- << QGeoPositionInfoSource::SatellitePositioningMethods
- << QGeoPositionInfoSource::NonSatellitePositioningMethods
- << QGeoPositionInfoSource::SatellitePositioningMethods;
- QTest::newRow("Sat supported, All preferred")
- << QGeoPositionInfoSource::SatellitePositioningMethods
- << QGeoPositionInfoSource::AllPositioningMethods
- << QGeoPositionInfoSource::SatellitePositioningMethods;
-
- QTest::newRow("Non-Sat supported, Sat preferred")
- << QGeoPositionInfoSource::NonSatellitePositioningMethods
- << QGeoPositionInfoSource::SatellitePositioningMethods
- << QGeoPositionInfoSource::NonSatellitePositioningMethods;
- QTest::newRow("Non-Sat supported, Non-Sat preferred")
- << QGeoPositionInfoSource::NonSatellitePositioningMethods
- << QGeoPositionInfoSource::NonSatellitePositioningMethods
- << QGeoPositionInfoSource::NonSatellitePositioningMethods;
- QTest::newRow("Non-Sat supported, All preferred")
- << QGeoPositionInfoSource::NonSatellitePositioningMethods
- << QGeoPositionInfoSource::AllPositioningMethods
- << QGeoPositionInfoSource::NonSatellitePositioningMethods;
-
- QTest::newRow("All supported, Sat preferred")
- << QGeoPositionInfoSource::AllPositioningMethods
- << QGeoPositionInfoSource::SatellitePositioningMethods
- << QGeoPositionInfoSource::SatellitePositioningMethods;
- QTest::newRow("All supported, Non-Sat preferred")
- << QGeoPositionInfoSource::AllPositioningMethods
- << QGeoPositionInfoSource::NonSatellitePositioningMethods
- << QGeoPositionInfoSource::NonSatellitePositioningMethods;
- QTest::newRow("All supported, All preferred")
- << QGeoPositionInfoSource::AllPositioningMethods
- << QGeoPositionInfoSource::AllPositioningMethods
- << QGeoPositionInfoSource::AllPositioningMethods;
-}
-
-void TestQGeoPositionInfoSource::preferredPositioningMethods()
-{
- MyPositionSource s;
- QCOMPARE(s.preferredPositioningMethods(), 0);
-}
-
-//TC_ID_3_x_1 : Create a position source with the given parent that reads from the system's default
-// sources of location data
-void TestQGeoPositionInfoSource::createDefaultSource()
-{
- auto parent = std::make_unique<QObject>();
-
- // source will be deleted when parent goes out of scope
- QGeoPositionInfoSource *source = QGeoPositionInfoSource::createDefaultSource(parent.get());
- // now all platforms have the dummy plugin at least
- QVERIFY(source != nullptr);
-}
-
-void TestQGeoPositionInfoSource::setUpdateInterval()
-{
- CHECK_SOURCE_VALID;
-
- QFETCH(int, interval);
- QFETCH(int, expectedInterval);
-
- m_source->setUpdateInterval(interval);
- QCOMPARE(m_source->updateInterval(), expectedInterval);
-}
-
-void TestQGeoPositionInfoSource::setUpdateInterval_data()
-{
- QTest::addColumn<int>("interval");
- QTest::addColumn<int>("expectedInterval");
- QGeoPositionInfoSource *source = createTestSource();
- int minUpdateInterval = source ? source->minimumUpdateInterval() : -1;
- if (source)
- delete source;
-
- QTest::newRow("0") << 0 << 0;
-
- if (minUpdateInterval > -1) {
- QTest::newRow("INT_MIN") << INT_MIN << minUpdateInterval;
- QTest::newRow("-1") << -1 << minUpdateInterval;
- }
-
- if (minUpdateInterval > 0) {
- QTest::newRow("more than minInterval") << minUpdateInterval + 1 << minUpdateInterval + 1;
- QTest::newRow("equal to minInterval") << minUpdateInterval << minUpdateInterval;
- }
-
- if (minUpdateInterval > 1) {
- QTest::newRow("less then minInterval") << minUpdateInterval - 1 << minUpdateInterval;
- QTest::newRow("in btw zero and minInterval") << 1 << minUpdateInterval;
- }
-}
-
-void TestQGeoPositionInfoSource::lastKnownPosition()
-{
- CHECK_SOURCE_VALID;
- QFETCH(QGeoPositionInfoSource::PositioningMethod, positioningMethod);
- QFETCH(bool, lastKnownPositionArgument);
-
- if ((m_source->supportedPositioningMethods() & positioningMethod) == 0)
- QSKIP("Not a supported positioning method for this position source");
-
- m_source->setPreferredPositioningMethods(positioningMethod);
-
- QSignalSpy spy(m_source, SIGNAL(positionUpdated(QGeoPositionInfo)));
- QSignalSpy timeout(m_source, SIGNAL(errorOccurred(QGeoPositionInfoSource::Error)));
- m_source->setUpdateInterval(1000);
- m_source->startUpdates();
-
- // Use QEventLoop instead of qWait() to ensure we stop as soon as a
- // position is emitted (otherwise the lastKnownPosition() may have
- // changed by the time it is checked)
- QEventLoop loop;
- QTimer timer;
- //simulated CI tests will quickly return -> real GPS tests take 2 minutes for satellite systems
- //use a 5 min timeout
- timer.setInterval(300000);
- connect(m_source, SIGNAL(positionUpdated(QGeoPositionInfo)),
- &loop, SLOT(quit()));
- connect(&timer, SIGNAL(timeout()), &loop, SLOT(quit()));
- timer.start();
- loop.exec();
-
- QVERIFY((spy.count() > 0) && (timeout.count() == 0));
-
- QList<QVariant> list = spy.takeFirst();
- QGeoPositionInfo info = list.at(0).value<QGeoPositionInfo>();
- QGeoPositionInfo lastPositioninfo = m_source->lastKnownPosition(lastKnownPositionArgument);
-
- // lastPositioninfo is only gauranteed to be valid in all cases when only using satelite
- // positioning methods or when lastKnownPositionArgument is false
- if (!lastKnownPositionArgument ||
- positioningMethod == QGeoPositionInfoSource::SatellitePositioningMethods) {
- QVERIFY(lastPositioninfo.isValid());
- }
-
- if (lastPositioninfo.isValid()) {
- QCOMPARE(info.coordinate(), lastPositioninfo.coordinate());
- // On some CI machines the above evenloop code is not sufficient as positionUpdated
- // still fires causing last know position and last update to be out of sync.
- // To accommodate we check that the time stamps are no more than 1s apart
- // ideally they should be the same
- // doesn't work: QCOMPARE(info.timestamp(), lastPositioninfo.timestamp());
- const qint64 diff = qAbs(info.timestamp().msecsTo(lastPositioninfo.timestamp()));
- QCOMPARE(diff < 1000, true);
-
- QCOMPARE(info.hasAttribute(QGeoPositionInfo::HorizontalAccuracy),
- lastPositioninfo.hasAttribute(QGeoPositionInfo::HorizontalAccuracy));
-
- if (info.hasAttribute(QGeoPositionInfo::HorizontalAccuracy)) {
- bool isNaN1 = qIsNaN(info.attribute(QGeoPositionInfo::HorizontalAccuracy));
- bool isNaN2 = qIsNaN(lastPositioninfo.attribute(QGeoPositionInfo::HorizontalAccuracy));
- QCOMPARE(isNaN1, isNaN2);
- if (!isNaN1) {
- QCOMPARE(qFuzzyCompare(info.attribute(QGeoPositionInfo::HorizontalAccuracy),
- lastPositioninfo.attribute(QGeoPositionInfo::HorizontalAccuracy)), true);
- }
- }
-
- QCOMPARE(info.hasAttribute(QGeoPositionInfo::VerticalAccuracy),
- lastPositioninfo.hasAttribute(QGeoPositionInfo::VerticalAccuracy));
-
- if (info.hasAttribute(QGeoPositionInfo::VerticalAccuracy)) {
- bool isNaN1 = qIsNaN(info.attribute(QGeoPositionInfo::VerticalAccuracy));
- bool isNaN2 = qIsNaN(lastPositioninfo.attribute(QGeoPositionInfo::VerticalAccuracy));
- QCOMPARE(isNaN1, isNaN2);
- if (!isNaN1) {
- QCOMPARE(qFuzzyCompare(info.attribute(QGeoPositionInfo::VerticalAccuracy),
- lastPositioninfo.attribute(QGeoPositionInfo::VerticalAccuracy)), true);
- }
- }
- }
-
- m_source->stopUpdates();
-}
-
-void TestQGeoPositionInfoSource::lastKnownPosition_data()
-{
- QTest::addColumn<QGeoPositionInfoSource::PositioningMethod>("positioningMethod");
- QTest::addColumn<bool>("lastKnownPositionArgument");
-
- // no good way to determine on MeeGo what are supported. If we ask for all or non-satellites, we
- // typically get geoclue-example provider, which is not suitable for this test.
- QTest::newRow("all - false") << QGeoPositionInfoSource::AllPositioningMethods << false;
- QTest::newRow("all - true") << QGeoPositionInfoSource::AllPositioningMethods << true;
- QTest::newRow("satellite - false") << QGeoPositionInfoSource::SatellitePositioningMethods << false;
- QTest::newRow("satellite - true") << QGeoPositionInfoSource::SatellitePositioningMethods << true;
-}
-
-void TestQGeoPositionInfoSource::minimumUpdateInterval()
-{
- CHECK_SOURCE_VALID;
-
- QVERIFY(m_source->minimumUpdateInterval() > 0);
-}
-
-//TC_ID_3_x_1
-void TestQGeoPositionInfoSource::startUpdates_testIntervals()
-{
- CHECK_SOURCE_VALID;
- QSignalSpy spy(m_source, SIGNAL(positionUpdated(QGeoPositionInfo)));
- QSignalSpy timeout(m_source, SIGNAL(errorOccurred(QGeoPositionInfoSource::Error)));
- m_source->setUpdateInterval(1000);
- const int interval = 15000;
-
- m_source->startUpdates();
-
- QTRY_COMPARE_WITH_TIMEOUT(spy.count(), 1, interval);
- for (int i = 0; i < 6; i++) {
- QTRY_VERIFY_WITH_TIMEOUT((spy.count() == 1) && (timeout.count() == 0), interval);
- spy.clear();
- }
-
- m_source->stopUpdates();
-}
-
-
-void TestQGeoPositionInfoSource::startUpdates_testIntervalChangesWhileRunning()
-{
- // There are two ways of dealing with an interval change, and we have left it system dependent.
- // The interval can be changed will running or after the next update.
- // WinCE uses the first method, S60 uses the second method.
-
- CHECK_SOURCE_VALID;
-
- QSignalSpy spy(m_source, SIGNAL(positionUpdated(QGeoPositionInfo)));
- QSignalSpy timeout(m_source, SIGNAL(errorOccurred(QGeoPositionInfoSource::Error)));
- m_source->setUpdateInterval(0);
- m_source->startUpdates();
- m_source->setUpdateInterval(0);
-
- QTRY_VERIFY_WITH_TIMEOUT(spy.count() > 0, 3000);
- QCOMPARE(timeout.count(), 0);
- spy.clear();
-
- m_source->setUpdateInterval(1000);
-
- QTRY_VERIFY_WITH_TIMEOUT((spy.count() == 2) && (timeout.count() == 0), 15000);
- spy.clear();
-
- m_source->setUpdateInterval(2000);
-
- QTRY_VERIFY_WITH_TIMEOUT((spy.count() == 2) && (timeout.count() == 0), 30000);
- spy.clear();
-
- m_source->setUpdateInterval(1000);
-
- QTRY_VERIFY_WITH_TIMEOUT((spy.count() == 2) && (timeout.count() == 0), 15000);
- spy.clear();
-
- m_source->setUpdateInterval(1000);
-
- QTRY_VERIFY_WITH_TIMEOUT((spy.count() == 2) && (timeout.count() == 0), 15000);
- spy.clear();
-
- m_source->setUpdateInterval(0);
-
- QTRY_VERIFY_WITH_TIMEOUT((spy.count() > 0) && (timeout.count() == 0), 7000);
- spy.clear();
-
- m_source->setUpdateInterval(0);
-
- QTRY_VERIFY_WITH_TIMEOUT((spy.count() > 0) && (timeout.count() == 0), 7000);
- spy.clear();
-
- m_source->stopUpdates();
-}
-
-//TC_ID_3_x_2
-void TestQGeoPositionInfoSource::startUpdates_testDefaultInterval()
-{
- CHECK_SOURCE_VALID;
-
- QSignalSpy spy(m_source, SIGNAL(positionUpdated(QGeoPositionInfo)));
- QSignalSpy timeout(m_source, SIGNAL(errorOccurred(QGeoPositionInfoSource::Error)));
- m_source->startUpdates();
- for (int i = 0; i < 3; i++) {
-
- QTRY_VERIFY_WITH_TIMEOUT((spy.count() > 0) && (timeout.count() == 0), 7000);
- spy.clear();
- }
- m_source->stopUpdates();
-}
-
-//TC_ID_3_x_3
-void TestQGeoPositionInfoSource::startUpdates_testZeroInterval()
-{
- CHECK_SOURCE_VALID;
-
- QSignalSpy spy(m_source, SIGNAL(positionUpdated(QGeoPositionInfo)));
- QSignalSpy timeout(m_source, SIGNAL(errorOccurred(QGeoPositionInfoSource::Error)));
- m_source->setUpdateInterval(0);
- m_source->startUpdates();
- for (int i = 0; i < 3; i++) {
- QTRY_VERIFY_WITH_TIMEOUT((spy.count() > 0) && (timeout.count() == 0), 7000);
- spy.clear();
- }
- m_source->stopUpdates();
-}
-
-void TestQGeoPositionInfoSource::startUpdates_moreThanOnce()
-{
- CHECK_SOURCE_VALID;
-
- QSignalSpy spy(m_source, SIGNAL(positionUpdated(QGeoPositionInfo)));
- QSignalSpy timeout(m_source, SIGNAL(errorOccurred(QGeoPositionInfoSource::Error)));
- m_source->setUpdateInterval(0);
- m_source->startUpdates();
-
- m_source->startUpdates(); // check there is no crash
-
- QTRY_VERIFY_WITH_TIMEOUT((spy.count() > 0) && (timeout.count() == 0), 7000);
-
- m_source->startUpdates(); // check there is no crash
-
- m_source->stopUpdates();
-}
-
-//TC_ID_3_x_1
-void TestQGeoPositionInfoSource::stopUpdates()
-{
- CHECK_SOURCE_VALID;
-
- QSignalSpy spy(m_source, SIGNAL(positionUpdated(QGeoPositionInfo)));
- QSignalSpy timeout(m_source, SIGNAL(errorOccurred(QGeoPositionInfoSource::Error)));
- m_source->setUpdateInterval(1000);
- m_source->startUpdates();
- for (int i = 0; i < 2; i++) {
- QTRY_VERIFY_WITH_TIMEOUT((spy.count() > 0) && (timeout.count() == 0), 9500);
- spy.clear();
- }
- m_source->stopUpdates();
- QTest::qWait(2000);
- QCOMPARE(spy.count(), 0);
- spy.clear();
-
- m_source->setUpdateInterval(0);
- m_source->startUpdates();
- m_source->stopUpdates();
- QTRY_COMPARE_WITH_TIMEOUT(spy.count(), 0, 9500);
-}
-
-//TC_ID_3_x_2
-void TestQGeoPositionInfoSource::stopUpdates_withoutStart()
-{
- CHECK_SOURCE_VALID;
- m_source->stopUpdates(); // check there is no crash
-}
-
-void TestQGeoPositionInfoSource::requestUpdate()
-{
- CHECK_SOURCE_VALID;
- QFETCH(int, timeout);
- QSignalSpy spy(m_source, SIGNAL(errorOccurred(QGeoPositionInfoSource::Error)));
- m_source->requestUpdate(timeout);
- QTRY_COMPARE(spy.count(), 1);
- const QList<QVariant> arguments = spy.takeFirst();
- const auto error = arguments.at(0).value<QGeoPositionInfoSource::Error>();
- QCOMPARE(error, QGeoPositionInfoSource::UpdateTimeoutError);
-}
-
-void TestQGeoPositionInfoSource::requestUpdate_data()
-{
- QTest::addColumn<int>("timeout");
- QTest::newRow("less than zero") << -1; //TC_ID_3_x_7
-}
-
-// TC_ID_3_x_1 : Create position source and call requestUpdate with valid timeout value
-void TestQGeoPositionInfoSource::requestUpdate_validTimeout()
-{
- CHECK_SOURCE_VALID;
-
- QSignalSpy spyUpdate(m_source, SIGNAL(positionUpdated(QGeoPositionInfo)));
- QSignalSpy spyTimeout(m_source, SIGNAL(errorOccurred(QGeoPositionInfoSource::Error)));
-
- // currently all the sources have a minimumUpdateInterval <= 1000
- m_source->requestUpdate(1500);
-
- QTRY_VERIFY_WITH_TIMEOUT((spyUpdate.count() > 0) && (spyTimeout.count() == 0), 7000);
-}
-
-void TestQGeoPositionInfoSource::requestUpdate_defaultTimeout()
-{
- CHECK_SOURCE_VALID;
- QSignalSpy spyUpdate(m_source, SIGNAL(positionUpdated(QGeoPositionInfo)));
- QSignalSpy spyTimeout(m_source, SIGNAL(errorOccurred(QGeoPositionInfoSource::Error)));
-
- m_source->requestUpdate(0);
-
- QTRY_VERIFY_WITH_TIMEOUT((spyUpdate.count() > 0) && (spyTimeout.count() == 0), 7000);
-}
-
-// TC_ID_3_x_2 : Create position source and call requestUpdate with a timeout less than
-// minimumupdateInterval
-void TestQGeoPositionInfoSource::requestUpdate_timeoutLessThanMinimumInterval()
-{
- CHECK_SOURCE_VALID;
-
- QSignalSpy spyTimeout(m_source, SIGNAL(errorOccurred(QGeoPositionInfoSource::Error)));
- m_source->requestUpdate(1);
-
- QTRY_COMPARE_WITH_TIMEOUT(spyTimeout.count(), 1, 1000);
- const QList<QVariant> arguments = spyTimeout.takeFirst();
- const auto error = arguments.at(0).value<QGeoPositionInfoSource::Error>();
- QCOMPARE(error, QGeoPositionInfoSource::UpdateTimeoutError);
-}
-
-// TC_ID_3_x_3 : Call requestUpdate() with same value repeatedly
-void TestQGeoPositionInfoSource::requestUpdate_repeatedCalls()
-{
- CHECK_SOURCE_VALID;
-
- QSignalSpy spyUpdate(m_source, SIGNAL(positionUpdated(QGeoPositionInfo)));
- QSignalSpy spyTimeout(m_source, SIGNAL(errorOccurred(QGeoPositionInfoSource::Error)));
-
- // currently all the sources have a minimumUpdateInterval <= 1000
- m_source->requestUpdate(1500);
-
- QTRY_VERIFY_WITH_TIMEOUT((spyUpdate.count() > 0) && (spyTimeout.count() == 0), 7000);
- spyUpdate.clear();
- m_source->requestUpdate(1500);
-
- QTRY_VERIFY_WITH_TIMEOUT((spyUpdate.count() > 0) && (spyTimeout.count() == 0), 7000);
-}
-
-void TestQGeoPositionInfoSource::requestUpdate_overlappingCalls()
-{
- CHECK_SOURCE_VALID;
-
- QSignalSpy spyUpdate(m_source, SIGNAL(positionUpdated(QGeoPositionInfo)));
- QSignalSpy spyTimeout(m_source, SIGNAL(errorOccurred(QGeoPositionInfoSource::Error)));
-
- // currently all the sources have a minimumUpdateInterval <= 1000
- m_source->requestUpdate(1500);
- m_source->requestUpdate(1500);
-
- QTRY_VERIFY_WITH_TIMEOUT((spyUpdate.count() > 0) && (spyTimeout.count() == 0), 7000);
-}
-
-//TC_ID_3_x_4
-void TestQGeoPositionInfoSource::requestUpdateAfterStartUpdates_ZeroInterval()
-{
- CHECK_SOURCE_VALID;
-
- QSignalSpy spyUpdate(m_source, SIGNAL(positionUpdated(QGeoPositionInfo)));
- QSignalSpy spyTimeout(m_source, SIGNAL(errorOccurred(QGeoPositionInfoSource::Error)));
-
- m_source->setUpdateInterval(0);
- m_source->startUpdates();
-
- QTRY_VERIFY_WITH_TIMEOUT((spyUpdate.count() > 0) && (spyTimeout.count() == 0), 7000);
- spyUpdate.clear();
-
- m_source->requestUpdate(1500);
- QTest::qWait(7000);
-
- QVERIFY((spyUpdate.count() > 0) && (spyTimeout.count() == 0));
- spyUpdate.clear();
-
- QTRY_VERIFY_WITH_TIMEOUT((spyUpdate.count() > 0) && (spyTimeout.count() == 0), MAX_WAITING_TIME);
-
- m_source->stopUpdates();
-}
-
-void TestQGeoPositionInfoSource::requestUpdateAfterStartUpdates_SmallInterval()
-{
- CHECK_SOURCE_VALID;
-
- QSignalSpy spyUpdate(m_source, SIGNAL(positionUpdated(QGeoPositionInfo)));
- QSignalSpy spyTimeout(m_source, SIGNAL(errorOccurred(QGeoPositionInfoSource::Error)));
-
- m_source->setUpdateInterval(2000);
- m_source->startUpdates();
-
- QTRY_VERIFY_WITH_TIMEOUT((spyUpdate.count() == 1) && (spyTimeout.count() == 0), 20000);
- spyUpdate.clear();
-
- m_source->requestUpdate(1500);
-
- QTRY_VERIFY_WITH_TIMEOUT((spyUpdate.count() == 1) && (spyTimeout.count() == 0), 7000);
- spyUpdate.clear();
-
- QTRY_VERIFY_WITH_TIMEOUT((spyUpdate.count() == 1) && (spyTimeout.count() == 0), 20000);
-
- m_source->stopUpdates();
-}
-
-void TestQGeoPositionInfoSource::requestUpdateBeforeStartUpdates_ZeroInterval()
-{
- CHECK_SOURCE_VALID;
-
- QSignalSpy spyUpdate(m_source, SIGNAL(positionUpdated(QGeoPositionInfo)));
- QSignalSpy spyTimeout(m_source, SIGNAL(errorOccurred(QGeoPositionInfoSource::Error)));
-
- m_source->requestUpdate(1500);
-
- m_source->setUpdateInterval(0);
- m_source->startUpdates();
-
- QTRY_VERIFY_WITH_TIMEOUT((spyUpdate.count() >= 2) && (spyTimeout.count() == 0), 14000);
- spyUpdate.clear();
-
- QTest::qWait(1500);
-
- QCOMPARE(spyTimeout.count(), 0);
-
- m_source->stopUpdates();
-}
-
-void TestQGeoPositionInfoSource::requestUpdateBeforeStartUpdates_SmallInterval()
-{
- CHECK_SOURCE_VALID;
- QSignalSpy spyUpdate(m_source, SIGNAL(positionUpdated(QGeoPositionInfo)));
- QSignalSpy spyTimeout(m_source, SIGNAL(errorOccurred(QGeoPositionInfoSource::Error)));
-
- m_source->requestUpdate(1500);
-
- m_source->setUpdateInterval(3000);
- m_source->startUpdates();
-
- QTRY_VERIFY_WITH_TIMEOUT((spyUpdate.count() > 0) && (spyTimeout.count() == 0), 7000);
- spyUpdate.clear();
-
- QTRY_VERIFY_WITH_TIMEOUT((spyUpdate.count() > 0) && (spyTimeout.count() == 0), 20000);
-
- m_source->stopUpdates();
-}
-
-void TestQGeoPositionInfoSource::removeSlotForRequestTimeout()
-{
- CHECK_SOURCE_VALID;
-
- bool i = connect(m_source, SIGNAL(errorOccurred(QGeoPositionInfoSource::Error)),
- this, SLOT(test_slot1()));
- QVERIFY(i == true);
- i = connect(m_source, SIGNAL(errorOccurred(QGeoPositionInfoSource::Error)),
- this, SLOT(test_slot2()));
- QVERIFY(i == true);
- i = disconnect(m_source, SIGNAL(errorOccurred(QGeoPositionInfoSource::Error)),
- this, SLOT(test_slot1()));
- QVERIFY(i == true);
-
- m_source->requestUpdate(-1);
- QTRY_VERIFY_WITH_TIMEOUT((m_testSlot2Called == true), 1000);
-}
-
-void TestQGeoPositionInfoSource::removeSlotForPositionUpdated()
-{
- CHECK_SOURCE_VALID;
-
- bool i = connect(m_source, SIGNAL(positionUpdated(QGeoPositionInfo)), this, SLOT(test_slot1()));
- QVERIFY(i == true);
- i = connect(m_source, SIGNAL(positionUpdated(QGeoPositionInfo)), this, SLOT(test_slot2()));
- QVERIFY(i == true);
- i = disconnect(m_source, SIGNAL(positionUpdated(QGeoPositionInfo)), this, SLOT(test_slot1()));
- QVERIFY(i == true);
-
- m_source->requestUpdate(1500);
-
- QTRY_VERIFY_WITH_TIMEOUT((m_testSlot2Called == true), 7000);
-}
-
-void TestQGeoPositionInfoSource::updateIntervalBinding()
-{
- auto parent = std::make_unique<QObject>();
- // source will be deleted when parent goes out of scope
- QGeoPositionInfoSource *source = QGeoPositionInfoSource::createDefaultSource(parent.get());
- QVERIFY(source != nullptr);
-
- QTestPrivate::testReadWritePropertyBasics<QGeoPositionInfoSource, int>(*source, 1000, 2000,
- "updateInterval");
-}
-
-void TestQGeoPositionInfoSource::preferredMethodsBinding()
-{
- auto parent = std::make_unique<QObject>();
- // source will be deleted when parent goes out of scope
- QGeoPositionInfoSource *source =
- QGeoPositionInfoSource::createSource("test.source", parent.get());
- QVERIFY(source != nullptr);
-
- QTestPrivate::testReadWritePropertyBasics<QGeoPositionInfoSource,
- QGeoPositionInfoSource::PositioningMethods>(
- *source, QGeoPositionInfoSource::SatellitePositioningMethods,
- QGeoPositionInfoSource::AllPositioningMethods, "preferredPositioningMethods");
-}
-
-#include "testqgeopositioninfosource.moc"