summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIevgenii Meshcheriakov <ievgenii.meshcheriakov@qt.io>2023-11-27 14:26:05 +0100
committerIevgenii Meshcheriakov <ievgenii.meshcheriakov@qt.io>2023-11-28 13:37:56 +0100
commit86cfafcb5ab66509ae7a3d422862611136ab2502 (patch)
tree2180c7e8556c5806957fc1a4627ed0ab7333d553
parentb2d24044c2b001851b5aa88d92a0d5de57f25210 (diff)
qdbuscpp2xml: Register QtDBus metatypes
Explicitly register QtDBus-specific metatypes before attempting to generate output. This fixes a bug when types like QDBusObjectPath are sometimes ignored by this tool. Export QDBusMetaTypeId::init() for that reason. Add a regression test to tst_qdbuscpp2xml. Fixes: QTBUG-34550 Change-Id: I16faa79a794d09a26bad45e18730379681a20b50 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
-rw-r--r--src/dbus/qdbusmetatype_p.h2
-rw-r--r--src/tools/qdbuscpp2xml/qdbuscpp2xml.cpp3
-rw-r--r--tests/auto/tools/qdbuscpp2xml/CMakeLists.txt2
-rw-r--r--tests/auto/tools/qdbuscpp2xml/test2.h24
-rw-r--r--tests/auto/tools/qdbuscpp2xml/tst_qdbuscpp2xml.cpp21
5 files changed, 42 insertions, 10 deletions
diff --git a/src/dbus/qdbusmetatype_p.h b/src/dbus/qdbusmetatype_p.h
index 447d5f4800..86a59f587d 100644
--- a/src/dbus/qdbusmetatype_p.h
+++ b/src/dbus/qdbusmetatype_p.h
@@ -37,7 +37,7 @@ QMetaType signature(); // QDBusSignature
QMetaType error(); // QDBusError
QMetaType unixfd(); // QDBusUnixFileDescriptor
-void init();
+Q_DBUS_EXPORT void init();
}; // namespace QDBusMetaTypeId
inline QMetaType QDBusMetaTypeId::message()
diff --git a/src/tools/qdbuscpp2xml/qdbuscpp2xml.cpp b/src/tools/qdbuscpp2xml/qdbuscpp2xml.cpp
index 7182e923f3..ac0c851cd6 100644
--- a/src/tools/qdbuscpp2xml/qdbuscpp2xml.cpp
+++ b/src/tools/qdbuscpp2xml/qdbuscpp2xml.cpp
@@ -15,6 +15,7 @@
#include <qdbusconnection.h> // for the Export* flags
#include <private/qdbusconnection_p.h> // for the qDBusCheckAsyncTag
+#include <private/qdbusmetatype_p.h> // for QDBusMetaTypeId::init()
using namespace Qt::StringLiterals;
@@ -431,6 +432,8 @@ int main(int argc, char **argv)
args.append(QString::fromLocal8Bit(argv[n]));
parseCmdLine(args);
+ QDBusMetaTypeId::init();
+
QList<ClassDef> classes;
if (args.isEmpty())
diff --git a/tests/auto/tools/qdbuscpp2xml/CMakeLists.txt b/tests/auto/tools/qdbuscpp2xml/CMakeLists.txt
index ef35bcd34d..9dea3f3c4d 100644
--- a/tests/auto/tools/qdbuscpp2xml/CMakeLists.txt
+++ b/tests/auto/tools/qdbuscpp2xml/CMakeLists.txt
@@ -14,6 +14,7 @@ endif()
qt_internal_add_test(tst_qdbuscpp2xml
SOURCES
test1.h
+ test2.h
tst_qdbuscpp2xml.cpp
LIBRARIES
Qt::DBusPrivate
@@ -22,6 +23,7 @@ qt_internal_add_test(tst_qdbuscpp2xml
# Resources:
set(qdbuscpp2xml_resource_files
"test1.h"
+ "test2.h"
)
qt_internal_add_resource(tst_qdbuscpp2xml "qdbuscpp2xml"
diff --git a/tests/auto/tools/qdbuscpp2xml/test2.h b/tests/auto/tools/qdbuscpp2xml/test2.h
new file mode 100644
index 0000000000..7b2bf9fffc
--- /dev/null
+++ b/tests/auto/tools/qdbuscpp2xml/test2.h
@@ -0,0 +1,24 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+#ifndef TEST2_H
+#define TEST2_H
+
+#include <QObject>
+#include <QtDBus/QtDBus>
+
+// Regression test for QTBUG-34550
+class Test2 : public QObject
+{
+ Q_OBJECT
+ Q_CLASSINFO("D-Bus Interface", "net.company.object")
+ Q_PROPERTY(QDBusObjectPath objectProperty READ objectProperty)
+ Q_PROPERTY(QList<QDBusObjectPath> objectPropertyList READ objectPropertyList)
+public:
+ Test2(QObject *parent = nullptr) : QObject(parent) { }
+
+ QDBusObjectPath objectProperty() { return {}; }
+
+ QList<QDBusObjectPath> objectPropertyList() { return {}; }
+};
+
+#endif // TEST2_H
diff --git a/tests/auto/tools/qdbuscpp2xml/tst_qdbuscpp2xml.cpp b/tests/auto/tools/qdbuscpp2xml/tst_qdbuscpp2xml.cpp
index 973c3587d2..1615b363fe 100644
--- a/tests/auto/tools/qdbuscpp2xml/tst_qdbuscpp2xml.cpp
+++ b/tests/auto/tools/qdbuscpp2xml/tst_qdbuscpp2xml.cpp
@@ -9,7 +9,7 @@
#include <QtDBus/private/dbus_minimal_p.h>
#include "test1.h"
-
+#include "test2.h"
// in qdbusxmlgenerator.cpp
QT_BEGIN_NAMESPACE
@@ -47,6 +47,7 @@ private:
void tst_qdbuscpp2xml::initTestCase()
{
m_tests.insert("test1", new Test1);
+ m_tests.insert("test2", new Test2);
}
void tst_qdbuscpp2xml::cleanupTestCase()
@@ -61,14 +62,16 @@ void tst_qdbuscpp2xml::qdbuscpp2xml_data()
QBitArray doneFlags(int(QDBusConnection::ExportAllContents) + 1);
for (int flag = 0x10; flag < QDBusConnection::ExportScriptableContents; flag += 0x10) {
- QTest::newRow("xmlgenerator-" + QByteArray::number(flag)) << "test1" << flag;
- doneFlags.setBit(flag);
- for (int mask = QDBusConnection::ExportAllSlots; mask <= QDBusConnection::ExportAllContents; mask += 0x110) {
- int flags = flag | mask;
- if (doneFlags.testBit(flags))
- continue;
- QTest::newRow("xmlgenerator-" + QByteArray::number(flags)) << "test1" << flags;
- doneFlags.setBit(flags);
+ for (const auto &testFile : m_tests.keys()) {
+ QTest::newRow("xmlgenerator-" + QByteArray::number(flag) + "-" + qUtf8Printable(testFile)) << testFile << flag;
+ doneFlags.setBit(flag);
+ for (int mask = QDBusConnection::ExportAllSlots; mask <= QDBusConnection::ExportAllContents; mask += 0x110) {
+ int flags = flag | mask;
+ if (doneFlags.testBit(flags))
+ continue;
+ QTest::newRow("xmlgenerator-" + QByteArray::number(flags) + "-" + qUtf8Printable(testFile)) << testFile << flags;
+ doneFlags.setBit(flags);
+ }
}
}
}