tst_QPixmapCache: check insert() reports failure

None of the existing tests failed when I started to return a valid key
from a failed insert(QPixmap), so add a test that would fail.

Pick-to: 6.6 6.5 6.2 5.15
Change-Id: I74f23d2ec4c04151f8f1266c0c503713d4642f3a
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
This commit is contained in:
Marc Mutz 2023-06-07 07:15:30 +02:00
parent 6032845ca2
commit e409d771d9

View File

@ -31,6 +31,7 @@ private slots:
void setCacheLimit(); void setCacheLimit();
void find(); void find();
void insert(); void insert();
void failedInsertReturnsInvalidKey();
void replace(); void replace();
void remove(); void remove();
void clear(); void clear();
@ -269,6 +270,7 @@ void tst_QPixmapCache::insert()
for (int i = 0; i < numberOfKeys; ++i) { for (int i = 0; i < numberOfKeys; ++i) {
QPixmap p3(10,10); QPixmap p3(10,10);
keys.append(QPixmapCache::insert(p3)); keys.append(QPixmapCache::insert(p3));
QVERIFY(keys.back().isValid());
} }
num = 0; num = 0;
@ -282,6 +284,32 @@ void tst_QPixmapCache::insert()
QVERIFY(num <= estimatedNum); QVERIFY(num <= estimatedNum);
} }
void tst_QPixmapCache::failedInsertReturnsInvalidKey()
{
//
// GIVEN: a pixmap whose memory footprint exceeds the cache's limit:
//
QPixmapCache::setCacheLimit(20);
QPixmap pm(256, 256);
pm.fill(Qt::transparent);
QCOMPARE_GT(pm.width() * pm.height() * pm.depth() / 8,
QPixmapCache::cacheLimit() * 1024);
//
// WHEN: trying to add this pixmap to the cache
//
const auto success = QPixmapCache::insert(u"foo"_s, pm); // QString API
{ QPixmap r; QVERIFY(!QPixmapCache::find(u"foo"_s, &r)); }
const auto key = QPixmapCache::insert(pm); // "int" API
//
// THEN: failure is reported to the user
//
QVERIFY(!key.isValid()); // "int" API
QVERIFY(!success); // QString API
}
void tst_QPixmapCache::replace() void tst_QPixmapCache::replace()
{ {
//The int part of the API //The int part of the API