From 1a779b15b23682ad5d7d1136204d04e92f9c6964 Mon Sep 17 00:00:00 2001 From: Ivan Solovev Date: Fri, 25 Aug 2023 17:21:11 +0200 Subject: [PATCH] QPauseAnimation: extend tests and fix binding loop Extend the unit-tests for bindable properties and fix the discovered binding loop by using {set}ValueBypassingBindings() in the setter of the duration property. The code refactoring does not modify the setter logic, because previously the binding was anyway implicitly removed when calling the assignment operator. The updated code just does it explicitly. Task-number: QTBUG-116346 Change-Id: I0f339d182efb60500ee7f12e407f200d739da312 Reviewed-by: Ulf Hermann (cherry picked from commit b64e36240b807e6dba783732593036439fec8a62) Reviewed-by: Qt Cherry-pick Bot --- src/corelib/animation/qpauseanimation.cpp | 7 +++---- .../auto/corelib/animation/qpauseanimation/CMakeLists.txt | 1 + .../animation/qpauseanimation/tst_qpauseanimation.cpp | 7 +++++++ 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/corelib/animation/qpauseanimation.cpp b/src/corelib/animation/qpauseanimation.cpp index eb1e6c3c81b..344b21946e3 100644 --- a/src/corelib/animation/qpauseanimation.cpp +++ b/src/corelib/animation/qpauseanimation.cpp @@ -94,11 +94,10 @@ void QPauseAnimation::setDuration(int msecs) } Q_D(QPauseAnimation); - if (msecs != d->duration) { - d->duration = msecs; + d->duration.removeBindingUnlessInWrapper(); + if (msecs != d->duration.valueBypassingBindings()) { + d->duration.setValueBypassingBindings(msecs); d->duration.notify(); - } else { - d->duration.removeBindingUnlessInWrapper(); } } diff --git a/tests/auto/corelib/animation/qpauseanimation/CMakeLists.txt b/tests/auto/corelib/animation/qpauseanimation/CMakeLists.txt index a6ec4bffade..cc8a7ac6adc 100644 --- a/tests/auto/corelib/animation/qpauseanimation/CMakeLists.txt +++ b/tests/auto/corelib/animation/qpauseanimation/CMakeLists.txt @@ -10,4 +10,5 @@ qt_internal_add_test(tst_qpauseanimation tst_qpauseanimation.cpp LIBRARIES Qt::CorePrivate + Qt::TestPrivate ) diff --git a/tests/auto/corelib/animation/qpauseanimation/tst_qpauseanimation.cpp b/tests/auto/corelib/animation/qpauseanimation/tst_qpauseanimation.cpp index 53c80ef71f4..90357ef4776 100644 --- a/tests/auto/corelib/animation/qpauseanimation/tst_qpauseanimation.cpp +++ b/tests/auto/corelib/animation/qpauseanimation/tst_qpauseanimation.cpp @@ -2,6 +2,7 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 #include +#include #include #include @@ -456,6 +457,12 @@ void tst_QPauseAnimation::bindings() "QPauseAnimation::setDuration: cannot set a negative duration"); animation.setDuration(-1); QCOMPARE(durationObserver, 46); + + QTestPrivate::testReadWritePropertyBasics(animation, 10, 20, "duration"); + if (QTest::currentTestFailed()) { + qDebug("Failed property test for QPauseAnimation::duration"); + return; + } } QTEST_MAIN(tst_QPauseAnimation)