Squish: Support scripted objects map

Change-Id: I3ad0e43dcd7e542ac51eb7be8add0f55ee6e090d
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Christian Stenger
2022-08-24 10:43:19 +02:00
parent 2141b9945f
commit 10c7b810b2
2 changed files with 61 additions and 7 deletions

View File

@@ -27,9 +27,12 @@
#include "objectsmaptreeitem.h"
#include "squishconstants.h"
#include "squishplugin.h"
#include "squishsettings.h"
#include "squishtr.h"
#include <utils/fileutils.h>
#include <utils/qtcprocess.h>
#include <QDir>
@@ -206,11 +209,35 @@ Core::IDocument::OpenResult ObjectsMapDocument::openImpl(QString *error,
if (fileName.isEmpty())
return OpenResult::CannotHandle;
QString text;
if (realFileName.fileName() == "objects.map") {
Utils::FileReader reader;
if (!reader.fetch(realFileName, QIODevice::Text, error))
return OpenResult::ReadError;
const QString text = QString::fromLocal8Bit(reader.data());
text = QString::fromLocal8Bit(reader.data());
} else {
const Utils::FilePath base = SquishPlugin::squishSettings()->squishPath.filePath();
if (base.isEmpty()) {
if (error)
error->append(Tr::tr("Incomplete Squish settings. "
"Missing Squish installation path."));
return OpenResult::ReadError;
}
const Utils::FilePath exe = base.pathAppended("lib/exec/objectmaptool").withExecutableSuffix();
if (!exe.isExecutableFile()) {
if (error)
error->append(Tr::tr("objectmaptool not found."));
return OpenResult::ReadError;
}
Utils::QtcProcess objectMapReader;
objectMapReader.setCommand({exe, {"--scriptMap", "--mode", "read",
"--scriptedObjectMapPath", realFileName.toUserOutput()}});
objectMapReader.start();
objectMapReader.waitForFinished();
text = objectMapReader.cleanedStdOut();
}
if (!setContents(text.toUtf8())) {
if (error)
error->append(Tr::tr("Failure while parsing objects.map content."));
@@ -221,8 +248,26 @@ Core::IDocument::OpenResult ObjectsMapDocument::openImpl(QString *error,
bool ObjectsMapDocument::writeFile(const Utils::FilePath &fileName) const
{
if (fileName.endsWith("object.map")) {
Utils::FileSaver saver(fileName);
return saver.write(contents()) && saver.finalize();
}
// otherwise we need the objectmaptool to write the scripted object map again
const Utils::FilePath base = SquishPlugin::squishSettings()->squishPath.filePath();
if (base.isEmpty())
return false;
const Utils::FilePath exe = base.pathAppended("lib/exec/objectmaptool").withExecutableSuffix();
if (!exe.isExecutableFile())
return false;
Utils::QtcProcess objectMapWriter;
objectMapWriter.setCommand({exe, {"--scriptMap", "--mode", "write",
"--scriptedObjectMapPath", fileName.toUserOutput()}});
objectMapWriter.setWriteData(contents());
objectMapWriter.start();
objectMapWriter.waitForFinished();
return objectMapWriter.result() == Utils::ProcessResult::FinishedWithSuccess;
}
} // namespace Internal

View File

@@ -37,6 +37,7 @@ namespace Internal {
const char squishLanguageKey[] = "LANGUAGE";
const char squishTestCasesKey[] = "TEST_CASES";
const char objectsMapKey[] = "OBJECTMAP";
const char objectMapStyleKey[] = "OBJECTMAPSTYLE";
QStringList SquishUtils::validTestCases(const QString &baseDirectory)
{
@@ -77,7 +78,15 @@ QString SquishUtils::objectsMapPath(const QString &suitePath)
{
const QString suiteDir = QFileInfo(suitePath).absolutePath();
const QSettings suiteConf(suitePath, QSettings::IniFormat);
const QString objMapPath = suiteConf.value(objectsMapKey).toString();
const QString style = suiteConf.value(objectMapStyleKey).toString();
if (style == "script") {
const QString language = suiteConf.value(squishLanguageKey).toString();
return QFileInfo(suiteDir, "shared/scripts/names" + extensionForLanguage(language))
.canonicalFilePath();
}
const QString objMapPath = suiteConf.value(objectsMapKey, "objects.map").toString();
return QFileInfo(suiteDir, objMapPath).canonicalFilePath();
}