From 82212d1dd15658e25a094f26892ff937b4df41ec Mon Sep 17 00:00:00 2001 From: Damian Jansen Date: Thu, 19 Jul 2012 14:09:47 +1000 Subject: Fix inconsistent playing / paused property setting and signals Playing should only indicate false if it has been set as such in code, or in the event of a valid image but non-movie being used. Noted the edge case in documentation. Signals were not being emitted for playing/paused in the cases where an image was not loaded. Paused property was also being incorrectly assigned, which supressed pause behavior. Task-number: QTBUG-26478 Change-Id: I1aaab9b7c495811114b30b491a900804a75d590f Reviewed-by: Alan Alpert --- .../tst_qquickanimatedimage.cpp | 74 +++++++++++++++++++++- 1 file changed, 71 insertions(+), 3 deletions(-) (limited to 'tests/auto/quick/qquickanimatedimage/tst_qquickanimatedimage.cpp') diff --git a/tests/auto/quick/qquickanimatedimage/tst_qquickanimatedimage.cpp b/tests/auto/quick/qquickanimatedimage/tst_qquickanimatedimage.cpp index c527dedcff..b8749c1945 100644 --- a/tests/auto/quick/qquickanimatedimage/tst_qquickanimatedimage.cpp +++ b/tests/auto/quick/qquickanimatedimage/tst_qquickanimatedimage.cpp @@ -77,6 +77,7 @@ private slots: void invalidSource(); void qtbug_16520(); void progressAndStatusChanges(); + void playingAndPausedChanges(); }; void tst_qquickanimatedimage::cleanup() @@ -115,7 +116,7 @@ void tst_qquickanimatedimage::stopped() QQmlComponent component(&engine, testFileUrl("stickmanstopped.qml")); QQuickAnimatedImage *anim = qobject_cast(component.create()); QVERIFY(anim); - QVERIFY(!anim->isPlaying()); + QTRY_VERIFY(!anim->isPlaying()); QCOMPARE(anim->currentFrame(), 0); delete anim; @@ -303,11 +304,11 @@ void tst_qquickanimatedimage::invalidSource() QQuickAnimatedImage *anim = qobject_cast(component.create()); QVERIFY(anim); - QVERIFY(!anim->isPlaying()); + QVERIFY(anim->isPlaying()); QVERIFY(!anim->isPaused()); QCOMPARE(anim->currentFrame(), 0); QCOMPARE(anim->frameCount(), 0); - QTRY_VERIFY(anim->status() == 3); + QTRY_COMPARE(anim->status(), QQuickAnimatedImage::Error); delete anim; } @@ -459,6 +460,73 @@ void tst_qquickanimatedimage::progressAndStatusChanges() delete obj; } +void tst_qquickanimatedimage::playingAndPausedChanges() +{ + QQmlEngine engine; + QString componentStr = "import QtQuick 2.0\nAnimatedImage { source: srcImage }"; + QQmlContext *ctxt = engine.rootContext(); + ctxt->setContextProperty("srcImage", QUrl("")); + QQmlComponent component(&engine); + component.setData(componentStr.toLatin1(), QUrl::fromLocalFile("")); + QQuickAnimatedImage *obj = qobject_cast(component.create()); + QVERIFY(obj != 0); + QVERIFY(obj->status() == QQuickAnimatedImage::Null); + QTRY_VERIFY(obj->isPlaying()); + QTRY_VERIFY(!obj->isPaused()); + QSignalSpy playingSpy(obj, SIGNAL(playingChanged())); + QSignalSpy pausedSpy(obj, SIGNAL(pausedChanged())); + + // initial state + obj->setProperty("playing", true); + obj->setProperty("paused", false); + QTRY_VERIFY(obj->isPlaying()); + QTRY_VERIFY(!obj->isPaused()); + QTRY_COMPARE(playingSpy.count(), 0); + QTRY_COMPARE(pausedSpy.count(), 0); + + obj->setProperty("playing", false); + obj->setProperty("paused", true); + QTRY_VERIFY(!obj->isPlaying()); + QTRY_VERIFY(obj->isPaused()); + QTRY_COMPARE(playingSpy.count(), 1); + QTRY_COMPARE(pausedSpy.count(), 1); + + obj->setProperty("playing", true); + obj->setProperty("paused", false); + QTRY_VERIFY(obj->isPlaying()); + QTRY_VERIFY(!obj->isPaused()); + QTRY_COMPARE(playingSpy.count(), 2); + QTRY_COMPARE(pausedSpy.count(), 2); + + ctxt->setContextProperty("srcImage", testFileUrl("stickman.gif")); + QTRY_VERIFY(obj->isPlaying()); + QTRY_VERIFY(!obj->isPaused()); + QTRY_COMPARE(playingSpy.count(), 2); + QTRY_COMPARE(pausedSpy.count(), 2); + + obj->setProperty("paused", true); + QTRY_VERIFY(obj->isPlaying()); + QTRY_VERIFY(obj->isPaused()); + QTRY_COMPARE(playingSpy.count(), 2); + QTRY_COMPARE(pausedSpy.count(), 3); + + obj->setProperty("playing", false); + QTRY_VERIFY(!obj->isPlaying()); + QTRY_VERIFY(!obj->isPaused()); + QTRY_COMPARE(playingSpy.count(), 3); + QTRY_COMPARE(pausedSpy.count(), 4); + + obj->setProperty("playing", true); + + // Cannot animate this image, playing will be false + ctxt->setContextProperty("srcImage", testFileUrl("green.png")); + QTRY_VERIFY(!obj->isPlaying()); + QTRY_VERIFY(!obj->isPaused()); + QTRY_COMPARE(playingSpy.count(), 5); + QTRY_COMPARE(pausedSpy.count(), 4); + + delete obj; +} QTEST_MAIN(tst_qquickanimatedimage) #include "tst_qquickanimatedimage.moc" -- cgit v1.2.3