Warning, /frameworks/syntax-highlighting/autotests/test-config.h.in is written in an unsupported language. File is not indexed.
0001 /*
0002 SPDX-FileCopyrightText: 2016 Volker Krause <vkrause@kde.org>
0003
0004 SPDX-License-Identifier: MIT
0005 */
0006
0007 #ifndef TEST_CONFIG_H
0008 #define TEST_CONFIG_H
0009
0010 #include <QFile>
0011 #include <QProcess>
0012 #include <QStandardPaths>
0013 #include <QString>
0014 #include <QTextStream>
0015 #include <QTest>
0016
0017 #include <KSyntaxHighlighting/Repository>
0018
0019 #define TESTSRCDIR "@CMAKE_CURRENT_SOURCE_DIR@"
0020 #define TESTBUILDDIR "@CMAKE_CURRENT_BINARY_DIR@"
0021
0022 /**
0023 * init repository with right search paths, is needed if the files are not compiled in
0024 * as resources
0025 *
0026 * @param repository repository to init search paths
0027 */
0028 inline void initRepositorySearchPaths(KSyntaxHighlighting::Repository &repository)
0029 {
0030 // add extra search path for e.g. broken highlighting test
0031 repository.addCustomSearchPath(QStringLiteral(TESTSRCDIR "/input"));
0032
0033 // handle no-resources case
0034 #ifndef HAS_SYNTAX_RESOURCE
0035 repository.addCustomSearchPath(QStringLiteral("@CMAKE_SOURCE_DIR@/data"));
0036 repository.addCustomSearchPath(QStringLiteral("@CMAKE_BINARY_DIR@/data/generated"));
0037 #endif
0038 }
0039
0040 /**
0041 * helper to compare files
0042 * @param refFile reference file
0043 * @param outFile output file
0044 */
0045 inline void compareFiles(const QString &refFile, const QString &outFile)
0046 {
0047 /**
0048 * quick compare, all fine, if no diffs!
0049 * use text mode + text streams to avoid unix/windows mismatches
0050 */
0051 QFile ref(refFile);
0052 QFile out(outFile);
0053 QVERIFY(ref.open(QIODevice::ReadOnly | QIODevice::Text));
0054 QVERIFY(out.open(QIODevice::ReadOnly | QIODevice::Text));
0055 QTextStream refIn(&ref);
0056 QTextStream outIn(&out);
0057 const QString refContent = refIn.readAll();
0058 const QString outContent = outIn.readAll();
0059 const bool equalResults = refContent == outContent;
0060 if (equalResults) {
0061 return;
0062 }
0063
0064 /**
0065 * elaborate diff output, if possible
0066 */
0067 const QString diffExecutable = QStandardPaths::findExecutable(QStringLiteral("diff"));
0068 if (!diffExecutable.isEmpty()) {
0069 QProcess proc;
0070 proc.setProcessChannelMode(QProcess::ForwardedChannels);
0071 proc.start(diffExecutable, {QStringLiteral("-u"), refFile, outFile});
0072 QVERIFY(proc.waitForFinished());
0073 QCOMPARE(proc.exitCode(), 0);
0074 }
0075
0076 /**
0077 * else: trivial output of mismatching characters, e.g. for windows testing without diff
0078 */
0079 else {
0080 qDebug() << "Trivial differences output as the 'diff' executable is not in the PATH";
0081 for (int i = 0; i < refContent.size() && i < outContent.size(); ++i) {
0082 QCOMPARE(refContent[i], outContent[i]);
0083 }
0084 QCOMPARE(refContent.size(), outContent.size());
0085 }
0086
0087 /**
0088 * if we arrive here, all lost!
0089 */
0090 QVERIFY(equalResults);
0091 }
0092
0093 #endif // TEST_CONFIG_H