diff --git a/autotests/gravatarcachetest.h b/autotests/gravatarcachetest.h --- a/autotests/gravatarcachetest.h +++ b/autotests/gravatarcachetest.h @@ -29,8 +29,10 @@ explicit GravatarCacheTest(QObject *parent = nullptr); ~GravatarCacheTest(); private Q_SLOTS: + void initTestCase(); void shouldHaveDefaultValue(); void shouldChangeCacheValue(); + void testLookup(); }; #endif // GRAVATARCACHETEST_H diff --git a/autotests/gravatarcachetest.cpp b/autotests/gravatarcachetest.cpp --- a/autotests/gravatarcachetest.cpp +++ b/autotests/gravatarcachetest.cpp @@ -20,8 +20,12 @@ #include "gravatarcachetest.h" #include "../src/misc/gravatarcache.h" +#include +#include #include +using namespace Gravatar; + GravatarCacheTest::GravatarCacheTest(QObject *parent) : QObject(parent) { @@ -31,6 +35,11 @@ { } +void GravatarCacheTest::initTestCase() +{ + QStandardPaths::setTestModeEnabled(true); +} + void GravatarCacheTest::shouldHaveDefaultValue() { Gravatar::GravatarCache gravatarCache; @@ -50,4 +59,41 @@ QCOMPARE(gravatarCache.maximumSize(), val); } +void GravatarCacheTest::testLookup() +{ + { + GravatarCache cache; + cache.clearAllCache(); + bool found = false; + const auto result = cache.loadGravatarPixmap(QStringLiteral("fa1afe1"), found); + QVERIFY(!found); + QVERIFY(result.isNull()); + } + + QPixmap px(42, 42); + px.fill(Qt::blue); + + { + GravatarCache cache; + cache.saveGravatarPixmap(QStringLiteral("fa1afe1"), px); + + // in-memory cache lookup + bool found = false; + const auto result = cache.loadGravatarPixmap(QStringLiteral("fa1afe1"), found); + QVERIFY(found); + QVERIFY(!result.isNull()); + QCOMPARE(result.size(), QSize(42, 42)); + } + + { + // disk lookup + GravatarCache cache; + bool found = false; + const auto result = cache.loadGravatarPixmap(QStringLiteral("fa1afe1"), found); + QVERIFY(found); + QVERIFY(!result.isNull()); + QCOMPARE(result.size(), QSize(42, 42)); + } +} + QTEST_MAIN(GravatarCacheTest) diff --git a/src/misc/gravatarcache.h b/src/misc/gravatarcache.h --- a/src/misc/gravatarcache.h +++ b/src/misc/gravatarcache.h @@ -26,9 +26,8 @@ namespace Gravatar { class GravatarCachePrivate; -class GRAVATAR_EXPORT GravatarCache : public QObject +class GRAVATAR_EXPORT GravatarCache { - Q_OBJECT public: static GravatarCache *self(); @@ -46,6 +45,7 @@ void clearAllCache(); private: + Q_DISABLE_COPY(GravatarCache) GravatarCachePrivate *const d; }; } diff --git a/src/misc/gravatarcache.cpp b/src/misc/gravatarcache.cpp --- a/src/misc/gravatarcache.cpp +++ b/src/misc/gravatarcache.cpp @@ -33,19 +33,17 @@ { public: GravatarCachePrivate() - : mMaximumSize(20) { } QCache mCachePixmap; QString mGravatarPath; - int mMaximumSize; }; GravatarCache::GravatarCache() : d(new Gravatar::GravatarCachePrivate) { - d->mCachePixmap.setMaxCost(d->mMaximumSize); + d->mCachePixmap.setMaxCost(20); //Make sure that this folder is created. Otherwise we can't store gravatar d->mGravatarPath = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QLatin1String("/gravatar/"); QDir().mkpath(d->mGravatarPath); @@ -104,14 +102,13 @@ int GravatarCache::maximumSize() const { - return d->mMaximumSize; + return d->mCachePixmap.maxCost(); } void GravatarCache::setMaximumSize(int maximumSize) { - if (d->mMaximumSize != maximumSize) { - d->mMaximumSize = maximumSize; - d->mCachePixmap.setMaxCost(d->mMaximumSize); + if (d->mCachePixmap.maxCost() != maximumSize) { + d->mCachePixmap.setMaxCost(maximumSize); } }