on xenial help sign in
merge with sharedunitymenumodel branch
commit6b61029dc3eb6f9792c2fd895ec6a5a9cab2dda9 authorNick Dedekind <nick.dedekind@canonical.com> dateMon 20 Oct 2014, 10:39 (12 years ago) parent8d216339f4cd46
5 files changed+21−10
plugins/Unity/Indicators/unitymenumodelcache.cpp+5−4 plugins/Unity/Indicators/unitymenumodelcache.h+2−1 tests/mocks/Unity/Indicators/fakeunitymenumodelcache.cpp+3−3 tests/mocks/Unity/Indicators/fakeunitymenumodelcache.h+1−2 tests/plugins/Unity/Indicators/sharedunitymenumodeltest.cpp+10
plugins/Unity/Indicators/unitymenumodelcache.cpp+5−4
@@ -22,14 +22,14 @@
2222
2323#include <QQmlEngine>
2424
25−UnityMenuModelCache* UnityMenuModelCache::theCache = nullptr;
25+QPointer<UnityMenuModelCache> UnityMenuModelCache::theCache = nullptr;
2626
2727UnityMenuModelCache* UnityMenuModelCache::singleton()
2828{
29− if (!theCache) {
29+ if (theCache.isNull()) {
3030 theCache = new UnityMenuModelCache();
3131 }
32− return theCache;
32+ return theCache.data();
3333}
3434
3535UnityMenuModelCache::UnityMenuModelCache(QObject* parent)
@@ -50,8 +50,9 @@ QSharedPointer<UnityMenuModel> UnityMenuModelCache::model(const QByteArray& path
5050 QMutableHashIterator<QByteArray, QWeakPointer<UnityMenuModel>> iter(m_registry);
5151 while(iter.hasNext()) {
5252 auto keyVal = iter.next();
53− if (keyVal.value().toStrongRef().isNull()) {
53+ if (keyVal.value().isNull()) {
5454 iter.remove();
55+ break;
5556 }
5657 }
5758 });
plugins/Unity/Indicators/unitymenumodelcache.h+2−1
@@ -24,6 +24,7 @@
2424
2525#include <QObject>
2626#include <QHash>
27+#include <QPointer>
2728#include <QWeakPointer>
2829
2930class UnityMenuModel;
@@ -43,7 +44,7 @@ public:
4344
4445protected:
4546 QHash<QByteArray, QWeakPointer<UnityMenuModel>> m_registry;
46− static UnityMenuModelCache* theCache;
47+ static QPointer<UnityMenuModelCache> theCache;
4748};
4849
4950#endif // UNITYMENUMODELCACHE_H
tests/mocks/Unity/Indicators/fakeunitymenumodelcache.cpp+3−3
@@ -17,14 +17,14 @@
1717#include "fakeunitymenumodelcache.h"
1818#include <unitymenumodel.h>
1919
20−FakeUnityMenuModelCache* FakeUnityMenuModelCache::theFakeCache = nullptr;
20+QPointer<FakeUnityMenuModelCache> FakeUnityMenuModelCache::theFakeCache = nullptr;
2121
2222FakeUnityMenuModelCache* FakeUnityMenuModelCache::singleton()
2323{
24− if (!theFakeCache) {
24+ if (theFakeCache.isNull()) {
2525 theFakeCache = new FakeUnityMenuModelCache();
2626 }
27− return theFakeCache;
27+ return theFakeCache.data();
2828}
2929
3030FakeUnityMenuModelCache::FakeUnityMenuModelCache(QObject* parent)
tests/mocks/Unity/Indicators/fakeunitymenumodelcache.h+1−2
@@ -19,7 +19,6 @@
1919
2020#include "unitymenumodelcache.h"
2121
22−#include <QHash>
2322#include <QVariantMap>
2423
2524class FakeUnityMenuModelCache : public UnityMenuModelCache
@@ -39,7 +38,7 @@ public:
3938 Q_INVOKABLE QVariant getCachedModelData(const QByteArray& path);
4039
4140private:
42− static FakeUnityMenuModelCache* theFakeCache;
41+ static QPointer<FakeUnityMenuModelCache> theFakeCache;
4342 QHash<QByteArray, QSharedPointer<UnityMenuModel>> m_models;
4443};
4544
tests/plugins/Unity/Indicators/sharedunitymenumodeltest.cpp+10
@@ -86,6 +86,16 @@ private Q_SLOTS:
8686 QCOMPARE(model2->model()->menuObjectPath(), QByteArray("/com/canonical/LP1328646"));
8787 }
8888
89+ // Tests that the cache is recreated if deleted.
90+ void testDeletedCache()
91+ {
92+ QSharedPointer<SharedUnityMenuModel> model1(createFullModel("test1"));
93+
94+ QCOMPARE(UnityMenuModelCache::singleton()->contains("/com/canonical/test1"), true);
95+ delete UnityMenuModelCache::singleton();
96+ QCOMPARE(UnityMenuModelCache::singleton()->contains("/com/canonical/test1"), false);
97+ }
98+
8999};
90100
91101QTEST_GUILESS_MAIN(SharedUnityMenuModelTest)