diff options
author | Ivan Solovev <ivan.solovev@qt.io> | 2021-03-26 12:49:42 +0100 |
---|---|---|
committer | Ivan Solovev <ivan.solovev@qt.io> | 2021-04-23 12:35:53 +0200 |
commit | 378f6cc2ade0146ffa343fc3195e7d9dd2316a13 (patch) | |
tree | 925b9d14511518a00fdf8cffa3c92aa1d3283eb4 | |
parent | 35af450b95ccdfc085735757850d5f738d71d1a2 (diff) | |
download | qtlocation-378f6cc2ade0146ffa343fc3195e7d9dd2316a13.tar.gz |
QtPositioning: property bindings for QGeoCoordinateObject
This patch also introduces some basic unit-tests for
QGeoCoordinateObject
Task-number: QTBUG-89874
Change-Id: Id6df04fab4368658db10645bb8a667ec5f7ab3b0
Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
-rw-r--r-- | src/positioning/qgeocoordinateobject.cpp | 13 | ||||
-rw-r--r-- | src/positioning/qgeocoordinateobject_p.h | 7 | ||||
-rw-r--r-- | tests/auto/CMakeLists.txt | 1 | ||||
-rw-r--r-- | tests/auto/qgeocoordinateobject/CMakeLists.txt | 8 | ||||
-rw-r--r-- | tests/auto/qgeocoordinateobject/tst_qgeocoordinateobject.cpp | 99 |
5 files changed, 120 insertions, 8 deletions
diff --git a/src/positioning/qgeocoordinateobject.cpp b/src/positioning/qgeocoordinateobject.cpp index 7900e578..af79470e 100644 --- a/src/positioning/qgeocoordinateobject.cpp +++ b/src/positioning/qgeocoordinateobject.cpp @@ -65,12 +65,12 @@ QGeoCoordinateObject::~QGeoCoordinateObject() bool QGeoCoordinateObject::operator==(const QGeoCoordinateObject &other) const { - return m_coordinate == other.m_coordinate; + return m_coordinate.value() == other.m_coordinate.value(); } bool QGeoCoordinateObject::operator==(const QGeoCoordinate &other) const { - return m_coordinate == other; + return m_coordinate.value() == other; } QGeoCoordinate QGeoCoordinateObject::coordinate() const @@ -80,11 +80,12 @@ QGeoCoordinate QGeoCoordinateObject::coordinate() const void QGeoCoordinateObject::setCoordinate(const QGeoCoordinate &c) { - if (c == m_coordinate) - return; + m_coordinate = c; // The signal is emitted automatically if needed +} - m_coordinate = c; - emit coordinateChanged(); +QBindable<QGeoCoordinate> QGeoCoordinateObject::bindableCoordinate() +{ + return QBindable<QGeoCoordinate>(&m_coordinate); } QT_END_NAMESPACE diff --git a/src/positioning/qgeocoordinateobject_p.h b/src/positioning/qgeocoordinateobject_p.h index b1d794b2..65d47fe5 100644 --- a/src/positioning/qgeocoordinateobject_p.h +++ b/src/positioning/qgeocoordinateobject_p.h @@ -61,7 +61,8 @@ QT_BEGIN_NAMESPACE class Q_POSITIONING_PRIVATE_EXPORT QGeoCoordinateObject : public QObject { Q_OBJECT - Q_PROPERTY(QGeoCoordinate coordinate READ coordinate WRITE setCoordinate NOTIFY coordinateChanged) + Q_PROPERTY(QGeoCoordinate coordinate READ coordinate WRITE setCoordinate NOTIFY + coordinateChanged BINDABLE bindableCoordinate) public: QGeoCoordinateObject(QObject *parent = 0); @@ -79,12 +80,14 @@ public: QGeoCoordinate coordinate() const; void setCoordinate(const QGeoCoordinate &c); + QBindable<QGeoCoordinate> bindableCoordinate(); Q_SIGNALS: void coordinateChanged(); protected: - QGeoCoordinate m_coordinate; + Q_OBJECT_BINDABLE_PROPERTY(QGeoCoordinateObject, QGeoCoordinate, m_coordinate, + &QGeoCoordinateObject::coordinateChanged) }; QT_END_NAMESPACE diff --git a/tests/auto/CMakeLists.txt b/tests/auto/CMakeLists.txt index 469781af..dd361a5c 100644 --- a/tests/auto/CMakeLists.txt +++ b/tests/auto/CMakeLists.txt @@ -8,6 +8,7 @@ add_subdirectory(qgeocircle) add_subdirectory(qgeopath) add_subdirectory(qgeopolygon) add_subdirectory(qgeocoordinate) +add_subdirectory(qgeocoordinateobject) add_subdirectory(qgeolocation) add_subdirectory(qgeopositioninfo) add_subdirectory(qgeosatelliteinfo) diff --git a/tests/auto/qgeocoordinateobject/CMakeLists.txt b/tests/auto/qgeocoordinateobject/CMakeLists.txt new file mode 100644 index 00000000..b8af5b9b --- /dev/null +++ b/tests/auto/qgeocoordinateobject/CMakeLists.txt @@ -0,0 +1,8 @@ +qt_internal_add_test(tst_qgeocoordinateobject + SOURCES + tst_qgeocoordinateobject.cpp + LIBRARIES + Qt::Core + Qt::PositioningPrivate + Qt::TestPrivate +) diff --git a/tests/auto/qgeocoordinateobject/tst_qgeocoordinateobject.cpp b/tests/auto/qgeocoordinateobject/tst_qgeocoordinateobject.cpp new file mode 100644 index 00000000..aaf1920d --- /dev/null +++ b/tests/auto/qgeocoordinateobject/tst_qgeocoordinateobject.cpp @@ -0,0 +1,99 @@ +/**************************************************************************** +** +** 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 <QtTest/QtTest> +#include <QtTest/private/qpropertytesthelper_p.h> +#include <QtPositioning/private/qgeocoordinateobject_p.h> + +QT_USE_NAMESPACE + +class tst_QGeoCoordinateObject : public QObject +{ + Q_OBJECT +private slots: + void constructor(); + void equality(); + void equality_data(); + void coordinateBinding(); +}; + +void tst_QGeoCoordinateObject::constructor() +{ + QGeoCoordinateObject defaultConstructed; + QCOMPARE(defaultConstructed.coordinate(), QGeoCoordinate()); + + QGeoCoordinate c(1.0, 2.0, 3.0); + QGeoCoordinateObject co(c); + QCOMPARE(co.coordinate(), c); +} + +void tst_QGeoCoordinateObject::equality() +{ + QFETCH(QGeoCoordinate, lhs); + QFETCH(QGeoCoordinate, rhs); + QFETCH(bool, expectedResult); + + QGeoCoordinateObject leftObj(lhs); + QGeoCoordinateObject rightObj(rhs); + + QVERIFY(leftObj == lhs); + QVERIFY(rightObj == rhs); + + QCOMPARE(leftObj == rhs, expectedResult); + QCOMPARE(leftObj != rhs, !expectedResult); + QCOMPARE(rightObj == lhs, expectedResult); + QCOMPARE(rightObj != lhs, !expectedResult); + QCOMPARE(leftObj == rightObj, expectedResult); + QCOMPARE(leftObj != rightObj, !expectedResult); +} + +void tst_QGeoCoordinateObject::equality_data() +{ + QTest::addColumn<QGeoCoordinate>("lhs"); + QTest::addColumn<QGeoCoordinate>("rhs"); + QTest::addColumn<bool>("expectedResult"); + + QTest::newRow("two invalid") << QGeoCoordinate() << QGeoCoordinate() << true; + QTest::newRow("same valid") << QGeoCoordinate(1.0, 2.0, 3.0) << QGeoCoordinate(1.0, 2.0, 3.0) + << true; + QTest::newRow("invalid vs valid") << QGeoCoordinate() << QGeoCoordinate(1.0, 2.0, 3.0) << false; + QTest::newRow("different valid") + << QGeoCoordinate(1.0, 2.0, 3.0) << QGeoCoordinate(2.0, 3.0, 4.0) << false; +} + +void tst_QGeoCoordinateObject::coordinateBinding() +{ + QGeoCoordinateObject obj; + const QGeoCoordinate initial(1, 2, 3); + const QGeoCoordinate changed(4, 5, 6); + QTestPrivate::testReadWritePropertyBasics<QGeoCoordinateObject, QGeoCoordinate>( + obj, initial, changed, "coordinate"); +} + +QTEST_GUILESS_MAIN(tst_QGeoCoordinateObject) +#include "tst_qgeocoordinateobject.moc" |