tests/auto/declarative/qdeclarativepixmapcache/tst_qdeclarativepixmapcache.cpp
changeset 37 758a864f9613
parent 33 3e2da88830cd
--- a/tests/auto/declarative/qdeclarativepixmapcache/tst_qdeclarativepixmapcache.cpp	Fri Sep 17 08:34:18 2010 +0300
+++ b/tests/auto/declarative/qdeclarativepixmapcache/tst_qdeclarativepixmapcache.cpp	Mon Oct 04 01:19:32 2010 +0300
@@ -42,6 +42,7 @@
 #include <QtTest/QtTest>
 #include <private/qdeclarativepixmapcache_p.h>
 #include <QtDeclarative/qdeclarativeengine.h>
+#include <QtDeclarative/qdeclarativeimageprovider.h>
 #include <QNetworkReply>
 #include "testhttpserver.h"
 #include "../../../shared/util.h"
@@ -70,6 +71,9 @@
     void single_data();
     void parallel();
     void parallel_data();
+    void massive();
+    void cancelcrash();
+    void shrinkcache();
 
 private:
     QDeclarativeEngine engine;
@@ -276,6 +280,79 @@
     qDeleteAll(pixmaps);
 }
 
+void tst_qdeclarativepixmapcache::massive()
+{
+    QUrl url = thisfile.resolved(QUrl("data/massive.png"));
+
+    // Confirm that massive images remain in the cache while they are
+    // in use by the application.
+    {
+    qint64 cachekey = 0;
+    QDeclarativePixmap p(0, url);
+    QVERIFY(p.isReady());
+    QVERIFY(p.pixmap().size() == QSize(10000, 1000));
+    cachekey = p.pixmap().cacheKey();
+
+    QDeclarativePixmap p2(0, url);
+    QVERIFY(p2.isReady());
+    QVERIFY(p2.pixmap().size() == QSize(10000, 1000));
+
+    QVERIFY(p2.pixmap().cacheKey() == cachekey);
+    }
+
+    // Confirm that massive images are removed from the cache when
+    // they become unused
+    {
+    qint64 cachekey = 0;
+    {
+        QDeclarativePixmap p(0, url);
+        QVERIFY(p.isReady());
+        QVERIFY(p.pixmap().size() == QSize(10000, 1000));
+        cachekey = p.pixmap().cacheKey();
+    }
+
+    QDeclarativePixmap p2(0, url);
+    QVERIFY(p2.isReady());
+    QVERIFY(p2.pixmap().size() == QSize(10000, 1000));
+
+    QVERIFY(p2.pixmap().cacheKey() != cachekey);
+    }
+}
+
+// QTBUG-12729
+void tst_qdeclarativepixmapcache::cancelcrash()
+{
+    QUrl url("http://127.0.0.1:14452/cancelcrash_notexist.png");
+    for (int ii = 0; ii < 1000; ++ii) {
+        QDeclarativePixmap pix(&engine, url);
+    }
+}
+
+class MyPixmapProvider : public QDeclarativeImageProvider
+{
+public:
+    MyPixmapProvider()
+    : QDeclarativeImageProvider(Pixmap) {}
+
+    virtual QPixmap requestPixmap(const QString &d, QSize *, const QSize &) {
+        QPixmap pix(800, 600);
+        pix.fill(Qt::red);
+        return pix;
+    }
+};
+
+// QTBUG-13345
+void tst_qdeclarativepixmapcache::shrinkcache()
+{
+    QDeclarativeEngine engine;
+    engine.addImageProvider(QLatin1String("mypixmaps"), new MyPixmapProvider);
+
+    for (int ii = 0; ii < 4000; ++ii) {
+        QUrl url("image://mypixmaps/" + QString::number(ii));
+        QDeclarativePixmap p(&engine, url);
+    }
+}
+
 QTEST_MAIN(tst_qdeclarativepixmapcache)
 
 #include "tst_qdeclarativepixmapcache.moc"