@@ -18,6 +18,7 @@ import QtQuick 2.0
18import QtTest 1.0
18import QtTest 1.0
19import Unity.Test 0.1 as UT
19import Unity.Test 0.1 as UT
20import QMenuModel 0.1
20import QMenuModel 0.1
21+import Unity.Indicators 0.1 as Indicators
21import "../../../../qml/Panel/Indicators"
22import "../../../../qml/Panel/Indicators"
@@ -34,37 +35,48 @@ Item {
34 name: "CachedUnityMenuModel"
35 name: "CachedUnityMenuModel"
35 when: windowShown
36 when: windowShown
43+ // need to put some wait cycles here to get gc going properly.
37 function test_createDifferent() {
49 function test_createDifferent() {
38− var cachedObject = model.createObject(root,
50+ var cachedObject = model.createObject(null,
40 "busName": "com.canonical.test1",
52 "busName": "com.canonical.test1",
41− "menuObjectPath": "com/canonical/test1",
53+ "menuObjectPath": "/com/canonical/test1",
42− "actionsObjectPath": "com/canonical/test1/actions"
54+ "actionsObjectPath": "/com/canonical/test1"
45− var cachedObject2 = model.createObject(root,
57+ var cachedObject2 = model.createObject(null,
47 "busName": "com.canonical.test2",
59 "busName": "com.canonical.test2",
48− "menuObjectPath": "com/canonical/test2",
60+ "menuObjectPath": "/com/canonical/test2",
49− "actionsObjectPath": "com/canonical/test2/actions"
61+ "actionsObjectPath": "/com/canonical/test2"
52 verify(cachedObject.model !== cachedObject2.model);
64 verify(cachedObject.model !== cachedObject2.model);
55 function test_createSame() {
67 function test_createSame() {
56− var cachedObject = model.createObject(root,
68+ var cachedObject = model.createObject(null,
58− "busName": "com.canonical.test1",
70+ "busName": "com.canonical.test3",
59− "menuObjectPath": "com/canonical/test1",
71+ "menuObjectPath": "/com/canonical/test3",
60− "actionsObjectPath": "com/canonical/test1/actions"
72+ "actionsObjectPath": "/com/canonical/test3"
63− var cachedObject2 = model.createObject(root,
75+ var cachedObject2 = model.createObject(null,
65− "busName": "com.canonical.test1",
77+ "busName": "com.canonical.test3",
66− "menuObjectPath": "com/canonical/test1",
78+ "menuObjectPath": "/com/canonical/test3",
67− "actionsObjectPath": "com/canonical/test1/actions"
79+ "actionsObjectPath": "/com/canonical/test3"
70 verify(cachedObject.model === cachedObject2.model);
82 verify(cachedObject.model === cachedObject2.model);
@@ -72,25 +84,54 @@ Item {
73 // Tests that changing cached model data does not change the model path of others
85 // Tests that changing cached model data does not change the model path of others
74 function test_lp1328646() {
86 function test_lp1328646() {
75− var cachedObject = model.createObject(root,
87+ var cachedObject = model.createObject(null,
77− "busName": "com.canonical.test1",
89+ "busName": "com.canonical.test4",
78− "menuObjectPath": "com/canonical/test1",
90+ "menuObjectPath": "/com/canonical/test4",
79− "actionsObjectPath": "com/canonical/test1/actions"
91+ "actionsObjectPath": "/com/canonical/test4"
82− var cachedObject2 = model.createObject(root,
94+ var cachedObject2 = model.createObject(null,
84− "busName": "com.canonical.test1",
96+ "busName": "com.canonical.test4",
85− "menuObjectPath": "com/canonical/test1",
97+ "menuObjectPath": "/com/canonical/test4",
86− "actionsObjectPath": "com/canonical/test1/actions"
98+ "actionsObjectPath": "/com/canonical/test4"
89− cachedObject.menuObjectPath = "com/canonical/test2";
101+ cachedObject.menuObjectPath = "/com/canonical/test5";
90− compare(cachedObject.model.menuObjectPath, "com/canonical/test2");
102+ compare(cachedObject.model.menuObjectPath, "/com/canonical/test5");
91− compare(cachedObject2.model.menuObjectPath, "com/canonical/test1");
103+ compare(cachedObject2.model.menuObjectPath, "/com/canonical/test4");
93 verify(cachedObject.model !== cachedObject2.model);
105 verify(cachedObject.model !== cachedObject2.model);
108+ function createAndDestroy(test) {
109+ var cachedObject = model.createObject(null,
111+ "busName": "com.canonical."+test,
112+ "menuObjectPath": "/com/canonical/"+test,
113+ "actionsObjectPath": "/com/canonical/"+test
115+ var cachedObject2 = model.createObject(null,
117+ "busName": "com.canonical."+test,
118+ "menuObjectPath": "/com/canonical/"+test,
119+ "actionsObjectPath": "/com/canonical/"+test
121+ cachedObject.destroy();
122+ return cachedObject2;
125+ function test_destroyAllDeletesModel() {
126+ createAndDestroy("test6");
128+ compare(Indicators.UnityMenuModelCache.contains("/com/canonical/test6"), false);
131+ function test_destroyPartialKeepsModel() {
132+ var model = createAndDestroy("test7");
134+ compare(Indicators.UnityMenuModelCache.contains("/com/canonical/test7"), true);