Browse Source

added first dialog tests

pull/2/head
Skycoder42 7 years ago
parent
commit
88088d1e63
No known key found for this signature in database GPG Key ID: 8E01AD9EF0578D2B
  1. 4
      src/mvvmcore/coreapp.cpp
  2. 2
      tests/auto/mvvmcore/coreapp/testpresenter.cpp
  3. 2
      tests/auto/mvvmcore/coreapp/testpresenter.h
  4. 259
      tests/auto/mvvmcore/coreapp/tst_coreapp.cpp

4
src/mvvmcore/coreapp.cpp

@ -287,7 +287,9 @@ const QMetaObject *CoreAppPrivate::getContainer(const QMetaObject *metaObject) c
if(typeId == QMetaType::UnknownType) { if(typeId == QMetaType::UnknownType) {
throw PresenterException { throw PresenterException {
QByteArrayLiteral("Unabled to find the qtmvvm_container_viewmodel of type \"") + cInfo.value() + QByteArrayLiteral("Unabled to find the qtmvvm_container_viewmodel of type \"") + cInfo.value() +
QByteArrayLiteral("\" for viewmodel of type \"") + metaObject->className() + QByteArrayLiteral("\"") QByteArrayLiteral("\" for viewmodel of type \"") + metaObject->className() +
QByteArrayLiteral("\" - Make shure to register the container via qRegisterMetaType<") + cInfo.value() +
QByteArrayLiteral("*>()")
}; };
} }
auto containerMo = QMetaType::metaObjectForType(typeId); auto containerMo = QMetaType::metaObjectForType(typeId);

2
tests/auto/mvvmcore/coreapp/testpresenter.cpp

@ -12,4 +12,6 @@ void TestPresenter::present(QtMvvm::ViewModel *viewModel, const QVariantHash &pa
void TestPresenter::showDialog(const QtMvvm::MessageConfig &config, QtMvvm::MessageResult *result) void TestPresenter::showDialog(const QtMvvm::MessageConfig &config, QtMvvm::MessageResult *result)
{ {
dialogs.append(std::make_tuple(config, result));
emit dialogDone();
} }

2
tests/auto/mvvmcore/coreapp/testpresenter.h

@ -16,9 +16,11 @@ public:
void showDialog(const QtMvvm::MessageConfig &config, QtMvvm::MessageResult *result) override; void showDialog(const QtMvvm::MessageConfig &config, QtMvvm::MessageResult *result) override;
QList<std::tuple<QtMvvm::ViewModel*, QVariantHash, QPointer<QtMvvm::ViewModel>>> presented; QList<std::tuple<QtMvvm::ViewModel*, QVariantHash, QPointer<QtMvvm::ViewModel>>> presented;
QList<std::tuple<QtMvvm::MessageConfig, QtMvvm::MessageResult*>> dialogs;
Q_SIGNALS: Q_SIGNALS:
void presentDone(); void presentDone();
void dialogDone();
}; };
#endif // TESTPRESENTER_H #endif // TESTPRESENTER_H

259
tests/auto/mvvmcore/coreapp/tst_coreapp.cpp

