@@ -0,0 +1,137 @@
1+/*
2+ * Copyright 2014 Canonical Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+import QtQuick 2.0
18+import QtTest 1.0
19+import Unity.Test 0.1 as UT
20+import QMenuModel 0.1
21+import Unity.Indicators 0.1 as Indicators
22+import "../../../../qml/Panel/Indicators"
23+
24+Item {
25+ id: root
26+ width: units.gu(40)
27+ height: units.gu(70)
28+
29+ Component {
30+ id: model
31+ CachedUnityMenuModel {}
32+ }
33+
34+ UT.UnityTestCase {
35+ name: "CachedUnityMenuModel"
36+ when: windowShown
37+
38+ function cleanup() {
39+ doGC();
40+ }
41+
42+ function doGC() {
43+ // need to put some wait cycles here to get gc going properly.
44+ wait(10);
45+ gc();
46+ wait(10);
47+ }
48+
49+ function test_createDifferent() {
50+ var cachedObject = model.createObject(null,
51+ {
52+ "busName": "com.canonical.test1",
53+ "menuObjectPath": "/com/canonical/test1",
54+ "actionsObjectPath": "/com/canonical/test1"
55+ });
56+
57+ var cachedObject2 = model.createObject(null,
58+ {
59+ "busName": "com.canonical.test2",
60+ "menuObjectPath": "/com/canonical/test2",
61+ "actionsObjectPath": "/com/canonical/test2"
62+ });
63+
64+ verify(cachedObject.model !== cachedObject2.model);
65+ }
66+
67+ function test_createSame() {
68+ var cachedObject = model.createObject(null,
69+ {
70+ "busName": "com.canonical.test3",
71+ "menuObjectPath": "/com/canonical/test3",
72+ "actionsObjectPath": "/com/canonical/test3"
73+ });
74+
75+ var cachedObject2 = model.createObject(null,
76+ {
77+ "busName": "com.canonical.test3",
78+ "menuObjectPath": "/com/canonical/test3",
79+ "actionsObjectPath": "/com/canonical/test3"
80+ });
81+
82+ verify(cachedObject.model === cachedObject2.model);
83+ }
84+
85+ // Tests that changing cached model data does not change the model path of others
86+ function test_lp1328646() {
87+ var cachedObject = model.createObject(null,
88+ {
89+ "busName": "com.canonical.test4",
90+ "menuObjectPath": "/com/canonical/test4",
91+ "actionsObjectPath": "/com/canonical/test4"
92+ });
93+
94+ var cachedObject2 = model.createObject(null,
95+ {
96+ "busName": "com.canonical.test4",
97+ "menuObjectPath": "/com/canonical/test4",
98+ "actionsObjectPath": "/com/canonical/test4"
99+ });
100+
101+ cachedObject.menuObjectPath = "/com/canonical/test5";
102+ compare(cachedObject.model.menuObjectPath, "/com/canonical/test5");
103+ compare(cachedObject2.model.menuObjectPath, "/com/canonical/test4");
104+
105+ verify(cachedObject.model !== cachedObject2.model);
106+ }
107+
108+ function createAndDestroy(test) {
109+ var cachedObject = model.createObject(null,
110+ {
111+ "busName": "com.canonical."+test,
112+ "menuObjectPath": "/com/canonical/"+test,
113+ "actionsObjectPath": "/com/canonical/"+test
114+ });
115+ var cachedObject2 = model.createObject(null,
116+ {
117+ "busName": "com.canonical."+test,
118+ "menuObjectPath": "/com/canonical/"+test,
119+ "actionsObjectPath": "/com/canonical/"+test
120+ });
121+ cachedObject.destroy();
122+ return cachedObject2;
123+ }
124+
125+ function test_destroyAllDeletesModel() {
126+ createAndDestroy("test6");
127+ doGC();
128+ compare(Indicators.UnityMenuModelCache.contains("/com/canonical/test6"), false);
129+ }
130+
131+ function test_destroyPartialKeepsModel() {
132+ var model = createAndDestroy("test7");
133+ doGC();
134+ compare(Indicators.UnityMenuModelCache.contains("/com/canonical/test7"), true);
135+ }
136+ }
137+}