From 948261d70c1719dc7d4dfed7ecfd94ca9b9ade9e Mon Sep 17 00:00:00 2001 From: Fabian Kosmale Date: Thu, 22 Apr 2021 11:59:30 +0200 Subject: [PATCH] qpropertytesthelper: Check that the types match If you have a property myprop of type float, testReadWritePropertyBasics would happily accept testReadWritePropertyBasics(myObject, 1, 2, "myProp") The test would then fail when setting bindings, as we would try to install a binding of type int on a float property, which gets rejected at runtime. To prevent unexpected failures, verify that the types match before doing any further checks. Change-Id: I3893563fce0e11f9e20afa7c6a1e1fe0385382ab Reviewed-by: Sona Kurazyan --- src/testlib/qpropertytesthelper_p.h | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/testlib/qpropertytesthelper_p.h b/src/testlib/qpropertytesthelper_p.h index 1a769bc3f04..7b22e157843 100644 --- a/src/testlib/qpropertytesthelper_p.h +++ b/src/testlib/qpropertytesthelper_p.h @@ -139,6 +139,11 @@ void testReadWritePropertyBasics( // get the property const QMetaObject *metaObject = instance.metaObject(); QMetaProperty metaProperty = metaObject->property(metaObject->indexOfProperty(propertyName)); + QVERIFY2(metaProperty.metaType() == QMetaType::fromType(), + QByteArray("Preconditions not met for") + propertyName + '\n' + + "The type of initial and changed value does not match the type of the property." + "Please ensure that the types match exactly (convertability is not enough)." + "You can provide the template types to the function explicitly to force a certain type"); // in case the TestedClass has setProperty()/property() methods. QObject &testedObj = static_cast(instance); @@ -268,6 +273,12 @@ void testReadOnlyPropertyBasics( // in case the TestedClass has setProperty()/property() methods. QObject &testedObj = static_cast(instance); + QVERIFY2(metaProperty.metaType() == QMetaType::fromType(), + QByteArray("Preconditions not met for") + propertyName + '\n' + + "The type of initial and changed value does not match the type of the property." + "Please ensure that the types match exactly (convertability is not enough)." + "You can provide the template types to the function explicitly to force a certain type"); + QVERIFY2(metaProperty.isBindable(), "Preconditions not met for " + QByteArray(propertyName)); QUntypedBindable bindable = metaProperty.bindable(&instance);