diff options
Diffstat (limited to 'tests/auto/tools/qdbusxml2cpp/tst_qdbusxml2cpp.cpp')
-rw-r--r-- | tests/auto/tools/qdbusxml2cpp/tst_qdbusxml2cpp.cpp | 87 |
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()}; |