From 1c8a1b9d82be58901f15b7a64879df575be88e31 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Wed, 28 Sep 2022 15:16:01 +0200 Subject: [PATCH] Squish: Fix script generation Handle whitespaces inside the application's name and arguments correctly. Change-Id: I5f3fc7c83e7b1e694e9f2a4583c6ac06b7528ff6 Reviewed-by: Christian Stenger Reviewed-by: David Schulz Reviewed-by: --- src/plugins/squish/scripthelper.cpp | 24 +++++++++++++----------- src/plugins/squish/scripthelper.h | 2 +- src/plugins/squish/squishtools.cpp | 2 +- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/plugins/squish/scripthelper.cpp b/src/plugins/squish/scripthelper.cpp index d6e18872098..0047ea37aa2 100644 --- a/src/plugins/squish/scripthelper.cpp +++ b/src/plugins/squish/scripthelper.cpp @@ -12,23 +12,25 @@ namespace Squish { namespace Internal { -static QByteArray startApplication(Language language, const QString &application, - const QStringList &args) +static QByteArray startApplication(Language language, + const QString &application, + const QString &args) { + const QString app = application.contains(' ') ? QString("\\\"" + application + "\\\"") + : application; + QStringList parameters; + parameters << app; + if (args.isEmpty()) + parameters << QString(args).replace('"', "\\\""); + switch (language) { case Language::Python: case Language::Perl: case Language::JavaScript: case Language::Ruby: - if (args.isEmpty()) - return QByteArray("startApplication(\"" + application.toUtf8() + "\")"); - return QByteArray("startApplication(\"" + application.toUtf8() + ' ' - + args.join(' ').toUtf8() + "\")"); + return QByteArray("startApplication(\"" + parameters.join(' ').toUtf8() + "\")"); case Language::Tcl: - if (args.isEmpty()) - return QByteArray("startApplication \"" + application.toUtf8() + "\""); - return QByteArray("startApplication \"" + application.toUtf8() + ' ' - + args.join(' ').toUtf8() + "\""); + return QByteArray("startApplication \"" + parameters.join(' ').toUtf8() + "\""); } return {}; } @@ -115,7 +117,7 @@ ScriptHelper::ScriptHelper(Language language) bool ScriptHelper::writeScriptFile(const Utils::FilePath &outScriptFile, const Utils::FilePath &snippetFile, const QString &application, - const QStringList &arguments) const + const QString &arguments) const { if (!snippetFile.isReadableFile()) return false; diff --git a/src/plugins/squish/scripthelper.h b/src/plugins/squish/scripthelper.h index 56dfdea5f31..34ed79bca92 100644 --- a/src/plugins/squish/scripthelper.h +++ b/src/plugins/squish/scripthelper.h @@ -21,7 +21,7 @@ public: bool writeScriptFile(const Utils::FilePath &outScriptFile, const Utils::FilePath &snippetFile, const QString &application, - const QStringList &arguments) const; + const QString &arguments) const; private: Language m_language; }; diff --git a/src/plugins/squish/squishtools.cpp b/src/plugins/squish/squishtools.cpp index a5fc9a2c2ab..463109eda60 100644 --- a/src/plugins/squish/squishtools.cpp +++ b/src/plugins/squish/squishtools.cpp @@ -739,7 +739,7 @@ void SquishTools::onRecorderFinished() "test" + m_suiteConf.scriptExtension()); bool result = helper.writeScriptFile(testFile, m_currentRecorderSnippetFile, m_suiteConf.aut(), - m_suiteConf.arguments().split(' ', Qt::SkipEmptyParts)); + m_suiteConf.arguments()); qCInfo(LOG) << "Wrote recorded test case" << testFile.toUserOutput() << " " << result; m_currentRecorderSnippetFile.removeFile(); m_currentRecorderSnippetFile.clear();