1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
|
/**
* Copyright (c) 2016-2026 Governikus GmbH & Co. KG, Germany
*/
#include "Env.h"
#include "MockNetworkManager.h"
#include "ReaderManager.h"
#include "ResourceLoader.h"
#include "UiLoader.h"
#include "UiPluginQml.h"
#include <QDesktopServices>
#include <QFontDatabase>
#include <QLoggingCategory>
#include <QQmlContext>
#include <QQmlEngine>
#include <QQuickStyle>
#include <QStandardPaths>
#include <QtQuickTest>
using namespace Qt::Literals::StringLiterals;
using namespace governikus;
Q_IMPORT_PLUGIN(UiPluginQml)
Q_DECLARE_LOGGING_CATEGORY(init)
class QmlTestRunner
: public QObject
{
Q_OBJECT
private:
QSharedPointer<MockNetworkManager> mMockNetworkManager;
public:
Q_INVOKABLE void registerUrlScheme(const QString& pScheme)
{
QDesktopServices::setUrlHandler(pScheme, this, "urlInvoked");
}
Q_INVOKABLE void clearUrlScheme(const QString& pScheme)
{
QDesktopServices::unsetUrlHandler(pScheme);
}
public Q_SLOTS:
void applicationAvailable()
{
QStandardPaths::setTestModeEnabled(true);
QCoreApplication::setApplicationName("TestQmlRunner"_L1);
QQuickStyle::setStyle(QStringLiteral("Basic"));
QThread::currentThread()->setObjectName(QStringLiteral("MainThread"));
ResourceLoader::getInstance().init();
Env::getSingleton<ReaderManager>()->init();
mMockNetworkManager.reset(new MockNetworkManager());
Env::set(NetworkManager::staticMetaObject, mMockNetworkManager.get());
}
void cleanupTestCase()
{
ResourceLoader::getInstance().shutdown();
Env::getSingleton<ReaderManager>()->shutdown();
Env::set(NetworkManager::staticMetaObject, nullptr);
mMockNetworkManager.reset();
}
void qmlEngineAvailable(QQmlEngine* pEngine)
{
const auto& prefix = UiPluginQml::adjustQmlImportPath(pEngine);
pEngine->rootContext()->setContextProperty(QStringLiteral("importPrefix"), prefix);
pEngine->rootContext()->setContextProperty(QStringLiteral("testRunner"), this);
connect(pEngine, &QQmlEngine::warnings, this, [](const QList<QQmlError>& pWarnings){
bool fail = false;
for (auto& warning : pWarnings)
{
qCritical() << warning;
fail = true;
}
if (fail)
{
QCoreApplication::quit();
QFAIL("QQmlEngine has errors");
}
});
Q_UNUSED(Env::getSingleton<UiLoader>()->load())
}
Q_SIGNALS:
void urlInvoked(const QUrl& pUrl);
};
QUICK_TEST_MAIN_WITH_SETUP(qml, QmlTestRunner)
#include "QmlTestRunner.moc"
|