Squish: Fix script generation

Handle whitespaces inside the application's name and
arguments correctly.

Change-Id: I5f3fc7c83e7b1e694e9f2a4583c6ac06b7528ff6
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Reviewed-by: David Schulz <david.schulz@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
Christian Stenger
2022-09-28 15:16:01 +02:00
parent ee4c998ff3
commit 1c8a1b9d82
3 changed files with 15 additions and 13 deletions

View File

@@ -12,23 +12,25 @@
namespace Squish { namespace Squish {
namespace Internal { namespace Internal {
static QByteArray startApplication(Language language, const QString &application, static QByteArray startApplication(Language language,
const QStringList &args) 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) { switch (language) {
case Language::Python: case Language::Python:
case Language::Perl: case Language::Perl:
case Language::JavaScript: case Language::JavaScript:
case Language::Ruby: case Language::Ruby:
if (args.isEmpty()) return QByteArray("startApplication(\"" + parameters.join(' ').toUtf8() + "\")");
return QByteArray("startApplication(\"" + application.toUtf8() + "\")");
return QByteArray("startApplication(\"" + application.toUtf8() + ' '
+ args.join(' ').toUtf8() + "\")");
case Language::Tcl: case Language::Tcl:
if (args.isEmpty()) return QByteArray("startApplication \"" + parameters.join(' ').toUtf8() + "\"");
return QByteArray("startApplication \"" + application.toUtf8() + "\"");
return QByteArray("startApplication \"" + application.toUtf8() + ' '
+ args.join(' ').toUtf8() + "\"");
} }
return {}; return {};
} }
@@ -115,7 +117,7 @@ ScriptHelper::ScriptHelper(Language language)
bool ScriptHelper::writeScriptFile(const Utils::FilePath &outScriptFile, bool ScriptHelper::writeScriptFile(const Utils::FilePath &outScriptFile,
const Utils::FilePath &snippetFile, const Utils::FilePath &snippetFile,
const QString &application, const QString &application,
const QStringList &arguments) const const QString &arguments) const
{ {
if (!snippetFile.isReadableFile()) if (!snippetFile.isReadableFile())
return false; return false;

View File

@@ -21,7 +21,7 @@ public:
bool writeScriptFile(const Utils::FilePath &outScriptFile, bool writeScriptFile(const Utils::FilePath &outScriptFile,
const Utils::FilePath &snippetFile, const Utils::FilePath &snippetFile,
const QString &application, const QString &application,
const QStringList &arguments) const; const QString &arguments) const;
private: private:
Language m_language; Language m_language;
}; };

View File

@@ -739,7 +739,7 @@ void SquishTools::onRecorderFinished()
"test" + m_suiteConf.scriptExtension()); "test" + m_suiteConf.scriptExtension());
bool result = helper.writeScriptFile(testFile, m_currentRecorderSnippetFile, bool result = helper.writeScriptFile(testFile, m_currentRecorderSnippetFile,
m_suiteConf.aut(), m_suiteConf.aut(),
m_suiteConf.arguments().split(' ', Qt::SkipEmptyParts)); m_suiteConf.arguments());
qCInfo(LOG) << "Wrote recorded test case" << testFile.toUserOutput() << " " << result; qCInfo(LOG) << "Wrote recorded test case" << testFile.toUserOutput() << " " << result;
m_currentRecorderSnippetFile.removeFile(); m_currentRecorderSnippetFile.removeFile();
m_currentRecorderSnippetFile.clear(); m_currentRecorderSnippetFile.clear();