summaryrefslogtreecommitdiffstats
path: root/tests/auto/tools/qdbusxml2cpp/tst_qdbusxml2cpp.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/tools/qdbusxml2cpp/tst_qdbusxml2cpp.cpp')
-rw-r--r--tests/auto/tools/qdbusxml2cpp/tst_qdbusxml2cpp.cpp87
1 files changed, 75 insertions, 12 deletions
diff --git a/tests/auto/tools/qdbusxml2cpp/tst_qdbusxml2cpp.cpp b/tests/auto/tools/qdbusxml2cpp/tst_qdbusxml2cpp.cpp
index 0d30d4856e..c51a0909f8 100644
--- a/tests/auto/tools/qdbusxml2cpp/tst_qdbusxml2cpp.cpp
+++ b/tests/auto/tools/qdbusxml2cpp/tst_qdbusxml2cpp.cpp
@@ -1,5 +1,5 @@
// Copyright (C) 2016 Intel Corporation.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QLibraryInfo>
@@ -234,11 +234,52 @@ void tst_qdbusxml2cpp::process_data()
"<arg type=\"s\" direction=\"out\"/>"
"<arg type=\"s\" direction=\"out\"/>"
"</method>"
- << QRegularExpression("Q_SLOTS:.*QDBusPendingReply<QString, QString> Method\\(const QString &\\w*, const QString &",
+ << QRegularExpression("Q_SLOTS:.*QDBusPendingReply<QString, QString> Method\\(const QString &\\w*, const QString &\\w*\\)"
+ ".*inline QDBusReply<QString> Method\\(const QString &\\w*, const QString &\\w*, QString &\\w*\\)",
QRegularExpression::DotMatchesEverythingOption)
<< QRegularExpression("Q_SLOTS:.*QString Method\\(const QString &\\w*, const QString &\\w*, QString &",
QRegularExpression::DotMatchesEverythingOption);
+ QTest::newRow("method-deprecated-0out")
+ << "<method name=\"Method\">"
+ "<annotation name=\"org.freedesktop.DBus.Deprecated\" value=\"true\"/>"
+ "</method>"
+ << QRegularExpression("Q_SLOTS:.*Q_DECL_DEPRECATED inline QDBusPendingReply<> Method\\(\\)",
+ QRegularExpression::DotMatchesEverythingOption)
+ << QRegularExpression("Q_SLOTS:.*\n\\s*void Method\\(\\)", // no Q_DECL_DEPRECATED
+ QRegularExpression::DotMatchesEverythingOption);
+
+ QTest::newRow("method-deprecated-2out")
+ << "<method name=\"Method\">"
+ "<annotation name=\"org.freedesktop.DBus.Deprecated\" value=\"true\"/>"
+ "<arg type=\"s\" direction=\"out\"/>"
+ "<arg type=\"s\" direction=\"out\"/>"
+ "</method>"
+ << QRegularExpression("Q_SLOTS:.*Q_DECL_DEPRECATED inline QDBusPendingReply<QString, QString> Method\\(\\)"
+ ".*Q_DECL_DEPRECATED inline QDBusReply<QString> Method\\(QString &\\w*\\)",
+ QRegularExpression::DotMatchesEverythingOption)
+ << QRegularExpression("Q_SLOTS:.*\n\\s*QString Method\\(QString &", // no Q_DECL_DEPRECATED
+ QRegularExpression::DotMatchesEverythingOption);
+
+ QTest::newRow("method-noreply")
+ << "<method name=\"Method\">"
+ "<annotation name=\"org.freedesktop.DBus.Method.NoReply\" value=\"true\"/>"
+ "</method>"
+ << QRegularExpression("Q_SLOTS:.*Q_NOREPLY inline void Method\\(\\).*\\bQDBus::NoBlock\\b",
+ QRegularExpression::DotMatchesEverythingOption)
+ << QRegularExpression("Q_SLOTS:.*Q_NOREPLY void Method\\(",
+ QRegularExpression::DotMatchesEverythingOption);
+
+ QTest::newRow("method-deprecated-noreply")
+ << "<method name=\"Method\">"
+ "<annotation name=\"org.freedesktop.DBus.Method.NoReply\" value=\"true\"/>"
+ "<annotation name=\"org.freedesktop.DBus.Deprecated\" value=\"true\"/>"
+ "</method>"
+ << QRegularExpression("Q_SLOTS:.*Q_DECL_DEPRECATED Q_NOREPLY inline void Method\\(\\).*\\bQDBus::NoBlock\\b",
+ QRegularExpression::DotMatchesEverythingOption)
+ << QRegularExpression("Q_SLOTS:.*Q_NOREPLY void Method\\(",
+ QRegularExpression::DotMatchesEverythingOption);
+
// -- signals --
for (int i = 0; i < basicTypeCount; ++i) {
QRegularExpression rx(QString("Q_SIGNALS:.*\\bvoid Signal\\((const )?%1\\b")
@@ -260,6 +301,15 @@ void tst_qdbusxml2cpp::process_data()
<annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="QVariantMap"/>"
</signal>)"
<< rx << rx;
+
+ QTest::newRow("signal-deprecated")
+ << R"(<signal name="Signal">
+ <annotation name="org.freedesktop.DBus.Deprecated" value="true"/>
+ </signal>)"
+ << QRegularExpression(R"(Q_SIGNALS:.*\bQ_DECL_DEPRECATED void Signal\(\))",
+ QRegularExpression::DotMatchesEverythingOption)
+ << QRegularExpression(R"(Q_SIGNALS:.*\n\s*void Signal\(\))", // no Q_DECL_DEPRECATED
+ QRegularExpression::DotMatchesEverythingOption);
}
void tst_qdbusxml2cpp::process()
@@ -321,36 +371,43 @@ void tst_qdbusxml2cpp::missingAnnotation_data()
{
QTest::addColumn<QString>("xmlSnippet");
QTest::addColumn<QString>("annotationName");
+ QTest::addColumn<QString>("location");
QTest::newRow("property")
<< R"(<property type="%1" name="name" access="readwrite"/>)"
- << "org.qtproject.QtDBus.QtTypeName";
+ << "org.qtproject.QtDBus.QtTypeName"
+ << "7:2";
QTest::newRow("method-in")
<< R"(<method name="Method">
<arg type="%1" name="name" direction="in"/>
</method>)"
- << "org.qtproject.QtDBus.QtTypeName.In0";
+ << "org.qtproject.QtDBus.QtTypeName.In0"
+ << "8:22";
QTest::newRow("method-out")
<< R"(<method name="Method">
<arg type="%1" name="name" direction="out"/>
</method>)"
- << "org.qtproject.QtDBus.QtTypeName.Out0";
+ << "org.qtproject.QtDBus.QtTypeName.Out0"
+ << "8:22";
QTest::newRow("signal")
<< R"(<signal name="Signal">
<arg type="%1" name="name"/>
</signal>)"
- << "org.qtproject.QtDBus.QtTypeName.Out0";
+ << "org.qtproject.QtDBus.QtTypeName.Out0"
+ << "8:22";
QTest::newRow("signal-out")
<< R"(<signal name="Signal">
<arg type="%1" name="name" direction="out"/>
</signal>)"
- << "org.qtproject.QtDBus.QtTypeName.Out0";
+ << "org.qtproject.QtDBus.QtTypeName.Out0"
+ << "8:22";
}
void tst_qdbusxml2cpp::missingAnnotation()
{
QFETCH(QString, xmlSnippet);
QFETCH(QString, annotationName);
+ QFETCH(QString, location);
QString type = "(ii)";
QProcess process;
@@ -365,9 +422,9 @@ void tst_qdbusxml2cpp::missingAnnotation()
QVERIFY(!errOutput.isEmpty());
// check it did suggest the right annotation
- QString expected = R"(qdbusxml2cpp: Got unknown type `%1' processing ''
-You should add <annotation name="%2" value="<type>"/> to the XML description for 'name')";
- expected = expected.arg(type, annotationName);
+ QString expected = R"(<standard input>:%3: error: unknown type `%1'
+<standard input>:%3: note: you should add <annotation name="%2" value="<type>"/>)";
+ expected = expected.arg(type, annotationName, location);
QCOMPARE(errOutput, expected);
}
@@ -384,6 +441,10 @@ void tst_qdbusxml2cpp::includeMoc_data()
QTest::newRow("cpp-only") << ":foo.cpp" << QByteArray("#include \"moc_foo.cpp\"")
<< QByteArray("warning: no header name is provided, assuming it to be \"foo.h\"");
QTest::newRow("header-and-cpp") << "foo_h.h:foo.cpp" << QByteArray("#include \"moc_foo_h.cpp\"") << QByteArray("");
+
+ QTest::newRow("combined-cpp with dots") << "foo.bar.cpp" << QByteArray("#include \"foo.bar.moc\"") << QByteArray("");
+ QTest::newRow("without extension with dots") << "foo.bar" << QByteArray("#include \"moc_foo.bar.cpp\"") << QByteArray("");
+ QTest::newRow("header-and-cpp with dots") << "foo.bar_h.h:foo.bar.cpp" << QByteArray("#include \"moc_foo.bar_h.cpp\"") << QByteArray("");
}
void tst_qdbusxml2cpp::includeMoc()
@@ -402,9 +463,11 @@ void tst_qdbusxml2cpp::includeMoc()
QStringList parts = filenames.split(u':');
QFileInfo first{parts.first()};
- if ((parts.size() == 1) && (!first.suffix().isEmpty())) {
+ const bool firstHasSuffix = QStringList({"h", "cpp", "cc"}).contains(first.suffix());
+
+ if ((parts.size() == 1) && firstHasSuffix) {
checkOneFile(parts.first(), expected);
- } else if ((parts.size() == 1) && (first.suffix().isEmpty())) {
+ } else if ((parts.size() == 1) && (!firstHasSuffix)) {
QString headerName{parts.first()};
headerName += ".h";
QString sourceName{parts.first()};