summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib/tools/qcommandlineparser/tst_qcommandlineparser.cpp
diff options
context:
space:
mode:
authorDavid Faure <david.faure@kdab.com>2013-09-07 18:17:12 -0400
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-09-10 19:05:19 +0200
commit4ff6951550cb6e39c3b31895c3af57037e90c9ac (patch)
tree5161e3cd21c69474409575acc2356faf3c59235b /tests/auto/corelib/tools/qcommandlineparser/tst_qcommandlineparser.cpp
parentad46d5b82b1bc4ce931b62907cd41356de294f5a (diff)
Fix escape handling in qWinCmdArgs
-DKEY="VALUE" was correctly turned into -DKEY=VALUE, but -DKEY=\"VALUE\" was turned into -DKEY=\VALUE" due to the erroneous check ('quote' is still 0 when encountering the first '\' character). This fixes QCoreApplication::arguments() as used by moc.exe after porting to QCommandLineParser. Further investigation shows that double-quotes and single-quotes are handled differently. The tests now ensure that this parser respects what Windows sends in argv, and in particular that QTBUG-15379 doesn't regress, as well as fixing QTBUG-30628. Task-number: QTBUG-15379, QTBUG-30628 Change-Id: I95062c9a6022632b321b2f6fae3089f07be7b5c6 Reviewed-by: Richard J. Moore <rich@kde.org> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'tests/auto/corelib/tools/qcommandlineparser/tst_qcommandlineparser.cpp')
-rw-r--r--tests/auto/corelib/tools/qcommandlineparser/tst_qcommandlineparser.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/tests/auto/corelib/tools/qcommandlineparser/tst_qcommandlineparser.cpp b/tests/auto/corelib/tools/qcommandlineparser/tst_qcommandlineparser.cpp
index 3ee5b3fcce..bf9c8a6464 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 testVersionOption();
void testHelpOption_data();
void testHelpOption();
+ void testQuoteEscaping();
};
static char *empty_argv[] = { const_cast<char*>("tst_qcommandlineparser") };
@@ -534,6 +535,25 @@ void tst_QCommandLineParser::testHelpOption()
#endif // !QT_NO_PROCESS
}
+void tst_QCommandLineParser::testQuoteEscaping()
+{
+ QCoreApplication app(empty_argc, empty_argv);
+ QProcess process;
+ process.start("testhelper/qcommandlineparser_test_helper", QStringList() <<
+ QString::number(QCommandLineParser::ParseAsCompactedShortOptions) <<
+ "-DKEY1=\"VALUE1\"" << "-DKEY2=\\\"VALUE2\\\"" <<
+ "-DQTBUG-15379=C:\\path\\'file.ext" <<
+ "-DQTBUG-30628=C:\\temp\\'file'.ext");
+ QVERIFY(process.waitForFinished(5000));
+ QCOMPARE(process.exitStatus(), QProcess::NormalExit);
+ QString output = process.readAll();
+ QVERIFY2(!output.contains("ERROR"), qPrintable(output));
+ QVERIFY2(output.contains("KEY1=\"VALUE1\""), qPrintable(output));
+ QVERIFY2(output.contains("KEY2=\\\"VALUE2\\\""), qPrintable(output));
+ QVERIFY2(output.contains("QTBUG-15379=C:\\path\\'file.ext"), qPrintable(output));
+ QVERIFY2(output.contains("QTBUG-30628=C:\\temp\\'file'.ext"), qPrintable(output));
+}
+
QTEST_APPLESS_MAIN(tst_QCommandLineParser)
#include "tst_qcommandlineparser.moc"