Files
RedBear-OS/local/recipes/kde/kf6-syntaxhighlighting/source/autotests/test-config.h.in
T

94 lines
2.7 KiB
C

/*
SPDX-FileCopyrightText: 2016 Volker Krause <vkrause@kde.org>
SPDX-License-Identifier: MIT
*/
#ifndef TEST_CONFIG_H
#define TEST_CONFIG_H
#include <QFile>
#include <QProcess>
#include <QStandardPaths>
#include <QString>
#include <QTextStream>
#include <QTest>
#include <KSyntaxHighlighting/Repository>
#define TESTSRCDIR "@CMAKE_CURRENT_SOURCE_DIR@"
#define TESTBUILDDIR "@CMAKE_CURRENT_BINARY_DIR@"
/**
* init repository with right search paths, is needed if the files are not compiled in
* as resources
*
* @param repository repository to init search paths
*/
inline void initRepositorySearchPaths(KSyntaxHighlighting::Repository &repository)
{
// add extra search path for e.g. broken highlighting test
repository.addCustomSearchPath(QStringLiteral(TESTSRCDIR "/input"));
// handle no-resources case
#ifndef HAS_SYNTAX_RESOURCE
repository.addCustomSearchPath(QStringLiteral("@CMAKE_SOURCE_DIR@/data"));
repository.addCustomSearchPath(QStringLiteral("@CMAKE_BINARY_DIR@/data/generated"));
#endif
}
/**
* helper to compare files
* @param refFile reference file
* @param outFile output file
*/
inline void compareFiles(const QString &refFile, const QString &outFile)
{
/**
* quick compare, all fine, if no diffs!
* use text mode + text streams to avoid unix/windows mismatches
*/
QFile ref(refFile);
QFile out(outFile);
QVERIFY(ref.open(QIODevice::ReadOnly | QIODevice::Text));
QVERIFY(out.open(QIODevice::ReadOnly | QIODevice::Text));
QTextStream refIn(&ref);
QTextStream outIn(&out);
const QString refContent = refIn.readAll();
const QString outContent = outIn.readAll();
const bool equalResults = refContent == outContent;
if (equalResults) {
return;
}
/**
* elaborate diff output, if possible
*/
const QString diffExecutable = QStandardPaths::findExecutable(QStringLiteral("diff"));
if (!diffExecutable.isEmpty()) {
QProcess proc;
proc.setProcessChannelMode(QProcess::ForwardedChannels);
proc.start(diffExecutable, {QStringLiteral("-u"), refFile, outFile});
QVERIFY(proc.waitForFinished());
QCOMPARE(proc.exitCode(), 0);
}
/**
* else: trivial output of mismatching characters, e.g. for windows testing without diff
*/
else {
qDebug() << "Trivial differences output as the 'diff' executable is not in the PATH";
for (int i = 0; i < refContent.size() && i < outContent.size(); ++i) {
QCOMPARE(refContent[i], outContent[i]);
}
QCOMPARE(refContent.size(), outContent.size());
}
/**
* if we arrive here, all lost!
*/
QVERIFY(equalResults);
}
#endif // TEST_CONFIG_H