56 lines
3.0 KiB
C++
56 lines
3.0 KiB
C++
#pragma once
|
|
|
|
// Общая обвязка тестов: песочница для домашней папки и main для QtTest.
|
|
//
|
|
// LauncherPaths строит все пути от домашней папки. Каждый тестовый процесс до
|
|
// создания QCoreApplication заводит свою временную папку и направляет туда
|
|
// BILAUNCHER_HOME (её LauncherPaths читает на всех ОС), а заодно HOME и
|
|
// USERPROFILE (их читает QDir::homePath() на Linux и macOS). На Windows
|
|
// QDir::homePath() переменные окружения игнорирует, поэтому без BILAUNCHER_HOME
|
|
// там не обойтись. Реальные папка лаунчера и .minecraft машины, на которой гоняются
|
|
// тесты, не трогаются: если путь лаунчера всё же оказался вне песочницы,
|
|
// процесс сразу завершается с кодом 2.
|
|
|
|
#include <QCoreApplication>
|
|
#include <QString>
|
|
#include <QtTest/QTest>
|
|
|
|
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 нужно самому подключить <QGuiApplication>.
|
|
#define BILAUNCHER_GUI_TEST_MAIN(TestObject) BILAUNCHER_TEST_MAIN_IMPL(QGuiApplication, TestObject)
|