summaryrefslogtreecommitdiffstats
path: root/tests/auto/dbus
diff options
context:
space:
mode:
authorIevgenii Meshcheriakov <ievgenii.meshcheriakov@qt.io>2023-05-23 15:03:09 +0200
committerIevgenii Meshcheriakov <ievgenii.meshcheriakov@qt.io>2023-05-25 11:30:40 +0200
commitc9684054553f6dd8c4ff478653d20cd7a4adba9e (patch)
treec5a6f04b9d2541a8315700a895d57f4b379ccc0a /tests/auto/dbus
parent69b69a7bccbb153d687b8cf228e3342fa305b93f (diff)
QDBusAbstractAdaptor: Send signals using correct interface
When forwarding a signal, associate this signal with its enclosing metaobject instead of its sender's metaobject. Those two may be different if the signal is declared in a base class. Add a regression test into tst_qdbusconnection. Fixes: QTBUG-33142 Pick-to: 6.5 Change-Id: I532ab3bb6c0671a480568f46d63fceff0c82c097 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Diffstat (limited to 'tests/auto/dbus')
-rw-r--r--tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp28
-rw-r--r--tests/auto/dbus/qdbusconnection/tst_qdbusconnection.h8
2 files changed, 36 insertions, 0 deletions
diff --git a/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp b/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp
index 42e898eda7..dc39cadc95 100644
--- a/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp
+++ b/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp
@@ -1417,6 +1417,34 @@ void tst_QDBusConnection::emptyServerAddress()
QDBusServer server({}, nullptr);
}
+void tst_QDBusConnection::parentClassSignal()
+{
+ if (!QCoreApplication::instance())
+ QSKIP("Test requires a QCoreApplication");
+
+ const QString path = "/path";
+
+ QDBusConnection con = QDBusConnection::sessionBus();
+ QVERIFY(con.isConnected());
+
+ // register one object at root:
+ MyObject obj;
+ QVERIFY(con.registerObject(path, &obj, QDBusConnection::ExportAllContents));
+ QCOMPARE(con.objectRegisteredAt(path), static_cast<QObject *>(&obj));
+
+ SignalReceiver recv;
+ QVERIFY(con.connect(con.baseService(), path, "local.BaseObject", "baseObjectSignal", &recv,
+ SLOT(oneSlot())));
+ QVERIFY(con.connect(con.baseService(), path, "local.MyObject", "myObjectSignal", &recv,
+ SLOT(oneSlot())));
+
+ emit obj.baseObjectSignal();
+ QTRY_COMPARE(recv.signalsReceived, 1);
+
+ emit obj.myObjectSignal();
+ QTRY_COMPARE(recv.signalsReceived, 2);
+}
+
QString MyObject::path;
QString MyObjectWithoutInterface::path;
QString MyObjectWithoutInterface::interface;
diff --git a/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.h b/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.h
index 0aec2aa0bd..46e53dad9b 100644
--- a/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.h
+++ b/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.h
@@ -21,11 +21,14 @@ public:
BaseObject(QObject *parent = nullptr) : QObject(parent) { }
public slots:
void anotherMethod() { }
+signals:
+ void baseObjectSignal();
};
class MyObject: public BaseObject
{
Q_OBJECT
+ Q_CLASSINFO("D-Bus Interface", "local.MyObject")
public slots:
void method(const QDBusMessage &msg);
@@ -33,6 +36,9 @@ public:
static QString path;
int callCount;
MyObject(QObject *parent = nullptr) : BaseObject(parent), callCount(0) {}
+
+signals:
+ void myObjectSignal();
};
class MyObjectWithoutInterface: public QObject
@@ -117,6 +123,8 @@ private slots:
void emptyServerAddress();
+ void parentClassSignal();
+
public:
QString serviceName() const { return "org.qtproject.Qt.Autotests.QDBusConnection"; }
bool callMethod(const QDBusConnection &conn, const QString &path);