diff options
author | Fabian Kosmale <fabian.kosmale@qt.io> | 2020-09-29 20:08:00 +0200 |
---|---|---|
committer | Fabian Kosmale <fabian.kosmale@qt.io> | 2020-09-30 06:31:36 +0000 |
commit | 68923001279fd3da983dc59e57200e2080cadcb6 (patch) | |
tree | b39af86fb12693b620c89235e6657a3098428a62 /tests/auto/corelib/kernel | |
parent | 8e2933f140d0969341b2b927f49a4c8606027fcf (diff) |
QVariant: Change metatype in convert() even on failure
The documentation of convert promised that “If the cast cannot be
done, the variant is still changed to the requested type”. This was not
the case so far, because we returned too early if canConvert returned
false.
This commit changes the behavior of the method to reflect its
documentation. The documented behavior seems more useful than the
alternative of not changing the metaType, at least for common use cases
inside qtdeclarative.
Change-Id: I09b5a5efb7344e76e93de278e35c7fb2b2f87dcd
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'tests/auto/corelib/kernel')
-rw-r--r-- | tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp index 0eefd95ac7..ea8f26ae20 100644 --- a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp +++ b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp @@ -99,6 +99,7 @@ private slots: void canConvert_data(); void canConvert(); + void convert(); void toSize_data(); void toSize(); @@ -555,6 +556,16 @@ void tst_QVariant::canConvert() QCOMPARE(val.canConvert(23876), false); } +void tst_QVariant::convert() +{ + // verify that after convert(), the variant's type has been changed + QVariant var = QVariant::fromValue(QString("A string")); + var.convert(QMetaType::fromType<int>()); + QCOMPARE(var.metaType(), QMetaType::fromType<int>()); + QCOMPARE(var.toInt(), 0); +} + + void tst_QVariant::toInt_data() { QTest::addColumn<QVariant>("value"); @@ -2343,8 +2354,8 @@ void tst_QVariant::qvariant_cast_QObject() QVERIFY(!data.canConvert(QMetaType::QObjectStar)); QVERIFY(!data.canConvert(::qMetaTypeId<QObject*>())); QVERIFY(!data.value<QObject*>()); - QVERIFY(!data.convert(QMetaType::QObjectStar)); QVERIFY(data.userType() != QMetaType::QObjectStar); + QVERIFY(!data.convert(QMetaType::QObjectStar)); } } |