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 <ulf.hermann@qt.io>
(cherry picked from commit b64e36240b807e6dba783732593036439fec8a62)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Ivan Solovev 2023-08-25 17:21:11 +02:00 committed by Qt Cherry-pick Bot
parent 2bc116f832
commit 1a779b15b2
3 changed files with 11 additions and 4 deletions

View File

@ -94,11 +94,10 @@ void QPauseAnimation::setDuration(int msecs)
}
Q_D(QPauseAnimation);
if (msecs != d->duration) {
d->duration = msecs;
d->duration.notify();
} else {
d->duration.removeBindingUnlessInWrapper();
if (msecs != d->duration.valueBypassingBindings()) {
d->duration.setValueBypassingBindings(msecs);
d->duration.notify();
}
}

View File

@ -10,4 +10,5 @@ qt_internal_add_test(tst_qpauseanimation
tst_qpauseanimation.cpp
LIBRARIES
Qt::CorePrivate
Qt::TestPrivate
)

View File

@ -2,6 +2,7 @@
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include <QTest>
#include <QtTest/private/qpropertytesthelper_p.h>
#include <QtCore/qpauseanimation.h>
#include <QtCore/qpropertyanimation.h>
@ -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)