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 <liang.qi@qt.io>
bb10
Fabian Kosmale 2020-10-30 10:43:46 +01:00
parent 951274a9b9
commit bbb79ae7ab
1 changed files with 58 additions and 24 deletions

View File

@ -640,89 +640,109 @@ void tst_QDBusMarshall::sendArgument_data()
QTest::addColumn<QVariant>("value");
QTest::addColumn<QString>("sig");
QTest::addColumn<int>("classification");
QTest::addColumn<QVariant>("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<QDBusUnixFileDescriptor>()) {
auto fd1 = extracted.value<QDBusUnixFileDescriptor>();
auto fd2 = unwrappedValue.value<QDBusUnixFileDescriptor>();
QVERIFY(compare(fd1, fd2));
} else if (extracted.metaType() != QMetaType::fromType<QDBusArgument>()) {
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"