summaryrefslogtreecommitdiff
path: root/tests/auto/qnmeasatelliteinfosource/nmea/tst_nmeasatelliteinfosource.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/qnmeasatelliteinfosource/nmea/tst_nmeasatelliteinfosource.cpp')
-rw-r--r--tests/auto/qnmeasatelliteinfosource/nmea/tst_nmeasatelliteinfosource.cpp556
1 files changed, 0 insertions, 556 deletions
diff --git a/tests/auto/qnmeasatelliteinfosource/nmea/tst_nmeasatelliteinfosource.cpp b/tests/auto/qnmeasatelliteinfosource/nmea/tst_nmeasatelliteinfosource.cpp
deleted file mode 100644
index a19b3f6f..00000000
--- a/tests/auto/qnmeasatelliteinfosource/nmea/tst_nmeasatelliteinfosource.cpp
+++ /dev/null
@@ -1,556 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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 <QTest>
-#include <QTimer>
-#include <QSignalSpy>
-#include <QtPositioning/QNmeaSatelliteInfoSource>
-#include "../../utils/qlocationtestutils_p.h"
-
-class DataFeeder : public QIODevice
-{
- Q_OBJECT
-public:
- DataFeeder(QNmeaSatelliteInfoSource *parent)
- : QIODevice(parent), m_parentMode(parent->updateMode())
- {
- }
-
- void setMessages(const QList<QByteArray> &messages)
- {
- m_messages = messages;
- m_canReadLine = true;
- m_messageIndex = 0;
- if (m_parentMode == QNmeaSatelliteInfoSource::UpdateMode::RealTimeMode)
- emit readyRead();
- }
-
-signals:
- void messageSent();
-
-protected:
- qint64 readData(char *data, qint64 maxSize) override
- {
- if (maxSize == 0 || m_messageIndex < 0 || m_messageIndex >= m_messages.size())
- return 0;
-
- m_canReadLine = false;
-
- QByteArray bytes = m_messages.at(m_messageIndex);
- qint64 sz = qMin(qint64(bytes.size()), maxSize);
- memcpy(data, bytes.constData(), sz);
-
- m_messageIndex++;
-
- emit messageSent();
- QTimer::singleShot(10, this, &DataFeeder::onTimer);
-
- return sz;
- }
-
- qint64 writeData(const char *, qint64) override { return -1; }
-
- qint64 bytesAvailable() const override { return 1024 + QIODevice::bytesAvailable(); }
-
- bool canReadLine() const override
- {
- return m_canReadLine && (m_messageIndex >= 0) && (m_messageIndex < m_messages.size());
- }
-
-private slots:
- void onTimer()
- {
- m_canReadLine = true;
- if (m_parentMode == QNmeaSatelliteInfoSource::UpdateMode::RealTimeMode)
- emit readyRead();
- }
-
-private:
- QNmeaSatelliteInfoSource::UpdateMode m_parentMode;
- QList<QByteArray> m_messages;
- qsizetype m_messageIndex = 0;
- bool m_canReadLine = true; // To read each line separately
-};
-
-class tst_QNmeaSatelliteInfoSource : public QObject
-{
- Q_OBJECT
-private slots:
- void backendProperty();
- void backendProperty_data();
-
- void parseDataStream();
- void parseDataStream_data();
-
-private:
- QGeoSatelliteInfo createSatelliteInfo(QGeoSatelliteInfo::SatelliteSystem system, int id,
- int snr);
-};
-
-void tst_QNmeaSatelliteInfoSource::backendProperty()
-{
- QFETCH(int, simulationRate);
- QFETCH(int, updateInterval);
- QFETCH(QList<QByteArray>, messages);
- QFETCH(int, timeout);
- QFETCH(int, desiredMessagesSent);
-
- QNmeaSatelliteInfoSource source(QNmeaSatelliteInfoSource::UpdateMode::SimulationMode);
- auto feeder = new DataFeeder(&source);
- source.setDevice(feeder);
-
- QSignalSpy messageSentSpy(feeder, &DataFeeder::messageSent);
- QSignalSpy inViewSpy(&source, &QNmeaSatelliteInfoSource::satellitesInViewUpdated);
-
- source.setBackendProperty(QNmeaSatelliteInfoSource::SimulationUpdateInterval, simulationRate);
- source.setUpdateInterval(updateInterval);
-
- source.startUpdates();
- feeder->setMessages(messages);
-
- QTRY_VERIFY_WITH_TIMEOUT(inViewSpy.count() == 1, timeout);
-
- QCOMPARE(source.backendProperty(QNmeaSatelliteInfoSource::SimulationUpdateInterval).toInt(),
- simulationRate);
- QCOMPARE(source.updateInterval(), updateInterval);
-
- QCOMPARE(messageSentSpy.count(), desiredMessagesSent);
-}
-
-void tst_QNmeaSatelliteInfoSource::backendProperty_data()
-{
- QTest::addColumn<int>("simulationRate");
- QTest::addColumn<int>("updateInterval");
- QTest::addColumn<QList<QByteArray>>("messages");
- QTest::addColumn<int>("timeout");
- QTest::addColumn<int>("desiredMessagesSent");
-
- const auto simpleGpsGsvMessage = QLocationTestUtils::addNmeaChecksumAndBreaks(
- "$GPGSV,1,1,4,05,,,25,07,,,,08,,,,13,,,36*")
- .toLatin1();
-
- const QList<QByteArray> msgs(10, simpleGpsGsvMessage);
-
- // here updateInterval should not be a multiple of simulationRate because
- // this will make the test flacky due to timer precision.
- QTest::addRow("Simulation rate smaller than updateInterval") << 200 << 500 << msgs << 550 << 2;
-
- QTest::addRow("Simulation rate larger than updateInterval") << 200 << 100 << msgs << 300 << 1;
-
- // Here we do not really have problems with timer precision, because even if
- // the updateInterval() timer expires earlier, we will not get any update
- // until the real data comes.
- QTest::addRow("Simulation rate equals updateInterval") << 200 << 200 << msgs << 300 << 1;
-}
-
-void tst_QNmeaSatelliteInfoSource::parseDataStream()
-{
- QFETCH(QNmeaSatelliteInfoSource::UpdateMode, mode);
- QFETCH(QList<QByteArray>, messages);
- QFETCH(QList<QGeoSatelliteInfo>, desiredInView);
- QFETCH(QList<QGeoSatelliteInfo>, desiredInUse);
-
- QNmeaSatelliteInfoSource source(mode);
- auto feeder = new DataFeeder(&source);
- source.setDevice(feeder);
-
- QSignalSpy messageSentSpy(feeder, &DataFeeder::messageSent);
- QSignalSpy inViewSpy(&source, &QNmeaSatelliteInfoSource::satellitesInViewUpdated);
- QSignalSpy inUseSpy(&source, &QNmeaSatelliteInfoSource::satellitesInUseUpdated);
-
- source.startUpdates();
- feeder->setMessages(messages);
-
- QTRY_VERIFY_WITH_TIMEOUT(messageSentSpy.count() == messages.count(), 2000);
- QVERIFY(!inViewSpy.isEmpty());
- QVERIFY(!inUseSpy.isEmpty());
-
- const auto inView = inViewSpy.back().at(0).value<QList<QGeoSatelliteInfo>>();
- QCOMPARE(inView, desiredInView);
-
- const auto inUse = inUseSpy.back().at(0).value<QList<QGeoSatelliteInfo>>();
- QCOMPARE(inUse, desiredInUse);
-}
-
-void tst_QNmeaSatelliteInfoSource::parseDataStream_data()
-{
- QTest::addColumn<QNmeaSatelliteInfoSource::UpdateMode>("mode");
- QTest::addColumn<QList<QByteArray>>("messages");
- QTest::addColumn<QList<QGeoSatelliteInfo>>("desiredInView");
- QTest::addColumn<QList<QGeoSatelliteInfo>>("desiredInUse");
-
- // We will use only satId and SNR, to simplify objects for comparison
-
- // one line GPS
- const auto simpleGpsGsvMessage = QLocationTestUtils::addNmeaChecksumAndBreaks(
- "$GPGSV,1,1,4,05,,,25,07,,,,08,,,,13,,,36*")
- .toLatin1();
- const auto simpleGpsGsaMessage = QLocationTestUtils::addNmeaChecksumAndBreaks(
- "$GPGSA,A,3,05,13,,,,,,,,,,,50.95,50.94,1.00*")
- .toLatin1();
-
- const auto simpleGpsInView =
- QList<QGeoSatelliteInfo> { createSatelliteInfo(QGeoSatelliteInfo::GPS, 5, 25),
- createSatelliteInfo(QGeoSatelliteInfo::GPS, 7, -1),
- createSatelliteInfo(QGeoSatelliteInfo::GPS, 8, -1),
- createSatelliteInfo(QGeoSatelliteInfo::GPS, 13, 36) };
- const auto simpleGpsInUse =
- QList<QGeoSatelliteInfo> { createSatelliteInfo(QGeoSatelliteInfo::GPS, 5, 25),
- createSatelliteInfo(QGeoSatelliteInfo::GPS, 13, 36) };
-
- QTest::newRow("realtime GPS") << QNmeaSatelliteInfoSource::UpdateMode::RealTimeMode
- << QList<QByteArray> { simpleGpsGsvMessage, simpleGpsGsaMessage }
- << simpleGpsInView << simpleGpsInUse;
-
- QTest::newRow("simulation GPS")
- << QNmeaSatelliteInfoSource::UpdateMode::SimulationMode
- << QList<QByteArray> { simpleGpsGsvMessage, simpleGpsGsaMessage } << simpleGpsInView
- << simpleGpsInUse;
-
- // multi line GPS
- const auto complexGpsGsvMessage1 = QLocationTestUtils::addNmeaChecksumAndBreaks(
- "$GPGSV,2,1,8,05,,,22,07,,,,08,,,,13,,,18*")
- .toLatin1();
- const auto complexGpsGsvMessage2 =
- QLocationTestUtils::addNmeaChecksumAndBreaks("$GPGSV,2,2,8,14,,,,15,,,18,18,,,,20,,,*")
- .toLatin1();
- const auto complexGpsGsaMessage = QLocationTestUtils::addNmeaChecksumAndBreaks(
- "$GPGSA,A,3,05,13,15,,,,,,,,,,50.95,50.94,1.00*")
- .toLatin1();
-
- const auto complexGpsInView =
- QList<QGeoSatelliteInfo> { createSatelliteInfo(QGeoSatelliteInfo::GPS, 5, 22),
- createSatelliteInfo(QGeoSatelliteInfo::GPS, 7, -1),
- createSatelliteInfo(QGeoSatelliteInfo::GPS, 8, -1),
- createSatelliteInfo(QGeoSatelliteInfo::GPS, 13, 18),
- createSatelliteInfo(QGeoSatelliteInfo::GPS, 14, -1),
- createSatelliteInfo(QGeoSatelliteInfo::GPS, 15, 18),
- createSatelliteInfo(QGeoSatelliteInfo::GPS, 18, -1),
- createSatelliteInfo(QGeoSatelliteInfo::GPS, 20, -1) };
- const auto complexGpsInUse =
- QList<QGeoSatelliteInfo> { createSatelliteInfo(QGeoSatelliteInfo::GPS, 5, 22),
- createSatelliteInfo(QGeoSatelliteInfo::GPS, 13, 18),
- createSatelliteInfo(QGeoSatelliteInfo::GPS, 15, 18) };
-
- QTest::newRow("realtime multi-line GPS")
- << QNmeaSatelliteInfoSource::UpdateMode::RealTimeMode
- << QList<QByteArray> { complexGpsGsvMessage1, complexGpsGsvMessage2,
- complexGpsGsaMessage }
- << complexGpsInView << complexGpsInUse;
-
- QTest::newRow("simulation multi-line GPS")
- << QNmeaSatelliteInfoSource::UpdateMode::SimulationMode
- << QList<QByteArray> { complexGpsGsvMessage1, complexGpsGsvMessage2,
- complexGpsGsaMessage }
- << complexGpsInView << complexGpsInUse;
-
- // one line GPS & GLONASS
- const auto simpleGlnsGsvMessage = QLocationTestUtils::addNmeaChecksumAndBreaks(
- "$GLGSV,1,1,4,65,,,,66,,,,71,,,20,72,,,28*")
- .toLatin1();
- const auto gnSimpleGlnsGsaMessage = QLocationTestUtils::addNmeaChecksumAndBreaks(
- "$GNGSA,A,3,71,72,,,,,,,,,,,50.95,50.94,1.00*")
- .toLatin1();
- const auto gnSimpleGpsGsaMessage = QLocationTestUtils::addNmeaChecksumAndBreaks(
- "$GNGSA,A,3,05,13,,,,,,,,,,,50.95,50.94,1.00*")
- .toLatin1();
-
- const auto simpleGlnsInView =
- QList<QGeoSatelliteInfo> { createSatelliteInfo(QGeoSatelliteInfo::GLONASS, 65, -1),
- createSatelliteInfo(QGeoSatelliteInfo::GLONASS, 66, -1),
- createSatelliteInfo(QGeoSatelliteInfo::GLONASS, 71, 20),
- createSatelliteInfo(QGeoSatelliteInfo::GLONASS, 72, 28) };
- const auto simpleGlnsInUse =
- QList<QGeoSatelliteInfo> { createSatelliteInfo(QGeoSatelliteInfo::GLONASS, 71, 20),
- createSatelliteInfo(QGeoSatelliteInfo::GLONASS, 72, 28) };
-
- const auto simpleGpsGlnsInView = simpleGpsInView + simpleGlnsInView;
- const auto simpleGpsGlnsInUse = simpleGpsInUse + simpleGlnsInUse;
-
- QTest::newRow("realtime GPS & GLONASS")
- << QNmeaSatelliteInfoSource::UpdateMode::RealTimeMode
- << QList<QByteArray> { simpleGpsGsvMessage, simpleGlnsGsvMessage, gnSimpleGpsGsaMessage,
- gnSimpleGlnsGsaMessage }
- << simpleGpsGlnsInView << simpleGpsGlnsInUse;
-
- QTest::newRow("simulation GPS & GLONASS")
- << QNmeaSatelliteInfoSource::UpdateMode::SimulationMode
- << QList<QByteArray> { simpleGpsGsvMessage, simpleGlnsGsvMessage, gnSimpleGpsGsaMessage,
- gnSimpleGlnsGsaMessage }
- << simpleGpsGlnsInView << simpleGpsGlnsInUse;
-
- // multi line GPS & GLONASS
- const auto complexGlnsGsvMessage1 = QLocationTestUtils::addNmeaChecksumAndBreaks(
- "$GLGSV,3,1,10,65,,,,66,,,,71,,,20,72,,,28*")
- .toLatin1();
- const auto complexGlnsGsvMessage2 =
- QLocationTestUtils::addNmeaChecksumAndBreaks("$GLGSV,3,2,10,73,,,,74,,,,75,,,33,81,,,*")
- .toLatin1();
- const auto complexGlnsGsvMessage3 =
- QLocationTestUtils::addNmeaChecksumAndBreaks("$GLGSV,3,3,10,82,,,,83,,,*").toLatin1();
- const auto gnComplexGlnsGsaMessage = QLocationTestUtils::addNmeaChecksumAndBreaks(
- "$GNGSA,A,3,71,72,75,,,,,,,,,,50.95,50.94,1.00*")
- .toLatin1();
- const auto gnComplexGpsGsaMessage = QLocationTestUtils::addNmeaChecksumAndBreaks(
- "$GNGSA,A,3,05,13,15,,,,,,,,,,50.95,50.94,1.00*")
- .toLatin1();
-
- const auto complexGlnsInView =
- QList<QGeoSatelliteInfo> { createSatelliteInfo(QGeoSatelliteInfo::GLONASS, 65, -1),
- createSatelliteInfo(QGeoSatelliteInfo::GLONASS, 66, -1),
- createSatelliteInfo(QGeoSatelliteInfo::GLONASS, 71, 20),
- createSatelliteInfo(QGeoSatelliteInfo::GLONASS, 72, 28),
- createSatelliteInfo(QGeoSatelliteInfo::GLONASS, 73, -1),
- createSatelliteInfo(QGeoSatelliteInfo::GLONASS, 74, -1),
- createSatelliteInfo(QGeoSatelliteInfo::GLONASS, 75, 33),
- createSatelliteInfo(QGeoSatelliteInfo::GLONASS, 81, -1),
- createSatelliteInfo(QGeoSatelliteInfo::GLONASS, 82, -1),
- createSatelliteInfo(QGeoSatelliteInfo::GLONASS, 83, -1) };
- const auto complexGlnsInUse =
- QList<QGeoSatelliteInfo> { createSatelliteInfo(QGeoSatelliteInfo::GLONASS, 71, 20),
- createSatelliteInfo(QGeoSatelliteInfo::GLONASS, 72, 28),
- createSatelliteInfo(QGeoSatelliteInfo::GLONASS, 75, 33) };
-
- const auto complexGpsGlnsInView = complexGpsInView + complexGlnsInView;
- const auto complexGpsGlnsInUse = complexGpsInUse + complexGlnsInUse;
-
- QTest::newRow("realtime multi-line GPS & GLONASS")
- << QNmeaSatelliteInfoSource::UpdateMode::RealTimeMode
- << QList<QByteArray> { complexGpsGsvMessage1, complexGpsGsvMessage2,
- complexGlnsGsvMessage1, complexGlnsGsvMessage2,
- complexGlnsGsvMessage3, gnComplexGpsGsaMessage,
- gnComplexGlnsGsaMessage }
- << complexGpsGlnsInView << complexGpsGlnsInUse;
-
- QTest::newRow("simulation multi-line GPS & GLONASS")
- << QNmeaSatelliteInfoSource::UpdateMode::SimulationMode
- << QList<QByteArray> { complexGpsGsvMessage1, complexGpsGsvMessage2,
- complexGlnsGsvMessage1, complexGlnsGsvMessage2,
- complexGlnsGsvMessage3, gnComplexGpsGsaMessage,
- gnComplexGlnsGsaMessage }
- << complexGpsGlnsInView << complexGpsGlnsInUse;
-
- // multi-line GPS & GLONASS: GSA before GSV
- QTest::newRow("realtime multi-line GPS & GLONASS reverse")
- << QNmeaSatelliteInfoSource::UpdateMode::RealTimeMode
- << QList<QByteArray> { gnComplexGlnsGsaMessage, gnComplexGpsGsaMessage,
- complexGlnsGsvMessage1, complexGlnsGsvMessage2,
- complexGlnsGsvMessage3, complexGpsGsvMessage1,
- complexGpsGsvMessage2 }
- << complexGpsGlnsInView << complexGpsGlnsInUse;
-
- QTest::newRow("simulation multi-line GPS & GLONASS reverse")
- << QNmeaSatelliteInfoSource::UpdateMode::SimulationMode
- << QList<QByteArray> { gnComplexGlnsGsaMessage, gnComplexGpsGsaMessage,
- complexGlnsGsvMessage1, complexGlnsGsvMessage2,
- complexGlnsGsvMessage3, complexGpsGsvMessage1,
- complexGpsGsvMessage2 }
- << complexGpsGlnsInView << complexGpsGlnsInUse;
-
- // multi-line GSP & GLONASS: mixed order
- QTest::newRow("realtime multi-line GPS & GLONASS mixed")
- << QNmeaSatelliteInfoSource::UpdateMode::RealTimeMode
- << QList<QByteArray> { gnComplexGlnsGsaMessage, complexGlnsGsvMessage1,
- complexGlnsGsvMessage2, complexGlnsGsvMessage3,
- complexGpsGsvMessage1, complexGpsGsvMessage2,
- gnComplexGpsGsaMessage }
- << complexGpsGlnsInView << complexGpsGlnsInUse;
-
- QTest::newRow("realtime multi-line GPS & GLONASS mixed")
- << QNmeaSatelliteInfoSource::UpdateMode::SimulationMode
- << QList<QByteArray> { gnComplexGlnsGsaMessage, complexGlnsGsvMessage1,
- complexGlnsGsvMessage2, complexGlnsGsvMessage3,
- complexGpsGsvMessage1, complexGpsGsvMessage2,
- gnComplexGpsGsaMessage }
- << complexGpsGlnsInView << complexGpsGlnsInUse;
-
- // one line GPS & GLONASS: empty GNGSA for GPS
- const auto gnEmptyGpsGsaMessage = QLocationTestUtils::addNmeaChecksumAndBreaks(
- "$GNGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*")
- .toLatin1();
-
- QTest::newRow("realtime GSP & GLONASS: empty GSA for GPS")
- << QNmeaSatelliteInfoSource::UpdateMode::RealTimeMode
- << QList<QByteArray> { simpleGpsGsvMessage, simpleGlnsGsvMessage,
- gnSimpleGlnsGsaMessage, gnEmptyGpsGsaMessage }
- << simpleGpsGlnsInView << simpleGlnsInUse;
-
- QTest::newRow("simulation GSP & GLONASS: empty GSA for GPS")
- << QNmeaSatelliteInfoSource::UpdateMode::SimulationMode
- << QList<QByteArray> { simpleGpsGsvMessage, simpleGlnsGsvMessage,
- gnSimpleGlnsGsaMessage, gnEmptyGpsGsaMessage }
- << simpleGpsGlnsInView << simpleGlnsInUse;
-
- // one line GPS & GLONASS: empty $GPGSV
- const auto emptyGpsGsvMessage =
- QLocationTestUtils::addNmeaChecksumAndBreaks("$GPGSV,1,1,0,,,,,,,,,,,,,,,,*")
- .toLatin1();
-
- QTest::newRow("realtime GPS & GLONASS: empty $GPGSV")
- << QNmeaSatelliteInfoSource::UpdateMode::RealTimeMode
- << QList<QByteArray> { emptyGpsGsvMessage, simpleGlnsGsvMessage, gnSimpleGlnsGsaMessage,
- gnSimpleGpsGsaMessage }
- << simpleGlnsInView << simpleGlnsInUse;
-
- QTest::newRow("simulation GPS & GLONASS: empty $GPGSV")
- << QNmeaSatelliteInfoSource::UpdateMode::RealTimeMode
- << QList<QByteArray> { emptyGpsGsvMessage, simpleGlnsGsvMessage, gnSimpleGlnsGsaMessage,
- gnSimpleGpsGsaMessage }
- << simpleGlnsInView << simpleGlnsInUse;
-
- // one line GPS & GLONASS: empty GNGSA in the middle
- // In this test we send the following sequence:
- // 1. $GPGSV - valid GPS in view
- // 2. $GLGSV - valid GLONASS in view
- // 3. $GNGSA - valid GPS in use
- // 4. $GNGSA - valid GLONASS in use
- // 5. $GPGSV - valid GPS in view
- // 6. $GNGSA - empty GNGSA (meaning empty GPS)
- // 7. $GPGSV - valid GPS in view: at this point GPS in use will be cleared
- // As a result, we will see valid GPS & GLONASS in view, but only GLONASS
- // in use.
-
- QTest::newRow("realtime GPS & GLONASS: empty $GNGSA in the middle")
- << QNmeaSatelliteInfoSource::UpdateMode::RealTimeMode
- << QList<QByteArray> { simpleGpsGsvMessage, simpleGlnsGsvMessage,
- gnSimpleGpsGsaMessage, gnSimpleGlnsGsaMessage,
- simpleGpsGsvMessage, gnEmptyGpsGsaMessage,
- simpleGpsGsvMessage }
- << simpleGpsGlnsInView << simpleGlnsInUse;
-
- QTest::newRow("simulation GPS & GLONASS: empty $GNGSA in the middle")
- << QNmeaSatelliteInfoSource::UpdateMode::SimulationMode
- << QList<QByteArray> { simpleGpsGsvMessage, simpleGlnsGsvMessage,
- gnSimpleGpsGsaMessage, gnSimpleGlnsGsaMessage,
- simpleGpsGsvMessage, gnEmptyGpsGsaMessage,
- simpleGpsGsvMessage }
- << simpleGpsGlnsInView << simpleGlnsInUse;
-
- // BEIDOU signals for below test cases are just synthesized based on the
- // NMEA protocol description. They were NEVER checked on real hardware,
- // as we do not have one.
-
- // multi-line GPS, GLONASS & BEIDOU
- const auto complexBduGsvMessage1 = QLocationTestUtils::addNmeaChecksumAndBreaks(
- "$GBGSV,2,1,7,201,,,,202,,,,203,,,20,204,,,28*")
- .toLatin1();
- const auto complexBduGsvMessage2 =
- QLocationTestUtils::addNmeaChecksumAndBreaks("$GBGSV,2,2,7,205,,,,206,,,,207,,,33,,,,*")
- .toLatin1();
- const auto gnComplexBduGsaMessage = QLocationTestUtils::addNmeaChecksumAndBreaks(
- "$GNGSA,A,3,203,204,207,,,,,,,,,,50.95,50.94,1.00*")
- .toLatin1();
- const auto complexBduInView =
- QList<QGeoSatelliteInfo> { createSatelliteInfo(QGeoSatelliteInfo::BEIDOU, 201, -1),
- createSatelliteInfo(QGeoSatelliteInfo::BEIDOU, 202, -1),
- createSatelliteInfo(QGeoSatelliteInfo::BEIDOU, 203, 20),
- createSatelliteInfo(QGeoSatelliteInfo::BEIDOU, 204, 28),
- createSatelliteInfo(QGeoSatelliteInfo::BEIDOU, 205, -1),
- createSatelliteInfo(QGeoSatelliteInfo::BEIDOU, 206, -1),
- createSatelliteInfo(QGeoSatelliteInfo::BEIDOU, 207, 33) };
- const auto complexBduInUse =
- QList<QGeoSatelliteInfo> { createSatelliteInfo(QGeoSatelliteInfo::BEIDOU, 203, 20),
- createSatelliteInfo(QGeoSatelliteInfo::BEIDOU, 204, 28),
- createSatelliteInfo(QGeoSatelliteInfo::BEIDOU, 207, 33) };
-
- const auto complexGpsGlnsBduInView = complexGpsInView + complexGlnsInView + complexBduInView;
- const auto complexGpsGlnsBduInUse = complexGpsInUse + complexGlnsInUse + complexBduInUse;
-
- QTest::newRow("realtime GPS, GLONASS & BEIDOU")
- << QNmeaSatelliteInfoSource::UpdateMode::RealTimeMode
- << QList<QByteArray> { complexGpsGsvMessage1, complexGpsGsvMessage2,
- complexGlnsGsvMessage1, complexGlnsGsvMessage2,
- complexGlnsGsvMessage3, complexBduGsvMessage1,
- complexBduGsvMessage2, gnComplexGpsGsaMessage,
- gnComplexGlnsGsaMessage, gnComplexBduGsaMessage }
- << complexGpsGlnsBduInView << complexGpsGlnsBduInUse;
-
- QTest::newRow("simulation GPS, GLONASS & BEIDOU")
- << QNmeaSatelliteInfoSource::UpdateMode::SimulationMode
- << QList<QByteArray> { complexGpsGsvMessage1, complexGpsGsvMessage2,
- complexGlnsGsvMessage1, complexGlnsGsvMessage2,
- complexGlnsGsvMessage3, complexBduGsvMessage1,
- complexBduGsvMessage2, gnComplexGpsGsaMessage,
- gnComplexGlnsGsaMessage, gnComplexBduGsaMessage }
- << complexGpsGlnsBduInView << complexGpsGlnsBduInUse;
-
- // multi-line GPS, GLONASS & BEIDOU: GSA before GSV
- QTest::newRow("realtime GPS, GLONASS & BEIDOU reverse")
- << QNmeaSatelliteInfoSource::UpdateMode::RealTimeMode
- << QList<QByteArray> { gnComplexGpsGsaMessage, gnComplexGlnsGsaMessage,
- gnComplexBduGsaMessage, complexGpsGsvMessage1,
- complexGpsGsvMessage2, complexGlnsGsvMessage1,
- complexGlnsGsvMessage2, complexGlnsGsvMessage3,
- complexBduGsvMessage1, complexBduGsvMessage2 }
- << complexGpsGlnsBduInView << complexGpsGlnsBduInUse;
-
- QTest::newRow("simulation GPS, GLONASS & BEIDOU reverse")
- << QNmeaSatelliteInfoSource::UpdateMode::SimulationMode
- << QList<QByteArray> { gnComplexGpsGsaMessage, gnComplexGlnsGsaMessage,
- gnComplexBduGsaMessage, complexGpsGsvMessage1,
- complexGpsGsvMessage2, complexGlnsGsvMessage1,
- complexGlnsGsvMessage2, complexGlnsGsvMessage3,
- complexBduGsvMessage1, complexBduGsvMessage2 }
- << complexGpsGlnsBduInView << complexGpsGlnsBduInUse;
-
- // multi-line GPS, GLONASS & BEIDOU: mixed order
- QTest::newRow("realtime GPS, GLONASS & BEIDOU mixed")
- << QNmeaSatelliteInfoSource::UpdateMode::RealTimeMode
- << QList<QByteArray> { gnComplexGpsGsaMessage, complexGlnsGsvMessage1,
- complexGlnsGsvMessage2, complexGlnsGsvMessage3,
- complexBduGsvMessage1, complexBduGsvMessage2,
- gnComplexGlnsGsaMessage, gnComplexBduGsaMessage,
- complexGpsGsvMessage1, complexGpsGsvMessage2 }
- << complexGpsGlnsBduInView << complexGpsGlnsBduInUse;
-
- QTest::newRow("simulation GPS, GLONASS & BEIDOU mixed")
- << QNmeaSatelliteInfoSource::UpdateMode::SimulationMode
- << QList<QByteArray> { gnComplexGpsGsaMessage, complexGlnsGsvMessage1,
- complexGlnsGsvMessage2, complexGlnsGsvMessage3,
- complexBduGsvMessage1, complexBduGsvMessage2,
- gnComplexGlnsGsaMessage, gnComplexBduGsaMessage,
- complexGpsGsvMessage1, complexGpsGsvMessage2 }
- << complexGpsGlnsBduInView << complexGpsGlnsBduInUse;
-}
-
-QGeoSatelliteInfo
-tst_QNmeaSatelliteInfoSource::createSatelliteInfo(QGeoSatelliteInfo::SatelliteSystem system, int id,
- int snr)
-{
- QGeoSatelliteInfo info;
- info.setSatelliteSystem(system);
- info.setSatelliteIdentifier(id);
- info.setSignalStrength(snr);
- info.setAttribute(QGeoSatelliteInfo::Azimuth, 0.0);
- info.setAttribute(QGeoSatelliteInfo::Elevation, 0.0);
- return info;
-}
-
-#include "tst_nmeasatelliteinfosource.moc"
-
-QTEST_GUILESS_MAIN(tst_QNmeaSatelliteInfoSource)