summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/corelib/kernel')
-rw-r--r--tests/auto/corelib/kernel/qproperty/tst_qproperty.cpp76
1 files changed, 76 insertions, 0 deletions
diff --git a/tests/auto/corelib/kernel/qproperty/tst_qproperty.cpp b/tests/auto/corelib/kernel/qproperty/tst_qproperty.cpp
index 50c974c69c..b00adc6620 100644
--- a/tests/auto/corelib/kernel/qproperty/tst_qproperty.cpp
+++ b/tests/auto/corelib/kernel/qproperty/tst_qproperty.cpp
@@ -76,6 +76,7 @@ private slots:
void testNewStuff();
void qobjectObservers();
+ void compatBindings();
};
void tst_QProperty::functorBinding()
@@ -969,16 +970,19 @@ class MyQObject : public QObject
Q_PROPERTY(int bar READ bar WRITE setBar NOTIFY barChanged)
Q_PROPERTY(int read READ read NOTIFY readChanged)
Q_PROPERTY(int computed READ computed STORED false)
+ Q_PROPERTY(int compat READ compat WRITE setCompat NOTIFY compatChanged)
signals:
void fooChanged();
void barChanged();
void readChanged();
+ void compatChanged();
public slots:
void fooHasChanged() { fooChangedCount++; }
void barHasChanged() { barChangedCount++; }
void readHasChanged() { readChangedCount++; }
+ void compatHasChanged() { compatChangedCount++; }
public:
int foo() const { return fooData.value(); }
@@ -987,21 +991,37 @@ public:
void setBar(int i) { barData.setValue(i); }
int read() const { return readData.value(); }
int computed() const { return readData.value(); }
+ int compat() const { return compatData; }
+ void setCompat(int i)
+ {
+ if (compatData == i)
+ return;
+ // implement some side effect and clamping
+ ++setCompatCalled;
+ if (i < 0)
+ i = 0;
+ compatData = i;
+ emit compatChanged();
+ }
QBindable<int> bindableFoo() { return QBindable<int>(&fooData); }
QBindable<int> bindableBar() { return QBindable<int>(&barData); }
QBindable<int> bindableRead() { return QBindable<int>(&readData); }
QBindable<int> bindableComputed() { return QBindable<int>(&computedData); }
+ QBindable<int> bindableCompat() { return QBindable<int>(&compatData); }
public:
int fooChangedCount = 0;
int barChangedCount = 0;
int readChangedCount = 0;
+ int compatChangedCount = 0;
+ int setCompatCalled = 0;
Q_OBJECT_BINDABLE_PROPERTY(MyQObject, int, fooData, &MyQObject::fooChanged);
Q_OBJECT_BINDABLE_PROPERTY(MyQObject, int, barData, &MyQObject::barChanged);
Q_OBJECT_BINDABLE_PROPERTY(MyQObject, int, readData, &MyQObject::readChanged);
Q_OBJECT_COMPUTED_PROPERTY(MyQObject, int, computedData, &MyQObject::computed);
+ Q_OBJECT_COMPAT_PROPERTY(MyQObject, int, compatData, &MyQObject::setCompat)
};
void tst_QProperty::testNewStuff()
@@ -1086,6 +1106,62 @@ void tst_QProperty::qobjectObservers()
QCOMPARE(onValueChangedCalled, 3);
}
+void tst_QProperty::compatBindings()
+{
+ MyQObject object;
+ QObject::connect(&object, &MyQObject::fooChanged, &object, &MyQObject::fooHasChanged);
+ QObject::connect(&object, &MyQObject::barChanged, &object, &MyQObject::barHasChanged);
+ QObject::connect(&object, &MyQObject::compatChanged, &object, &MyQObject::compatHasChanged);
+
+ QCOMPARE(object.compatData, 0);
+ // setting data through the private interface should not call the changed signal or the public setter
+ object.compatData = 10;
+ QCOMPARE(object.compatChangedCount, 0);
+ QCOMPARE(object.setCompatCalled, 0);
+ // going through the public API should emit the signal
+ object.setCompat(42);
+ QCOMPARE(object.compatChangedCount, 1);
+ QCOMPARE(object.setCompatCalled, 1);
+
+ // setting the same value again does nothing
+ object.setCompat(42);
+ QCOMPARE(object.compatChangedCount, 1);
+ QCOMPARE(object.setCompatCalled, 1);
+
+ object.setFoo(111);
+ // just setting the binding. For a compat property, this should already trigger evaluation
+ object.compatData.setBinding(object.bindableFoo().makeBinding());
+ QCOMPARE(object.compatData.valueBypassingBindings(), 111);
+ QCOMPARE(object.compatChangedCount, 2);
+ QCOMPARE(object.setCompatCalled, 2);
+
+ QCOMPARE(object.compat(), 111);
+ QCOMPARE(object.compatChangedCount, 2);
+ QCOMPARE(object.setCompatCalled, 2);
+
+ object.setFoo(666);
+ QCOMPARE(object.compatData.valueBypassingBindings(), 666);
+ QCOMPARE(object.compatChangedCount, 3);
+ QCOMPARE(object.setCompatCalled, 3);
+
+ QCOMPARE(object.compat(), 666);
+ QCOMPARE(object.compatChangedCount, 3);
+ QCOMPARE(object.setCompatCalled, 3);
+
+ object.setFoo(-42);
+ QCOMPARE(object.compatChangedCount, 4);
+ QCOMPARE(object.setCompatCalled, 4);
+
+ QCOMPARE(object.compat(), 0);
+ QCOMPARE(object.compatChangedCount, 4);
+ QCOMPARE(object.setCompatCalled, 4);
+
+ object.setCompat(0);
+ QCOMPARE(object.compat(), 0);
+ QCOMPARE(object.compatChangedCount, 4);
+ QCOMPARE(object.setCompatCalled, 4);
+}
+
QTEST_MAIN(tst_QProperty);
#include "tst_qproperty.moc"