diff options
author | Ivan Solovev <ivan.solovev@qt.io> | 2021-02-08 14:09:27 +0100 |
---|---|---|
committer | Ivan Solovev <ivan.solovev@qt.io> | 2021-02-12 10:47:02 +0100 |
commit | 4ca9fd760f1511e00301a8f13c10108fe83823e7 (patch) | |
tree | b0a7cac08a3e88df5c865e1f44ebcc57bbf51a80 /tests | |
parent | 67f840a23295ad5d202005fc4913857d2da3edf5 (diff) | |
download | qtlocation-4ca9fd760f1511e00301a8f13c10108fe83823e7.tar.gz |
QtPositioning: move QNmeaSatelliteInfoSource to the library
- Move files from plugin to the library.
- Add virtual methods, so that NMEA parsing can be overridden.
- Add and update unit tests
Task-number: QTBUG-90491
Change-Id: Ia2deb27c97c1552cd96832a47fe944bdc7638a07
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
Diffstat (limited to 'tests')
25 files changed, 454 insertions, 72 deletions
diff --git a/tests/auto/CMakeLists.txt b/tests/auto/CMakeLists.txt index 10bac2f9..469781af 100644 --- a/tests/auto/CMakeLists.txt +++ b/tests/auto/CMakeLists.txt @@ -83,4 +83,5 @@ if(NOT ANDROID) add_subdirectory(qgeopositioninfosource) add_subdirectory(qgeosatelliteinfosource) add_subdirectory(qnmeapositioninfosource) + add_subdirectory(qnmeasatelliteinfosource) endif() diff --git a/tests/auto/qgeosatelliteinfosource/testqgeosatelliteinfosource.cpp b/tests/auto/qgeosatelliteinfosource/testqgeosatelliteinfosource.cpp index 905b74a4..f663225c 100644 --- a/tests/auto/qgeosatelliteinfosource/testqgeosatelliteinfosource.cpp +++ b/tests/auto/qgeosatelliteinfosource/testqgeosatelliteinfosource.cpp @@ -450,7 +450,7 @@ void TestQGeoSatelliteInfoSource::requestUpdate() // make sure that it's the UpdateTimeoutError const auto error = errorSpy[0][0].value<QGeoSatelliteInfoSource::Error>(); QCOMPARE(error, QGeoSatelliteInfoSource::UpdateTimeoutError); - errorSpy.clear(); + // errorSpy.clear(); // no need to clear the error, as we are expecting it } // Geoclue may deliver update instantly if there is a satellite fix @@ -603,7 +603,7 @@ void TestQGeoSatelliteInfoSource::requestUpdateAfterStartUpdates_ZeroInterval() if (!errorSpy.isEmpty()) QSKIP("Error starting satellite updates."); - QTRY_VERIFY_WITH_TIMEOUT((spyView.count() == 1) && (spyUse.count() == 1), MAX_WAITING_TIME); + QTRY_VERIFY_WITH_TIMEOUT((spyView.count() >= 1) && (spyUse.count() >= 1), MAX_WAITING_TIME); spyView.clear(); spyUse.clear(); @@ -615,7 +615,7 @@ void TestQGeoSatelliteInfoSource::requestUpdateAfterStartUpdates_ZeroInterval() spyView.clear(); spyUse.clear(); - QTRY_VERIFY_WITH_TIMEOUT((spyView.count() == 1) && (spyUse.count() == 1), 12000); + QTRY_VERIFY_WITH_TIMEOUT((spyView.count() >= 1) && (spyUse.count() >= 1), 12000); m_source->stopUpdates(); } diff --git a/tests/auto/qnmeapositioninfosource/dummynmeapositioninfosource/CMakeLists.txt b/tests/auto/qnmeapositioninfosource/dummynmeapositioninfosource/CMakeLists.txt index a3ad87fd..32a57770 100644 --- a/tests/auto/qnmeapositioninfosource/dummynmeapositioninfosource/CMakeLists.txt +++ b/tests/auto/qnmeapositioninfosource/dummynmeapositioninfosource/CMakeLists.txt @@ -8,7 +8,7 @@ qt_internal_add_test(tst_dummynmeapositioninfosource SOURCES ../../qgeopositioninfosource/testqgeopositioninfosource.cpp ../../qgeopositioninfosource/testqgeopositioninfosource_p.h ../../utils/qlocationtestutils.cpp ../../utils/qlocationtestutils_p.h - ../qnmeapositioninfosourceproxyfactory.cpp ../qnmeapositioninfosourceproxyfactory.h + ../../utils/qnmeaproxyfactory.cpp ../../utils/qnmeaproxyfactory.h tst_dummynmeapositioninfosource.cpp DEFINES QT_DISABLE_DEPRECATED_BEFORE=0 diff --git a/tests/auto/qnmeapositioninfosource/dummynmeapositioninfosource/dummynmeapositioninfosource.pro b/tests/auto/qnmeapositioninfosource/dummynmeapositioninfosource/dummynmeapositioninfosource.pro index a0bfa1ff..d32e2e31 100644 --- a/tests/auto/qnmeapositioninfosource/dummynmeapositioninfosource/dummynmeapositioninfosource.pro +++ b/tests/auto/qnmeapositioninfosource/dummynmeapositioninfosource/dummynmeapositioninfosource.pro @@ -7,11 +7,11 @@ INCLUDEPATH += .. HEADERS += ../../utils/qlocationtestutils_p.h \ ../../qgeopositioninfosource/testqgeopositioninfosource_p.h \ - ../qnmeapositioninfosourceproxyfactory.h + ../../utils/qnmeaproxyfactory.h SOURCES += ../../utils/qlocationtestutils.cpp \ ../../qgeopositioninfosource/testqgeopositioninfosource.cpp \ - ../qnmeapositioninfosourceproxyfactory.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 index 8330e0b7..878933be 100644 --- a/tests/auto/qnmeapositioninfosource/dummynmeapositioninfosource/tst_dummynmeapositioninfosource.cpp +++ b/tests/auto/qnmeapositioninfosource/dummynmeapositioninfosource/tst_dummynmeapositioninfosource.cpp @@ -28,7 +28,7 @@ //TESTED_COMPONENT=src/location -#include "qnmeapositioninfosourceproxyfactory.h" +#include "../utils/qnmeaproxyfactory.h" #include "../qgeopositioninfosource/testqgeopositioninfosource_p.h" #include "../utils/qlocationtestutils_p.h" @@ -100,8 +100,9 @@ void tst_DummyNmeaPositionInfoSource::initTestCase() void tst_DummyNmeaPositionInfoSource::testOverloadedParseFunction() { DummyNmeaPositionInfoSource source(QNmeaPositionInfoSource::RealTimeMode); - QNmeaPositionInfoSourceProxyFactory factory; - QNmeaPositionInfoSourceProxy *proxy = static_cast<QNmeaPositionInfoSourceProxy*>(factory.createProxy(&source)); + QNmeaProxyFactory factory; + QNmeaPositionInfoSourceProxy *proxy = static_cast<QNmeaPositionInfoSourceProxy *>( + factory.createPositionInfoSourceProxy(&source)); QSignalSpy spy(proxy->source(), SIGNAL(positionUpdated(QGeoPositionInfo))); diff --git a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime/CMakeLists.txt b/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime/CMakeLists.txt index 58a6fac7..29bf14a5 100644 --- a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime/CMakeLists.txt +++ b/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime/CMakeLists.txt @@ -8,7 +8,7 @@ qt_internal_add_test(tst_qnmeapositioninfosource_realtime SOURCES ../../qgeopositioninfosource/testqgeopositioninfosource.cpp ../../qgeopositioninfosource/testqgeopositioninfosource_p.h ../../utils/qlocationtestutils.cpp ../../utils/qlocationtestutils_p.h - ../qnmeapositioninfosourceproxyfactory.cpp ../qnmeapositioninfosourceproxyfactory.h + ../../utils/qnmeaproxyfactory.cpp ../../utils/qnmeaproxyfactory.h ../tst_qnmeapositioninfosource.cpp ../tst_qnmeapositioninfosource.h tst_qnmeapositioninfosource_realtime.cpp DEFINES diff --git a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime/qnmeapositioninfosource_realtime.pro b/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime/qnmeapositioninfosource_realtime.pro index a5f512bd..fcff3d7a 100644 --- a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime/qnmeapositioninfosource_realtime.pro +++ b/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime/qnmeapositioninfosource_realtime.pro @@ -7,12 +7,12 @@ INCLUDEPATH += .. HEADERS += ../../utils/qlocationtestutils_p.h \ ../../qgeopositioninfosource/testqgeopositioninfosource_p.h \ - ../qnmeapositioninfosourceproxyfactory.h \ + ../../utils/qnmeaproxyfactory.h \ ../tst_qnmeapositioninfosource.h SOURCES += ../../utils/qlocationtestutils.cpp \ ../../qgeopositioninfosource/testqgeopositioninfosource.cpp \ - ../qnmeapositioninfosourceproxyfactory.cpp \ + ../../utils/qnmeaproxyfactory.cpp \ ../tst_qnmeapositioninfosource.cpp \ tst_qnmeapositioninfosource_realtime.cpp diff --git a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime_generic/CMakeLists.txt b/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime_generic/CMakeLists.txt index 2ffea48e..047e6c03 100644 --- a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime_generic/CMakeLists.txt +++ b/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime_generic/CMakeLists.txt @@ -8,7 +8,7 @@ qt_internal_add_test(tst_qnmeapositioninfosource_realtime_generic SOURCES ../../qgeopositioninfosource/testqgeopositioninfosource.cpp ../../qgeopositioninfosource/testqgeopositioninfosource_p.h ../../utils/qlocationtestutils.cpp ../../utils/qlocationtestutils_p.h - ../qnmeapositioninfosourceproxyfactory.cpp ../qnmeapositioninfosourceproxyfactory.h + ../../utils/qnmeaproxyfactory.cpp ../../utils/qnmeaproxyfactory.h ../tst_qnmeapositioninfosource.cpp ../tst_qnmeapositioninfosource.h tst_qnmeapositioninfosource_realtime_generic.cpp DEFINES diff --git a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime_generic/qnmeapositioninfosource_realtime_generic.pro b/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime_generic/qnmeapositioninfosource_realtime_generic.pro index 8c48c684..0fbbd76e 100644 --- a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime_generic/qnmeapositioninfosource_realtime_generic.pro +++ b/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime_generic/qnmeapositioninfosource_realtime_generic.pro @@ -8,12 +8,12 @@ INCLUDEPATH += .. HEADERS += ../../utils/qlocationtestutils_p.h \ ../../qgeopositioninfosource/testqgeopositioninfosource_p.h \ - ../qnmeapositioninfosourceproxyfactory.h \ + ../../utils/qnmeaproxyfactory.h \ ../tst_qnmeapositioninfosource.h SOURCES += ../../utils/qlocationtestutils.cpp \ ../../qgeopositioninfosource/testqgeopositioninfosource.cpp \ - ../qnmeapositioninfosourceproxyfactory.cpp \ + ../../utils/qnmeaproxyfactory.cpp \ ../tst_qnmeapositioninfosource.cpp \ tst_qnmeapositioninfosource_realtime_generic.cpp 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 index 5a7ec2e0..abb5e9ae 100644 --- a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime_generic/tst_qnmeapositioninfosource_realtime_generic.cpp +++ b/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime_generic/tst_qnmeapositioninfosource_realtime_generic.cpp @@ -37,7 +37,7 @@ class tst_QNmeaPositionInfoSource_RealTime_Generic : public TestQGeoPositionInfo public: tst_QNmeaPositionInfoSource_RealTime_Generic() { - m_factory = new QNmeaPositionInfoSourceProxyFactory; + m_factory = new QNmeaProxyFactory; #if QT_CONFIG(library) /* * Set custom path since CI doesn't install test plugins @@ -61,14 +61,15 @@ protected: QGeoPositionInfoSource *createTestSource() override { QNmeaPositionInfoSource *source = new QNmeaPositionInfoSource(QNmeaPositionInfoSource::RealTimeMode); - QNmeaPositionInfoSourceProxy *proxy = static_cast<QNmeaPositionInfoSourceProxy*>(m_factory->createProxy(source)); + QNmeaPositionInfoSourceProxy *proxy = static_cast<QNmeaPositionInfoSourceProxy *>( + m_factory->createPositionInfoSourceProxy(source)); Feeder *feeder = new Feeder(source); feeder->start(proxy); return source; } private: - QNmeaPositionInfoSourceProxyFactory *m_factory; + QNmeaProxyFactory *m_factory; }; #include "tst_qnmeapositioninfosource_realtime_generic.moc" diff --git a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation/CMakeLists.txt b/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation/CMakeLists.txt index 04cdbaa5..c39b5a08 100644 --- a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation/CMakeLists.txt +++ b/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation/CMakeLists.txt @@ -8,7 +8,7 @@ qt_internal_add_test(tst_qnmeapositioninfosource_simulation SOURCES ../../qgeopositioninfosource/testqgeopositioninfosource.cpp ../../qgeopositioninfosource/testqgeopositioninfosource_p.h ../../utils/qlocationtestutils.cpp ../../utils/qlocationtestutils_p.h - ../qnmeapositioninfosourceproxyfactory.cpp ../qnmeapositioninfosourceproxyfactory.h + ../../utils/qnmeaproxyfactory.cpp ../../utils/qnmeaproxyfactory.h ../tst_qnmeapositioninfosource.cpp ../tst_qnmeapositioninfosource.h tst_qnmeapositioninfosource_simulation.cpp DEFINES diff --git a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation/qnmeapositioninfosource_simulation.pro b/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation/qnmeapositioninfosource_simulation.pro index 1f0861df..88bb18f9 100644 --- a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation/qnmeapositioninfosource_simulation.pro +++ b/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation/qnmeapositioninfosource_simulation.pro @@ -7,12 +7,12 @@ INCLUDEPATH += .. HEADERS += ../../utils/qlocationtestutils_p.h \ ../../qgeopositioninfosource/testqgeopositioninfosource_p.h \ - ../qnmeapositioninfosourceproxyfactory.h \ + ../../utils/qnmeaproxyfactory.h \ ../tst_qnmeapositioninfosource.h SOURCES += ../../utils/qlocationtestutils.cpp \ ../../qgeopositioninfosource/testqgeopositioninfosource.cpp \ - ../qnmeapositioninfosourceproxyfactory.cpp \ + ../../utils/qnmeaproxyfactory.cpp \ ../tst_qnmeapositioninfosource.cpp \ tst_qnmeapositioninfosource_simulation.cpp diff --git a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation_generic/CMakeLists.txt b/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation_generic/CMakeLists.txt index 3f714d6f..9b362139 100644 --- a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation_generic/CMakeLists.txt +++ b/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation_generic/CMakeLists.txt @@ -13,7 +13,7 @@ qt_internal_add_test(tst_qnmeaposinfosource_sim_generic SOURCES ../../qgeopositioninfosource/testqgeopositioninfosource.cpp ../../qgeopositioninfosource/testqgeopositioninfosource_p.h ../../utils/qlocationtestutils.cpp ../../utils/qlocationtestutils_p.h - ../qnmeapositioninfosourceproxyfactory.cpp ../qnmeapositioninfosourceproxyfactory.h + ../../utils/qnmeaproxyfactory.cpp ../../utils/qnmeaproxyfactory.h ../tst_qnmeapositioninfosource.cpp ../tst_qnmeapositioninfosource.h tst_qnmeapositioninfosource_simulation_generic.cpp DEFINES diff --git a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation_generic/qnmeapositioninfosource_simulation_generic.pro b/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation_generic/qnmeapositioninfosource_simulation_generic.pro index 8b16d444..b198bf7c 100644 --- a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation_generic/qnmeapositioninfosource_simulation_generic.pro +++ b/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation_generic/qnmeapositioninfosource_simulation_generic.pro @@ -8,12 +8,12 @@ INCLUDEPATH += .. HEADERS += ../../utils/qlocationtestutils_p.h \ ../../qgeopositioninfosource/testqgeopositioninfosource_p.h \ - ../qnmeapositioninfosourceproxyfactory.h \ + ../../utils/qnmeaproxyfactory.h \ ../tst_qnmeapositioninfosource.h SOURCES += ../../utils/qlocationtestutils.cpp \ ../../qgeopositioninfosource/testqgeopositioninfosource.cpp \ - ../qnmeapositioninfosourceproxyfactory.cpp \ + ../../utils/qnmeaproxyfactory.cpp \ ../tst_qnmeapositioninfosource.cpp \ tst_qnmeapositioninfosource_simulation_generic.cpp diff --git a/tests/auto/qnmeapositioninfosource/tst_qnmeapositioninfosource.cpp b/tests/auto/qnmeapositioninfosource/tst_qnmeapositioninfosource.cpp index 44f7508a..accc5bed 100644 --- a/tests/auto/qnmeapositioninfosource/tst_qnmeapositioninfosource.cpp +++ b/tests/auto/qnmeapositioninfosource/tst_qnmeapositioninfosource.cpp @@ -110,8 +110,9 @@ void tst_QNmeaPositionInfoSource::setUpdateInterval_delayedUpdate() // as it becomes available QNmeaPositionInfoSource source(m_mode); - QNmeaPositionInfoSourceProxyFactory factory; - QNmeaPositionInfoSourceProxy *proxy = static_cast<QNmeaPositionInfoSourceProxy*>(factory.createProxy(&source)); + QNmeaProxyFactory factory; + QNmeaPositionInfoSourceProxy *proxy = static_cast<QNmeaPositionInfoSourceProxy *>( + factory.createPositionInfoSourceProxy(&source)); QSignalSpy spyUpdate(proxy->source(), SIGNAL(positionUpdated(QGeoPositionInfo))); proxy->source()->setUpdateInterval(500); @@ -130,8 +131,9 @@ void tst_QNmeaPositionInfoSource::setUpdateInterval_delayedUpdate() void tst_QNmeaPositionInfoSource::lastKnownPosition() { QNmeaPositionInfoSource source(m_mode); - QNmeaPositionInfoSourceProxyFactory factory; - QNmeaPositionInfoSourceProxy *proxy = static_cast<QNmeaPositionInfoSourceProxy*>(factory.createProxy(&source)); + QNmeaProxyFactory factory; + QNmeaPositionInfoSourceProxy *proxy = static_cast<QNmeaPositionInfoSourceProxy *>( + factory.createPositionInfoSourceProxy(&source)); QCOMPARE(proxy->source()->lastKnownPosition(), QGeoPositionInfo()); @@ -227,8 +229,9 @@ void tst_QNmeaPositionInfoSource::startUpdates() QFETCH(QList<QDateTime>, dateTimes); QNmeaPositionInfoSource source(m_mode); - QNmeaPositionInfoSourceProxyFactory factory; - QNmeaPositionInfoSourceProxy *proxy = static_cast<QNmeaPositionInfoSourceProxy*>(factory.createProxy(&source)); + QNmeaProxyFactory factory; + QNmeaPositionInfoSourceProxy *proxy = static_cast<QNmeaPositionInfoSourceProxy *>( + factory.createPositionInfoSourceProxy(&source)); QSignalSpy spyUpdate(proxy->source(), SIGNAL(positionUpdated(QGeoPositionInfo))); proxy->source()->startUpdates(); @@ -250,8 +253,9 @@ void tst_QNmeaPositionInfoSource::startUpdates_data() void tst_QNmeaPositionInfoSource::startUpdates_withTimeout() { QNmeaPositionInfoSource source(m_mode); - QNmeaPositionInfoSourceProxyFactory factory; - QNmeaPositionInfoSourceProxy *proxy = static_cast<QNmeaPositionInfoSourceProxy*>(factory.createProxy(&source)); + 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))); @@ -334,8 +338,9 @@ void tst_QNmeaPositionInfoSource::startUpdates_expectLatestUpdateOnly() // updates are in the buffer, only the latest update should be emitted QNmeaPositionInfoSource source(m_mode); - QNmeaPositionInfoSourceProxyFactory factory; - QNmeaPositionInfoSourceProxy *proxy = static_cast<QNmeaPositionInfoSourceProxy*>(factory.createProxy(&source)); + QNmeaProxyFactory factory; + QNmeaPositionInfoSourceProxy *proxy = static_cast<QNmeaPositionInfoSourceProxy *>( + factory.createPositionInfoSourceProxy(&source)); QSignalSpy spyUpdate(proxy->source(), SIGNAL(positionUpdated(QGeoPositionInfo))); proxy->source()->setUpdateInterval(500); @@ -363,8 +368,9 @@ void tst_QNmeaPositionInfoSource::startUpdates_waitForValidDateTime() QNmeaPositionInfoSource source(m_mode); source.setUserEquivalentRangeError(5.1); - QNmeaPositionInfoSourceProxyFactory factory; - QNmeaPositionInfoSourceProxy *proxy = static_cast<QNmeaPositionInfoSourceProxy*>(factory.createProxy(&source)); + 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) { @@ -461,8 +467,9 @@ void tst_QNmeaPositionInfoSource::requestUpdate_waitForValidDateTime() QFETCH(QList<QDateTime>, dateTimes); QNmeaPositionInfoSource source(m_mode); - QNmeaPositionInfoSourceProxyFactory factory; - QNmeaPositionInfoSourceProxy *proxy = static_cast<QNmeaPositionInfoSourceProxy*>(factory.createProxy(&source)); + QNmeaProxyFactory factory; + QNmeaPositionInfoSourceProxy *proxy = static_cast<QNmeaPositionInfoSourceProxy *>( + factory.createPositionInfoSourceProxy(&source)); QSignalSpy spy(proxy->source(), SIGNAL(positionUpdated(QGeoPositionInfo))); proxy->source()->requestUpdate(); @@ -480,8 +487,9 @@ void tst_QNmeaPositionInfoSource::requestUpdate_waitForValidDateTime_data() void tst_QNmeaPositionInfoSource::requestUpdate() { QNmeaPositionInfoSource source(m_mode); - QNmeaPositionInfoSourceProxyFactory factory; - QNmeaPositionInfoSourceProxy *proxy = static_cast<QNmeaPositionInfoSourceProxy*>(factory.createProxy(&source)); + 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))); @@ -526,8 +534,9 @@ void tst_QNmeaPositionInfoSource::requestUpdate() void tst_QNmeaPositionInfoSource::requestUpdate_after_start() { QNmeaPositionInfoSource source(m_mode); - QNmeaPositionInfoSourceProxyFactory factory; - QNmeaPositionInfoSourceProxy *proxy = static_cast<QNmeaPositionInfoSourceProxy*>(factory.createProxy(&source)); + 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))); @@ -558,8 +567,9 @@ void tst_QNmeaPositionInfoSource::testWithBadNmea() QFETCH(UpdateTriggerMethod, trigger); QNmeaPositionInfoSource source(m_mode); - QNmeaPositionInfoSourceProxyFactory factory; - QNmeaPositionInfoSourceProxy *proxy = static_cast<QNmeaPositionInfoSourceProxy*>(factory.createProxy(&source)); + QNmeaProxyFactory factory; + QNmeaPositionInfoSourceProxy *proxy = static_cast<QNmeaPositionInfoSourceProxy *>( + factory.createPositionInfoSourceProxy(&source)); QSignalSpy spy(proxy->source(), SIGNAL(positionUpdated(QGeoPositionInfo))); if (trigger == StartUpdatesMethod) diff --git a/tests/auto/qnmeapositioninfosource/tst_qnmeapositioninfosource.h b/tests/auto/qnmeapositioninfosource/tst_qnmeapositioninfosource.h index 4f92ab75..83cd284d 100644 --- a/tests/auto/qnmeapositioninfosource/tst_qnmeapositioninfosource.h +++ b/tests/auto/qnmeapositioninfosource/tst_qnmeapositioninfosource.h @@ -26,8 +26,8 @@ ** ****************************************************************************/ -#include "qnmeapositioninfosourceproxyfactory.h" #include "../qgeopositioninfosource/testqgeopositioninfosource_p.h" +#include "../utils/qnmeaproxyfactory.h" #include "../utils/qlocationtestutils_p.h" #include <QtPositioning/qnmeapositioninfosource.h> diff --git a/tests/auto/qnmeasatelliteinfosource/CMakeLists.txt b/tests/auto/qnmeasatelliteinfosource/CMakeLists.txt new file mode 100644 index 00000000..b394c8ad --- /dev/null +++ b/tests/auto/qnmeasatelliteinfosource/CMakeLists.txt @@ -0,0 +1,2 @@ +add_subdirectory(dummy) +add_subdirectory(generic) diff --git a/tests/auto/qnmeasatelliteinfosource/dummy/CMakeLists.txt b/tests/auto/qnmeasatelliteinfosource/dummy/CMakeLists.txt new file mode 100644 index 00000000..f4a323e0 --- /dev/null +++ b/tests/auto/qnmeasatelliteinfosource/dummy/CMakeLists.txt @@ -0,0 +1,16 @@ +# special case begin +qt_internal_add_test(tst_dummynmeasatelliteinfosource + SOURCES + ../../utils/qlocationtestutils.cpp ../../utils/qlocationtestutils_p.h + ../../utils/qnmeaproxyfactory.cpp ../../utils/qnmeaproxyfactory.h + tst_dummynmeasatelliteinfosource.cpp + DEFINES + QT_DISABLE_DEPRECATED_BEFORE=0 + INCLUDE_DIRECTORIES + .. + PUBLIC_LIBRARIES + Qt::Core + Qt::Network + Qt::Positioning +) +# special case end diff --git a/tests/auto/qnmeasatelliteinfosource/dummy/tst_dummynmeasatelliteinfosource.cpp b/tests/auto/qnmeasatelliteinfosource/dummy/tst_dummynmeasatelliteinfosource.cpp new file mode 100644 index 00000000..c089b59e --- /dev/null +++ b/tests/auto/qnmeasatelliteinfosource/dummy/tst_dummynmeasatelliteinfosource.cpp @@ -0,0 +1,167 @@ +/**************************************************************************** +** +** 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 <QSignalSpy> +#include <QtPositioning/QNmeaSatelliteInfoSource> +#include "../../utils/qnmeaproxyfactory.h" + +class DummyNmeaSatelliteInfoSource : public QNmeaSatelliteInfoSource +{ + Q_OBJECT + +public: + DummyNmeaSatelliteInfoSource(QObject *parent = 0); + +protected: + bool parseSatellitesInUseFromNmea(const char *data, int size, QList<int> &pnrsInUse) override; + SatelliteInfoParseStatus parseSatelliteInfoFromNmea(const char *data, int size, + QList<QGeoSatelliteInfo> &infos) override; + +private: + int callCount; +}; + +DummyNmeaSatelliteInfoSource::DummyNmeaSatelliteInfoSource(QObject *parent) + : QNmeaSatelliteInfoSource(parent) +{ +} + +bool DummyNmeaSatelliteInfoSource::parseSatellitesInUseFromNmea(const char *data, int size, + QList<int> &pnrsInUse) +{ + // expected format: "USE:num1;num2;num3\n" + // example: "USE:1;3;4;7\n" + if (!data || !size) + return false; + + QString str = QLatin1String(data, size).toString(); + if (!str.startsWith("USE:")) + return false; + + const QStringList sl = str.mid(4).split(";", Qt::SkipEmptyParts); + + if (sl.empty()) + return false; + + for (const auto &str : sl) { + bool ok = false; + int value = str.toInt(&ok); + if (ok) { + pnrsInUse.push_back(value); + } + } + return true; +} + +QNmeaSatelliteInfoSource::SatelliteInfoParseStatus +DummyNmeaSatelliteInfoSource::parseSatelliteInfoFromNmea(const char *data, int size, + QList<QGeoSatelliteInfo> &infos) +{ + // expected format: "INFO:system,identifier;system,identifier;system,identifier\n" + // example: "INFO:1,5;2,7;1,15\n" + if (!data || !size) + return NotParsed; + + QString str = QLatin1String(data, size).toString(); + if (!str.startsWith("INFO:")) + return NotParsed; + + QStringList sat_infos = str.mid(5).split(";", Qt::SkipEmptyParts); + + if (sat_infos.empty()) + return NotParsed; + + for (const auto &sat_info : sat_infos) { + QStringList parameters = sat_info.split(",", Qt::SkipEmptyParts); + if (parameters.size() == 2) { + QGeoSatelliteInfo info; + info.setSatelliteSystem( + static_cast<QGeoSatelliteInfo::SatelliteSystem>(parameters[0].toInt())); + info.setSatelliteIdentifier(parameters[1].toInt()); + infos.push_back(info); + } + } + return FullyParsed; +} + +class tst_DummyNmeaSatelliteInfoSource : public QObject +{ + Q_OBJECT + +private slots: + void testOverloadedParseFunction(); +}; + +void tst_DummyNmeaSatelliteInfoSource::testOverloadedParseFunction() +{ + DummyNmeaSatelliteInfoSource source; + QNmeaProxyFactory factory; + QScopedPointer<QNmeaSatelliteInfoSourceProxy> proxy( + factory.createSatelliteInfoSourceProxy(&source)); + + QSignalSpy inUseSpy(proxy->source(), &QNmeaSatelliteInfoSource::satellitesInUseUpdated); + QSignalSpy inViewSpy(proxy->source(), &QNmeaSatelliteInfoSource::satellitesInViewUpdated); + + proxy->source()->startUpdates(); + + // first we need to send all satellites + proxy->feedBytes("INFO:1,5;2,7;1,15\n"); + // then - used ones + proxy->feedBytes("USE:5;15\n"); + + QTRY_VERIFY_WITH_TIMEOUT(inUseSpy.count() == 1, 10000); + QTRY_VERIFY_WITH_TIMEOUT(inViewSpy.count() == 1, 10000); + + QGeoSatelliteInfo info_1_5; + info_1_5.setSatelliteSystem(QGeoSatelliteInfo::GPS); + info_1_5.setSatelliteIdentifier(5); + + QGeoSatelliteInfo info_2_7; + info_2_7.setSatelliteSystem(QGeoSatelliteInfo::GLONASS); + info_2_7.setSatelliteIdentifier(7); + + QGeoSatelliteInfo info_1_15; + info_1_15.setSatelliteSystem(QGeoSatelliteInfo::GPS); + info_1_15.setSatelliteIdentifier(15); + + const QList<QGeoSatelliteInfo> desiredInView = { info_1_5, info_2_7, info_1_15 }; + const QList<QGeoSatelliteInfo> desiredInUse = { info_1_5, info_1_15 }; + + const QList<QGeoSatelliteInfo> inViewList = + inViewSpy.at(0).at(0).value<QList<QGeoSatelliteInfo>>(); + const QList<QGeoSatelliteInfo> inUseList = + inUseSpy.at(0).at(0).value<QList<QGeoSatelliteInfo>>(); + + QCOMPARE(inViewList, desiredInView); + QCOMPARE(inUseList, desiredInUse); +} + +#include "tst_dummynmeasatelliteinfosource.moc" + +QTEST_GUILESS_MAIN(tst_DummyNmeaSatelliteInfoSource); diff --git a/tests/auto/qnmeasatelliteinfosource/generic/CMakeLists.txt b/tests/auto/qnmeasatelliteinfosource/generic/CMakeLists.txt new file mode 100644 index 00000000..acca9294 --- /dev/null +++ b/tests/auto/qnmeasatelliteinfosource/generic/CMakeLists.txt @@ -0,0 +1,17 @@ +# special case begin +qt_internal_add_test(tst_nmeasatelliteinfosourcegeneric + SOURCES + ../../qgeosatelliteinfosource/testqgeosatelliteinfosource.cpp ../../qgeosatelliteinfosource/testqgeosatelliteinfosource_p.h + ../../utils/qlocationtestutils.cpp ../../utils/qlocationtestutils_p.h + ../../utils/qnmeaproxyfactory.cpp ../../utils/qnmeaproxyfactory.h + tst_nmeasatelliteinfosourcegeneric.cpp + DEFINES + QT_DISABLE_DEPRECATED_BEFORE=0 + INCLUDE_DIRECTORIES + .. + PUBLIC_LIBRARIES + Qt::Core + Qt::Network + Qt::Positioning +) +# special case end diff --git a/tests/auto/qnmeasatelliteinfosource/generic/tst_nmeasatelliteinfosourcegeneric.cpp b/tests/auto/qnmeasatelliteinfosource/generic/tst_nmeasatelliteinfosourcegeneric.cpp new file mode 100644 index 00000000..ebd25502 --- /dev/null +++ b/tests/auto/qnmeasatelliteinfosource/generic/tst_nmeasatelliteinfosourcegeneric.cpp @@ -0,0 +1,92 @@ +/**************************************************************************** +** +** 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 <QtPositioning/QNmeaSatelliteInfoSource> +#include "../../qgeosatelliteinfosource/testqgeosatelliteinfosource_p.h" +#include "../../utils/qnmeaproxyfactory.h" +#include "../../utils/qlocationtestutils_p.h" + +class Feeder : public QObject +{ + Q_OBJECT +public: + Feeder(QObject *parent) : QObject(parent) + { + } + + void start(QNmeaSatelliteInfoSourceProxy *proxy) + { + m_proxy = proxy; + QTimer *timer = new QTimer(this); + QObject::connect(timer, &QTimer::timeout, this, &Feeder::timeout); + timer->setInterval(proxy->source()->minimumUpdateInterval() * 2); + timer->start(); + } + +public slots: + void timeout() + { + // Here we need to provide different chunks of data, because the signals + // are emitted only when data changes. + if (has_data) { + m_proxy->feedBytes(QLocationTestUtils::createGsvLongSentence().toLatin1()); + m_proxy->feedBytes(QLocationTestUtils::createGsaLongSentence().toLatin1()); + } else { + m_proxy->feedBytes(QLocationTestUtils::createGsvSentence().toLatin1()); + m_proxy->feedBytes(QLocationTestUtils::createGsaSentence().toLatin1()); + } + has_data = !has_data; + } + +private: + QNmeaSatelliteInfoSourceProxy *m_proxy; + bool has_data = true; +}; + +class tst_QNmeaSatelliteInfoSource_Generic : public TestQGeoSatelliteInfoSource +{ + Q_OBJECT +protected: + QGeoSatelliteInfoSource *createTestSource() override + { + QNmeaSatelliteInfoSource *source = new QNmeaSatelliteInfoSource; + QNmeaSatelliteInfoSourceProxy *proxy = m_factory.createSatelliteInfoSourceProxy(source); + Feeder *feeder = new Feeder(source); + feeder->start(proxy); + return source; + } + +private: + QNmeaProxyFactory m_factory; +}; + +#include "tst_nmeasatelliteinfosourcegeneric.moc" + +QTEST_GUILESS_MAIN(tst_QNmeaSatelliteInfoSource_Generic) diff --git a/tests/auto/utils/qlocationtestutils.cpp b/tests/auto/utils/qlocationtestutils.cpp index df595daa..c98fc603 100644 --- a/tests/auto/utils/qlocationtestutils.cpp +++ b/tests/auto/utils/qlocationtestutils.cpp @@ -84,3 +84,19 @@ QString QLocationTestUtils::createGsaSentence() { return addNmeaChecksumAndBreaks(QStringLiteral("$GPGSA,A,3,,,,,,,,,,,,,3.0,3.5,4.0*")); } + +QString QLocationTestUtils::createGsvSentence() +{ + return addNmeaChecksumAndBreaks(QStringLiteral("$GPGSV,1,1,0,,,,,,,,,,,,,,,,*")); +} + +QString QLocationTestUtils::createGsaLongSentence() +{ + return addNmeaChecksumAndBreaks(QStringLiteral("$GPGSA,A,3,16,25,,,,,,,,,,,2.3,1.3,1.9*")); +} + +QString QLocationTestUtils::createGsvLongSentence() +{ + return addNmeaChecksumAndBreaks( + QStringLiteral("$GPGSV,1,1,4,16,49,115,42,25,39,269,36,23,58,176,29,20,72,335,35*")); +} diff --git a/tests/auto/utils/qlocationtestutils_p.h b/tests/auto/utils/qlocationtestutils_p.h index 05c325fd..fec8d164 100644 --- a/tests/auto/utils/qlocationtestutils_p.h +++ b/tests/auto/utils/qlocationtestutils_p.h @@ -45,6 +45,9 @@ namespace QLocationTestUtils QString createGgaSentence(int lat, int lng, const QTime &time); QString createZdaSentence(const QDateTime &dt); QString createGsaSentence(); + QString createGsvSentence(); + QString createGsaLongSentence(); + QString createGsvLongSentence(); //The purpose of compareEquality() is to test equality //operators where it is expected that A == B. diff --git a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosourceproxyfactory.cpp b/tests/auto/utils/qnmeaproxyfactory.cpp index 756d0272..8ad07adf 100644 --- a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosourceproxyfactory.cpp +++ b/tests/auto/utils/qnmeaproxyfactory.cpp @@ -26,17 +26,18 @@ ** ****************************************************************************/ -#include "qnmeapositioninfosourceproxyfactory.h" -#include "../utils/qlocationtestutils_p.h" +#include "qnmeaproxyfactory.h" +#include "qlocationtestutils_p.h" +#include <QtPositioning/QNmeaPositionInfoSource> +#include <QtPositioning/QNmeaSatelliteInfoSource> #include <QIODevice> #include <QTcpServer> #include <QTcpSocket> - -QNmeaPositionInfoSourceProxy::QNmeaPositionInfoSourceProxy(QNmeaPositionInfoSource *source, QIODevice *outDevice) - : m_source(source), - m_outDevice(outDevice) +QNmeaPositionInfoSourceProxy::QNmeaPositionInfoSourceProxy(QNmeaPositionInfoSource *source, + QIODevice *outDevice) + : m_source(source), m_outDevice(outDevice) { } @@ -61,17 +62,38 @@ void QNmeaPositionInfoSourceProxy::feedBytes(const QByteArray &bytes) m_outDevice->write(bytes); } - -QNmeaPositionInfoSourceProxyFactory::QNmeaPositionInfoSourceProxyFactory() - : m_server(new QTcpServer(this)) +QNmeaProxyFactory::QNmeaProxyFactory() : m_server(new QTcpServer(this)) { bool b = m_server->listen(QHostAddress::LocalHost); Q_ASSERT(b); } -QNmeaPositionInfoSourceProxy *QNmeaPositionInfoSourceProxyFactory::createProxy(QNmeaPositionInfoSource *source) +QNmeaPositionInfoSourceProxy * +QNmeaProxyFactory::createPositionInfoSourceProxy(QNmeaPositionInfoSource *source) +{ + QTcpSocket *client = new QTcpSocket; + QIODevice *device = createServerConnection(client); + source->setDevice(device); + Q_ASSERT(source->device() != 0); + QNmeaPositionInfoSourceProxy *proxy = new QNmeaPositionInfoSourceProxy(source, client); + proxy->setParent(source); + return proxy; +} + +QNmeaSatelliteInfoSourceProxy * +QNmeaProxyFactory::createSatelliteInfoSourceProxy(QNmeaSatelliteInfoSource *source) { QTcpSocket *client = new QTcpSocket; + QIODevice *device = createServerConnection(client); + source->setDevice(device); + Q_ASSERT(source->device() != 0); + QNmeaSatelliteInfoSourceProxy *proxy = new QNmeaSatelliteInfoSourceProxy(source, client); + proxy->setParent(source); + return proxy; +} + +QIODevice *QNmeaProxyFactory::createServerConnection(QTcpSocket *client) +{ client->connectToHost(m_server->serverAddress(), m_server->serverPort()); qDebug() << "listening on" << m_server->serverAddress() << m_server->serverPort(); bool b = m_server->waitForNewConnection(15000); @@ -81,15 +103,28 @@ QNmeaPositionInfoSourceProxy *QNmeaPositionInfoSourceProxyFactory::createProxy(Q if (!b) qWarning() << "Client could not connect to server"; - //QNmeaPositionInfoSource *source = new QNmeaPositionInfoSource(m_mode); QIODevice *device = m_server->nextPendingConnection(); - if (!device) - qWarning() << "Missing pending connection. Test is going to fail."; - else - qWarning() << "Received pending connection:" << device << b; - source->setDevice(device); - Q_ASSERT(source->device() != 0); - QNmeaPositionInfoSourceProxy *proxy = new QNmeaPositionInfoSourceProxy(source, client); - proxy->setParent(source); - return proxy; + return device; +} + +QNmeaSatelliteInfoSourceProxy::QNmeaSatelliteInfoSourceProxy(QNmeaSatelliteInfoSource *source, + QIODevice *outDevice) + : m_source(source), m_outDevice(outDevice) +{ +} + +QNmeaSatelliteInfoSourceProxy::~QNmeaSatelliteInfoSourceProxy() +{ + m_outDevice->close(); + delete m_outDevice; +} + +QGeoSatelliteInfoSource *QNmeaSatelliteInfoSourceProxy::source() const +{ + return m_source; +} + +void QNmeaSatelliteInfoSourceProxy::feedBytes(const QByteArray &bytes) +{ + m_outDevice->write(bytes); } diff --git a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosourceproxyfactory.h b/tests/auto/utils/qnmeaproxyfactory.h index d740f9b5..2cd2e262 100644 --- a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosourceproxyfactory.h +++ b/tests/auto/utils/qnmeaproxyfactory.h @@ -26,17 +26,19 @@ ** ****************************************************************************/ -#ifndef QNMEAPOSITIONINFOSOURCEPROXYFACTORY_H -#define QNMEAPOSITIONINFOSOURCEPROXYFACTORY_H +#ifndef QNMEAPROXYFACTORY_H +#define QNMEAPROXYFACTORY_H #include <QObject> -#include <QtPositioning/qnmeapositioninfosource.h> - QT_BEGIN_NAMESPACE class QTcpServer; +class QTcpSocket; class QIODevice; class QNmeaPositionInfoSource; +class QNmeaSatelliteInfoSource; +class QGeoPositionInfoSource; +class QGeoSatelliteInfoSource; QT_END_NAMESPACE class QNmeaPositionInfoSourceProxy : public QObject @@ -59,16 +61,35 @@ private: QIODevice *m_outDevice; }; -class QNmeaPositionInfoSourceProxyFactory : public QObject +class QNmeaSatelliteInfoSourceProxy : public QObject { Q_OBJECT public: - QNmeaPositionInfoSourceProxyFactory(); + QNmeaSatelliteInfoSourceProxy(QNmeaSatelliteInfoSource *source, QIODevice *outDevice); + ~QNmeaSatelliteInfoSourceProxy(); + + QGeoSatelliteInfoSource *source() const; + + void feedBytes(const QByteArray &bytes); + +private: + QNmeaSatelliteInfoSource *m_source; + QIODevice *m_outDevice; +}; + +class QNmeaProxyFactory : public QObject +{ + Q_OBJECT +public: + QNmeaProxyFactory(); // proxy is created as child of source - QNmeaPositionInfoSourceProxy *createProxy(QNmeaPositionInfoSource *source); + QNmeaPositionInfoSourceProxy *createPositionInfoSourceProxy(QNmeaPositionInfoSource *source); + QNmeaSatelliteInfoSourceProxy *createSatelliteInfoSourceProxy(QNmeaSatelliteInfoSource *source); private: + QIODevice *createServerConnection(QTcpSocket *client); + QTcpServer *m_server; }; |