summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib/tools
diff options
context:
space:
mode:
authorDavid Faure <david.faure@kdab.com>2020-04-30 20:44:11 +0200
committerDavid Faure <david.faure@kdab.com>2020-05-01 10:53:55 +0200
commitf0ea852d4dd6b3139869a952ee92e74cd367866d (patch)
treefb74d518ad7c241597a6345215a3419ea71ad757 /tests/auto/corelib/tools
parenta426326e99a76a92c8d0c870e19c67311a434483 (diff)
QCommandLineParser: Wrap very long option names to leave room for descriptions
Fixes: QTBUG-79926 Change-Id: I3302e0ed5b58949a35ccb001c71b22a6400a6c81 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'tests/auto/corelib/tools')
-rw-r--r--tests/auto/corelib/tools/qcommandlineparser/testhelper/qcommandlineparser_test_helper.cpp7
-rw-r--r--tests/auto/corelib/tools/qcommandlineparser/tst_qcommandlineparser.cpp33
2 files changed, 40 insertions, 0 deletions
diff --git a/tests/auto/corelib/tools/qcommandlineparser/testhelper/qcommandlineparser_test_helper.cpp b/tests/auto/corelib/tools/qcommandlineparser/testhelper/qcommandlineparser_test_helper.cpp
index 513c811788..88dfdeccab 100644
--- a/tests/auto/corelib/tools/qcommandlineparser/testhelper/qcommandlineparser_test_helper.cpp
+++ b/tests/auto/corelib/tools/qcommandlineparser/testhelper/qcommandlineparser_test_helper.cpp
@@ -97,6 +97,13 @@ int main(int argc, char *argv[])
parser.process(app);
const QString size = parser.value("size");
printf("Resizing %s to %s and saving to %s\n", qPrintable(parser.value("load")), qPrintable(size), qPrintable(parser.value("o")));
+ } else if (command == "long") {
+ // A very long option (QTBUG-79926)
+ QCommandLineOption longOption(QStringList{QStringLiteral("looooooooooooong-option"), QStringLiteral("looooong-opt-alias")});
+ longOption.setDescription(QStringLiteral("Short description"));
+ longOption.setValueName(QStringLiteral("looooooooooooong-value-name"));
+ parser.addOption(longOption);
+ parser.process(app);
} else {
// Call process again, to handle unknown options this time.
parser.process(app);
diff --git a/tests/auto/corelib/tools/qcommandlineparser/tst_qcommandlineparser.cpp b/tests/auto/corelib/tools/qcommandlineparser/tst_qcommandlineparser.cpp
index 1e87c76d2f..493d8d4982 100644
--- a/tests/auto/corelib/tools/qcommandlineparser/tst_qcommandlineparser.cpp
+++ b/tests/auto/corelib/tools/qcommandlineparser/tst_qcommandlineparser.cpp
@@ -78,6 +78,7 @@ private slots:
void testUnknownOption();
void testHelpAll_data();
void testHelpAll();
+ void testVeryLongOptionNames();
};
static char *empty_argv[] = { 0 };
@@ -737,6 +738,38 @@ void tst_QCommandLineParser::testHelpAll()
#endif // QT_CONFIG(process)
}
+void tst_QCommandLineParser::testVeryLongOptionNames()
+{
+#if !QT_CONFIG(process)
+ QSKIP("This test requires QProcess support");
+#else
+#if defined(Q_OS_ANDROID) && !defined(Q_OS_ANDROID_EMBEDDED)
+ QSKIP("Deploying executable applications to file system on Android not supported.");
+#endif
+
+ QCoreApplication app(empty_argc, empty_argv);
+ QProcess process;
+ process.start("testhelper/qcommandlineparser_test_helper", QStringList() << "0" << "long" << "--help");
+ QVERIFY(process.waitForFinished(5000));
+ QCOMPARE(process.exitStatus(), QProcess::NormalExit);
+ QString output = process.readAll();
+#ifdef Q_OS_WIN
+ output.replace(QStringLiteral("\r\n"), QStringLiteral("\n"));
+#endif
+ const QStringList lines = output.split('\n');
+ const int last = lines.count() - 1;
+ // Let's not compare everything, just the final parts.
+ QCOMPARE(lines.at(last - 7), " cdefghijklmnopqrstuvwxyz");
+ QCOMPARE(lines.at(last - 6), " --looooooooooooong-option, --looooong-opt-alias <l Short description");
+ QCOMPARE(lines.at(last - 5), " ooooooooooooong-value-name>");
+ QCOMPARE(lines.at(last - 4), "");
+ QCOMPARE(lines.at(last - 3), "Arguments:");
+ QCOMPARE(lines.at(last - 2), " parsingMode The parsing mode to test.");
+ QCOMPARE(lines.at(last - 1), " command The command to execute.");
+
+#endif // QT_CONFIG(process)
+}
+
QTEST_APPLESS_MAIN(tst_QCommandLineParser)
#include "tst_qcommandlineparser.moc"