diff options
author | Oswald Buddenhagen <oswald.buddenhagen@digia.com> | 2013-03-20 13:46:57 +0100 |
---|---|---|
committer | Oswald Buddenhagen <oswald.buddenhagen@digia.com> | 2013-03-20 13:49:28 +0100 |
commit | 76c0be34cd4ff4564693162fa7528463e23ce9d8 (patch) | |
tree | f165b7bc319548fb0082365411a871028f92e89e /tests/auto/dbus | |
parent | 27b4fe96b59e9e63d1e570e802c072e9afdfb2d4 (diff) | |
parent | 36cb3f3f655a9090c82de609010cbfb88651a0f3 (diff) |
Merge branch 'dev' into stable
This starts Qt 5.1 release cycle
Conflicts:
src/gui/text/qfontdatabase.cpp
src/gui/text/qharfbuzz_copy_p.h
src/widgets/kernel/qapplication.cpp
src/widgets/kernel/qcoreapplication.cpp
Change-Id: I72fbf83ab3c2206aeea1b089428b0fc2a89bd62b
Diffstat (limited to 'tests/auto/dbus')
6 files changed, 148 insertions, 23 deletions
diff --git a/tests/auto/dbus/qdbusabstractinterface/tst_qdbusabstractinterface.cpp b/tests/auto/dbus/qdbusabstractinterface/tst_qdbusabstractinterface.cpp index c28d1dc022..308e12b9ab 100644 --- a/tests/auto/dbus/qdbusabstractinterface/tst_qdbusabstractinterface.cpp +++ b/tests/auto/dbus/qdbusabstractinterface/tst_qdbusabstractinterface.cpp @@ -159,6 +159,11 @@ private slots: void followSignal(); + void connectDisconnect_data(); + void connectDisconnect(); + void connectDisconnectPeer_data(); + void connectDisconnectPeer(); + void createErrors_data(); void createErrors(); @@ -196,6 +201,15 @@ private: QProcess proc; }; +class SignalReceiver : public QObject +{ + Q_OBJECT +public: + int callCount; + SignalReceiver() : callCount(0) {} +public slots: + void receive() { ++callCount; } +}; tst_QDBusAbstractInterface::tst_QDBusAbstractInterface() { @@ -1017,21 +1031,87 @@ void tst_QDBusAbstractInterface::followSignal() // now the signal must have been received: QCOMPARE(s.size(), 1); QVERIFY(s.at(0).size() == 0); - s.clear(); - // disconnect the signal - disconnect(p.data(), SIGNAL(voidSignal()), &QTestEventLoop::instance(), 0); + // cleanup: + con.interface()->unregisterService(serviceToFollow); +} + +void tst_QDBusAbstractInterface::connectDisconnect_data() +{ + QTest::addColumn<int>("connectCount"); + QTest::addColumn<int>("disconnectCount"); + + // we don't actually need multiple disconnects + // QObject::disconnect() disconnects all matching rules + // we'd have to use QMetaObject::disconnectOne if we wanted just one + QTest::newRow("null") << 0 << 0; + QTest::newRow("connect-disconnect") << 1 << 1; + QTest::newRow("connect-disconnect-wildcard") << 1 << -1; + QTest::newRow("connect-twice") << 2 << 0; + QTest::newRow("connect-twice-disconnect") << 2 << 1; + QTest::newRow("connect-twice-disconnect-wildcard") << 2 << -1; +} + +void tst_QDBusAbstractInterface::connectDisconnect() +{ + QFETCH(int, connectCount); + QFETCH(int, disconnectCount); + + Pinger p = getPinger(); + QVERIFY2(p, "Not connected to D-Bus"); + + // connect the exitLoop slot first + // if the disconnect() below does something weird, we'll get a timeout + QTestEventLoop::instance().connect(p.data(), SIGNAL(voidSignal()), SLOT(exitLoop())); + + SignalReceiver sr; + for (int i = 0; i < connectCount; ++i) + sr.connect(p.data(), SIGNAL(voidSignal()), SLOT(receive())); + if (disconnectCount) + QObject::disconnect(p.data(), disconnectCount > 0 ? SIGNAL(voidSignal()) : 0, &sr, SLOT(receive())); - // emit the signal again: emit targetObj.voidSignal(); QTestEventLoop::instance().enterLoop(2); QVERIFY(!QTestEventLoop::instance().timeout()); - // and now it mustn't have been received - QVERIFY(s.isEmpty()); + if (disconnectCount != 0) + QCOMPARE(sr.callCount, 0); + else + QCOMPARE(sr.callCount, connectCount); +} - // cleanup: - con.interface()->unregisterService(serviceToFollow); +void tst_QDBusAbstractInterface::connectDisconnectPeer_data() +{ + connectDisconnect_data(); +} + +void tst_QDBusAbstractInterface::connectDisconnectPeer() +{ + QFETCH(int, connectCount); + QFETCH(int, disconnectCount); + + Pinger p = getPingerPeer(); + QVERIFY2(p, "Not connected to D-Bus"); + + // connect the exitLoop slot first + // if the disconnect() below does something weird, we'll get a timeout + QTestEventLoop::instance().connect(p.data(), SIGNAL(voidSignal()), SLOT(exitLoop())); + + SignalReceiver sr; + for (int i = 0; i < connectCount; ++i) + sr.connect(p.data(), SIGNAL(voidSignal()), SLOT(receive())); + if (disconnectCount) + QObject::disconnect(p.data(), disconnectCount > 0 ? SIGNAL(voidSignal()) : 0, &sr, SLOT(receive())); + + QDBusMessage req = QDBusMessage::createMethodCall(serviceName, objectPath, interfaceName, "voidSignal"); + QVERIFY(QDBusConnection::sessionBus().send(req)); + QTestEventLoop::instance().enterLoop(2); + QVERIFY(!QTestEventLoop::instance().timeout()); + + if (disconnectCount != 0) + QCOMPARE(sr.callCount, 0); + else + QCOMPARE(sr.callCount, connectCount); } void tst_QDBusAbstractInterface::createErrors_data() diff --git a/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp b/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp index c56a47bbc6..1da7f8a92a 100644 --- a/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp +++ b/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp @@ -1200,6 +1200,19 @@ void tst_QDBusConnection::registerVirtualObject() QVERIFY(!con.registerVirtualObject(path, &obj, QDBusConnection::SubPath)); QCOMPARE(con.objectRegisteredAt(path), static_cast<QObject *>(0)); } + + { + // Register object, make sure no SubPath handling object can be registered on a parent path. + // (same as above, but deeper) + QObject objectAtSubPath; + QVERIFY(con.registerObject(childChildPath, &objectAtSubPath)); + QCOMPARE(con.objectRegisteredAt(childChildPath), static_cast<QObject *>(&objectAtSubPath)); + + VirtualObject obj; + QVERIFY(!con.registerVirtualObject(path, &obj, QDBusConnection::SubPath)); + QCOMPARE(con.objectRegisteredAt(path), static_cast<QObject *>(0)); + } + QCOMPARE(con.objectRegisteredAt(path), static_cast<QObject *>(0)); QCOMPARE(con.objectRegisteredAt(childPath), static_cast<QObject *>(0)); QCOMPARE(con.objectRegisteredAt(childChildPath), static_cast<QObject *>(0)); diff --git a/tests/auto/dbus/qdbusmetaobject/tst_qdbusmetaobject.cpp b/tests/auto/dbus/qdbusmetaobject/tst_qdbusmetaobject.cpp index 7b7ad1800c..6340f0f7a6 100644 --- a/tests/auto/dbus/qdbusmetaobject/tst_qdbusmetaobject.cpp +++ b/tests/auto/dbus/qdbusmetaobject/tst_qdbusmetaobject.cpp @@ -442,7 +442,7 @@ void tst_QDBusMetaObject::types() class MethodTest1: public QObject { Q_OBJECT - + public slots: void method() { } }; @@ -452,7 +452,7 @@ const char MethodTest1_xml[] = class MethodTest2: public QObject { Q_OBJECT - + public slots: void method(int) { } }; @@ -462,7 +462,7 @@ const char MethodTest2_xml[] = class MethodTest3: public QObject { Q_OBJECT - + public slots: void method(int input0) { Q_UNUSED(input0); } }; @@ -472,7 +472,7 @@ const char MethodTest3_xml[] = class MethodTest4: public QObject { Q_OBJECT - + public slots: int method() { return 0; } }; @@ -484,7 +484,7 @@ const char MethodTest4_xml2[] = class MethodTest5: public QObject { Q_OBJECT - + public slots: int method(int input0) { return input0; } }; @@ -497,7 +497,7 @@ const char MethodTest5_xml[] = class MethodTest6: public QObject { Q_OBJECT - + public slots: int method(int input0, int input1) { Q_UNUSED(input0); return input1; } }; @@ -511,7 +511,7 @@ const char MethodTest6_xml[] = class MethodTest7: public QObject { Q_OBJECT - + public slots: int method(int input0, int input1, int &output1) { output1 = input1; return input0; } }; @@ -526,7 +526,7 @@ const char MethodTest7_xml[] = class MethodTest8: public QObject { Q_OBJECT - + public slots: int method(int input0, int input1, int &output1, int &output2) { output1 = output2 = input1; return input0; } }; @@ -542,7 +542,7 @@ const char MethodTest8_xml[] = class MethodTest9: public QObject { Q_OBJECT - + public slots: Q_NOREPLY void method(int) { } }; @@ -577,7 +577,7 @@ void tst_QDBusMetaObject::methods() class SignalTest1: public QObject { Q_OBJECT - + signals: void signal(); }; @@ -587,7 +587,7 @@ const char SignalTest1_xml[] = class SignalTest2: public QObject { Q_OBJECT - + signals: void signal(int); }; @@ -597,7 +597,7 @@ const char SignalTest2_xml[] = class SignalTest3: public QObject { Q_OBJECT - + signals: void signal(int output0); }; @@ -607,7 +607,7 @@ const char SignalTest3_xml[] = class SignalTest4: public QObject { Q_OBJECT - + signals: void signal(int output0, int); }; diff --git a/tests/auto/dbus/qdbuspendingreply/tst_qdbuspendingreply.cpp b/tests/auto/dbus/qdbuspendingreply/tst_qdbuspendingreply.cpp index 841e09c865..a45a0fefbb 100644 --- a/tests/auto/dbus/qdbuspendingreply/tst_qdbuspendingreply.cpp +++ b/tests/auto/dbus/qdbuspendingreply/tst_qdbuspendingreply.cpp @@ -572,6 +572,8 @@ void tst_QDBusPendingReply::errors() QVERIFY(rint.isError()); error = rint.error(); VERIFY_ERROR(error); + int dummyint = rint; + QCOMPARE(dummyint, int()); QDBusPendingReply<int,int> rintint(iface->asyncCall("sendError")); rintint.waitForFinished(); @@ -579,6 +581,9 @@ void tst_QDBusPendingReply::errors() QVERIFY(rintint.isError()); error = rintint.error(); VERIFY_ERROR(error); + dummyint = rintint; + QCOMPARE(dummyint, int()); + QCOMPARE(rintint.argumentAt<1>(), int()); QDBusPendingReply<QString> rstring(iface->asyncCall("sendError")); rstring.waitForFinished(); @@ -586,6 +591,8 @@ void tst_QDBusPendingReply::errors() QVERIFY(rstring.isError()); error = rstring.error(); VERIFY_ERROR(error); + QString dummystring = rstring; + QCOMPARE(dummystring, QString()); } QTEST_MAIN(tst_QDBusPendingReply) diff --git a/tests/auto/dbus/qdbusreply/tst_qdbusreply.cpp b/tests/auto/dbus/qdbusreply/tst_qdbusreply.cpp index 5e60e468a2..8b0fa92adf 100644 --- a/tests/auto/dbus/qdbusreply/tst_qdbusreply.cpp +++ b/tests/auto/dbus/qdbusreply/tst_qdbusreply.cpp @@ -97,6 +97,7 @@ private slots: void simpleTypes(); void complexTypes(); void wrongTypes(); + void error(); }; class TypesInterface: public QDBusAbstractAdaptor @@ -372,6 +373,30 @@ void tst_QDBusReply::wrongTypes() QVERIFY(!rstruct.isValid()); } +void tst_QDBusReply::error() +{ + { + // Wrong type + QDBusReply<bool> result = iface->call(QDBus::BlockWithGui, "retrieveInt"); + QVERIFY(result.error().isValid()); + } + { + // Wrong type, const version + const QDBusReply<bool> result = iface->call(QDBus::BlockWithGui, "retrieveInt"); + QVERIFY(result.error().isValid()); + } + { + // Ok type + QDBusReply<void> result = iface->call(QDBus::BlockWithGui, "retrieveInt"); + QVERIFY(!result.error().isValid()); + } + { + // Ok type, const version + const QDBusReply<void> result = iface->call(QDBus::BlockWithGui, "retrieveInt"); + QVERIFY(!result.error().isValid()); + } +} + QTEST_MAIN(tst_QDBusReply) #include "tst_qdbusreply.moc" diff --git a/tests/auto/dbus/qdbusxmlparser/tst_qdbusxmlparser.cpp b/tests/auto/dbus/qdbusxmlparser/tst_qdbusxmlparser.cpp index 08b8ce3db3..8c94f87fd6 100644 --- a/tests/auto/dbus/qdbusxmlparser/tst_qdbusxmlparser.cpp +++ b/tests/auto/dbus/qdbusxmlparser/tst_qdbusxmlparser.cpp @@ -96,7 +96,7 @@ void tst_QDBusXmlParser::parsing_data() QTest::newRow("null") << QString() << 0 << 0 << 0 << introspection; QTest::newRow("empty") << QString("") << 0 << 0 << 0 << introspection; - + QTest::newRow("junk") << "<junk/>" << 0 << 0 << 0 << introspection; QTest::newRow("interface-inside-junk") << "<junk><interface name=\"iface.iface1\" /></junk>" << 0 << 0 << 0 << introspection; @@ -429,7 +429,7 @@ void tst_QDBusXmlParser::signals__data() QTest::newRow("one-out-no-direction") << "<signal name=\"Signal\">" "<arg type=\"s\"/>" - "</signal>" << map; + "</signal>" << map; // two args with name signal.outputArgs << arg("i", "bar"); |