dbus/test/qt/ping.cpp
Thiago Macieira d54ababd5f * test/qt/*: Sync with KDE Subversion revision 523647.
Update the testcases to the new API. Remove testcases for
        classes that are no longer public or have been removed.
2006-03-28 18:58:58 +00:00

326 lines
8.9 KiB
C++

#include <QtCore/QtCore>
#include <QtTest/QtTest>
#include <dbus/qdbus.h>
#include "common.h"
class Ping: 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 Ping::initTestCase()
{
proc.start("./qpong");
QVERIFY(proc.waitForStarted());
QTest::qWait(2000);
}
void Ping::cleanupTestCase()
{
proc.close();
}
void Ping::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";
}
void Ping::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 Ping::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";
QByteArray bytearray(""); // empty, not null
QTest::newRow("emptybytearray") << QVariant(bytearray) << "ay";
bytearray = "foo";
QTest::newRow("bytearray") << 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 Ping::sendArrayOfArrays_data()
{
sendArrays_data();
}
void Ping::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 Ping::sendStringMapOfMap_data()
{
sendStringMap_data();
}
void Ping::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 Ping::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 Ping::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 Ping::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 Ping::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 Ping::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 + "}}");
QEXPECT_FAIL("", "libdbus returns an empty set for un unknown reason", Abort);
for (int i = 0; i < reply.count(); ++i)
QVERIFY(compare(reply.at(i), msg.at(i)));
}
QTEST_MAIN(Ping)
#include "ping.moc"