#pragma once // Общая обвязка тестов: песочница для домашней папки и main для QtTest. // // LauncherPaths строит все пути от QDir::homePath(). На Linux и macOS он берёт // HOME, поэтому каждый тестовый процесс до создания QCoreApplication // подменяет HOME на свою временную папку — реальные ~/BiLauncher и .minecraft // машины, на которой гоняются тесты, не трогаются. // // На Windows QDir::homePath() спрашивает профиль у системы и переменные // окружения игнорирует. Там тесты работают в настоящей // %APPDATA%\BiLauncher, но только если её ещё нет либо она создана тестами // (в ней лежит метка .bilauncher-test-sandbox). Иначе процесс отказывается // запускаться, чтобы не испортить данные живого лаунчера. #include #include #include 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 нужно самому подключить . #define BILAUNCHER_GUI_TEST_MAIN(TestObject) BILAUNCHER_TEST_MAIN_IMPL(QGuiApplication, TestObject)