void tst_QPixmapCache::replace() { //The int part of the API QPixmap p1(10, 10); p1.fill(Qt::red); QPixmap p2(10, 10); p2.fill(Qt::yellow); QPixmapCache::Key key = QPixmapCache::insert(p1); QCOMPARE(getPrivate(key)->isValid, true); QPixmap p3; QVERIFY(QPixmapCache::find(key, &p3) == 1); QPixmapCache::replace(key, p2); QVERIFY(QPixmapCache::find(key, &p3) == 1); QCOMPARE(getPrivate(key)->isValid, true); QCOMPARE(getPrivate(key)->key, 1); QCOMPARE(p3.width(), 10); QCOMPARE(p3.height(), 10); QCOMPARE(p3, p2); //Broken keys QCOMPARE(QPixmapCache::replace(QPixmapCache::Key(), p2), false); }
void tst_QFileInfo::copy() { QTemporaryFile *t; t = new QTemporaryFile; t->open(); QFileInfo info(t->fileName()); QVERIFY(info.exists()); //copy constructor QFileInfo info2(info); QFileInfoPrivate *privateInfo = getPrivate(info); QFileInfoPrivate *privateInfo2 = getPrivate(info2); QCOMPARE(privateInfo->data, privateInfo2->data); //operator = QFileInfo info3 = info; QFileInfoPrivate *privateInfo3 = getPrivate(info3); QCOMPARE(privateInfo->data, privateInfo3->data); QCOMPARE(privateInfo2->data, privateInfo3->data); //refreshing info3 will detach it QFile file(info.absoluteFilePath()); QVERIFY(file.open(QFile::WriteOnly)); QCOMPARE(file.write("JAJAJAA"), qint64(7)); file.flush(); QTest::qWait(250); #if defined(Q_OS_WIN) || defined(Q_OS_WINCE) if (QSysInfo::windowsVersion() & QSysInfo::WV_VISTA || QSysInfo::windowsVersion() & QSysInfo::WV_CE_based) file.close(); #endif #if defined(Q_OS_WINCE) // On Windows CE we need to close the file. // Otherwise the content will be cached and not // flushed to the storage, although we flushed it // manually!!! CE has interim cache, we cannot influence. QTest::qWait(5000); #endif info3.refresh(); QVERIFY(privateInfo->data != privateInfo3->data); QVERIFY(privateInfo2->data != privateInfo3->data); QCOMPARE(privateInfo->data, privateInfo2->data); }
void tst_QPixmapCache::clear() { QPixmap p1(10, 10); p1.fill(Qt::red); // Calcuate estimated num of items what fits to cache int estimatedNum = (1024 * QPixmapCache::cacheLimit()) / ((p1.width() * p1.height() * p1.depth()) / 8); // Mare sure we will put enough items to reach the cache limit const int numberOfKeys = estimatedNum + 1000; for (int i = 0; i < numberOfKeys; ++i) QVERIFY(QPixmapCache::find("x" + QString::number(i)) == 0); for (int j = 0; j < numberOfKeys; ++j) QPixmapCache::insert(QString::number(j), p1); int num = 0; for (int k = 0; k < numberOfKeys; ++k) { if (QPixmapCache::find(QString::number(k), p1)) ++num; } QVERIFY(num > 0); QPixmapCache::clear(); for (int k = 0; k < numberOfKeys; ++k) QVERIFY(QPixmapCache::find(QString::number(k)) == 0); //The int part of the API QPixmap p2(10, 10); p2.fill(Qt::red); QList<QPixmapCache::Key> keys; for (int k = 0; k < numberOfKeys; ++k) keys.append(QPixmapCache::insert(p2)); QPixmapCache::clear(); for (int k = 0; k < numberOfKeys; ++k) { QVERIFY(QPixmapCache::find(keys.at(k), &p1) == 0); QCOMPARE(getPrivate(keys[k])->isValid, false); } }
void tst_QPixmapCache::find() { QPixmap p1(10, 10); p1.fill(Qt::red); QVERIFY(QPixmapCache::insert("P1", p1)); QPixmap p2; QVERIFY(QPixmapCache::find("P1", p2)); QCOMPARE(p2.width(), 10); QCOMPARE(p2.height(), 10); QCOMPARE(p1, p2); // obsolete QPixmap *p3 = QPixmapCache::find("P1"); QVERIFY(p3); QCOMPARE(p1, *p3); //The int part of the API QPixmapCache::Key key = QPixmapCache::insert(p1); QVERIFY(QPixmapCache::find(key, &p2)); QCOMPARE(p2.width(), 10); QCOMPARE(p2.height(), 10); QCOMPARE(p1, p2); QPixmapCache::clear(); QPixmapCache::setCacheLimit(128); QPixmap p4(10,10); key = QPixmapCache::insert(p4); p4.detach(); QPixmap p5(10,10); QList<QPixmapCache::Key> keys; for (int i = 0; i < 4000; ++i) QPixmapCache::insert(p5); //at that time the first key has been erase because no more place in the cache QVERIFY(QPixmapCache::find(key, &p1) == 0); QCOMPARE(getPrivate(key)->isValid, false); }
void tst_QPixmapCache::pixmapKey() { QPixmapCache::Key key; //Default constructed keys have no d pointer unless //we use them QVERIFY(!getPrivate(key)); //Let's put a d pointer QPixmapCache::KeyData** keyd = getPrivateRef(key); *keyd = new QPixmapCache::KeyData; QCOMPARE(getPrivate(key)->ref, 1); QPixmapCache::Key key2; //Let's put a d pointer QPixmapCache::KeyData** key2d = getPrivateRef(key2); *key2d = new QPixmapCache::KeyData; QCOMPARE(getPrivate(key2)->ref, 1); key = key2; QCOMPARE(getPrivate(key2)->ref, 2); QCOMPARE(getPrivate(key)->ref, 2); QPixmapCache::Key key3; //Let's put a d pointer QPixmapCache::KeyData** key3d = getPrivateRef(key3); *key3d = new QPixmapCache::KeyData; QPixmapCache::Key key4 = key3; QCOMPARE(getPrivate(key3)->ref, 2); QCOMPARE(getPrivate(key4)->ref, 2); key4 = key; QCOMPARE(getPrivate(key4)->ref, 3); QCOMPARE(getPrivate(key3)->ref, 1); QPixmapCache::Key key5(key3); QCOMPARE(getPrivate(key3)->ref, 2); QCOMPARE(getPrivate(key5)->ref, 2); //let test default constructed keys QPixmapCache::Key key6; QVERIFY(!getPrivate(key6)); QPixmapCache::Key key7; QVERIFY(!getPrivate(key7)); key6 = key7; QVERIFY(!getPrivate(key6)); QVERIFY(!getPrivate(key7)); QPixmapCache::Key key8(key7); QVERIFY(!getPrivate(key8)); }
void tst_QPixmapCache::remove() { QPixmap p1(10, 10); p1.fill(Qt::red); QPixmapCache::insert("red", p1); p1.fill(Qt::yellow); QPixmap p2; QVERIFY(QPixmapCache::find("red", p2)); QVERIFY(p1.toImage() != p2.toImage()); QVERIFY(p1.toImage() == p1.toImage()); // sanity check QPixmapCache::remove("red"); QVERIFY(QPixmapCache::find("red") == 0); QPixmapCache::remove("red"); QVERIFY(QPixmapCache::find("red") == 0); QPixmapCache::remove("green"); QVERIFY(QPixmapCache::find("green") == 0); //The int part of the API QPixmapCache::clear(); p1.fill(Qt::red); QPixmapCache::Key key = QPixmapCache::insert(p1); p1.fill(Qt::yellow); QVERIFY(QPixmapCache::find(key, &p2)); QVERIFY(p1.toImage() != p2.toImage()); QVERIFY(p1.toImage() == p1.toImage()); // sanity check QPixmapCache::remove(key); QVERIFY(QPixmapCache::find(key, &p1) == 0); //Broken key QPixmapCache::remove(QPixmapCache::Key()); QVERIFY(QPixmapCache::find(QPixmapCache::Key(), &p1) == 0); //Test if keys are release QPixmapCache::clear(); key = QPixmapCache::insert(p1); QCOMPARE(getPrivate(key)->key, 1); QPixmapCache::remove(key); key = QPixmapCache::insert(p1); QCOMPARE(getPrivate(key)->key, 1); //Test if pixmaps are correctly deleted QPixmapCache::clear(); key = QPixmapCache::insert(p1); QCOMPARE(getPrivate(key)->key, 1); QVERIFY(QPixmapCache::find(key, &p1) != 0); QPixmapCache::remove(key); QCOMPARE(p1.isDetached(), true); //We mix both part of the API QPixmapCache::clear(); p1.fill(Qt::red); QPixmapCache::insert("red", p1); key = QPixmapCache::insert(p1); QPixmapCache::remove(key); QVERIFY(QPixmapCache::find(key, &p1) == 0); QVERIFY(QPixmapCache::find("red") != 0); }
void tst_QPixmapCache::setCacheLimit() { QPixmap *p1 = new QPixmap(2, 3); QPixmapCache::insert("P1", *p1); QVERIFY(QPixmapCache::find("P1") != 0); delete p1; QPixmapCache::setCacheLimit(0); QVERIFY(QPixmapCache::find("P1") == 0); p1 = new QPixmap(2, 3); QPixmapCache::setCacheLimit(1000); QPixmapCache::insert("P1", *p1); QVERIFY(QPixmapCache::find("P1") != 0); delete p1; //The int part of the API p1 = new QPixmap(2, 3); QPixmapCache::Key key = QPixmapCache::insert(*p1); QVERIFY(QPixmapCache::find(key, p1) != 0); delete p1; QPixmapCache::setCacheLimit(0); QVERIFY(QPixmapCache::find(key, p1) == 0); p1 = new QPixmap(2, 3); QPixmapCache::setCacheLimit(1000); QPixmapCache::replace(key, *p1); QVERIFY(QPixmapCache::find(key, p1) == 0); delete p1; //Let check if keys are released when the pixmap cache is //full or has been flushed. QPixmapCache::clear(); p1 = new QPixmap(2, 3); key = QPixmapCache::insert(*p1); QVERIFY(QPixmapCache::find(key, p1) != 0); QPixmapCache::setCacheLimit(0); QVERIFY(QPixmapCache::find(key, p1) == 0); QPixmapCache::setCacheLimit(1000); key = QPixmapCache::insert(*p1); QCOMPARE(getPrivate(key)->isValid, true); QCOMPARE(getPrivate(key)->key, 1); delete p1; //Let check if removing old entries doesn't let you get // wrong pixmaps QPixmapCache::clear(); QPixmap p2; p1 = new QPixmap(2, 3); key = QPixmapCache::insert(*p1); QVERIFY(QPixmapCache::find(key, &p2) != 0); //we flush the cache QPixmapCache::setCacheLimit(0); QPixmapCache::setCacheLimit(1000); QPixmapCache::Key key2 = QPixmapCache::insert(*p1); QCOMPARE(getPrivate(key2)->key, 1); QVERIFY(QPixmapCache::find(key, &p2) == 0); QVERIFY(QPixmapCache::find(key2, &p2) != 0); QCOMPARE(p2, *p1); delete p1; //Here we simulate the flushing when the app is idle /*QPixmapCache::clear(); QPixmapCache::setCacheLimit(originalCacheLimit); p1 = new QPixmap(300, 300); key = QPixmapCache::insert(*p1); QCOMPARE(getPrivate(key)->key, 1); key2 = QPixmapCache::insert(*p1); key2 = QPixmapCache::insert(*p1); QPixmapCache::Key key3 = QPixmapCache::insert(*p1); QTest::qWait(32000); key2 = QPixmapCache::insert(*p1); QCOMPARE(getPrivate(key2)->key, 1); //This old key is not valid anymore after the flush QCOMPARE(getPrivate(key)->isValid, false); QVERIFY(QPixmapCache::find(key, &p2) == 0); delete p1;*/ }