tests / package-smoke-linux (push) Skipped
tests / package-smoke-windows (push) Skipped
tests / macos (push) Successful in 1m22s
tests / linux (pull_request) Successful in 1m54s
tests / package-smoke-macos (push) Skipped
tests / linux (push) Successful in 2m43s
tests / windows (push) Successful in 4m13s
tests / windows (pull_request) Skipped
tests / macos (pull_request) Skipped
tests / package-smoke-linux (pull_request) Skipped
tests / package-smoke-windows (pull_request) Skipped
tests / package-smoke-macos (pull_request) Skipped
Signed-off-by: galeon <dertiellis@gmail.com>
90 lines
3.7 KiB
C++
90 lines
3.7 KiB
C++
// Qt Quick Test для QML-компонентов лаунчера.
|
|
//
|
|
// Модуль BiLauncher у приложения вшит в исполняемый файл и плагина не имеет,
|
|
// поэтому qmltestrunner его не импортирует. Здесь тот же модуль собран
|
|
// статической библиотекой (bilauncher_testlib) и подключён через
|
|
// Q_IMPORT_QML_PLUGIN — тесты пишут обычный «import BiLauncher».
|
|
|
|
#include "testenv.h"
|
|
#include "fakeinternet.h"
|
|
#include "fixtures.h"
|
|
|
|
#include "launcherpaths.h"
|
|
|
|
#include <QDateTime>
|
|
#include <QDir>
|
|
#include <QJsonArray>
|
|
|
|
#include <QQmlEngine>
|
|
#include <QQuickStyle>
|
|
#include <QtQml/qqmlextensionplugin.h>
|
|
#include <QtQuickTest/quicktest.h>
|
|
|
|
Q_IMPORT_QML_PLUGIN(BiLauncherPlugin)
|
|
|
|
class Setup : public QObject
|
|
{
|
|
Q_OBJECT
|
|
|
|
public slots:
|
|
void applicationAvailable()
|
|
{
|
|
TestEnv::finishSetup();
|
|
QQuickStyle::setStyle(QStringLiteral("Basic"));
|
|
seedData();
|
|
// Диалоги создают настоящий LauncherBackend — наружу он не должен ходить.
|
|
QString error;
|
|
if (!m_net.start(&error))
|
|
qFatal("FakeInternet: %s", qPrintable(error));
|
|
m_net.setFallback(FakeResponse::error(503));
|
|
}
|
|
|
|
void qmlEngineAvailable(QQmlEngine *engine)
|
|
{
|
|
engine->addImportPath(QStringLiteral("qrc:/qt/qml"));
|
|
}
|
|
|
|
private:
|
|
// Данные, на которых работают диалоги (см. tst_dialogs.qml).
|
|
static void seedData()
|
|
{
|
|
const QString game = TestEnv::freshDir(QStringLiteral("game"));
|
|
const QString now = QDateTime::currentDateTimeUtc().toString(Qt::ISODate);
|
|
Fixtures::writeJson(LauncherPaths::settingsFile(), QJsonObject{{"gameDir", game}, {"language", "en"}});
|
|
|
|
const auto version = [](const QString &id, const QString &type, const QString &time) {
|
|
return QJsonObject{{"id", id}, {"type", type}, {"releaseTime", time}, {"sha1", "00"},
|
|
{"url", "https://piston-meta.mojang.com/v1/packages/x/" + id + ".json"}};
|
|
};
|
|
Fixtures::writeJson(LauncherPaths::versionManifestFile(), QJsonObject{
|
|
{"fetchedAt", now},
|
|
{"versions", QJsonArray{version("25w33a", "snapshot", "2025-08-13T12:00:00Z"),
|
|
version("1.20.1", "release", "2023-06-12T13:25:51Z"),
|
|
version("b1.7.3", "old_beta", "2011-07-08T00:00:00Z")}}});
|
|
Fixtures::write(game + "/versions/1.20.1/1.20.1.json",
|
|
"{\"id\":\"1.20.1\",\"mainClass\":\"net.minecraft.client.main.Main\"}");
|
|
|
|
const QJsonObject archive{{"url", "https://launcher-builds.galeonworx.com/packs/q.zip"},
|
|
{"size", 3 * 1024 * 1024}, {"sha256", QString(64, u'a')}};
|
|
const QJsonObject build{{"id", "season-qml"}, {"name", "QML Season"}, {"revision", 1},
|
|
{"minecraftVersion", "1.20.1"}, {"loader", "fabric"},
|
|
{"loaderVersion", "0.16.10"}, {"seasonStart", "2026-01-01"},
|
|
{"archive", archive}};
|
|
Fixtures::writeJson(LauncherPaths::seasonalCatalogFile(), QJsonObject{
|
|
{"formatVersion", 1}, {"fetchedAt", now},
|
|
{"baseUrl", "https://launcher-builds.galeonworx.com"}, {"builds", QJsonArray{build}}});
|
|
}
|
|
|
|
FakeInternet m_net;
|
|
};
|
|
|
|
int main(int argc, char **argv)
|
|
{
|
|
TestEnv::prepareSandbox();
|
|
QTEST_SET_MAIN_SOURCE_PATH
|
|
Setup setup;
|
|
return quick_test_main_with_setup(argc, argv, "bilauncher_qml", QUICK_TEST_SOURCE_DIR, &setup);
|
|
}
|
|
|
|
#include "tst_qml.moc"
|