11 changed files with 624 additions and 7 deletions
@ -0,0 +1,19 @@ |
|||||
|
TEMPLATE = app |
||||
|
|
||||
|
QT += testlib mvvmcore |
||||
|
QT -= gui |
||||
|
CONFIG += console |
||||
|
CONFIG -= app_bundle |
||||
|
|
||||
|
TARGET = tst_coreapp |
||||
|
|
||||
|
SOURCES += \ |
||||
|
tst_coreapp.cpp \ |
||||
|
testapp.cpp \ |
||||
|
testpresenter.cpp \ |
||||
|
testviewmodel.cpp |
||||
|
|
||||
|
HEADERS += \ |
||||
|
testapp.h \ |
||||
|
testpresenter.h \ |
||||
|
testviewmodel.h |
@ -0,0 +1,27 @@ |
|||||
|
#include "testapp.h" |
||||
|
#include <QtMvvmCore/ServiceRegistry> |
||||
|
|
||||
|
TestApp::TestApp(QObject *parent) : |
||||
|
CoreApp(parent) |
||||
|
{} |
||||
|
|
||||
|
TestPresenter *TestApp::presenter() |
||||
|
{ |
||||
|
return static_cast<TestPresenter*>(CoreApp::presenter()); |
||||
|
} |
||||
|
|
||||
|
void TestApp::performRegistrations() |
||||
|
{ |
||||
|
wasRegistered = true; |
||||
|
} |
||||
|
|
||||
|
int TestApp::startApp(const QStringList &arguments) |
||||
|
{ |
||||
|
startArgs = arguments; |
||||
|
return EXIT_SUCCESS; |
||||
|
} |
||||
|
|
||||
|
void TestApp::closeApp() |
||||
|
{ |
||||
|
wasClosed = false; |
||||
|
} |
@ -0,0 +1,29 @@ |
|||||
|
#ifndef TESTAPP_H |
||||
|
#define TESTAPP_H |
||||
|
|
||||
|
#include <QtMvvmCore/CoreApp> |
||||
|
#include "testpresenter.h" |
||||
|
|
||||
|
class TestApp : public QtMvvm::CoreApp |
||||
|
{ |
||||
|
Q_OBJECT |
||||
|
|
||||
|
public: |
||||
|
explicit TestApp(QObject *parent = nullptr); |
||||
|
|
||||
|
bool wasRegistered = false; |
||||
|
QStringList startArgs; |
||||
|
bool wasClosed = false; |
||||
|
|
||||
|
static TestPresenter *presenter(); |
||||
|
|
||||
|
protected: |
||||
|
void performRegistrations() override; |
||||
|
int startApp(const QStringList &arguments) override; |
||||
|
void closeApp() override; |
||||
|
}; |
||||
|
|
||||
|
#undef coreApp |
||||
|
#define coreApp static_cast<TestApp*>(QtMvvm::CoreApp::instance()) |
||||
|
|
||||
|
#endif // TESTAPP_H
|
@ -0,0 +1,15 @@ |
|||||
|
#include "testpresenter.h" |
||||
|
|
||||
|
TestPresenter::TestPresenter(QObject *parent) : |
||||
|
QObject{parent} |
||||
|
{} |
||||
|
|
||||
|
void TestPresenter::present(QtMvvm::ViewModel *viewModel, const QVariantHash ¶ms, QPointer<QtMvvm::ViewModel> parent) |
||||
|
{ |
||||
|
presented.append(std::make_tuple(viewModel, params, parent)); |
||||
|
emit presentDone(); |
||||
|
} |
||||
|
|
||||
|
void TestPresenter::showDialog(const QtMvvm::MessageConfig &config, QtMvvm::MessageResult *result) |
||||
|
{ |
||||
|
} |
@ -0,0 +1,24 @@ |
|||||
|
#ifndef TESTPRESENTER_H |
||||
|
#define TESTPRESENTER_H |
||||
|
|
||||
|
#include <QObject> |
||||
|
#include <QtMvvmCore/IPresenter> |
||||
|
|
||||
|
class TestPresenter : public QObject, public QtMvvm::IPresenter |
||||
|
{ |
||||
|
Q_OBJECT |
||||
|
Q_INTERFACES(QtMvvm::IPresenter) |
||||
|
|
||||
|
public: |
||||
|
Q_INVOKABLE explicit TestPresenter(QObject *parent = nullptr); |
||||
|
|
||||
|
void present(QtMvvm::ViewModel *viewModel, const QVariantHash ¶ms, QPointer<QtMvvm::ViewModel> parent) override; |
||||
|
void showDialog(const QtMvvm::MessageConfig &config, QtMvvm::MessageResult *result) override; |
||||
|
|
||||
|
QList<std::tuple<QtMvvm::ViewModel*, QVariantHash, QPointer<QtMvvm::ViewModel>>> presented; |
||||
|
|
||||
|
Q_SIGNALS: |
||||
|
void presentDone(); |
||||
|
}; |
||||
|
|
||||
|
#endif // TESTPRESENTER_H
|
@ -0,0 +1,42 @@ |
|||||
|
#include "testviewmodel.h" |
||||
|
|
||||
|
TestViewModel::TestViewModel(QObject *parent) : |
||||
|
ViewModel(parent) |
||||
|
{} |
||||
|
|
||||
|
void TestViewModel::presenChild(const QVariantHash ¶ms) |
||||
|
{ |
||||
|
show<TestViewModel>(params); |
||||
|
} |
||||
|
|
||||
|
void TestViewModel::presentResult(quint32 code) |
||||
|
{ |
||||
|
showForResult<TestViewModel>(code); |
||||
|
} |
||||
|
|
||||
|
void TestViewModel::onInit(const QVariantHash ¶ms) |
||||
|
{ |
||||
|
} |
||||
|
|
||||
|
void TestViewModel::onResult(quint32 requestCode, const QVariant &result) |
||||
|
{ |
||||
|
results.append(std::make_tuple(requestCode, result)); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
TestSingleViewModel::TestSingleViewModel(QObject *parent) : |
||||
|
ViewModel(parent) |
||||
|
{} |
||||
|
|
||||
|
|
||||
|
|
||||
|
TestContainedViewModel::TestContainedViewModel(QObject *parent) : |
||||
|
ViewModel(parent) |
||||
|
{} |
||||
|
|
||||
|
|
||||
|
|
||||
|
TestContainedSingleViewModel::TestContainedSingleViewModel(QObject *parent) : |
||||
|
ViewModel(parent) |
||||
|
{} |
@ -0,0 +1,52 @@ |
|||||
|
#ifndef TESTVIEWMODEL_H |
||||
|
#define TESTVIEWMODEL_H |
||||
|
|
||||
|
#include <QtMvvmCore/ViewModel> |
||||
|
|
||||
|
class TestViewModel : public QtMvvm::ViewModel |
||||
|
{ |
||||
|
Q_OBJECT |
||||
|
|
||||
|
public: |
||||
|
Q_INVOKABLE explicit TestViewModel(QObject *parent = nullptr); |
||||
|
|
||||
|
void presenChild(const QVariantHash ¶ms = {}); |
||||
|
void presentResult(quint32 code); |
||||
|
|
||||
|
QList<std::tuple<quint32, QVariant>> results; |
||||
|
|
||||
|
public Q_SLOTS: |
||||
|
void onInit(const QVariantHash ¶ms) override; |
||||
|
void onResult(quint32 requestCode, const QVariant &result) override; |
||||
|
}; |
||||
|
Q_DECLARE_METATYPE(TestViewModel*) |
||||
|
|
||||
|
class TestSingleViewModel : public QtMvvm::ViewModel |
||||
|
{ |
||||
|
Q_OBJECT |
||||
|
QTMVVM_SINGLETON |
||||
|
|
||||
|
public: |
||||
|
Q_INVOKABLE explicit TestSingleViewModel(QObject *parent = nullptr); |
||||
|
}; |
||||
|
Q_DECLARE_METATYPE(TestSingleViewModel*) |
||||
|
|
||||
|
class TestContainedViewModel : public QtMvvm::ViewModel |
||||
|
{ |
||||
|
Q_OBJECT |
||||
|
QTMVVM_CONTAINER_VM(TestViewModel) |
||||
|
|
||||
|
public: |
||||
|
Q_INVOKABLE explicit TestContainedViewModel(QObject *parent = nullptr); |
||||
|
}; |
||||
|
|
||||
|
class TestContainedSingleViewModel : public QtMvvm::ViewModel |
||||
|
{ |
||||
|
Q_OBJECT |
||||
|
QTMVVM_CONTAINER_VM(TestSingleViewModel) |
||||
|
|
||||
|
public: |
||||
|
Q_INVOKABLE explicit TestContainedSingleViewModel(QObject *parent = nullptr); |
||||
|
}; |
||||
|
|
||||
|
#endif // TESTVIEWMODEL_H
|
@ -0,0 +1,396 @@ |
|||||
|
#include <QtTest> |
||||
|
#include <QtMvvmCore/ServiceRegistry> |
||||
|
#include "testapp.h" |
||||
|
#include "testviewmodel.h" |
||||
|
using namespace QtMvvm; |
||||
|
|
||||
|
QTMVVM_REGISTER_CORE_APP(TestApp) |
||||
|
|
||||
|
class CoreAppTest : public QObject |
||||
|
{ |
||||
|
Q_OBJECT |
||||
|
|
||||
|
private Q_SLOTS: |
||||
|
void initTestCase(); |
||||
|
|
||||
|
void testAppBoot(); |
||||
|
void testTypeMapping_data(); |
||||
|
void testTypeMapping(); |
||||
|
|
||||
|
void testPresentVm(); |
||||
|
void testPresentVmArgs(); |
||||
|
void testPresentVmChild(); |
||||
|
void testPresentVmForResult(); |
||||
|
void testPresentVmContainer(); |
||||
|
void testPresentVmSingleton(); |
||||
|
|
||||
|
void testPresentDialog(); |
||||
|
void testPresentMessage_data(); |
||||
|
void testPresentMessage(); |
||||
|
void testProgressMessage(); |
||||
|
}; |
||||
|
|
||||
|
void CoreAppTest::initTestCase() |
||||
|
{ |
||||
|
qRegisterMetaType<TestViewModel*>(); |
||||
|
qRegisterMetaType<TestSingleViewModel*>(); |
||||
|
QtMvvm::ServiceRegistry::instance()->registerInterface<QtMvvm::IPresenter, TestPresenter>(); |
||||
|
} |
||||
|
|
||||
|
void CoreAppTest::testAppBoot() |
||||
|
{ |
||||
|
QVERIFY(coreApp); |
||||
|
QVERIFY(coreApp->wasRegistered); |
||||
|
QVERIFY(coreApp->startArgs.isEmpty()); |
||||
|
|
||||
|
QSignalSpy startSpy{coreApp, &TestApp::appStarted}; |
||||
|
QCoreApplication::processEvents(); |
||||
|
QVERIFY(!coreApp->startArgs.isEmpty()); |
||||
|
QCOMPARE(coreApp->startArgs, QCoreApplication::arguments()); |
||||
|
QCOMPARE(startSpy.size(), 1); |
||||
|
} |
||||
|
|
||||
|
void CoreAppTest::testTypeMapping_data() |
||||
|
{ |
||||
|
QTest::addColumn<QByteArray>("type"); |
||||
|
QTest::addColumn<int>("targetType"); |
||||
|
QTest::addColumn<QVariant>("value"); |
||||
|
QTest::addColumn<bool>("needRegister"); |
||||
|
QTest::addColumn<QVariant>("result"); |
||||
|
|
||||
|
QTest::newRow("builtin.switch") << QByteArrayLiteral("switch") |
||||
|
<< static_cast<int>(QMetaType::Bool) |
||||
|
<< QVariant{QStringLiteral("true")} |
||||
|
<< false |
||||
|
<< QVariant{true}; |
||||
|
|
||||
|
QTest::newRow("builtin.string") << QByteArrayLiteral("string") |
||||
|
<< static_cast<int>(QMetaType::QString) |
||||
|
<< QVariant{QStringLiteral("test")} |
||||
|
<< false |
||||
|
<< QVariant{QStringLiteral("test")}; |
||||
|
|
||||
|
QTest::newRow("builtin.number") << QByteArrayLiteral("number") |
||||
|
<< static_cast<int>(QMetaType::Double) |
||||
|
<< QVariant{QStringLiteral("4.2")} |
||||
|
<< false |
||||
|
<< QVariant{4.2}; |
||||
|
|
||||
|
QTest::newRow("builtin.range") << QByteArrayLiteral("range") |
||||
|
<< static_cast<int>(QMetaType::Int) |
||||
|
<< QVariant{QStringLiteral("55")} |
||||
|
<< false |
||||
|
<< QVariant{55}; |
||||
|
|
||||
|
QTest::newRow("builtin.date") << QByteArrayLiteral("date") |
||||
|
<< static_cast<int>(QMetaType::QDateTime) |
||||
|
<< QVariant{QStringLiteral("2018-10-10T10:10")} |
||||
|
<< false |
||||
|
<< QVariant{QDateTime{{2018, 10, 10}, {10, 10}}}; |
||||
|
|
||||
|
QTest::newRow("builtin.color") << QByteArrayLiteral("color") |
||||
|
<< static_cast<int>(QMetaType::QColor) |
||||
|
<< QVariant{QStringLiteral("#123456")} |
||||
|
<< false |
||||
|
<< QVariant{QColor{0x12, 0x34, 0x56}}; |
||||
|
|
||||
|
QTest::newRow("builtin.url") << QByteArrayLiteral("url") |
||||
|
<< static_cast<int>(QMetaType::QUrl) |
||||
|
<< QVariant{QStringLiteral("file:///root.txt")} |
||||
|
<< false |
||||
|
<< QVariant{QUrl::fromLocalFile(QStringLiteral("/root.txt"))}; |
||||
|
|
||||
|
QTest::newRow("builtin.var") << QByteArrayLiteral("var") |
||||
|
<< static_cast<int>(QMetaType::QVariant) |
||||
|
<< QVariant{42} |
||||
|
<< false |
||||
|
<< QVariant{42}; |
||||
|
|
||||
|
QTest::newRow("builtin.variant") << QByteArrayLiteral("variant") |
||||
|
<< static_cast<int>(QMetaType::QVariant) |
||||
|
<< QVariant{43} |
||||
|
<< false |
||||
|
<< QVariant{43}; |
||||
|
|
||||
|
QTest::newRow("builtin.selection") << QByteArrayLiteral("selection") |
||||
|
<< static_cast<int>(QMetaType::QVariant) |
||||
|
<< QVariant{44} |
||||
|
<< false |
||||
|
<< QVariant{44}; |
||||
|
|
||||
|
QTest::newRow("builtin.list") << QByteArrayLiteral("list") |
||||
|
<< static_cast<int>(QMetaType::QVariant) |
||||
|
<< QVariant{45} |
||||
|
<< false |
||||
|
<< QVariant{45}; |
||||
|
|
||||
|
QTest::newRow("builtin.radiolist") << QByteArrayLiteral("radiolist") |
||||
|
<< static_cast<int>(QMetaType::QVariant) |
||||
|
<< QVariant{46} |
||||
|
<< false |
||||
|
<< QVariant{46}; |
||||
|
|
||||
|
QTest::newRow("known") << QByteArrayLiteral("int") |
||||
|
<< static_cast<int>(QMetaType::Int) |
||||
|
<< QVariant{QStringLiteral("66")} |
||||
|
<< false |
||||
|
<< QVariant{66}; |
||||
|
|
||||
|
QTest::newRow("custom") << QByteArrayLiteral("salt") |
||||
|
<< static_cast<int>(QMetaType::Double) |
||||
|
<< QVariant{QStringLiteral("0.5")} |
||||
|
<< true |
||||
|
<< QVariant{0.5}; |
||||
|
|
||||
|
QTest::newRow("invalid.unknown") << QByteArrayLiteral("sugar") |
||||
|
<< static_cast<int>(QMetaType::Int) |
||||
|
<< QVariant{QStringLiteral("66")} |
||||
|
<< false |
||||
|
<< QVariant{}; |
||||
|
|
||||
|
QTest::newRow("invalid.inconvertible") << QByteArrayLiteral("color") |
||||
|
<< static_cast<int>(QMetaType::QColor) |
||||
|
<< QVariant{true} |
||||
|
<< false |
||||
|
<< QVariant{}; |
||||
|
} |
||||
|
|
||||
|
void CoreAppTest::testTypeMapping() |
||||
|
{ |
||||
|
QFETCH(QByteArray, type); |
||||
|
QFETCH(int, targetType); |
||||
|
QFETCH(QVariant, value); |
||||
|
QFETCH(bool, needRegister); |
||||
|
QFETCH(QVariant, result); |
||||
|
|
||||
|
if(needRegister) |
||||
|
CoreApp::registerInputTypeMapping(type, targetType); |
||||
|
|
||||
|
auto res = CoreApp::safeCastInputType(type, value); |
||||
|
if(result.isValid()) { |
||||
|
if(targetType == QMetaType::QVariant) |
||||
|
QVERIFY(res.userType() != targetType); |
||||
|
else |
||||
|
QCOMPARE(res.userType(), targetType); |
||||
|
QVERIFY(res.isValid()); |
||||
|
QCOMPARE(res, result); |
||||
|
} else { |
||||
|
QCOMPARE(res.userType(), value.userType()); |
||||
|
QVERIFY(res.userType() != targetType); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
void CoreAppTest::testPresentVm() |
||||
|
{ |
||||
|
auto presenter = TestApp::presenter(); |
||||
|
presenter->presented.clear(); |
||||
|
QSignalSpy presentSpy{presenter, &TestPresenter::presentDone}; |
||||
|
CoreApp::show<TestViewModel>(); |
||||
|
|
||||
|
QVERIFY(presentSpy.wait()); |
||||
|
QCOMPARE(presentSpy.size(), 1); |
||||
|
QCOMPARE(presenter->presented.size(), 1); |
||||
|
|
||||
|
auto vm = std::get<0>(presenter->presented[0]); |
||||
|
QVERIFY(vm); |
||||
|
QCOMPARE(vm->metaObject(), &TestViewModel::staticMetaObject); |
||||
|
QVERIFY(std::get<1>(presenter->presented[0]).isEmpty()); |
||||
|
QVERIFY(!std::get<2>(presenter->presented[0])); |
||||
|
} |
||||
|
|
||||
|
void CoreAppTest::testPresentVmArgs() |
||||
|
{ |
||||
|
QVariantHash params { |
||||
|
{QStringLiteral("key"), QStringLiteral("value")}, |
||||
|
{QStringLiteral("baum"), 42} |
||||
|
}; |
||||
|
|
||||
|
auto presenter = TestApp::presenter(); |
||||
|
presenter->presented.clear(); |
||||
|
QSignalSpy presentSpy{presenter, &TestPresenter::presentDone}; |
||||
|
CoreApp::show<TestViewModel>(params); |
||||
|
|
||||
|
QVERIFY(presentSpy.wait()); |
||||
|
QCOMPARE(presentSpy.size(), 1); |
||||
|
QCOMPARE(presenter->presented.size(), 1); |
||||
|
|
||||
|
auto vm = std::get<0>(presenter->presented[0]); |
||||
|
QVERIFY(vm); |
||||
|
QCOMPARE(vm->metaObject(), &TestViewModel::staticMetaObject); |
||||
|
QCOMPARE(std::get<1>(presenter->presented[0]), params); |
||||
|
QVERIFY(!std::get<2>(presenter->presented[0])); |
||||
|
} |
||||
|
|
||||
|
void CoreAppTest::testPresentVmChild() |
||||
|
{ |
||||
|
QVariantHash params { |
||||
|
{QStringLiteral("key"), QStringLiteral("value")}, |
||||
|
{QStringLiteral("baum"), 42} |
||||
|
}; |
||||
|
|
||||
|
auto presenter = TestApp::presenter(); |
||||
|
presenter->presented.clear(); |
||||
|
QSignalSpy presentSpy{presenter, &TestPresenter::presentDone}; |
||||
|
CoreApp::show<TestViewModel>(); |
||||
|
|
||||
|
QVERIFY(presentSpy.wait()); |
||||
|
QCOMPARE(presentSpy.size(), 1); |
||||
|
QCOMPARE(presenter->presented.size(), 1); |
||||
|
|
||||
|
auto vm = static_cast<TestViewModel*>(std::get<0>(presenter->presented[0])); |
||||
|
QVERIFY(vm); |
||||
|
|
||||
|
vm->presenChild(params); |
||||
|
QVERIFY(presentSpy.wait()); |
||||
|
QCOMPARE(presentSpy.size(), 2); |
||||
|
QCOMPARE(presenter->presented.size(), 2); |
||||
|
|
||||
|
auto child = std::get<0>(presenter->presented[1]); |
||||
|
QVERIFY(child); |
||||
|
QCOMPARE(child->metaObject(), &TestViewModel::staticMetaObject); |
||||
|
QCOMPARE(std::get<1>(presenter->presented[1]), params); |
||||
|
QCOMPARE(std::get<2>(presenter->presented[1]), vm); |
||||
|
} |
||||
|
|
||||
|
void CoreAppTest::testPresentVmForResult() |
||||
|
{ |
||||
|
auto presenter = TestApp::presenter(); |
||||
|
presenter->presented.clear(); |
||||
|
QSignalSpy presentSpy{presenter, &TestPresenter::presentDone}; |
||||
|
CoreApp::show<TestViewModel>(); |
||||
|
|
||||
|
QVERIFY(presentSpy.wait()); |
||||
|
QCOMPARE(presentSpy.size(), 1); |
||||
|
QCOMPARE(presenter->presented.size(), 1); |
||||
|
|
||||
|
auto vm = static_cast<TestViewModel*>(std::get<0>(presenter->presented[0])); |
||||
|
QVERIFY(vm); |
||||
|
|
||||
|
// show with result
|
||||
|
vm->presentResult(42); |
||||
|
QVERIFY(presentSpy.wait()); |
||||
|
QCOMPARE(presentSpy.size(), 2); |
||||
|
QCOMPARE(presenter->presented.size(), 2); |
||||
|
|
||||
|
auto child = std::get<0>(presenter->presented[1]); |
||||
|
QVERIFY(child); |
||||
|
QCOMPARE(child->metaObject(), &TestViewModel::staticMetaObject); |
||||
|
QVERIFY(std::get<1>(presenter->presented[1]).isEmpty()); |
||||
|
QCOMPARE(std::get<2>(presenter->presented[1]), vm); |
||||
|
|
||||
|
QVariant result{5.5}; |
||||
|
emit child->resultReady(result); |
||||
|
QCOMPARE(vm->results.size(), 1); |
||||
|
QCOMPARE(std::get<0>(vm->results[0]), 42u); |
||||
|
QCOMPARE(std::get<1>(vm->results[0]), result); |
||||
|
delete child; |
||||
|
QCOMPARE(vm->results.size(), 1); |
||||
|
|
||||
|
//show without result
|
||||
|
vm->presentResult(24); |
||||
|
QVERIFY(presentSpy.wait()); |
||||
|
QCOMPARE(presentSpy.size(), 3); |
||||
|
QCOMPARE(presenter->presented.size(), 3); |
||||
|
|
||||
|
child = std::get<0>(presenter->presented[2]); |
||||
|
QVERIFY(child); |
||||
|
|
||||
|
delete child; |
||||
|
QCOMPARE(vm->results.size(), 2); |
||||
|
QCOMPARE(std::get<0>(vm->results[1]), 24u); |
||||
|
QVERIFY(!std::get<1>(vm->results[1]).isValid()); |
||||
|
} |
||||
|
|
||||
|
void CoreAppTest::testPresentVmContainer() |
||||
|
{ |
||||
|
QVariantHash initMap { |
||||
|
{QStringLiteral("qtmvvm_container_for"), QByteArray{TestContainedViewModel::staticMetaObject.className()}}, |
||||
|
{QStringLiteral("qtmvvm_child_params"), QVariantHash{}} |
||||
|
}; |
||||
|
|
||||
|
auto presenter = TestApp::presenter(); |
||||
|
presenter->presented.clear(); |
||||
|
QSignalSpy presentSpy{presenter, &TestPresenter::presentDone}; |
||||
|
CoreApp::show<TestContainedViewModel>(); |
||||
|
|
||||
|
while(presentSpy.size() < 2) |
||||
|
QVERIFY(presentSpy.wait()); |
||||
|
QCOMPARE(presentSpy.size(), 2); |
||||
|
QCOMPARE(presenter->presented.size(), 2); |
||||
|
|
||||
|
auto vm = std::get<0>(presenter->presented[0]); |
||||
|
QVERIFY(vm); |
||||
|
QCOMPARE(vm->metaObject(), &TestViewModel::staticMetaObject); |
||||
|
QCOMPARE(std::get<1>(presenter->presented[0]), initMap); |
||||
|
QVERIFY(!std::get<2>(presenter->presented[0])); |
||||
|
|
||||
|
auto child = std::get<0>(presenter->presented[1]); |
||||
|
QVERIFY(child); |
||||
|
QCOMPARE(child->metaObject(), &TestContainedViewModel::staticMetaObject); |
||||
|
QVERIFY(std::get<1>(presenter->presented[1]).isEmpty()); |
||||
|
QCOMPARE(std::get<2>(presenter->presented[1]), vm); |
||||
|
} |
||||
|
|
||||
|
void CoreAppTest::testPresentVmSingleton() |
||||
|
{ |
||||
|
auto presenter = TestApp::presenter(); |
||||
|
presenter->presented.clear(); |
||||
|
QSignalSpy presentSpy{presenter, &TestPresenter::presentDone}; |
||||
|
CoreApp::show<TestSingleViewModel>(); |
||||
|
|
||||
|
QVERIFY(presentSpy.wait()); |
||||
|
QCOMPARE(presentSpy.size(), 1); |
||||
|
QCOMPARE(presenter->presented.size(), 1); |
||||
|
|
||||
|
auto vm = std::get<0>(presenter->presented[0]); |
||||
|
QVERIFY(vm); |
||||
|
QCOMPARE(vm->metaObject(), &TestSingleViewModel::staticMetaObject); |
||||
|
QVERIFY(std::get<1>(presenter->presented[0]).isEmpty()); |
||||
|
QVERIFY(!std::get<2>(presenter->presented[0])); |
||||
|
|
||||
|
QSignalSpy instSpy{vm, &ViewModel::instanceInvoked}; |
||||
|
|
||||
|
CoreApp::show<TestSingleViewModel>(); |
||||
|
QVERIFY(!presentSpy.wait()); |
||||
|
QCOMPARE(presentSpy.size(), 1); |
||||
|
QCOMPARE(presenter->presented.size(), 1); |
||||
|
QCOMPARE(instSpy.size(), 1); |
||||
|
|
||||
|
// test single container
|
||||
|
CoreApp::show<TestContainedSingleViewModel>(); |
||||
|
|
||||
|
QVERIFY(presentSpy.wait()); |
||||
|
QCOMPARE(presentSpy.size(), 2); |
||||
|
QCOMPARE(presenter->presented.size(), 2); |
||||
|
|
||||
|
auto child = std::get<0>(presenter->presented[1]); |
||||
|
QVERIFY(child); |
||||
|
QCOMPARE(child->metaObject(), &TestContainedSingleViewModel::staticMetaObject); |
||||
|
QVERIFY(std::get<1>(presenter->presented[1]).isEmpty()); |
||||
|
QCOMPARE(std::get<2>(presenter->presented[1]), vm); |
||||
|
QCOMPARE(instSpy.size(), 2); |
||||
|
} |
||||
|
|
||||
|
void CoreAppTest::testPresentDialog() |
||||
|
{ |
||||
|
Q_UNIMPLEMENTED(); |
||||
|
} |
||||
|
|
||||
|
void CoreAppTest::testPresentMessage_data() |
||||
|
{ |
||||
|
Q_UNIMPLEMENTED(); |
||||
|
} |
||||
|
|
||||
|
void CoreAppTest::testPresentMessage() |
||||
|
{ |
||||
|
Q_UNIMPLEMENTED(); |
||||
|
} |
||||
|
|
||||
|
void CoreAppTest::testProgressMessage() |
||||
|
{ |
||||
|
Q_UNIMPLEMENTED(); |
||||
|
} |
||||
|
|
||||
|
QTEST_MAIN(CoreAppTest) |
||||
|
|
||||
|
#include "tst_coreapp.moc" |
Loading…
Reference in new issue