55 lines
2.9 KiB
C++
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)
|