summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib/kernel/qvariant
diff options
context:
space:
mode:
authorThiago Macieira <thiago.macieira@intel.com>2022-07-22 09:11:16 -0700
committerThiago Macieira <thiago.macieira@intel.com>2022-07-22 12:42:55 -0700
commitdf0085d3a28005e84eb7688cc2575a121ba322aa (patch)
treeac9be0af36e77024691e5c9a57560caa05f0e3a2 /tests/auto/corelib/kernel/qvariant
parent392566cf61204dd28be0a6f2a252f9b5bd064e00 (diff)
QVariant: do allow non-default-constructible types
So long as you only ask us to copy it. Copying is mandatory, though. I'll firm up the warning in a later commit, which may not get cherry- picked as far back. Pick-to: 6.2 6.3 6.4 Fixes: QTBUG-105140 Change-Id: I3859764fed084846bcb0fffd170432abf65dc197 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'tests/auto/corelib/kernel/qvariant')
-rw-r--r--tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp31
1 files changed, 29 insertions, 2 deletions
diff --git a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp
index 240c25ae48..f20fd0cd87 100644
--- a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp
+++ b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp
@@ -289,6 +289,7 @@ private slots:
void constructFromIncompatibleMetaType_data();
void constructFromIncompatibleMetaType();
+ void copyNonDefaultConstructible();
private:
void dataStream_data(QDataStream::Version version);
@@ -5110,11 +5111,19 @@ void tst_QVariant::equalsWithoutMetaObject()
QVERIFY(qobjectVariant != noMetaObjectVariant);
}
-class NonDefaultConstructible
+struct NonDefaultConstructible
{
- NonDefaultConstructible(int ) {}
+ NonDefaultConstructible(int i) :i(i) {}
+ int i;
+ friend bool operator==(NonDefaultConstructible l, NonDefaultConstructible r)
+ { return l.i == r.i; }
};
+template <> char *QTest::toString<NonDefaultConstructible>(const NonDefaultConstructible &ndc)
+{
+ return qstrdup('{' + QByteArray::number(ndc.i) + '}');
+}
+
struct Indestructible
{
Indestructible() {}
@@ -5154,5 +5163,23 @@ void tst_QVariant::constructFromIncompatibleMetaType()
QVERIFY(!QVariant(regular).convert(type));
}
+void tst_QVariant::copyNonDefaultConstructible()
+{
+ NonDefaultConstructible ndc(42);
+ QVariant var(QMetaType::fromType<NonDefaultConstructible>(), &ndc);
+ QVERIFY(var.isDetached());
+ QCOMPARE(var.metaType(), QMetaType::fromType<NonDefaultConstructible>());
+ QVERIFY(var.constData() != &ndc);
+
+ // qvariant_cast<T> and QVariant::value<T> don't compile
+ QCOMPARE(*static_cast<const NonDefaultConstructible *>(var.constData()), ndc);
+
+ QVariant var2 = var;
+ var2.detach(); // force another copy
+ QVERIFY(var2.isDetached());
+ QVERIFY(var2.constData() != var.constData());
+ QCOMPARE(var2, var);
+}
+
QTEST_MAIN(tst_QVariant)
#include "tst_qvariant.moc"