1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
|
/*
SPDX-FileCopyrightText: 2016 Volker Krause <vkrause@kde.org>
SPDX-License-Identifier: MIT
*/
#include "test-config.h"
#include <KSyntaxHighlighting/Definition>
#include <KSyntaxHighlighting/Repository>
#include <KSyntaxHighlighting/Theme>
#include <htmlhighlighter.h>
#include <QDir>
#include <QObject>
#include <QStandardPaths>
#include <QTest>
using namespace KSyntaxHighlighting;
class HTMLHighlighterTest : public QObject
{
Q_OBJECT
public:
explicit HTMLHighlighterTest(QObject *parent = nullptr)
: QObject(parent)
, m_repo(nullptr)
{
}
private:
Repository *m_repo;
private Q_SLOTS:
void initTestCase()
{
QStandardPaths::setTestModeEnabled(true);
m_repo = new Repository;
initRepositorySearchPaths(*m_repo);
}
void cleanupTestCase()
{
delete m_repo;
m_repo = nullptr;
}
void testHighlight_data()
{
QTest::addColumn<QString>("inFile");
QTest::addColumn<QString>("outFile");
QTest::addColumn<QString>("refFile");
QTest::addColumn<QString>("outDarkFile");
QTest::addColumn<QString>("refDarkFile");
QTest::addColumn<QString>("syntax");
const QDir dir(QStringLiteral(TESTSRCDIR "/input"));
for (const auto &fileName : dir.entryList(QDir::Files | QDir::NoSymLinks | QDir::Readable | QDir::Hidden, QDir::Name)) {
// skip .clang-format file we use to avoid formatting test files
if (fileName == QLatin1String(".clang-format")) {
continue;
}
const auto inFile = dir.absoluteFilePath(fileName);
if (inFile.endsWith(QLatin1String(".syntax"))) {
continue;
}
QString syntax;
QFile syntaxOverride(inFile + QStringLiteral(".syntax"));
if (syntaxOverride.exists() && syntaxOverride.open(QFile::ReadOnly)) {
syntax = QString::fromUtf8(syntaxOverride.readAll()).trimmed();
}
QTest::newRow(fileName.toUtf8().constData()) << inFile << (QStringLiteral(TESTBUILDDIR "/html.output/") + fileName + QStringLiteral(".html"))
<< (QStringLiteral(TESTSRCDIR "/html/") + fileName + QStringLiteral(".html"))
<< (QStringLiteral(TESTBUILDDIR "/html.output/") + fileName + QStringLiteral(".dark.html"))
<< (QStringLiteral(TESTSRCDIR "/html/") + fileName + QStringLiteral(".dark.html")) << syntax;
}
// cleanup before we test
QDir(QStringLiteral(TESTBUILDDIR "/html.output/")).removeRecursively();
QDir().mkpath(QStringLiteral(TESTBUILDDIR "/html.output/"));
}
void testHighlight()
{
QFETCH(QString, inFile);
QFETCH(QString, outFile);
QFETCH(QString, refFile);
QFETCH(QString, outDarkFile);
QFETCH(QString, refDarkFile);
QFETCH(QString, syntax);
QVERIFY(m_repo);
// get the matching definitions
const auto def = syntax.isEmpty() ? m_repo->definitionForFileName(inFile) : m_repo->definitionForName(syntax);
QVERIFY(def.isValid());
// we try both light and dark themes
for (int i = 0; i < 2; ++i) {
HtmlHighlighter highlighter;
highlighter.setTheme(m_repo->defaultTheme((i == 0) ? Repository::LightTheme : Repository::DarkTheme));
QVERIFY(highlighter.theme().isValid());
highlighter.setDefinition(def);
highlighter.setOutputFile((i == 0) ? outFile : outDarkFile);
highlighter.highlightFile(inFile);
// compare results
compareFiles((i == 0) ? refFile : refDarkFile, (i == 0) ? outFile : outDarkFile);
}
}
};
QTEST_GUILESS_MAIN(HTMLHighlighterTest)
#include "htmlhighlighter_test.moc"
|