@ -10,6 +10,9 @@ class CoreAppTest : public QObject
{ {
Q_OBJECT Q_OBJECT
public:
using MsgFn = std::function<void()>;
private Q_SLOTS: private Q_SLOTS:
void initTestCase(); void initTestCase();
@ -27,13 +30,25 @@ private Q_SLOTS:
void testPresentDialog(); void testPresentDialog();
void testPresentMessage_data(); void testPresentMessage_data();
void testPresentMessage(); void testPresentMessage();
void testAboutMessage();
void testProgressMessage(); void testProgressMessage();
Q_SIGNALS:
void msgUnblock(bool success);
private:
bool wasClosed = false;
Q_INVOKABLE void doCloseTest();
}; };
Q_DECLARE_METATYPE(CoreAppTest::MsgFn)
void CoreAppTest::initTestCase() void CoreAppTest::initTestCase()
{ {
qRegisterMetaType<TestViewModel*>(); qRegisterMetaType<TestViewModel*>();
qRegisterMetaType<TestSingleViewModel*>(); qRegisterMetaType<TestSingleViewModel*>();
qRegisterMetaType<MsgFn>("MsgFn");
QtMvvm::ServiceRegistry::instance()->registerInterface<QtMvvm::IPresenter, TestPresenter>(); QtMvvm::ServiceRegistry::instance()->registerInterface<QtMvvm::IPresenter, TestPresenter>();
} }
@ -373,15 +388,250 @@ void CoreAppTest::testPresentVmSingleton()
void CoreAppTest::testPresentDialog() void CoreAppTest::testPresentDialog()
{ {
Q_UNIMPLEMENTED(); auto presenter = TestApp::presenter();
presenter->dialogs.clear();
QSignalSpy presentSpy{presenter, &TestPresenter::dialogDone};
MessageConfig config;
config.setType("test1")
.setSubType("44")
.setTitle(QStringLiteral("title"))
.setText(QStringLiteral("text"))
.addButton(MessageConfig::Ignore)
.setButtonText(MessageConfig::Help, QStringLiteral("hell"))
.setDefaultValue(42)
.setViewProperty(QStringLiteral("test"), QStringLiteral("tset"));
QPointer<MessageResult> result = CoreApp::showDialog(config);
QVERIFY(presentSpy.wait());
QCOMPARE(presentSpy.size(), 1);
QCOMPARE(presenter->dialogs.size(), 1);
auto conf = std::get<0>(presenter->dialogs[0]);
QCOMPARE(std::get<1>(presenter->dialogs[0]), result.data());
// test message conf
QCOMPARE(conf.type(), "test1");
QCOMPARE(conf.subType(), "44");
QCOMPARE(conf.title(), QStringLiteral("title"));
QCOMPARE(conf.text(), QStringLiteral("text"));
QCOMPARE(conf.buttons(), MessageConfig::Ok | MessageConfig::Ignore | MessageConfig::Help);
QHash<MessageConfig::StandardButton, QString> btnTxt {
{MessageConfig::Help, QStringLiteral("hell")}
};
QCOMPARE(conf.buttonTexts(), btnTxt);
QCOMPARE(conf.defaultValue(), 42);
QVariantMap viewProps {
{QStringLiteral("test"), QStringLiteral("tset")}
};
QCOMPARE(conf.viewProperties(), viewProps);
// test result
result->setAutoDelete(false);
result->setCloseTarget(this, QStringLiteral("doCloseTest()"));
QSignalSpy resultSpy{result.data(), &MessageResult::dialogDone};
QVERIFY(!result->autoDelete());
QVERIFY(!result->hasResult());
wasClosed = false;
result->discardMessage();
QTRY_VERIFY(wasClosed);
result->complete(MessageConfig::Ignore, 5.6);
QVERIFY(resultSpy.wait());
QCOMPARE(resultSpy.size(), 1);
QCOMPARE(resultSpy.takeFirst()[0].toInt(), MessageConfig::Ignore);
QVERIFY(result->hasResult());
QCOMPARE(result->result(), 5.6);
result->deleteLater();
} }
void CoreAppTest::testPresentMessage_data() void CoreAppTest::testPresentMessage_data()
{ {
Q_UNIMPLEMENTED(); QTest::addColumn<MsgFn>("messageFn");
QTest::addColumn<QtMvvm::MessageConfig>("config");
QTest::addColumn<int>("btn");
QTest::addColumn<QVariant>("result");
QTest::newRow("msgbox.information") << MsgFn{[this](){
information(QStringLiteral("title"),
QStringLiteral("text"),
this, [this](){
emit msgUnblock(true);
}, QStringLiteral("okay"));
}} << MessageConfig{MessageConfig::TypeMessageBox, MessageConfig::SubTypeInformation}
.setTitle(QStringLiteral("title"))
.setText(QStringLiteral("text"))
.setButtonText(MessageConfig::Ok, QStringLiteral("okay"))
<< static_cast<int>(MessageConfig::Ok)
<< QVariant{};
QTest::newRow("msgbox.question") << MsgFn{[this](){
question(QStringLiteral("title"),
QStringLiteral("text"),
this, [this](bool ok){
emit msgUnblock(ok);
}, QStringLiteral("yep"), QStringLiteral("nep"));
}} << MessageConfig{MessageConfig::TypeMessageBox, MessageConfig::SubTypeQuestion}
.setTitle(QStringLiteral("title"))
.setText(QStringLiteral("text"))
.setButtonText(MessageConfig::Yes, QStringLiteral("yep"))
.setButtonText(MessageConfig::No, QStringLiteral("nep"))
<< static_cast<int>(MessageConfig::Yes)
<< QVariant{};
QTest::newRow("msgbox.warning") << MsgFn{[this](){
warning(QStringLiteral("title"),
QStringLiteral("text"),
this, [this](){
emit msgUnblock(true);
}, QStringLiteral("okay"));
}} << MessageConfig{MessageConfig::TypeMessageBox, MessageConfig::SubTypeWarning}
.setTitle(QStringLiteral("title"))
.setText(QStringLiteral("text"))
.setButtonText(MessageConfig::Ok, QStringLiteral("okay"))
<< static_cast<int>(MessageConfig::Ok)
<< QVariant{};
QTest::newRow("msgbox.critical") << MsgFn{[this](){
critical(QStringLiteral("title"),
QStringLiteral("text"),
this, [this](){
emit msgUnblock(true);
}, QStringLiteral("okay"));
}} << MessageConfig{MessageConfig::TypeMessageBox, MessageConfig::SubTypeCritical}
.setTitle(QStringLiteral("title"))
.setText(QStringLiteral("text"))
.setButtonText(MessageConfig::Ok, QStringLiteral("okay"))
<< static_cast<int>(MessageConfig::Ok)
<< QVariant{};
QTest::newRow("input") << MsgFn{[this](){
getInput<int>(QStringLiteral("title"),
QStringLiteral("text"),
this, [this](int value, bool ok){
emit msgUnblock(ok && value == 42);
}, 24, {
{QStringLiteral("someProp"), true}
}, QStringLiteral("okay"), QStringLiteral("break"));
}} << MessageConfig{MessageConfig::TypeInputDialog, QMetaType::typeName(QMetaType::Int)}
.setTitle(QStringLiteral("title"))
.setText(QStringLiteral("text"))
.setDefaultValue(24)
.setButtonText(MessageConfig::Ok, QStringLiteral("okay"))
.setButtonText(MessageConfig::Cancel, QStringLiteral("break"))
.setViewProperty(QStringLiteral("someProp"), true)
<< static_cast<int>(MessageConfig::Ok)
<< QVariant{42};
QTest::newRow("path.dir") << MsgFn{[this](){
getExistingDirectory(this, [this](const QUrl &url){
emit msgUnblock(url == QUrl::fromLocalFile(QStringLiteral("/dir/path.txt")));
}, QStringLiteral("title"), QUrl::fromLocalFile(QStringLiteral("/dir")));
}} << MessageConfig{MessageConfig::TypeFileDialog, MessageConfig::SubTypeDir}
.setTitle(QStringLiteral("title"))
.setDefaultValue(QUrl::fromLocalFile(QStringLiteral("/dir")))
<< static_cast<int>(MessageConfig::Ok)
<< QVariant{QUrl::fromLocalFile(QStringLiteral("/dir/path.txt"))};
QTest::newRow("path.open.file") << MsgFn{[this](){
getOpenFile(this, [this](const QUrl &url){
emit msgUnblock(url == QUrl::fromLocalFile(QStringLiteral("/dir/path.txt")));
}, QStringLiteral("title"), {
QStringLiteral("text/plain")
}, QUrl::fromLocalFile(QStringLiteral("/dir")));
}} << MessageConfig{MessageConfig::TypeFileDialog, MessageConfig::SubTypeOpenFile}
.setTitle(QStringLiteral("title"))
.setDefaultValue(QUrl::fromLocalFile(QStringLiteral("/dir")))
.setViewProperty(QStringLiteral("mimeTypes"), QStringList{QStringLiteral("text/plain")})
<< static_cast<int>(MessageConfig::Ok)
<< QVariant{QUrl::fromLocalFile(QStringLiteral("/dir/path.txt"))};
QTest::newRow("path.open.files") << MsgFn{[this](){
getOpenFiles(this, [this](const QList<QUrl> &urls){
emit msgUnblock(urls == QList<QUrl>{QUrl::fromLocalFile(QStringLiteral("/dir/path.txt"))});
}, QStringLiteral("title"), {
QStringLiteral("text/plain")
}, QUrl::fromLocalFile(QStringLiteral("/dir")));
}} << MessageConfig{MessageConfig::TypeFileDialog, MessageConfig::SubTypeOpenFiles}
.setTitle(QStringLiteral("title"))
.setDefaultValue(QUrl::fromLocalFile(QStringLiteral("/dir")))
.setViewProperty(QStringLiteral("mimeTypes"), QStringList{QStringLiteral("text/plain")})
<< static_cast<int>(MessageConfig::Ok)
<< QVariant::fromValue(QList<QUrl>{QUrl::fromLocalFile(QStringLiteral("/dir/path.txt"))});
QTest::newRow("path.save") << MsgFn{[this](){
getSaveFile(this, [this](const QUrl &url){
emit msgUnblock(url == QUrl::fromLocalFile(QStringLiteral("/dir/path.txt")));
}, QStringLiteral("title"), {
QStringLiteral("text/plain")
}, QUrl::fromLocalFile(QStringLiteral("/dir")));
}} << MessageConfig{MessageConfig::TypeFileDialog, MessageConfig::SubTypeSaveFile}
.setTitle(QStringLiteral("title"))
.setDefaultValue(QUrl::fromLocalFile(QStringLiteral("/dir")))
.setViewProperty(QStringLiteral("mimeTypes"), QStringList{QStringLiteral("text/plain")})
<< static_cast<int>(MessageConfig::Ok)
<< QVariant{QUrl::fromLocalFile(QStringLiteral("/dir/path.txt"))};
QTest::newRow("color") << MsgFn{[this](){
getColor(this, [this](const QColor &color){
emit msgUnblock(color == Qt::green);
}, QStringLiteral("title"), Qt::red);
}} << MessageConfig{MessageConfig::TypeColorDialog, MessageConfig::SubTypeRgb}
.setTitle(QStringLiteral("title"))
.setDefaultValue(QColor{Qt::red})
<< static_cast<int>(MessageConfig::Ok)
<< QVariant::fromValue<QColor>(Qt::green);
QTest::newRow("color") << MsgFn{[this](){
getColor(this, [this](const QColor &color){
emit msgUnblock(color == QColor{0xab, 0xcd, 0xef, 0x01});
}, QStringLiteral("title"), QColor{0x12, 0x34, 0x56, 0x78}, true);
}} << MessageConfig{MessageConfig::TypeColorDialog, MessageConfig::SubTypeArgb}
.setTitle(QStringLiteral("title"))
.setDefaultValue(QColor{0x12, 0x34, 0x56, 0x78})
<< static_cast<int>(MessageConfig::Ok)
<< QVariant{QColor{0xab, 0xcd, 0xef, 0x01}};
} }
void CoreAppTest::testPresentMessage() void CoreAppTest::testPresentMessage()
{
QFETCH(MsgFn, messageFn);
QFETCH(QtMvvm::MessageConfig, config);
QFETCH(int, btn);
QFETCH(QVariant, result);
QVERIFY(messageFn);
auto presenter = TestApp::presenter();
presenter->dialogs.clear();
QSignalSpy presentSpy{presenter, &TestPresenter::dialogDone};
messageFn();
QVERIFY(presentSpy.wait());
QCOMPARE(presentSpy.size(), 1);
QCOMPARE(presenter->dialogs.size(), 1);
auto conf = std::get<0>(presenter->dialogs[0]);
auto res = std::get<1>(presenter->dialogs[0]);
// test message conf
QCOMPARE(conf.type(), config.type());
QCOMPARE(conf.subType(), config.subType());
QCOMPARE(conf.title(), config.title());
QCOMPARE(conf.text(), config.text());
QCOMPARE(conf.buttons(), config.buttons());
QCOMPARE(conf.buttonTexts(), config.buttonTexts());
QCOMPARE(conf.defaultValue(), config.defaultValue());
QCOMPARE(conf.viewProperties(), config.viewProperties());
//complete it
QSignalSpy unblockSpy{this, &CoreAppTest::msgUnblock};
res->complete(static_cast<MessageConfig::StandardButton>(btn), result);
QVERIFY(unblockSpy.wait());
QCOMPARE(unblockSpy.size(), 1);
QVERIFY(unblockSpy.takeFirst()[0].toBool());
}
void CoreAppTest::testAboutMessage()
{ {
Q_UNIMPLEMENTED(); Q_UNIMPLEMENTED();
} }
@ -391,6 +641,11 @@ void CoreAppTest::testProgressMessage()
Q_UNIMPLEMENTED(); Q_UNIMPLEMENTED();
} }
void CoreAppTest::doCloseTest()
{
wasClosed = true;
}
QTEST_MAIN(CoreAppTest) QTEST_MAIN(CoreAppTest)
#include "tst_coreapp.moc" #include "tst_coreapp.moc"

Loading…
Cancel
Save