// Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only //TESTED_COMPONENT=src/location #include #include #include #include #include #include QT_USE_NAMESPACE class tst_PositionPlugin : public QObject { Q_OBJECT private slots: void initTestCase(); void availableSources(); void create(); void getUpdates(); }; void tst_PositionPlugin::initTestCase() { #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 } void tst_PositionPlugin::availableSources() { QVERIFY(QGeoPositionInfoSource::availableSources().contains("test.source")); QVERIFY(!QGeoSatelliteInfoSource::availableSources().contains("test.source")); QVERIFY(!QGeoAreaMonitorSource::availableSources().contains("test.source")); } void tst_PositionPlugin::create() { std::unique_ptr src = nullptr; src.reset(QGeoPositionInfoSource::createSource("test.source", 0)); QVERIFY(src != nullptr); QVERIFY(src->minimumUpdateInterval() == 200); src.reset(QGeoPositionInfoSource::createSource("invalid source that will never exist", 0)); QVERIFY(src == 0); std::unique_ptr ssrc = nullptr; ssrc.reset(QGeoSatelliteInfoSource::createSource("test.source", 0)); QVERIFY(ssrc == nullptr); } void tst_PositionPlugin::getUpdates() { std::unique_ptr src(QGeoPositionInfoSource::createSource("test.source", 0)); src->setUpdateInterval(200); QSignalSpy spy(src.get(), SIGNAL(positionUpdated(QGeoPositionInfo))); src->startUpdates(); QTRY_COMPARE_WITH_TIMEOUT(spy.size(), 1, 5000); QCOMPARE(spy[0].size(), 1); QGeoPositionInfo info = qvariant_cast(spy[0][0]); QCOMPARE(info.coordinate().latitude(), 0.1); QCOMPARE(info.coordinate().longitude(), 0.1); } QTEST_GUILESS_MAIN(tst_PositionPlugin) #include "tst_positionplugin.moc"