From bbb79ae7ab292ad3ffada87a2baa539aac7c1ca2 Mon Sep 17 00:00:00 2001 From: Fabian Kosmale Date: Fri, 30 Oct 2020 10:43:46 +0100 Subject: Adjust tst_qdbusmarshall to QVariant changes Comparing QVariant's containing QDBusArguments does not work anymore in Qt 6, where QVariant will simply use QMetaType equals. Thus we now do the comparisons in a more manual way. This is currently only partially implemented. Additionally, adjust to changed warning message. Fixes: QTBUG-87998 Change-Id: Ie63db4e8c8d03d7627234f3c892067d1557454af Reviewed-by: Liang Qi --- .../auto/dbus/qdbusmarshall/tst_qdbusmarshall.cpp | 82 +++++++++++++++------- 1 file changed, 58 insertions(+), 24 deletions(-) diff --git a/tests/auto/dbus/qdbusmarshall/tst_qdbusmarshall.cpp b/tests/auto/dbus/qdbusmarshall/tst_qdbusmarshall.cpp index c4419d552f..aaa6e22392 100644 --- a/tests/auto/dbus/qdbusmarshall/tst_qdbusmarshall.cpp +++ b/tests/auto/dbus/qdbusmarshall/tst_qdbusmarshall.cpp @@ -640,89 +640,109 @@ void tst_QDBusMarshall::sendArgument_data() QTest::addColumn("value"); QTest::addColumn("sig"); QTest::addColumn("classification"); + QTest::addColumn("unwrappedValue"); QDBusArgument(); QDBusArgument arg; arg = QDBusArgument(); arg << true; - QTest::newRow("bool") << QVariant::fromValue(arg) << "b" << int(QDBusArgument::BasicType);; + QTest::newRow("bool") << QVariant::fromValue(arg) << "b" << int(QDBusArgument::BasicType) + << QVariant::fromValue(true); arg = QDBusArgument(); arg << false; - QTest::newRow("bool2") << QVariant::fromValue(arg) << "b" << int(QDBusArgument::BasicType); + QTest::newRow("bool2") << QVariant::fromValue(arg) << "b" << int(QDBusArgument::BasicType) + << QVariant::fromValue(false); arg = QDBusArgument(); arg << uchar(1); - QTest::newRow("byte") << QVariant::fromValue(arg) << "y" << int(QDBusArgument::BasicType); + QTest::newRow("byte") << QVariant::fromValue(arg) << "y" << int(QDBusArgument::BasicType) + << QVariant::fromValue(uchar(1)); arg = QDBusArgument(); arg << short(2); - QTest::newRow("int16") << QVariant::fromValue(arg) << "n" << int(QDBusArgument::BasicType); + QTest::newRow("int16") << QVariant::fromValue(arg) << "n" << int(QDBusArgument::BasicType) + << QVariant::fromValue(short(2)); arg = QDBusArgument(); arg << ushort(3); - QTest::newRow("uint16") << QVariant::fromValue(arg) << "q" << int(QDBusArgument::BasicType); + QTest::newRow("uint16") << QVariant::fromValue(arg) << "q" << int(QDBusArgument::BasicType) + << QVariant::fromValue(ushort(3)); arg = QDBusArgument(); arg << 1; - QTest::newRow("int32") << QVariant::fromValue(arg) << "i" << int(QDBusArgument::BasicType); + QTest::newRow("int32") << QVariant::fromValue(arg) << "i" << int(QDBusArgument::BasicType) + << QVariant::fromValue(1); arg = QDBusArgument(); arg << 2U; - QTest::newRow("uint32") << QVariant::fromValue(arg) << "u" << int(QDBusArgument::BasicType); + QTest::newRow("uint32") << QVariant::fromValue(arg) << "u" << int(QDBusArgument::BasicType) + << QVariant::fromValue(2U); arg = QDBusArgument(); arg << Q_INT64_C(3); - QTest::newRow("int64") << QVariant::fromValue(arg) << "x" << int(QDBusArgument::BasicType); + QTest::newRow("int64") << QVariant::fromValue(arg) << "x" << int(QDBusArgument::BasicType) + << QVariant::fromValue(Q_INT64_C(3)); arg = QDBusArgument(); arg << Q_UINT64_C(4); - QTest::newRow("uint64") << QVariant::fromValue(arg) << "t" << int(QDBusArgument::BasicType); + QTest::newRow("uint64") << QVariant::fromValue(arg) << "t" << int(QDBusArgument::BasicType) + << QVariant::fromValue(Q_UINT64_C(4)); arg = QDBusArgument(); arg << 42.5; - QTest::newRow("double") << QVariant::fromValue(arg) << "d" << int(QDBusArgument::BasicType); + QTest::newRow("double") << QVariant::fromValue(arg) << "d" << int(QDBusArgument::BasicType) + << QVariant::fromValue(42.5); arg = QDBusArgument(); arg << QLatin1String("ping"); - QTest::newRow("string") << QVariant::fromValue(arg) << "s" << int(QDBusArgument::BasicType); + QTest::newRow("string") << QVariant::fromValue(arg) << "s" << int(QDBusArgument::BasicType) + << QVariant::fromValue(QString("ping")); arg = QDBusArgument(); arg << QDBusObjectPath("/org/kde"); - QTest::newRow("objectpath") << QVariant::fromValue(arg) << "o" << int(QDBusArgument::BasicType); + QTest::newRow("objectpath") << QVariant::fromValue(arg) << "o" << int(QDBusArgument::BasicType) + << QVariant::fromValue(QDBusObjectPath("/org/kde")); arg = QDBusArgument(); arg << QDBusSignature("g"); - QTest::newRow("signature") << QVariant::fromValue(arg) << "g" << int(QDBusArgument::BasicType); + QTest::newRow("signature") << QVariant::fromValue(arg) << "g" << int(QDBusArgument::BasicType) + << QVariant::fromValue(QDBusSignature("g")); arg = QDBusArgument(); arg << QLatin1String(""); - QTest::newRow("emptystring") << QVariant::fromValue(arg) << "s" << int(QDBusArgument::BasicType); + QTest::newRow("emptystring") << QVariant::fromValue(arg) << "s" << int(QDBusArgument::BasicType) + << QVariant::fromValue(QString("")); arg = QDBusArgument(); arg << QString(); - QTest::newRow("nullstring") << QVariant::fromValue(arg) << "s" << int(QDBusArgument::BasicType); + QTest::newRow("nullstring") << QVariant::fromValue(arg) << "s" << int(QDBusArgument::BasicType) + << QVariant::fromValue(QString()); if (fileDescriptorPassing) { arg = QDBusArgument(); arg << QDBusUnixFileDescriptor(fileDescriptorForTest()); - QTest::newRow("filedescriptor") << QVariant::fromValue(arg) << "h" << int(QDBusArgument::BasicType); + QTest::newRow("filedescriptor") << QVariant::fromValue(arg) << "h" << int(QDBusArgument::BasicType) + << QVariant::fromValue(QDBusUnixFileDescriptor(fileDescriptorForTest())); } arg = QDBusArgument(); arg << QDBusVariant(1); - QTest::newRow("variant") << QVariant::fromValue(arg) << "v" << int(QDBusArgument::VariantType); + QTest::newRow("variant") << QVariant::fromValue(arg) << "v" << int(QDBusArgument::VariantType) + << QVariant::fromValue(QDBusVariant(1)); arg = QDBusArgument(); arg << QDBusVariant(QVariant::fromValue(QDBusVariant(1))); - QTest::newRow("variant-variant") << QVariant::fromValue(arg) << "v" << int(QDBusArgument::VariantType); + QTest::newRow("variant-variant") << QVariant::fromValue(arg) << "v" << int(QDBusArgument::VariantType) + << QVariant::fromValue(QVariant::fromValue(QDBusVariant(1))); arg = QDBusArgument(); arg.beginArray(QVariant::Int); arg << 1 << 2 << 3 << -4; arg.endArray(); - QTest::newRow("array-of-int") << QVariant::fromValue(arg) << "ai" << int(QDBusArgument::ArrayType); + QTest::newRow("array-of-int") << QVariant::fromValue(arg) << "ai" << int(QDBusArgument::ArrayType) + << QVariant::fromValue(arg); arg = QDBusArgument(); arg.beginMap(QVariant::Int, QVariant::UInt); @@ -733,13 +753,15 @@ void tst_QDBusMarshall::sendArgument_data() arg << 3 << 4U; arg.endMapEntry(); arg.endMap(); - QTest::newRow("map") << QVariant::fromValue(arg) << "a{iu}" << int(QDBusArgument::MapType); + QTest::newRow("map") << QVariant::fromValue(arg) << "a{iu}" << int(QDBusArgument::MapType) + << QVariant::fromValue(arg); arg = QDBusArgument(); arg.beginStructure(); arg << 1 << 2U << short(-3) << ushort(4) << 5.0 << false; arg.endStructure(); - QTest::newRow("structure") << QVariant::fromValue(arg) << "(iunqdb)" << int(QDBusArgument::StructureType); + QTest::newRow("structure") << QVariant::fromValue(arg) << "(iunqdb)" << int(QDBusArgument::StructureType) + << QVariant::fromValue(arg); } void tst_QDBusMarshall::sendBasic() @@ -819,6 +841,7 @@ void tst_QDBusMarshall::sendArgument() { QFETCH(QVariant, value); QFETCH(QString, sig); + QFETCH(QVariant, unwrappedValue); QDBusConnection con = QDBusConnection::sessionBus(); @@ -861,7 +884,18 @@ void tst_QDBusMarshall::sendArgument() QVERIFY(arg.atEnd()); QCOMPARE(arg.currentType(), QDBusArgument::UnknownType); - QCOMPARE(extracted, value); + + QEXPECT_FAIL("variant-variant", "Needs more QVariant unwrapping", Continue); + if (extracted.metaType() == QMetaType::fromType()) { + auto fd1 = extracted.value(); + auto fd2 = unwrappedValue.value(); + QVERIFY(compare(fd1, fd2)); + } else if (extracted.metaType() != QMetaType::fromType()) { + QCOMPARE(extracted, unwrappedValue); + } else { + QEXPECT_FAIL("", "Comparison logic needs to be fixed", Continue); + QVERIFY(compare(extracted, value)); + } } void tst_QDBusMarshall::sendSignalErrors() @@ -941,12 +975,12 @@ void tst_QDBusMarshall::sendCallErrors_data() QTest::newRow("invalid-variant1") << serviceName << objectPath << interfaceName << "ping" << (QVariantList() << QVariant()) << "org.freedesktop.DBus.Error.Failed" - << "Marshalling failed: Variant containing QVariant::Invalid passed in arguments" + << "Marshalling failed: Invalid QVariant passed in arguments" << "QDBusMarshaller: cannot add an invalid QVariant"; QTest::newRow("invalid-variant1") << serviceName << objectPath << interfaceName << "ping" << (QVariantList() << QVariant::fromValue(QDBusVariant())) << "org.freedesktop.DBus.Error.Failed" - << "Marshalling failed: Variant containing QVariant::Invalid passed in arguments" + << "Marshalling failed: Invalid QVariant passed in arguments" << "QDBusMarshaller: cannot add a null QDBusVariant"; QTest::newRow("builtin-unregistered") << serviceName << objectPath << interfaceName << "ping" -- cgit v1.2.3