Files
BiLauncher/tests/common/testenv.h
T
galeon 41599fa82f
tests / linux (push) Failing after 2m18s
tests / windows (push) Skipped
tests / macos (push) Skipped
tests / package-smoke-linux (push) Skipped
tests / package-smoke-windows (push) Skipped
tests / package-smoke-macos (push) Skipped
new unit tests, hehe 67
Signed-off-by: galeon <dertiellis@gmail.com>
2026-10-12 13:14:08 +03:00

55 lines
2.9 KiB
C++

#pragma once
// Общая обвязка тестов: песочница для домашней папки и main для QtTest.
//
// LauncherPaths строит все пути от QDir::homePath(). На Linux и macOS он берёт
// HOME, поэтому каждый тестовый процесс до создания QCoreApplication
// подменяет HOME на свою временную папку — реальные ~/BiLauncher и .minecraft
// машины, на которой гоняются тесты, не трогаются.
//
// На Windows QDir::homePath() спрашивает профиль у системы и переменные
// окружения игнорирует. Там тесты работают в настоящей
// %APPDATA%\BiLauncher, но только если её ещё нет либо она создана тестами
// (в ней лежит метка .bilauncher-test-sandbox). Иначе процесс отказывается
// запускаться, чтобы не испортить данные живого лаунчера.
#include <QCoreApplication>
#include <QString>
#include <QtTest/QTest>
namespace TestEnv {
// До QCoreApplication: временная папка и подмена HOME/USERPROFILE.
void prepareSandbox();
// После QCoreApplication: проверка, что пути лаунчера ушли в песочницу,
// загрузка переводов, английский язык (тексты ошибок не зависят от локали машины).
void finishSetup();
// Корень песочницы — то, что сейчас возвращает QDir::homePath() в тестах.
QString homeDir();
// Свежая пустая папка внутри песочницы (для .minecraft, архивов и т. п.).
QString freshDir(const QString &name);
// Стирает папку лаунчера (LauncherPaths::rootDir()) — между тестами.
void resetLauncherRoot();
} // namespace TestEnv
#define BILAUNCHER_TEST_MAIN_IMPL(AppType, TestObject) \
int main(int argc, char *argv[]) \
{ \
TestEnv::prepareSandbox(); \
AppType app(argc, argv); \
TestEnv::finishSetup(); \
TestObject tc; \
QTEST_SET_MAIN_SOURCE_PATH \
return QTest::qExec(&tc, argc, argv); \
}
#define BILAUNCHER_TEST_MAIN(TestObject) BILAUNCHER_TEST_MAIN_IMPL(QCoreApplication, TestObject)
// Тесту с GUI нужно самому подключить <QGuiApplication>.
#define BILAUNCHER_GUI_TEST_MAIN(TestObject) BILAUNCHER_TEST_MAIN_IMPL(QGuiApplication, TestObject)