Browse Source

added binding tests

pull/2/head
Skycoder42 7 years ago
parent
commit
1b8bb2933c
No known key found for this signature in database GPG Key ID: 8E01AD9EF0578D2B
  1. 5
      src/mvvmcore/binding.cpp
  2. 1
      src/mvvmcore/binding.h
  3. 11
      tests/auto/mvvmcore/binding/binding.pro
  4. 147
      tests/auto/mvvmcore/binding/tst_binding.cpp
  5. 3
      tests/auto/mvvmcore/mvvmcore.pro
  6. 10
      tests/auto/mvvmcore/serviceregistry/serviceregistry.pro

5
src/mvvmcore/binding.cpp

@ -100,6 +100,11 @@ bool Binding::isValid() const
return d;
}
Binding::operator bool() const
{
return d;
}
void Binding::unbind()
{
if(d) {

1
src/mvvmcore/binding.h

@ -33,6 +33,7 @@ public:
//! Specifies whether the binding is a valid and active binding
bool isValid() const;
operator bool() const;
//! Remove the binding by disconnecting all change signals
Q_INVOKABLE void unbind();

11
tests/auto/mvvmcore/binding/binding.pro

@ -0,0 +1,11 @@
TEMPLATE = app
QT += testlib mvvmcore
QT -= gui
CONFIG += console
CONFIG -= app_bundle
TARGET = tst_binding
SOURCES += \
tst_binding.cpp

147
tests/auto/mvvmcore/binding/tst_binding.cpp

@ -0,0 +1,147 @@
#include <QString>
#include <QtTest>
#include <QCoreApplication>
#include <QtMvvmCore/Binding>
using namespace QtMvvm;
class BindingTest : public QObject
{
Q_OBJECT
Q_PROPERTY(int vmProp MEMBER vmProp NOTIFY vmPropChanged)
Q_PROPERTY(int vProp MEMBER vProp NOTIFY vPropChanged)
Q_SIGNALS:
void vmPropChanged(int vmProp);
void vPropChanged(int vProp);
void triggerVm();
void triggerV();
private Q_SLOTS:
void testSingleInit();
void testOneWayToView();
void testOneWayToViewModel();
void testTwoWay();
void testCustomChangeSignals();
private:
int vmProp = 0;
int vProp = 0;
};
void BindingTest::testSingleInit()
{
vmProp = 42;
vProp = 0;
auto binding = bind(this, "vmProp", this, "vProp", Binding::SingleInit);
QVERIFY(binding);
QCOMPARE(vmProp, 42);
QCOMPARE(vProp, vmProp);
vmProp = 33;
emit vmPropChanged(vmProp);
QCOMPARE(vProp, 42);
emit vPropChanged(vProp);
QCOMPARE(vmProp, 33);
binding.unbind();
QVERIFY(!binding.isValid());
}
void BindingTest::testOneWayToView()
{
vmProp = 13;
vProp = 0;
auto binding = bind(this, "vmProp", this, "vProp", Binding::OneWayToView);
QVERIFY(binding);
QCOMPARE(vmProp, 13);
QCOMPARE(vProp, vmProp);
vmProp = 33;
emit vmPropChanged(vmProp);
QCOMPARE(vProp, vmProp);
vProp = 13;
emit vPropChanged(vProp);
QCOMPARE(vmProp, 33);
binding.unbind();
QVERIFY(!binding.isValid());
}
void BindingTest::testOneWayToViewModel()
{
vmProp = 0;
vProp = 11;
auto binding = bind(this, "vmProp", this, "vProp", Binding::OneWayToViewModel);
QVERIFY(binding);
QCOMPARE(vmProp, 0);
QCOMPARE(vProp, 11);
vmProp = 55;
emit vmPropChanged(vmProp);
QCOMPARE(vProp, 11);
vProp = 5;
emit vPropChanged(vProp);
QCOMPARE(vmProp, vProp);
binding.unbind();
QVERIFY(!binding.isValid());
}
void BindingTest::testTwoWay()
{
vmProp = 77;
vProp = 0;
auto binding = bind(this, "vmProp", this, "vProp", Binding::TwoWay);
QVERIFY(binding);
QCOMPARE(vmProp, 77);
QCOMPARE(vProp, vmProp);
vmProp = 12;
emit vmPropChanged(vmProp);
QCOMPARE(vProp, 12);
QCOMPARE(vProp, vmProp);
vProp = 9;
emit vPropChanged(vProp);
QCOMPARE(vmProp, 9);
QCOMPARE(vmProp, vProp);
binding.unbind();
QVERIFY(!binding.isValid());
}
void BindingTest::testCustomChangeSignals()
{
vmProp = 16;
vProp = 0;
auto binding = bind(this, "vmProp", this, "vProp", Binding::TwoWay, "triggerVm()", "triggerV()");
QVERIFY(binding);
QCOMPARE(vmProp, 16);
QCOMPARE(vProp, vmProp);
vmProp = 8;
emit vmPropChanged(vmProp);
QCOMPARE(vProp, 16);
emit triggerVm();
QCOMPARE(vProp, 8);
QCOMPARE(vProp, vmProp);
vProp = 99;
emit vPropChanged(vProp);
QCOMPARE(vmProp, 8);
emit triggerV();
QCOMPARE(vmProp, 99);
QCOMPARE(vmProp, vProp);
binding.unbind();
QVERIFY(!binding.isValid());
}
QTEST_MAIN(BindingTest)
#include "tst_binding.moc"

3
tests/auto/mvvmcore/mvvmcore.pro

@ -3,7 +3,8 @@ TEMPLATE = subdirs
SUBDIRS += \
settingsgenerator \
serviceregistry \
serviceregistrytestplugin
serviceregistrytestplugin \
binding
serviceregistry.depends += serviceregistrytestplugin

10
tests/auto/mvvmcore/serviceregistry/serviceregistry.pro

@ -7,16 +7,16 @@ CONFIG -= app_bundle
TARGET = tst_serviceregistry
SOURCES += \
tst_serviceregistry.cpp \
testservice.cpp \
testobject.cpp
HEADERS += \
testinterface.h \
testservice.h \
testobject.h \
plugintestinterface.h
SOURCES += \
tst_serviceregistry.cpp \
testservice.cpp \
testobject.cpp
load(qt_build_paths)
DEFINES += PLUGIN_TESTDIR=\\\"$$MODULE_BASE_OUTDIR/tests/plugins\\\"

Loading…
Cancel
Save