#pragma once // Фикстуры и мелкие помощники для подготовки файлов в песочнице. #include #include #include #include #include #include namespace Fixtures { // Абсолютный путь к tests/fixtures/. QString path(const QString &relative); // Содержимое фикстуры; при отсутствии файла тест падает через qFatal. QByteArray read(const QString &relative); QJsonObject readJson(const QString &relative); // Фикстура-шаблон: %OS%, %OTHER%, %ARCH%, %NATIVE% заменяются на значения // текущей платформы (имя ОС в терминах Mojang, «чужая» ОС, архитектура, // классификатор нативов LWJGL) — один json годится для всех трёх ОС. QByteArray readTemplate(const QString &relative); QByteArray applyTemplate(QByteArray text); QString otherOsName(); // Пишет файл, создавая недостающие папки. bool write(const QString &path, const QByteArray &data); bool writeJson(const QString &path, const QJsonObject &object); QByteArray readFile(const QString &path); QJsonObject readJsonFile(const QString &path); // Zip из пар «путь внутри архива → содержимое» (через QZipWriter, как в коде лаунчера). bool makeZip(const QString &zipPath, const QMap &entries); QByteArray zipBytes(const QMap &entries); // Список файлов в zip — как его видит QZipReader (ведущие «.» и «/» он срезает). QStringList zipEntries(const QString &zipPath); // tar.gz через системный tar (есть и на Windows 10+, и на Unix). bool makeTarGz(const QString &archivePath, const QMap &entries); QString sha1(const QByteArray &data); QString sha256(const QByteArray &data); // Все файлы под папкой (относительные пути, «/» в качестве разделителя), отсортированы. QStringList listTree(const QString &dir); // Подставная java (см. tests/fake_java). Копирует бинарник в /bin/java[.exe] // (на Windows ещё и javaw.exe) и пишет рядом fake-java.cfg из строк config. // Возвращает путь к java. QString installFakeJava(const QString &dir, const QString &version, const QStringList &config = {}); // Переписать fake-java.cfg у уже установленной подставной java. void configureFakeJava(const QString &javaPath, const QString &version, const QStringList &config); QString javaExecutableName(); } // namespace Fixtures