From 927647cd032cd2e43bae3184b879586849ffee50 Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Sat, 29 Aug 2020 14:02:36 +0200 Subject: Fix QPropertyAlias to work with all kinds of properties So far QPropertyAlias was limited to working with QProperty. Change the implementation, so it can be constructed from any property or even a QBindable. Change-Id: I175cffe94a9ef332367d39faa976eb065b0e6ffe Reviewed-by: Qt CI Bot Reviewed-by: Fabian Kosmale --- .../corelib/kernel/qproperty/tst_qproperty.cpp | 37 ++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'tests') diff --git a/tests/auto/corelib/kernel/qproperty/tst_qproperty.cpp b/tests/auto/corelib/kernel/qproperty/tst_qproperty.cpp index f5652eb599..9bc2ce26b6 100644 --- a/tests/auto/corelib/kernel/qproperty/tst_qproperty.cpp +++ b/tests/auto/corelib/kernel/qproperty/tst_qproperty.cpp @@ -78,6 +78,7 @@ private slots: void qobjectObservers(); void compatBindings(); void metaProperty(); + void aliasOnMetaProperty(); }; void tst_QProperty::functorBinding() @@ -1210,6 +1211,42 @@ void tst_QProperty::metaProperty() QCOMPARE(object.fooData.value(), 1); } +void tst_QProperty::aliasOnMetaProperty() +{ + MyQObject object; + QPropertyAlias alias(object.bindableFoo()); + + QVERIFY(alias.isValid()); + QCOMPARE(alias.value(), object.foo()); + QVERIFY(!alias.hasBinding()); + + object.setFoo(42); + QCOMPARE(alias.value(), 42); + + auto f = [&object]() -> int { + return object.barData; + }; + object.bindableFoo().setBinding(f); + QVERIFY(alias.hasBinding()); + QCOMPARE(alias.value(), object.bar()); + + object.setBar(111); + QCOMPARE(alias.value(), 111); + + int changedCount = 0; + auto observer = alias.onValueChanged([&changedCount]() { ++changedCount; }); + QCOMPARE(changedCount, 0); + object.setBar(666); + QCOMPARE(changedCount, 1); + + alias.setBinding([&object]() { return object.read(); }); + QCOMPARE(changedCount, 2); + QCOMPARE(alias.value(), 0); + object.readData = 100; + QCOMPARE(changedCount, 3); + QCOMPARE(alias.value(), 100); +} + QTEST_MAIN(tst_QProperty); #include "tst_qproperty.moc" -- cgit v1.2.3