on xenial help sign in
use QPointer to track singleton destruction
commit9f4cd46598d78f493bb09f2e9fc74991e1e7e152 authorNick Dedekind <nick.dedekind@canonical.com> dateTue 14 Oct 2014, 15:18 (12 years ago) parent9755190
5 files changed+19−9
plugins/Unity/Indicators/unitymenumodelcache.cpp+3−3 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+3−3
@@ -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)
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;
@@ -45,7 +46,7 @@ public:
4546
4647protected:
4748 QHash<QByteArray, QWeakPointer<UnityMenuModel>> m_registry;
48− static UnityMenuModelCache* theCache;
49+ static QPointer<UnityMenuModelCache> theCache;
4950};
5051
5152#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
@@ -43,7 +42,7 @@ public:
4342 const QVariant& data = QVariant());
4443
4544private:
46− static FakeUnityMenuModelCache* theFakeCache;
45+ static QPointer<FakeUnityMenuModelCache> theFakeCache;
4746 QHash<QByteArray, QSharedPointer<UnityMenuModel>> m_models;
4847};
4948
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)