aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorMichael Brasser <michael.brasser@live.com>2013-01-23 22:02:53 -0600
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-01-24 12:32:41 +0100
commitc5fb0a9d8a7eedaed0c4ecfe354219a9d252062f (patch)
treeb44f75a41a20f8c46b89f5b78868003b90b2d155 /tests
parent57f593b96f2b1af21e7d84099d169d51f698672f (diff)
Disconnect from previous loading image when loading a new image.
Change-Id: If2fa95d9715a55d3f07ecf5f232e4f4b9a44a6fb Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/quick/qquickimage/data/correctStatus.qml26
-rw-r--r--tests/auto/quick/qquickimage/tst_qquickimage.cpp51
2 files changed, 77 insertions, 0 deletions
diff --git a/tests/auto/quick/qquickimage/data/correctStatus.qml b/tests/auto/quick/qquickimage/data/correctStatus.qml
new file mode 100644
index 0000000000..2326078657
--- /dev/null
+++ b/tests/auto/quick/qquickimage/data/correctStatus.qml
@@ -0,0 +1,26 @@
+import QtQuick 2.0
+
+Item {
+ property alias status: image1.status
+
+ Image {
+ id: image1
+ asynchronous: true
+ source: "image://test/first-image.png"
+ }
+
+ Image {
+ id: image2
+ asynchronous: true
+ source: "image://test/first-image.png"
+ }
+
+ Timer {
+ interval: 50
+ running: true
+ repeat: false
+ onTriggered: {
+ image1.source = "image://test/second-image.png"
+ }
+ }
+}
diff --git a/tests/auto/quick/qquickimage/tst_qquickimage.cpp b/tests/auto/quick/qquickimage/tst_qquickimage.cpp
index 7f3f0d5cbc..51ac5c640a 100644
--- a/tests/auto/quick/qquickimage/tst_qquickimage.cpp
+++ b/tests/auto/quick/qquickimage/tst_qquickimage.cpp
@@ -56,6 +56,7 @@
#include <QtGui/QPainter>
#include <QtGui/QImageReader>
#include <QQuickWindow>
+#include <QQuickImageProvider>
#include "../../shared/util.h"
#include "../../shared/testhttpserver.h"
@@ -102,6 +103,7 @@ private slots:
void sourceSize();
void progressAndStatusChanges();
void sourceSizeChanges();
+ void correctStatus();
private:
QQmlEngine engine;
@@ -868,6 +870,55 @@ void tst_qquickimage::progressAndStatusChanges()
delete obj;
}
+class TestQImageProvider : public QQuickImageProvider
+{
+public:
+ TestQImageProvider() : QQuickImageProvider(Image) {}
+
+ QImage requestImage(const QString &id, QSize *size, const QSize& requestedSize)
+ {
+ if (id == QLatin1String("first-image.png")) {
+ QTest::qWait(50);
+ int width = 100;
+ int height = 100;
+ QImage image(width, height, QImage::Format_RGB32);
+ image.fill(QColor("yellow").rgb());
+ if (size)
+ *size = QSize(width, height);
+ return image;
+ }
+
+ QTest::qWait(400);
+ int width = 100;
+ int height = 100;
+ QImage image(width, height, QImage::Format_RGB32);
+ image.fill(QColor("green").rgb());
+ if (size)
+ *size = QSize(width, height);
+ return image;
+ }
+};
+
+void tst_qquickimage::correctStatus()
+{
+ QQmlEngine engine;
+ engine.addImageProvider(QLatin1String("test"), new TestQImageProvider());
+
+ QQmlComponent component(&engine, testFileUrl("correctStatus.qml"));
+ QObject *obj = component.create();
+ QVERIFY(obj);
+
+ QTest::qWait(200);
+
+ // at this point image1 should be attempting to load second-image.png,
+ // and should be in the loading state. Without a clear prior to that load,
+ // the status can mistakenly be in the ready state.
+ QCOMPARE(obj->property("status").toInt(), int(QQuickImage::Loading));
+
+ QTest::qWait(400);
+ delete obj;
+}
+
QTEST_MAIN(tst_qquickimage)
#include "tst_qquickimage.moc"