Revision control

Copy as Markdown

// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtTest/QtTest>
#include <QtTest/private/qpropertytesthelper_p.h>
#include <QtPositioningQuick/private/qdeclarativeposition_p.h>
QT_USE_NAMESPACE
class tst_QDeclarativePosition : public QObject
{
Q_OBJECT
private slots:
void initTestCase();
void init();
void latitudeValidBinding();
void longitudeValidBinding();
void altitudeValidBinding();
void coordinateBinding();
void timestampBinding();
void speedBinding();
void speedValidBinding();
void horizontalAccuracyValidBinding();
void horizontalAccuracyBinding();
void verticalAccuracyValidBinding();
void verticalAccuracyBinding();
void directionValidBinding();
void directionBinding();
void verticalSpeedValidBinding();
void verticalSpeedBinding();
void magneticVariationValidBinding();
void magneticVariationBinding();
void directionAccuracyBinding();
void directionAccuracyValidBinding();
private:
QDeclarativePosition m_declarativePosition;
QGeoPositionInfo m_positionInfo;
std::function<void()> m_mutatorFunc = nullptr;
std::function<bool(const double &, const double &)> m_doubleComparator = nullptr;
};
void tst_QDeclarativePosition::initTestCase()
{
m_mutatorFunc = [&]() { m_declarativePosition.setPosition(m_positionInfo); };
m_doubleComparator = [](const double &lhs, const double &rhs) {
return (qIsNaN(lhs) && qIsNaN(rhs)) || QtPrivate::fuzzyCompare(lhs, rhs);
};
}
void tst_QDeclarativePosition::init()
{
// reset position before each test
m_declarativePosition.setPosition(QGeoPositionInfo());
}
void tst_QDeclarativePosition::latitudeValidBinding()
{
QCOMPARE(m_declarativePosition.isLatitudeValid(), false);
m_positionInfo.setCoordinate(QGeoCoordinate(1.0, 2.0));
QTestPrivate::testReadOnlyPropertyBasics<QDeclarativePosition, bool>(
m_declarativePosition, false, true, "latitudeValid", m_mutatorFunc);
}
void tst_QDeclarativePosition::longitudeValidBinding()
{
QCOMPARE(m_declarativePosition.isLongitudeValid(), false);
m_positionInfo.setCoordinate(QGeoCoordinate(1.0, 2.0));
QTestPrivate::testReadOnlyPropertyBasics<QDeclarativePosition, bool>(
m_declarativePosition, false, true, "longitudeValid", m_mutatorFunc);
}
void tst_QDeclarativePosition::altitudeValidBinding()
{
QCOMPARE(m_declarativePosition.isAltitudeValid(), false);
m_positionInfo.setCoordinate(QGeoCoordinate(1.0, 2.0, 3.0));
QTestPrivate::testReadOnlyPropertyBasics<QDeclarativePosition, bool>(
m_declarativePosition, false, true, "altitudeValid", m_mutatorFunc);
}
void tst_QDeclarativePosition::coordinateBinding()
{
QCOMPARE(m_declarativePosition.coordinate(), QGeoCoordinate());
m_positionInfo.setCoordinate(QGeoCoordinate(1.0, 2.0, 3.0));
QTestPrivate::testReadOnlyPropertyBasics<QDeclarativePosition, QGeoCoordinate>(
m_declarativePosition, QGeoCoordinate(), QGeoCoordinate(1.0, 2.0, 3.0), "coordinate",
m_mutatorFunc);
}
void tst_QDeclarativePosition::timestampBinding()
{
QCOMPARE(m_declarativePosition.timestamp(), QDateTime());
const auto timestamp = QDateTime::currentDateTimeUtc();
m_positionInfo.setTimestamp(timestamp);
QTestPrivate::testReadOnlyPropertyBasics<QDeclarativePosition, QDateTime>(
m_declarativePosition, QDateTime(), timestamp, "timestamp", m_mutatorFunc);
}
void tst_QDeclarativePosition::speedBinding()
{
QCOMPARE(m_declarativePosition.speed(), qQNaN());
m_positionInfo.setAttribute(QGeoPositionInfo::GroundSpeed, 10.0);
QTestPrivate::testReadOnlyPropertyBasics<QDeclarativePosition, double>(
m_declarativePosition, qQNaN(), 10.0, "speed", m_mutatorFunc, m_doubleComparator);
}
void tst_QDeclarativePosition::speedValidBinding()
{
QCOMPARE(m_declarativePosition.isSpeedValid(), false);
m_positionInfo.setAttribute(QGeoPositionInfo::GroundSpeed, 10.0);
QTestPrivate::testReadOnlyPropertyBasics<QDeclarativePosition, bool>(
m_declarativePosition, false, true, "speedValid", m_mutatorFunc);
}
void tst_QDeclarativePosition::horizontalAccuracyValidBinding()
{
QCOMPARE(m_declarativePosition.isHorizontalAccuracyValid(), false);
m_positionInfo.setAttribute(QGeoPositionInfo::HorizontalAccuracy, 1.0);
QTestPrivate::testReadOnlyPropertyBasics<QDeclarativePosition, bool>(
m_declarativePosition, false, true, "horizontalAccuracyValid", m_mutatorFunc);
}
void tst_QDeclarativePosition::horizontalAccuracyBinding()
{
QCOMPARE(m_declarativePosition.horizontalAccuracy(), qQNaN());
m_positionInfo.setAttribute(QGeoPositionInfo::HorizontalAccuracy, 10.0);
QTestPrivate::testReadOnlyPropertyBasics<QDeclarativePosition, double>(
m_declarativePosition, qQNaN(), 10.0, "horizontalAccuracy", m_mutatorFunc,
m_doubleComparator);
}
void tst_QDeclarativePosition::verticalAccuracyValidBinding()
{
QCOMPARE(m_declarativePosition.isVerticalAccuracyValid(), false);
m_positionInfo.setAttribute(QGeoPositionInfo::VerticalAccuracy, 1.0);
QTestPrivate::testReadOnlyPropertyBasics<QDeclarativePosition, bool>(
m_declarativePosition, false, true, "verticalAccuracyValid", m_mutatorFunc);
}
void tst_QDeclarativePosition::verticalAccuracyBinding()
{
QCOMPARE(m_declarativePosition.verticalAccuracy(), qQNaN());
m_positionInfo.setAttribute(QGeoPositionInfo::VerticalAccuracy, 10.0);
QTestPrivate::testReadOnlyPropertyBasics<QDeclarativePosition, double>(
m_declarativePosition, qQNaN(), 10.0, "verticalAccuracy", m_mutatorFunc,
m_doubleComparator);
}
void tst_QDeclarativePosition::directionValidBinding()
{
QCOMPARE(m_declarativePosition.isDirectionValid(), false);
m_positionInfo.setAttribute(QGeoPositionInfo::Direction, 1.0);
QTestPrivate::testReadOnlyPropertyBasics<QDeclarativePosition, bool>(
m_declarativePosition, false, true, "directionValid", m_mutatorFunc);
}
void tst_QDeclarativePosition::directionBinding()
{
QCOMPARE(m_declarativePosition.direction(), qQNaN());
m_positionInfo.setAttribute(QGeoPositionInfo::Direction, 10.0);
QTestPrivate::testReadOnlyPropertyBasics<QDeclarativePosition, double>(
m_declarativePosition, qQNaN(), 10.0, "direction", m_mutatorFunc, m_doubleComparator);
}
void tst_QDeclarativePosition::verticalSpeedValidBinding()
{
QCOMPARE(m_declarativePosition.isVerticalSpeedValid(), false);
m_positionInfo.setAttribute(QGeoPositionInfo::VerticalSpeed, 1.0);
QTestPrivate::testReadOnlyPropertyBasics<QDeclarativePosition, bool>(
m_declarativePosition, false, true, "verticalSpeedValid", m_mutatorFunc);
}
void tst_QDeclarativePosition::verticalSpeedBinding()
{
QCOMPARE(m_declarativePosition.verticalSpeed(), qQNaN());
m_positionInfo.setAttribute(QGeoPositionInfo::VerticalSpeed, 10.0);
QTestPrivate::testReadOnlyPropertyBasics<QDeclarativePosition, double>(
m_declarativePosition, qQNaN(), 10.0, "verticalSpeed", m_mutatorFunc,
m_doubleComparator);
}
void tst_QDeclarativePosition::magneticVariationValidBinding()
{
QCOMPARE(m_declarativePosition.isMagneticVariationValid(), false);
m_positionInfo.setAttribute(QGeoPositionInfo::MagneticVariation, 1.0);
QTestPrivate::testReadOnlyPropertyBasics<QDeclarativePosition, bool>(
m_declarativePosition, false, true, "magneticVariationValid", m_mutatorFunc);
}
void tst_QDeclarativePosition::magneticVariationBinding()
{
QCOMPARE(m_declarativePosition.magneticVariation(), qQNaN());
m_positionInfo.setAttribute(QGeoPositionInfo::MagneticVariation, 10.0);
QTestPrivate::testReadOnlyPropertyBasics<QDeclarativePosition, double>(
m_declarativePosition, qQNaN(), 10.0, "magneticVariation", m_mutatorFunc,
m_doubleComparator);
}
void tst_QDeclarativePosition::directionAccuracyBinding()
{
QCOMPARE(m_declarativePosition.directionAccuracy(), qQNaN());
m_positionInfo.setAttribute(QGeoPositionInfo::DirectionAccuracy, 10.0);
QTestPrivate::testReadOnlyPropertyBasics<QDeclarativePosition, double>(
m_declarativePosition, qQNaN(), 10.0, "directionAccuracy", m_mutatorFunc,
m_doubleComparator);
}
void tst_QDeclarativePosition::directionAccuracyValidBinding()
{
QCOMPARE(m_declarativePosition.isDirectionAccuracyValid(), false);
m_positionInfo.setAttribute(QGeoPositionInfo::DirectionAccuracy, 10.0);
QTestPrivate::testReadOnlyPropertyBasics<QDeclarativePosition, bool>(
m_declarativePosition, false, true, "directionAccuracyValid", m_mutatorFunc);
}
QTEST_GUILESS_MAIN(tst_QDeclarativePosition)
#include "tst_qdeclarativeposition.moc"