summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib/kernel/qvariant
diff options
context:
space:
mode:
authorFabian Kosmale <fabian.kosmale@qt.io>2020-06-29 14:26:36 +0200
committerLars Knoll <lars.knoll@qt.io>2020-07-08 14:13:59 +0200
commit986d89c2eefd37ee0da8e07d7794716000608610 (patch)
tree5e709f713cacdf0bfac7ddb95d14e1ed8553a9f3 /tests/auto/corelib/kernel/qvariant
parent0e2cfdedf261a9d29d7466bd26545549479d9f8a (diff)
Automatically register comparison operators in QMetaType
This removes the fully manual registration of comparison operators in QMetaType and replaces it with an automatic registration through Q_DECLARE_METATYPE(). [ChangeLog][QMetaType] The QMetaType::registerComparator() and QMetaType::registerEqualsComparator() have been removed. Q_DECLARE_METATYPE() now automatically registers any operator==() and/or operator<() for a type visible where it is used on that type, as part of declaring its meta-type. Change-Id: I3df451b652b735c093533838bf32f3cc785439f8 Reviewed-by: Lars Knoll <lars.knoll@qt.io> Reviewed-by: Ulf Hermann <ulf.hermann@qt.io> Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Diffstat (limited to 'tests/auto/corelib/kernel/qvariant')
-rw-r--r--tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp49
1 files changed, 36 insertions, 13 deletions
diff --git a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp
index 192a75d7ae..9920c8812d 100644
--- a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp
+++ b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp
@@ -1826,6 +1826,12 @@ struct MyType
{
++instanceCount;
}
+ MyType &operator=(const MyType &other)
+ {
+ number = other.number;
+ text = other.text;
+ return *this;
+ }
~MyType()
{
--instanceCount;
@@ -1833,6 +1839,8 @@ struct MyType
int number;
const char *text;
};
+bool operator==(const MyType &a, const MyType &b) { return a.number == b.number && a.text == b.text; }
+static_assert(QTypeTraits::has_operator_equal_v<MyType>);
Q_DECLARE_METATYPE(MyType)
Q_DECLARE_METATYPE(MyType*)
@@ -2837,28 +2845,43 @@ void tst_QVariant::invalidDate() const
struct WontCompare
{
- int x,y,z,q,w,e,r,t;
+ int x;
};
Q_DECLARE_METATYPE(WontCompare);
+struct WillCompare
+{
+ int x;
+};
+bool operator==(const WillCompare &a, const WillCompare &b) { return a.x == b.x; }
+Q_DECLARE_METATYPE(WillCompare);
+
void tst_QVariant::compareCustomTypes() const
{
- qRegisterMetaType<WontCompare>("WontCompare");
+ {
+ WontCompare f1{0};
+ const QVariant variant1(QVariant::fromValue(f1));
+
+ WontCompare f2{1};
+ const QVariant variant2(QVariant::fromValue(f2));
- WontCompare f1 = {};
- f1.x = 0;
- const QVariant variant1(QVariant::fromValue(f1));
+ /* No comparison operator exists. */
+ QVERIFY(variant1 != variant2);
+ QVERIFY(variant1 != variant1);
+ QVERIFY(variant2 != variant2);
+ }
+ {
+ WillCompare f1{0};
+ const QVariant variant1(QVariant::fromValue(f1));
- WontCompare f2 = {};
- f2.x = 1;
- const QVariant variant2(QVariant::fromValue(f2));
+ WillCompare f2 {1};
+ const QVariant variant2(QVariant::fromValue(f2));
- /* We compare via memcmp. */
- QVERIFY(variant1 != variant2);
- QCOMPARE(variant1, variant1);
- QCOMPARE(variant2, variant2);
+ QVERIFY(variant1 != variant2);
+ QCOMPARE(variant1, variant1);
+ QCOMPARE(variant2, variant2);
+ }
}
-
void tst_QVariant::timeToDateTime() const
{
const QVariant val(QTime::currentTime());