94 lines
2.7 KiB
C
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
|