#pragma once // Общая обвязка тестов: песочница для домашней папки и main для QtTest. // // LauncherPaths строит все пути от домашней папки. Каждый тестовый процесс до // создания QCoreApplication заводит свою временную папку и направляет туда // BILAUNCHER_HOME (её LauncherPaths читает на всех ОС), а заодно HOME и // USERPROFILE (их читает QDir::homePath() на Linux и macOS). На Windows // QDir::homePath() переменные окружения игнорирует, поэтому без BILAUNCHER_HOME // там не обойтись. Реальные папка лаунчера и .minecraft машины, на которой гоняются // тесты, не трогаются: если путь лаунчера всё же оказался вне песочницы, // процесс сразу завершается с кодом 2. #include #include #include namespace TestEnv { // До QCoreApplication: временная папка и подмена BILAUNCHER_HOME/HOME/USERPROFILE. void prepareSandbox(); // После QCoreApplication: проверка, что пути лаунчера ушли в песочницу, // загрузка переводов, английский язык (тексты ошибок не зависят от локали машины). void finishSetup(); // Переменная окружения с путём, без потерь символов вне ANSI-кодировки на Windows. void setEnvPath(const char *name, const QString &path); // Корень песочницы — домашняя папка, от которой LauncherPaths строит пути в тестах. 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)