diff options
author | Thiago Macieira <thiago@kde.org> | 2006-06-11 12:18:23 +0000 |
---|---|---|
committer | Thiago Macieira <thiago@kde.org> | 2006-06-11 12:18:23 +0000 |
commit | fd5ac15ebc643635e436b64cf1e656284380b1a5 (patch) | |
tree | f1630dd4f97b5f56c61150ee2a0186831d81c256 /test/qt/tst_qdbusmarshall.cpp | |
parent | 3b50a8c9fe65839b79f8df988aee6124abd4f0c4 (diff) |
* test/qt/*: Update the testcases, including testing the new
functionality of sending null QByteArray and QString over the
bus. Add new headertest test and restore the old
qdbusxmlparser test.
Diffstat (limited to 'test/qt/tst_qdbusmarshall.cpp')
-rw-r--r-- | test/qt/tst_qdbusmarshall.cpp | 342 |
1 files changed, 342 insertions, 0 deletions
diff --git a/test/qt/tst_qdbusmarshall.cpp b/test/qt/tst_qdbusmarshall.cpp new file mode 100644 index 00000000..306f7b6a --- /dev/null +++ b/test/qt/tst_qdbusmarshall.cpp @@ -0,0 +1,342 @@ +#include <QtCore/QtCore> +#include <QtTest/QtTest> +#include <dbus/qdbus.h> + +#include "common.h" +#include <limits> + +class tst_QDBusMarshall: public QObject +{ + Q_OBJECT + +public slots: + void initTestCase(); + void cleanupTestCase(); + +private slots: + void sendBasic_data(); + void sendBasic(); + + void sendVariant_data(); + void sendVariant(); + + void sendArrays_data(); + void sendArrays(); + + void sendArrayOfArrays_data(); + void sendArrayOfArrays(); + + void sendStringMap_data(); + void sendStringMap(); + + void sendStringMapOfMap_data(); + void sendStringMapOfMap(); + +private: + QProcess proc; +}; + +void tst_QDBusMarshall::initTestCase() +{ + proc.start("./qpong"); + QVERIFY(proc.waitForStarted()); + QTest::qWait(2000); +} + +void tst_QDBusMarshall::cleanupTestCase() +{ + proc.close(); + proc.kill(); +} + +void tst_QDBusMarshall::sendBasic_data() +{ + QTest::addColumn<QVariant>("value"); + QTest::addColumn<QString>("sig"); + + // basic types: + QTest::newRow("bool") << QVariant(false) << "b"; + QTest::newRow("bool2") << QVariant(true) << "b"; + QTest::newRow("byte") << qVariantFromValue(uchar(1)) << "y"; + QTest::newRow("int16") << qVariantFromValue(short(2)) << "n"; + QTest::newRow("uint16") << qVariantFromValue(ushort(3)) << "q"; + QTest::newRow("int") << QVariant(1) << "i"; + QTest::newRow("uint") << QVariant(2U) << "u"; + QTest::newRow("int64") << QVariant(Q_INT64_C(3)) << "x"; + QTest::newRow("uint64") << QVariant(Q_UINT64_C(4)) << "t"; + QTest::newRow("double") << QVariant(42.5) << "d"; + QTest::newRow("string") << QVariant("ping") << "s"; + QTest::newRow("emptystring") << QVariant("") << "s"; + QTest::newRow("nullstring") << QVariant(QString()) << "s"; +} + +void tst_QDBusMarshall::sendVariant_data() +{ + sendBasic_data(); + + // add a few more: + QVariant nested(1); + QTest::newRow("variant") << nested << "v"; + + QVariant nested2; + qVariantSetValue(nested2, nested); + QTest::newRow("variant-variant") << nested2 << "v"; +} + +void tst_QDBusMarshall::sendArrays_data() +{ + QTest::addColumn<QVariant>("value"); + QTest::addColumn<QString>("sig"); + + // arrays: + QStringList strings; + QTest::newRow("emptystringlist") << QVariant(strings) << "as"; + strings << "hello" << "world"; + QTest::newRow("stringlist") << QVariant(strings) << "as"; + + strings.clear(); + strings << "" << "" << ""; + QTest::newRow("list-of-emptystrings") << QVariant(strings) << "as"; + + strings.clear(); + strings << QString() << QString() << QString() << QString(); + QTest::newRow("list-of-nullstrings") << QVariant(strings) << "as"; + + QByteArray bytearray; + QTest::newRow("nullbytearray") << QVariant(bytearray) << "ay"; + bytearray = ""; // empty, not null + QTest::newRow("emptybytearray") << QVariant(bytearray) << "ay"; + bytearray = "foo"; + QTest::newRow("bytearray") << QVariant(bytearray) << "ay"; + bytearray.clear(); + for (int i = 0; i < 4096; ++i) + bytearray += QByteArray(1024, char(i)); + QTest::newRow("hugebytearray") << QVariant(bytearray) << "ay"; + + QList<bool> bools; + QTest::newRow("emptyboollist") << qVariantFromValue(bools) << "ab"; + bools << false << true << false; + QTest::newRow("boollist") << qVariantFromValue(bools) << "ab"; + + QList<short> shorts; + QTest::newRow("emptyshortlist") << qVariantFromValue(shorts) << "an"; + shorts << 42 << -43 << 44 << 45 << -32768 << 32767; + QTest::newRow("shortlist") << qVariantFromValue(shorts) << "an"; + + QList<ushort> ushorts; + QTest::newRow("emptyushortlist") << qVariantFromValue(ushorts) << "aq"; + ushorts << 12u << 13u << 14u << 15 << 65535; + QTest::newRow("ushortlist") << qVariantFromValue(ushorts) << "aq"; + + QList<int> ints; + QTest::newRow("emptyintlist") << qVariantFromValue(ints) << "ai"; + ints << 42 << -43 << 44 << 45 << 2147483647 << -2147483647-1; + QTest::newRow("intlist") << qVariantFromValue(ints) << "ai"; + + QList<uint> uints; + QTest::newRow("emptyuintlist") << qVariantFromValue(uints) << "au"; + uints << uint(12) << uint(13) << uint(14) << 4294967295U; + QTest::newRow("uintlist") << qVariantFromValue(uints) << "au"; + + QList<qlonglong> llints; + QTest::newRow("emptyllintlist") << qVariantFromValue(llints) << "ax"; + llints << Q_INT64_C(99) << Q_INT64_C(-100) + << Q_INT64_C(-9223372036854775807)-1 << Q_INT64_C(9223372036854775807); + QTest::newRow("llintlist") << qVariantFromValue(llints) << "ax"; + + QList<qulonglong> ullints; + QTest::newRow("emptyullintlist") << qVariantFromValue(ullints) << "at"; + ullints << Q_UINT64_C(66) << Q_UINT64_C(67) + << Q_UINT64_C(18446744073709551615); + QTest::newRow("ullintlist") << qVariantFromValue(ullints) << "at"; + + QList<double> doubles; + QTest::newRow("emptydoublelist") << qVariantFromValue(doubles) << "ad"; + doubles << 1.2 << 2.2 << 4.4 + << -std::numeric_limits<double>::infinity() + << std::numeric_limits<double>::infinity() + << std::numeric_limits<double>::quiet_NaN(); + QTest::newRow("doublelist") << qVariantFromValue(doubles) << "ad"; + + QVariantList variants; + QTest::newRow("emptyvariantlist") << QVariant(variants) << "av"; + variants << QString("Hello") << QByteArray("World") << 42 << -43.0 << 44U << Q_INT64_C(-45) + << Q_UINT64_C(46) << true << qVariantFromValue(short(-47)); + for (int i = 0; i < variants.count(); ++i) { + QVariant tmp = variants.at(i); + qVariantSetValue(variants[i], tmp); + } + QTest::newRow("variantlist") << QVariant(variants) << "av"; +} + +void tst_QDBusMarshall::sendArrayOfArrays_data() +{ + sendArrays_data(); +} + +void tst_QDBusMarshall::sendStringMap_data() +{ + sendBasic_data(); + + QVariant nested; + qVariantSetValue(nested, QVariant(1)); + QTest::newRow("variant") << nested << "v"; + + QVariant nested2; + qVariantSetValue(nested2, nested); + QTest::newRow("variant-variant") << nested2 << "v"; + + sendArrays_data(); +} + +void tst_QDBusMarshall::sendStringMapOfMap_data() +{ + sendStringMap_data(); +} + +void tst_QDBusMarshall::sendBasic() +{ + QFETCH(QVariant, value); + + QDBusConnection &con = QDBus::sessionBus(); + + QVERIFY(con.isConnected()); + + QDBusMessage msg = QDBusMessage::methodCall("org.kde.selftest", + "/org/kde/selftest", "org.kde.selftest", "ping"); + msg << value; + + QDBusMessage reply = con.sendWithReply(msg); + // qDebug() << reply; + + QCOMPARE(reply.count(), msg.count()); + QTEST(reply.signature(), "sig"); + for (int i = 0; i < reply.count(); ++i) + QVERIFY(compare(reply.at(i), msg.at(i))); +} + +void tst_QDBusMarshall::sendVariant() +{ + QFETCH(QVariant, value); + QVariant tmp = value; + qVariantSetValue(value, tmp); + + QDBusConnection &con = QDBus::sessionBus(); + + QVERIFY(con.isConnected()); + + QDBusMessage msg = QDBusMessage::methodCall("org.kde.selftest", + "/org/kde/selftest", "org.kde.selftest", "ping"); + msg << value; + + QDBusMessage reply = con.sendWithReply(msg); + // qDebug() << reply; + + QCOMPARE(reply.count(), msg.count()); + QCOMPARE(reply.signature(), QString("v")); + for (int i = 0; i < reply.count(); ++i) + QVERIFY(compare(reply.at(i), msg.at(i))); +} + +void tst_QDBusMarshall::sendArrays() +{ + QFETCH(QVariant, value); + + QDBusConnection &con = QDBus::sessionBus(); + + QVERIFY(con.isConnected()); + + QDBusMessage msg = QDBusMessage::methodCall("org.kde.selftest", + "/org/kde/selftest", "org.kde.selftest", "ping"); + msg << value; + + QDBusMessage reply = con.sendWithReply(msg); + // qDebug() << reply; + + QCOMPARE(reply.count(), msg.count()); + QTEST(reply.signature(), "sig"); + for (int i = 0; i < reply.count(); ++i) + QVERIFY(compare(reply.at(i), msg.at(i))); +} + +void tst_QDBusMarshall::sendArrayOfArrays() +{ + QFETCH(QVariant, value); + + QDBusConnection &con = QDBus::sessionBus(); + + QVERIFY(con.isConnected()); + + QDBusMessage msg = QDBusMessage::methodCall("org.kde.selftest", + "/org/kde/selftest", "org.kde.selftest", "ping"); + msg << QVariant(QVariantList() << value << value); + + QDBusMessage reply = con.sendWithReply(msg); + // qDebug() << reply; + + QCOMPARE(reply.count(), msg.count()); + QFETCH(QString, sig); + QCOMPARE(reply.signature(), "a" + sig); + for (int i = 0; i < reply.count(); ++i) + QVERIFY(compare(reply.at(i), msg.at(i))); +} + +void tst_QDBusMarshall::sendStringMap() +{ + QFETCH(QVariant, value); + + QDBusConnection &con = QDBus::sessionBus(); + + QVERIFY(con.isConnected()); + + QDBusMessage msg = QDBusMessage::methodCall("org.kde.selftest", + "/org/kde/selftest", "org.kde.selftest", "ping"); + + QVariantMap map; + map["foo"] = value; + map["bar"] = value; + msg << QVariant(map); + + QDBusMessage reply = con.sendWithReply(msg); + // qDebug() << reply; + + QCOMPARE(reply.count(), msg.count()); + QFETCH(QString, sig); + QCOMPARE(reply.signature(), "a{s" + sig + "}"); + for (int i = 0; i < reply.count(); ++i) + QVERIFY(compare(reply.at(i), msg.at(i))); +} + +void tst_QDBusMarshall::sendStringMapOfMap() +{ + QFETCH(QVariant, value); + + QDBusConnection &con = QDBus::sessionBus(); + + QVERIFY(con.isConnected()); + + QDBusMessage msg = QDBusMessage::methodCall("org.kde.selftest", + "/org/kde/selftest", "org.kde.selftest", "ping"); + + QVariantMap map; + map["foo"] = value; + map["bar"] = value; + + QVariantMap map2; + map2["foo"] = map; + msg << QVariant(map2); + + QDBusMessage reply = con.sendWithReply(msg); + // qDebug() << reply; + + QCOMPARE(reply.count(), msg.count()); + QFETCH(QString, sig); + QCOMPARE(reply.signature(), "a{sa{s" + sig + "}}"); + + for (int i = 0; i < reply.count(); ++i) + QVERIFY(compare(reply.at(i), msg.at(i))); +} + + +QTEST_MAIN(tst_QDBusMarshall) +#include "tst_qdbusmarshall.moc" |