summaryrefslogtreecommitdiffstats
path: root/tests/auto/tools
diff options
context:
space:
mode:
authorMate Barany <mate.barany@qt.io>2022-07-13 16:39:08 +0200
committerMate Barany <mate.barany@qt.io>2022-09-06 11:44:22 +0200
commitaa99bf532da51fc024c70e989e54b014e4cec199 (patch)
treec86276720e4a8bde0bd5a98684cb1131bcc5c051 /tests/auto/tools
parent214953fad6c166cbaaab28f5f3ceb777e762f278 (diff)
qdbusxml2cpp: modify the behavior of -m/--moc option
qdbusxml2cpp has a -m/--moc option. Change and modify the behavior such that -p foo -m includes moc_foo.cpp in the generated .cpp -p :foo.cpp includes moc_foo.cpp in the generated .cpp -p foo.h:foo.cpp includes moc_foo.cpp in the generated .cpp Change the Qt6DbusMacros.cmake file accordingly. [ChangeLog][qdbusxml2cpp] The -m/--moc option now generates idiomatic moc file names (moc_base.cpp for headers, base.moc for implementation files)(was: always base.moc). Build systems using workarounds for the non-idiomatic naming of moc files used by qdbusxml2cpp in the past can now drop these workarounds for Qt versions >= 6.5. Fixes: QTBUG-103313 Change-Id: I754b1b276f130cb8645166470e1b457a676590f7 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Alexey Edelev <alexey.edelev@qt.io> Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Diffstat (limited to 'tests/auto/tools')
-rw-r--r--tests/auto/tools/qdbusxml2cpp/tst_qdbusxml2cpp.cpp115
1 files changed, 88 insertions, 27 deletions
diff --git a/tests/auto/tools/qdbusxml2cpp/tst_qdbusxml2cpp.cpp b/tests/auto/tools/qdbusxml2cpp/tst_qdbusxml2cpp.cpp
index 918fa1d711..0d30d4856e 100644
--- a/tests/auto/tools/qdbusxml2cpp/tst_qdbusxml2cpp.cpp
+++ b/tests/auto/tools/qdbusxml2cpp/tst_qdbusxml2cpp.cpp
@@ -23,6 +23,8 @@ private slots:
void includeStyle();
void missingAnnotation_data();
void missingAnnotation();
+ void includeMoc_data();
+ void includeMoc();
};
struct BasicTypeList {
@@ -59,20 +61,21 @@ static QString stripHeader(QString output)
return output.remove(header);
}
-static void runTool(QProcess &process, const QByteArray &data)
+static void runTool(QProcess &process, const QByteArray &data,
+ const QStringList &flags)
{
// test both interface and adaptor generation
QFETCH_GLOBAL(QString, commandLineArg);
// Run the tool
const QString binpath = QLibraryInfo::path(QLibraryInfo::BinariesPath);
- QStringList arguments = { commandLineArg, "-", "-N" };
+ QStringList arguments = { commandLineArg };
+ arguments += flags;
process.setArguments(arguments);
process.setProgram(binpath + QLatin1String("/qdbusxml2cpp"));
process.start(QIODevice::Text | QIODevice::ReadWrite);
QVERIFY2(process.waitForStarted(), qPrintable(process.errorString()));
- // feed it our XML data
static const char xmlHeader[] =
"<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n"
DBUS_INTROSPECT_1_0_XML_DOCTYPE_DECL_NODE // \n is included
@@ -97,6 +100,33 @@ static void runTool(QProcess &process, const QByteArray &data)
QCOMPARE(process.exitStatus(), QProcess::NormalExit);
}
+static void checkOneFile(const QString &fileName, const QByteArray &expected)
+{
+ QFile file(fileName);
+ QVERIFY(file.exists());
+ const auto guard = QScopeGuard([&](){ QFile::remove(fileName); });
+
+ QVERIFY(file.open(QFile::Text | QFile::ReadOnly));
+ QByteArray text = file.readAll();
+ QVERIFY(text.contains(expected));
+}
+
+static void checkTwoFiles(const QString &headerName, const QString &sourceName, const QByteArray &expected)
+{
+ QFile headerFile(headerName);
+ QFile sourceFile(sourceName);
+
+ QVERIFY(headerFile.exists());
+ const auto headerGuard = QScopeGuard([&](){ QFile::remove(headerName); });
+
+ QVERIFY(sourceFile.exists());
+ const auto sourceGuard = QScopeGuard([&](){ QFile::remove(sourceName); });
+
+ QVERIFY(sourceFile.open(QFile::Text | QFile::ReadOnly));
+ QByteArray text = sourceFile.readAll();
+ QVERIFY(text.contains(expected));
+}
+
void tst_qdbusxml2cpp::initTestCase_data()
{
QTest::addColumn<int>("outputMode");
@@ -242,7 +272,8 @@ void tst_qdbusxml2cpp::process()
QFETCH_GLOBAL(int, outputMode);
QProcess process;
- runTool(process, xmlSnippet.toLatin1());
+ QStringList flags = {"-", "-N"};
+ runTool(process, xmlSnippet.toLatin1(), flags);
if (QTest::currentTestFailed()) return;
QByteArray errOutput = process.readAllStandardError();
@@ -271,34 +302,15 @@ void tst_qdbusxml2cpp::includeStyle()
{
QFETCH(bool, isGlobal);
QFETCH(QByteArray, expected);
- QFETCH_GLOBAL(QString, commandLineArg);
- // feed it our XML data
- static const char xml[] =
- "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n"
- DBUS_INTROSPECT_1_0_XML_DOCTYPE_DECL_NODE // \n is included
- "<node>\n"
- " <interface name=\"local.name.is.not.important\">\n"
- " </interface>\n"
- "</node>\n";
-
- // Run the tool
- const QString binpath = QLibraryInfo::path(QLibraryInfo::BinariesPath);
- const QString command = binpath + QLatin1String("/qdbusxml2cpp");
QProcess process;
- process.start(command, QStringList() << commandLineArg << "-" << "-N" << (isGlobal ? "-I" : "-i") << "test.hpp");
- QVERIFY2(process.waitForStarted(), qPrintable(process.errorString()));
+ QStringList flags = {"-", "-N", (isGlobal ? "-I" : "-i"), "test.hpp"};
- process.write(xml, int(sizeof xml) - 1);
- while (process.bytesToWrite())
- QVERIFY2(process.waitForBytesWritten(), qPrintable(process.errorString()));
-
- process.closeWriteChannel();
- QVERIFY2(process.waitForFinished(), qPrintable(process.errorString()));
+ runTool(process,QByteArray{},flags);
+ QCOMPARE(process.exitCode(), 0);
QByteArray errOutput = process.readAllStandardError();
QVERIFY2(errOutput.isEmpty(), errOutput);
- QCOMPARE(process.exitCode(), 0);
QByteArray fullOutput = process.readAll();
QVERIFY(!fullOutput.isEmpty());
@@ -342,7 +354,8 @@ void tst_qdbusxml2cpp::missingAnnotation()
QString type = "(ii)";
QProcess process;
- runTool(process, xmlSnippet.arg(type).toLatin1());
+ QStringList flags = {"-", "-N"};
+ runTool(process, xmlSnippet.arg(type).toLatin1(),flags);
if (QTest::currentTestFailed()) return;
// it must have failed
@@ -358,6 +371,54 @@ You should add <annotation name="%2" value="<type>"/> to the XML description for
QCOMPARE(errOutput, expected);
}
+void tst_qdbusxml2cpp::includeMoc_data()
+{
+ QTest::addColumn<QString>("filenames");
+ QTest::addColumn<QByteArray>("expected");
+ QTest::addColumn<QByteArray>("warning");
+
+ QTest::newRow("combined-h") << "foo.h" << QByteArray("#include \"foo.moc\"") << QByteArray("");
+ QTest::newRow("combined-cpp") << "foo.cpp" << QByteArray("#include \"foo.moc\"") << QByteArray("");
+ QTest::newRow("combined-cc") << "foo.cc" << QByteArray("#include \"foo.moc\"") << QByteArray("");
+ QTest::newRow("without extension") << "foo" << QByteArray("#include \"moc_foo.cpp\"") << QByteArray("");
+ 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("");
+}
+
+void tst_qdbusxml2cpp::includeMoc()
+{
+ QFETCH(QString, filenames);
+ QFETCH(QByteArray, expected);
+ QFETCH(QByteArray, warning);
+
+ QProcess process;
+ QStringList flags = {filenames, "--moc"};
+ runTool(process,QByteArray{},flags);
+ QByteArray errOutput = process.readAllStandardError();
+ QVERIFY(errOutput.startsWith(warning));
+ QCOMPARE(process.exitCode(), 0);
+
+ QStringList parts = filenames.split(u':');
+ QFileInfo first{parts.first()};
+
+ if ((parts.size() == 1) && (!first.suffix().isEmpty())) {
+ checkOneFile(parts.first(), expected);
+ } else if ((parts.size() == 1) && (first.suffix().isEmpty())) {
+ QString headerName{parts.first()};
+ headerName += ".h";
+ QString sourceName{parts.first()};
+ sourceName += ".cpp";
+
+ checkTwoFiles(headerName, sourceName, expected);
+ } else if ((parts.size() == 2) && (parts.first().isEmpty())) {
+ checkOneFile(parts.last(), expected);
+ }
+ else if ((parts.size() == 2) && !parts.first().isEmpty() && !parts.last().isEmpty()) {
+ checkTwoFiles(parts.first(), parts.last(), expected);
+ }
+}
+
QTEST_MAIN(tst_qdbusxml2cpp)
#include "tst_qdbusxml2cpp.moc"