Merge lp:~nick-dedekind/unity8/sharedunitymenumodel into lp:unity8
- sharedunitymenumodel
- Merge into trunk
Status: | Merged | ||||
---|---|---|---|---|---|
Approved by: | Albert Astals Cid | ||||
Approved revision: | 1278 | ||||
Merged at revision: | 1373 | ||||
Proposed branch: | lp:~nick-dedekind/unity8/sharedunitymenumodel | ||||
Merge into: | lp:unity8 | ||||
Diff against target: |
2734 lines (+958/-783) 66 files modified
plugins/AccountsService/AccountsService.qmltypes (+2/-0) plugins/Dash/Dash.qmltypes (+3/-0) plugins/LightDM/LightDM.qmltypes (+1/-0) plugins/Ubuntu/Payments/Payments.qmltypes (+1/-0) plugins/Unity/DashCommunicator/DashCommunicator.qmltypes (+17/-4) plugins/Unity/Indicators/CMakeLists.txt (+1/-0) plugins/Unity/Indicators/Indicators.qmltypes (+10/-7) plugins/Unity/Indicators/plugin.cpp (+8/-2) plugins/Unity/Indicators/plugin.h (+1/-1) plugins/Unity/Indicators/sharedunitymenumodel.cpp (+87/-0) plugins/Unity/Indicators/sharedunitymenumodel.h (+66/-0) plugins/Unity/Indicators/unitymenumodelcache.cpp (+28/-13) plugins/Unity/Indicators/unitymenumodelcache.h (+15/-9) plugins/Unity/Launcher/Launcher.qmltypes (+17/-12) plugins/Unity/Session/Session.qmltypes (+10/-0) plugins/Utils/Utils.qmltypes (+6/-0) qml/Greeter/Clock.qml (+9/-9) qml/Panel/Indicators/CachedUnityMenuModel.qml (+0/-39) qml/Panel/Indicators/IndicatorBase.qml (+2/-2) tests/mocks/AccountsService/AccountsService.qmltypes (+2/-0) tests/mocks/LightDM/LightDM.qmltypes (+1/-0) tests/mocks/QMenuModel/QMenuModel.qmltypes (+1/-1) tests/mocks/QMenuModel/unitymenumodel.cpp (+1/-2) tests/mocks/QMenuModel/unitymenumodel.h (+6/-2) tests/mocks/Ubuntu/Payments/Payments.qmltypes (+2/-0) tests/mocks/Ubuntu/Telephony/Telephony.qmltypes (+2/-1) tests/mocks/Unity/Application/Application.qmltypes (+13/-0) tests/mocks/Unity/DashCommunicator/DashCommunicator.qmltypes (+2/-2) tests/mocks/Unity/Indicators/CMakeLists.txt (+3/-10) tests/mocks/Unity/Indicators/FakeMenuPage.qml (+0/-27) tests/mocks/Unity/Indicators/Indicators.qmltypes (+41/-11) tests/mocks/Unity/Indicators/IndicatorsModel.qml (+143/-35) tests/mocks/Unity/Indicators/RootActionState.qml (+17/-9) tests/mocks/Unity/Indicators/fakeindicatorsmodel.cpp (+60/-29) tests/mocks/Unity/Indicators/fakeindicatorsmodel.h (+8/-2) tests/mocks/Unity/Indicators/fakeplugin.cpp (+8/-4) tests/mocks/Unity/Indicators/fakeunitymenumodelcache.cpp (+57/-0) tests/mocks/Unity/Indicators/fakeunitymenumodelcache.h (+49/-0) tests/mocks/Unity/Indicators/indicators_fake.qrc (+0/-14) tests/mocks/Unity/Indicators/qml/fake_menu_page1.qml (+0/-35) tests/mocks/Unity/Indicators/qml/fake_menu_page2.qml (+0/-35) tests/mocks/Unity/Indicators/qml/fake_menu_page3.qml (+0/-35) tests/mocks/Unity/Indicators/qml/fake_menu_page4.qml (+0/-35) tests/mocks/Unity/Indicators/qml/fake_menu_page5.qml (+0/-35) tests/mocks/Unity/Indicators/qml/fake_menu_widget1.qml (+0/-23) tests/mocks/Unity/Indicators/qml/fake_menu_widget2.qml (+0/-23) tests/mocks/Unity/Indicators/qml/fake_menu_widget3.qml (+0/-23) tests/mocks/Unity/Indicators/qml/fake_menu_widget4.qml (+0/-23) tests/mocks/Unity/Indicators/qml/fake_menu_widget5.qml (+0/-23) tests/mocks/Unity/Indicators/qmldir (+0/-1) tests/mocks/Unity/Launcher/Launcher.qmltypes (+13/-0) tests/mocks/Unity/Unity.qmltypes (+32/-0) tests/plugins/Unity/Indicators/CMakeLists.txt (+1/-0) tests/plugins/Unity/Indicators/sharedunitymenumodeltest.cpp (+102/-0) tests/qmltests/CMakeLists.txt (+7/-8) tests/qmltests/Greeter/tst_Clock.qml (+57/-40) tests/qmltests/Panel/Indicators/tst_CachedUnityMenuModel.qml (+0/-137) tests/qmltests/Panel/Indicators/tst_DefaultIndicatorPage.qml (+21/-24) tests/qmltests/Panel/Indicators/tst_DefaultIndicatorWidget.qml (+0/-8) tests/qmltests/Panel/tst_IndicatorItem.qml (+1/-1) tests/qmltests/Panel/tst_IndicatorRow.qml (+17/-19) tests/qmltests/Panel/tst_Indicators.qml (+1/-0) tests/qmltests/Panel/tst_MenuContent.qml (+0/-8) tests/qmltests/tst_Shell.qml (+2/-0) tests/qmltests/tst_ShellWithPin.qml (+2/-0) tests/qmltests/tst_TabletShell.qml (+2/-0) |
||||
To merge this branch: | bzr merge lp:~nick-dedekind/unity8/sharedunitymenumodel | ||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
PS Jenkins bot (community) | continuous-integration | Needs Fixing | |
Albert Astals Cid (community) | Approve | ||
Michael Terry | Pending | ||
Review via email: mp+234460@code.launchpad.net |
Commit message
remove qml ownership confusion for caching unitymenumodels
Description of the change
Changed to use QSharedPointers for unitymenumodel owenership.
Renamed CachedUnityMenu
Uses new method for mocking Indicators & menu content.
* Are there any related MPs required for this MP to build/function as expected? Please list.
No
* Did you perform an exploratory manual test run of your code change and any related functionality?
Yes
* Did you make sure that your branch does not contain spurious tags?
Yes
* If you changed the packaging (debian), did you subscribe the ubuntu-unity team to this MP?
n/a
* If you changed the UI, has there been a design review?
n/a
PS Jenkins bot (ps-jenkins) wrote : | # |
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:1266
http://
Executed test runs:
FAILURE: http://
UNSTABLE: http://
SUCCESS: http://
SUCCESS: http://
FAILURE: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:1266
http://
Executed test runs:
FAILURE: http://
UNSTABLE: http://
SUCCESS: http://
SUCCESS: http://
FAILURE: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
Michael Terry (mterry) : | # |
Albert Astals Cid (aacid) wrote : | # |
Text conflict in plugins/
1 conflicts encountered.
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:1267
http://
Executed test runs:
FAILURE: http://
UNSTABLE: http://
SUCCESS: http://
SUCCESS: http://
FAILURE: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:1267
http://
Executed test runs:
UNSTABLE: http://
UNSTABLE: http://
SUCCESS: http://
SUCCESS: http://
UNSTABLE: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:1269
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
None: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:1273
http://
Executed test runs:
UNSTABLE: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
UNSTABLE: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
Albert Astals Cid (aacid) wrote : | # |
Text conflict in tests/qmltests/
Text conflict in tests/qmltests/
2 conflicts encountered.
Michael Terry (mterry) wrote : | # |
I looked at this briefly today. My comment from earlier still stands -- it's unsafe to assume Qml won't delete the singleton object you pass it. For example, if the Qml that loaded the plugin is destroyed, so will the plugin's objects.
Since you use ::singleton() calls elsewhere in code, you can't just give Qml a new object when it asks and outsource singleton-
Albert Astals Cid (aacid) wrote : | # |
if (keyVal.
Can we just use
if (keyVal.
?
Nick Dedekind (nick-dedekind) wrote : | # |
> if (keyVal.
>
> Can we just use
>
> if (keyVal.
>
> ?
As far as I'm aware QWeakPointer:
Albert Astals Cid (aacid) wrote : | # |
> > if (keyVal.
> >
> > Can we just use
> >
> > if (keyVal.
> >
> > ?
>
> As far as I'm aware QWeakPointer:
> set, not if the shared data is still valid.
The docu says
***
Returns true if this object is holding a reference to a null pointer.
Note that, due to the nature of weak references, the pointer that QWeakPointer references can become null at any moment, so the value returned from this function can change from false to true from one call to the next.
***
And the code does
***
return d == 0 || d->strongref.load() == 0 || value == 0;
***
So it seems to me it does work on the shared data too.
Nick Dedekind (nick-dedekind) wrote : | # |
> I looked at this briefly today. My comment from earlier still stands -- it's
> unsafe to assume Qml won't delete the singleton object you pass it. For
> example, if the Qml that loaded the plugin is destroyed, so will the plugin's
> objects.
>
> Since you use ::singleton() calls elsewhere in code, you can't just give Qml a
> new object when it asks and outsource singleton-
> you use a QPointer object as a return? I think it expects a QObject * pointer
> directly...
The only places that use the singleton are in the plugin, so I don't think plugin unloading is an issue? All the SharedUnityMenu
Might be able to use QPointer as the static and give Qml the raw one...
Albert Astals Cid (aacid) wrote : | # |
> > I looked at this briefly today. My comment from earlier still stands --
> it's
> > unsafe to assume Qml won't delete the singleton object you pass it. For
> > example, if the Qml that loaded the plugin is destroyed, so will the
> plugin's
> > objects.
> >
> > Since you use ::singleton() calls elsewhere in code, you can't just give Qml
> a
> > new object when it asks and outsource singleton-
> > you use a QPointer object as a return? I think it expects a QObject *
> pointer
> > directly...
>
> The only places that use the singleton are in the plugin, so I don't think
> plugin unloading is an issue? All the SharedUnityMenu
> destroyed by then. I need to merge this with your greeter branch soon anyway,
> so i'm guessing the shared models will be parented to the cache anyway...
Exactly what I was going to say, you can't call the function that uses the singleton without the plugin so i don't think this is a problem either.
Albert Astals Cid (aacid) wrote : | # |
Shall we add a break inside the if in
connect(model, &QObject:
?
As far as i understand the code once it this delete has found a value that is null there should not be any other since every delete clears it's own "null", no?
Nick Dedekind (nick-dedekind) wrote : | # |
> > > if (keyVal.
> > >
> > > Can we just use
> > >
> > > if (keyVal.
> > >
> > > ?
> >
> > As far as I'm aware QWeakPointer:
> > set, not if the shared data is still valid.
>
> The docu says
>
> ***
> Returns true if this object is holding a reference to a null pointer.
>
> Note that, due to the nature of weak references, the pointer that QWeakPointer
> references can become null at any moment, so the value returned from this
> function can change from false to true from one call to the next.
> ***
>
> And the code does
>
> ***
> return d == 0 || d->strongref.load() == 0 || value == 0;
> ***
>
> So it seems to me it does work on the shared data too.
My bad. I hate inline code; was looking at the shared pointer impl for isNull...
Fixed.
Nick Dedekind (nick-dedekind) wrote : | # |
> Shall we add a break inside the if in
> connect(model, &QObject:
> ?
>
> As far as i understand the code once it this delete has found a value that is
> null there should not be any other since every delete clears it's own "null",
> no?
Yep.
Fixed.
Albert Astals Cid (aacid) wrote : | # |
Code looks good to me, and i've played with it in the phone and have not been able to find anything wrong with it either.
* Did you perform an exploratory manual test run of the code change and any related functionality?
Yes
* Did CI run pass?
Waiting before top approval
* Did you make sure that the branch does not contain spurious tags?
Yes
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:1274
http://
Executed test runs:
UNSTABLE: http://
UNSTABLE: http://
SUCCESS: http://
SUCCESS: http://
UNSTABLE: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
Albert Astals Cid (aacid) wrote : | # |
CI doesn't seem more broken than on other runs, top approving.
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:1276
http://
Executed test runs:
UNSTABLE: http://
UNSTABLE: http://
SUCCESS: http://
SUCCESS: http://
UNSTABLE: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
Albert Astals Cid (aacid) wrote : | # |
Text conflict in tests/qmltests/
1 conflicts encountered.
- 1277. By Nick Dedekind
-
merged with trunk
Nick Dedekind (nick-dedekind) wrote : | # |
> Text conflict in tests/qmltests/
> 1 conflicts encountered.
Fixed.
Albert Astals Cid (aacid) wrote : | # |
Ok, let's wait for CI run again
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:1277
http://
Executed test runs:
UNSTABLE: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
UNSTABLE: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
Michael Terry (mterry) wrote : | # |
> The only places that use the singleton are in the plugin, so I don't think plugin unloading is an issue?
But the Qml that loaded the plugin could be destroyed and created again, eh? The second time the plugin is loaded, it will hand back an invalid pointer. Stuff like that happens with loaders that contain plugin imports.
I had to fix a crasher in the wizard a while back due to a similar issue is all, that's why I'm sensitive to it. :) The wizard drops references to pages as you press 'back' so it's more likely to hit the issue. But even if we don't hit the issue now in unity8, it's a hidden gotcha waiting to crash us.
Albert Astals Cid (aacid) wrote : | # |
I am not still sure i totally understand how this can happen but then maybe we can turn
UnityMenuMode
into
QPointer<
and rely on QPointer magic set to 0 when QObjects are destroyed?
Michael Terry (mterry) wrote : | # |
This is how it might happen:
====
main.qml:
Loader {
source: loadit ? "test.qml" : ""
}
test.qml:
import Unity.Indicators 0.1
====
As test.qml is loaded/unloaded, if it was the only reference to that plugin, Qml would destroy/create the plugin too.
The first time it destroyed the plugin, it would call 'delete' on the singletons the plugin made. Which would leave theCache pointer dangling. So the next time the plugin is loaded, it will pass the Qml a dangling pointer.
Michael Terry (mterry) wrote : | # |
One easy fix for this is a destructor for the class that if (this == theCache) { theCache = nullptr; }
- 1278. By Nick Dedekind
-
use QPointer to track singleton destruction
Nick Dedekind (nick-dedekind) wrote : | # |
> One easy fix for this is a destructor for the class that if (this == theCache)
> { theCache = nullptr; }
went with the QPointer in the end. Gives better encapsulation of the singleton pattern.
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:1278
http://
Executed test runs:
UNSTABLE: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
UNSTABLE: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:1278
http://
Executed test runs:
UNSTABLE: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
UNSTABLE: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
Preview Diff
1 | === modified file 'plugins/AccountsService/AccountsService.qmltypes' |
2 | --- plugins/AccountsService/AccountsService.qmltypes 2014-09-01 12:18:53 +0000 |
3 | +++ plugins/AccountsService/AccountsService.qmltypes 2014-10-14 14:19:22 +0000 |
4 | @@ -23,6 +23,8 @@ |
5 | } |
6 | Property { name: "user"; type: "string" } |
7 | Property { name: "demoEdges"; type: "bool" } |
8 | + Property { name: "enableLauncherWhileLocked"; type: "bool"; isReadonly: true } |
9 | + Property { name: "enableIndicatorsWhileLocked"; type: "bool"; isReadonly: true } |
10 | Property { name: "backgroundFile"; type: "string"; isReadonly: true } |
11 | Property { name: "statsWelcomeScreen"; type: "bool"; isReadonly: true } |
12 | Property { name: "passwordDisplayHint"; type: "PasswordDisplayHint"; isReadonly: true } |
13 | |
14 | === modified file 'plugins/Dash/Dash.qmltypes' |
15 | --- plugins/Dash/Dash.qmltypes 2014-08-14 01:28:06 +0000 |
16 | +++ plugins/Dash/Dash.qmltypes 2014-10-14 14:19:22 +0000 |
17 | @@ -40,9 +40,12 @@ |
18 | Property { name: "forceNoClip"; type: "bool" } |
19 | Property { name: "stickyHeaderHeight"; type: "int"; isReadonly: true } |
20 | Property { name: "headerItemShownHeight"; type: "double"; isReadonly: true } |
21 | + Property { name: "cacheBuffer"; type: "double" } |
22 | Signal { name: "headerChanged" } |
23 | Method { name: "positionAtBeginning" } |
24 | Method { name: "showHeader" } |
25 | + Method { name: "firstCreatedIndex"; type: "int" } |
26 | + Method { name: "createdItemCount"; type: "int" } |
27 | Method { |
28 | name: "item" |
29 | type: "QQuickItem*" |
30 | |
31 | === modified file 'plugins/LightDM/LightDM.qmltypes' |
32 | --- plugins/LightDM/LightDM.qmltypes 2014-09-01 12:18:53 +0000 |
33 | +++ plugins/LightDM/LightDM.qmltypes 2014-10-14 14:19:22 +0000 |
34 | @@ -37,6 +37,7 @@ |
35 | Signal { name: "isActiveChanged" } |
36 | Signal { name: "isAuthenticatedChanged" } |
37 | Signal { name: "showGreeter" } |
38 | + Signal { name: "hideGreeter" } |
39 | Signal { |
40 | name: "requestAuthenticationUser" |
41 | Parameter { name: "user"; type: "string" } |
42 | |
43 | === modified file 'plugins/Ubuntu/Payments/Payments.qmltypes' |
44 | --- plugins/Ubuntu/Payments/Payments.qmltypes 2014-06-27 20:53:24 +0000 |
45 | +++ plugins/Ubuntu/Payments/Payments.qmltypes 2014-10-14 14:19:22 +0000 |
46 | @@ -37,6 +37,7 @@ |
47 | Parameter { name: "error"; type: "string" } |
48 | } |
49 | Signal { name: "purchaseCompleted" } |
50 | + Signal { name: "purchaseCancelled" } |
51 | Method { name: "start" } |
52 | } |
53 | } |
54 | |
55 | === modified file 'plugins/Unity/DashCommunicator/DashCommunicator.qmltypes' |
56 | --- plugins/Unity/DashCommunicator/DashCommunicator.qmltypes 2014-08-14 13:33:28 +0000 |
57 | +++ plugins/Unity/DashCommunicator/DashCommunicator.qmltypes 2014-10-14 14:19:22 +0000 |
58 | @@ -9,14 +9,14 @@ |
59 | Module { |
60 | Component { |
61 | name: "DashCommunicator" |
62 | - prototype: "QObject" |
63 | + prototype: "QThread" |
64 | exports: ["Unity.DashCommunicator/DashCommunicator 0.1"] |
65 | exportMetaObjectRevisions: [0] |
66 | Method { |
67 | name: "setCurrentScope" |
68 | Parameter { name: "scopeId"; type: "string" } |
69 | Parameter { name: "animate"; type: "bool" } |
70 | - Parameter { name: "reset"; type: "bool" } |
71 | + Parameter { name: "isSwipe"; type: "bool" } |
72 | } |
73 | } |
74 | Component { |
75 | @@ -28,7 +28,20 @@ |
76 | name: "setCurrentScopeRequested" |
77 | Parameter { name: "scopeId"; type: "string" } |
78 | Parameter { name: "animate"; type: "bool" } |
79 | - Parameter { name: "reset"; type: "bool" } |
80 | - } |
81 | + Parameter { name: "isSwipe"; type: "bool" } |
82 | + } |
83 | + } |
84 | + Component { |
85 | + name: "QThread" |
86 | + prototype: "QObject" |
87 | + Signal { name: "started" } |
88 | + Signal { name: "finished" } |
89 | + Method { |
90 | + name: "start" |
91 | + Parameter { type: "Priority" } |
92 | + } |
93 | + Method { name: "start" } |
94 | + Method { name: "terminate" } |
95 | + Method { name: "quit" } |
96 | } |
97 | } |
98 | |
99 | === modified file 'plugins/Unity/Indicators/CMakeLists.txt' |
100 | --- plugins/Unity/Indicators/CMakeLists.txt 2014-07-30 16:00:55 +0000 |
101 | +++ plugins/Unity/Indicators/CMakeLists.txt 2014-10-14 14:19:22 +0000 |
102 | @@ -24,6 +24,7 @@ |
103 | modelprinter.cpp |
104 | plugin.cpp |
105 | rootactionstate.cpp |
106 | + sharedunitymenumodel.cpp |
107 | unitymenumodelcache.cpp |
108 | unitymenumodelstack.cpp |
109 | visibleindicatorsmodel.cpp |
110 | |
111 | === modified file 'plugins/Unity/Indicators/Indicators.qmltypes' |
112 | --- plugins/Unity/Indicators/Indicators.qmltypes 2014-09-01 12:18:53 +0000 |
113 | +++ plugins/Unity/Indicators/Indicators.qmltypes 2014-10-14 14:19:22 +0000 |
114 | @@ -210,6 +210,16 @@ |
115 | Signal { name: "indexChanged" } |
116 | } |
117 | Component { |
118 | + name: "SharedUnityMenuModel" |
119 | + prototype: "QObject" |
120 | + exports: ["Unity.Indicators/SharedUnityMenuModel 0.1"] |
121 | + exportMetaObjectRevisions: [0] |
122 | + Property { name: "busName"; type: "QByteArray" } |
123 | + Property { name: "menuObjectPath"; type: "QByteArray" } |
124 | + Property { name: "actions"; type: "QVariantMap" } |
125 | + Property { name: "model"; type: "UnityMenuModel"; isReadonly: true; isPointer: true } |
126 | + } |
127 | + Component { |
128 | name: "UnityMenuModelCache" |
129 | prototype: "QObject" |
130 | exports: ["Unity.Indicators/UnityMenuModelCache 0.1"] |
131 | @@ -217,13 +227,6 @@ |
132 | isSingleton: true |
133 | exportMetaObjectRevisions: [0] |
134 | Method { |
135 | - name: "model" |
136 | - type: "UnityMenuModel*" |
137 | - Parameter { name: "bus"; type: "QByteArray" } |
138 | - Parameter { name: "path"; type: "QByteArray" } |
139 | - Parameter { name: "actions"; type: "QVariantMap" } |
140 | - } |
141 | - Method { |
142 | name: "contains" |
143 | type: "bool" |
144 | Parameter { name: "path"; type: "QByteArray" } |
145 | |
146 | === modified file 'plugins/Unity/Indicators/plugin.cpp' |
147 | --- plugins/Unity/Indicators/plugin.cpp 2014-07-30 16:00:55 +0000 |
148 | +++ plugins/Unity/Indicators/plugin.cpp 2014-10-14 14:19:22 +0000 |
149 | @@ -30,18 +30,23 @@ |
150 | #include "menucontentactivator.h" |
151 | #include "modelprinter.h" |
152 | #include "rootactionstate.h" |
153 | +#include "sharedunitymenumodel.h" |
154 | #include "unitymenumodelcache.h" |
155 | #include "unitymenumodelstack.h" |
156 | #include "visibleindicatorsmodel.h" |
157 | |
158 | +#include <unitymenumodel.h> |
159 | + |
160 | static QObject* menuModelCacheSingleton(QQmlEngine* engine, QJSEngine* scriptEngine) { |
161 | Q_UNUSED(engine); |
162 | Q_UNUSED(scriptEngine); |
163 | - return new UnityMenuModelCache; |
164 | + return UnityMenuModelCache::singleton(); |
165 | } |
166 | |
167 | -void Indicators2Plugin::registerTypes(const char *uri) |
168 | +void IndicatorsPlugin::registerTypes(const char *uri) |
169 | { |
170 | + qRegisterMetaType<UnityMenuModel*>("UnityMenuModel*"); |
171 | + |
172 | qmlRegisterType<IndicatorsManager>(uri, 0, 1, "IndicatorsManager"); |
173 | qmlRegisterType<IndicatorsModel>(uri, 0, 1, "IndicatorsModel"); |
174 | qmlRegisterType<MenuContentActivator>(uri, 0, 1, "MenuContentActivator"); |
175 | @@ -49,6 +54,7 @@ |
176 | qmlRegisterType<RootActionState>(uri, 0, 1, "RootActionState"); |
177 | qmlRegisterType<ModelPrinter>(uri, 0, 1, "ModelPrinter"); |
178 | qmlRegisterType<VisibleIndicatorsModel>(uri, 0, 1, "VisibleIndicatorsModel"); |
179 | + qmlRegisterType<SharedUnityMenuModel>(uri, 0, 1, "SharedUnityMenuModel"); |
180 | |
181 | qmlRegisterSingletonType<UnityMenuModelCache>(uri, 0, 1, "UnityMenuModelCache", menuModelCacheSingleton); |
182 | |
183 | |
184 | === modified file 'plugins/Unity/Indicators/plugin.h' |
185 | --- plugins/Unity/Indicators/plugin.h 2013-08-14 09:07:45 +0000 |
186 | +++ plugins/Unity/Indicators/plugin.h 2014-10-14 14:19:22 +0000 |
187 | @@ -22,7 +22,7 @@ |
188 | |
189 | #include <QtQml/QQmlExtensionPlugin> |
190 | |
191 | -class Indicators2Plugin : public QQmlExtensionPlugin |
192 | +class IndicatorsPlugin : public QQmlExtensionPlugin |
193 | { |
194 | Q_OBJECT |
195 | Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface") |
196 | |
197 | === added file 'plugins/Unity/Indicators/sharedunitymenumodel.cpp' |
198 | --- plugins/Unity/Indicators/sharedunitymenumodel.cpp 1970-01-01 00:00:00 +0000 |
199 | +++ plugins/Unity/Indicators/sharedunitymenumodel.cpp 2014-10-14 14:19:22 +0000 |
200 | @@ -0,0 +1,87 @@ |
201 | +/* |
202 | + * Copyright 2014 Canonical Ltd. |
203 | + * |
204 | + * This program is free software; you can redistribute it and/or modify |
205 | + * it under the terms of the GNU Lesser General Public License as published by |
206 | + * the Free Software Foundation; version 3. |
207 | + * |
208 | + * This program is distributed in the hope that it will be useful, |
209 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
210 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
211 | + * GNU Lesser General Public License for more details. |
212 | + * |
213 | + * You should have received a copy of the GNU Lesser General Public License |
214 | + * along with this program. If not, see <http://www.gnu.org/licenses/>. |
215 | + * |
216 | + */ |
217 | + |
218 | +#include "sharedunitymenumodel.h" |
219 | +#include "unitymenumodelcache.h" |
220 | + |
221 | +SharedUnityMenuModel::SharedUnityMenuModel(QObject* parent) |
222 | + : QObject(parent) |
223 | +{ |
224 | +} |
225 | + |
226 | +QByteArray SharedUnityMenuModel::busName() const |
227 | +{ |
228 | + return m_busName; |
229 | +} |
230 | + |
231 | +void SharedUnityMenuModel::setBusName(const QByteArray& busName) |
232 | +{ |
233 | + if (m_busName != busName) { |
234 | + m_busName = busName; |
235 | + Q_EMIT busNameChanged(); |
236 | + initialize(); |
237 | + } |
238 | +} |
239 | + |
240 | +QByteArray SharedUnityMenuModel::menuObjectPath() const |
241 | +{ |
242 | + return m_menuObjectPath; |
243 | +} |
244 | + |
245 | +void SharedUnityMenuModel::setMenuObjectPath(const QByteArray& menuObjectPath) |
246 | +{ |
247 | + if (m_menuObjectPath != menuObjectPath) { |
248 | + m_menuObjectPath = menuObjectPath; |
249 | + Q_EMIT menuObjectPathChanged(); |
250 | + initialize(); |
251 | + } |
252 | +} |
253 | + |
254 | +QVariantMap SharedUnityMenuModel::actions() const |
255 | +{ |
256 | + return m_actions; |
257 | +} |
258 | + |
259 | +void SharedUnityMenuModel::setActions(const QVariantMap& actions) |
260 | +{ |
261 | + if (m_actions != actions) { |
262 | + m_actions = actions; |
263 | + Q_EMIT actionsChanged(); |
264 | + initialize(); |
265 | + } |
266 | +} |
267 | + |
268 | +UnityMenuModel* SharedUnityMenuModel::model() const |
269 | +{ |
270 | + return m_model ? m_model.data() : nullptr; |
271 | +} |
272 | + |
273 | +void SharedUnityMenuModel::initialize() |
274 | +{ |
275 | + if (m_busName.isEmpty() || m_menuObjectPath.isEmpty() || m_actions.isEmpty()) { |
276 | + if (!m_model.isNull()) { |
277 | + m_model.clear(); |
278 | + Q_EMIT modelChanged(); |
279 | + } |
280 | + } else { |
281 | + QSharedPointer<UnityMenuModel> model = UnityMenuModelCache::singleton()->model(m_busName, m_menuObjectPath, m_actions); |
282 | + if (model != m_model) { |
283 | + m_model = model; |
284 | + Q_EMIT modelChanged(); |
285 | + } |
286 | + } |
287 | +} |
288 | |
289 | === added file 'plugins/Unity/Indicators/sharedunitymenumodel.h' |
290 | --- plugins/Unity/Indicators/sharedunitymenumodel.h 1970-01-01 00:00:00 +0000 |
291 | +++ plugins/Unity/Indicators/sharedunitymenumodel.h 2014-10-14 14:19:22 +0000 |
292 | @@ -0,0 +1,66 @@ |
293 | +/* |
294 | + * Copyright 2014 Canonical Ltd. |
295 | + * |
296 | + * This program is free software; you can redistribute it and/or modify |
297 | + * it under the terms of the GNU Lesser General Public License as published by |
298 | + * the Free Software Foundation; version 3. |
299 | + * |
300 | + * This program is distributed in the hope that it will be useful, |
301 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
302 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
303 | + * GNU Lesser General Public License for more details. |
304 | + * |
305 | + * You should have received a copy of the GNU Lesser General Public License |
306 | + * along with this program. If not, see <http://www.gnu.org/licenses/>. |
307 | + * |
308 | + */ |
309 | + |
310 | +#ifndef SHAREDUNITYMENUMODEL_H |
311 | +#define SHAREDUNITYMENUMODEL_H |
312 | + |
313 | +#include "unityindicatorsglobal.h" |
314 | + |
315 | +#include <QObject> |
316 | +#include <QSharedPointer> |
317 | +#include <QVariantMap> |
318 | + |
319 | +class UnityMenuModel; |
320 | + |
321 | +class UNITYINDICATORS_EXPORT SharedUnityMenuModel : public QObject |
322 | +{ |
323 | + Q_OBJECT |
324 | + Q_PROPERTY(QByteArray busName READ busName WRITE setBusName NOTIFY busNameChanged) |
325 | + Q_PROPERTY(QByteArray menuObjectPath READ menuObjectPath WRITE setMenuObjectPath NOTIFY menuObjectPathChanged) |
326 | + Q_PROPERTY(QVariantMap actions READ actions WRITE setActions NOTIFY actionsChanged) |
327 | + Q_PROPERTY(UnityMenuModel* model READ model NOTIFY modelChanged) |
328 | + |
329 | +public: |
330 | + SharedUnityMenuModel(QObject* parent = nullptr); |
331 | + |
332 | + QByteArray busName() const; |
333 | + void setBusName(const QByteArray&); |
334 | + |
335 | + QByteArray menuObjectPath() const; |
336 | + void setMenuObjectPath(const QByteArray&); |
337 | + |
338 | + QVariantMap actions() const; |
339 | + void setActions(const QVariantMap&); |
340 | + |
341 | + UnityMenuModel* model() const; |
342 | + |
343 | +Q_SIGNALS: |
344 | + void busNameChanged(); |
345 | + void menuObjectPathChanged(); |
346 | + void actionsChanged(); |
347 | + void modelChanged(); |
348 | + |
349 | +private: |
350 | + void initialize(); |
351 | + |
352 | + QByteArray m_busName; |
353 | + QByteArray m_menuObjectPath; |
354 | + QVariantMap m_actions; |
355 | + QSharedPointer<UnityMenuModel> m_model; |
356 | +}; |
357 | + |
358 | +#endif // SHAREDUNITYMENUMODEL_H |
359 | |
360 | === modified file 'plugins/Unity/Indicators/unitymenumodelcache.cpp' |
361 | --- plugins/Unity/Indicators/unitymenumodelcache.cpp 2014-08-20 09:16:28 +0000 |
362 | +++ plugins/Unity/Indicators/unitymenumodelcache.cpp 2014-10-14 14:19:22 +0000 |
363 | @@ -20,30 +20,45 @@ |
364 | #include "unitymenumodelcache.h" |
365 | #include <unitymenumodel.h> |
366 | |
367 | +#include <QQmlEngine> |
368 | + |
369 | +QPointer<UnityMenuModelCache> UnityMenuModelCache::theCache = nullptr; |
370 | + |
371 | +UnityMenuModelCache* UnityMenuModelCache::singleton() |
372 | +{ |
373 | + if (theCache.isNull()) { |
374 | + theCache = new UnityMenuModelCache(); |
375 | + } |
376 | + return theCache.data(); |
377 | +} |
378 | + |
379 | UnityMenuModelCache::UnityMenuModelCache(QObject* parent) |
380 | : QObject(parent) |
381 | { |
382 | } |
383 | |
384 | -UnityMenuModelCache::~UnityMenuModelCache() |
385 | -{ |
386 | -} |
387 | - |
388 | -UnityMenuModel* UnityMenuModelCache::model(const QByteArray& bus, |
389 | - const QByteArray& path, |
390 | - const QVariantMap& actions) |
391 | +QSharedPointer<UnityMenuModel> UnityMenuModelCache::model(const QByteArray& bus, |
392 | + const QByteArray& path, |
393 | + const QVariantMap& actions) |
394 | { |
395 | if (m_registry.contains(path)) |
396 | return m_registry[path]; |
397 | |
398 | - UnityMenuModel* menuModel = new UnityMenuModel; |
399 | - connect(menuModel, &QObject::destroyed, this, [menuModel, this](QObject*) { |
400 | - QList<QByteArray> keys = m_registry.keys(menuModel); |
401 | - Q_FOREACH(const QByteArray& key, keys) { |
402 | - m_registry.remove(key); |
403 | + UnityMenuModel* model = new UnityMenuModel; |
404 | + QQmlEngine::setObjectOwnership(model, QQmlEngine::CppOwnership); |
405 | + |
406 | + QSharedPointer<UnityMenuModel> menuModel(model); |
407 | + connect(model, &QObject::destroyed, this, [this] { |
408 | + QMutableHashIterator<QByteArray, QWeakPointer<UnityMenuModel>> iter(m_registry); |
409 | + while(iter.hasNext()) { |
410 | + auto keyVal = iter.next(); |
411 | + if (keyVal.value().isNull()) { |
412 | + iter.remove(); |
413 | + break; |
414 | + } |
415 | } |
416 | }); |
417 | - m_registry[path] = menuModel; |
418 | + m_registry[path] = menuModel.toWeakRef(); |
419 | |
420 | menuModel->setBusName(bus); |
421 | menuModel->setMenuObjectPath(path); |
422 | |
423 | === modified file 'plugins/Unity/Indicators/unitymenumodelcache.h' |
424 | --- plugins/Unity/Indicators/unitymenumodelcache.h 2014-08-26 08:14:44 +0000 |
425 | +++ plugins/Unity/Indicators/unitymenumodelcache.h 2014-10-14 14:19:22 +0000 |
426 | @@ -24,6 +24,8 @@ |
427 | |
428 | #include <QObject> |
429 | #include <QHash> |
430 | +#include <QPointer> |
431 | +#include <QWeakPointer> |
432 | |
433 | class UnityMenuModel; |
434 | |
435 | @@ -32,15 +34,19 @@ |
436 | Q_OBJECT |
437 | public: |
438 | UnityMenuModelCache(QObject*parent=nullptr); |
439 | - ~UnityMenuModelCache(); |
440 | - |
441 | - Q_INVOKABLE UnityMenuModel* model(const QByteArray& bus, |
442 | - const QByteArray& path, |
443 | - const QVariantMap& actions); |
444 | - Q_INVOKABLE bool contains(const QByteArray& path); |
445 | - |
446 | -private: |
447 | - QHash<QByteArray, UnityMenuModel*> m_registry; |
448 | + |
449 | + static UnityMenuModelCache* singleton(); |
450 | + |
451 | + virtual QSharedPointer<UnityMenuModel> model(const QByteArray& bus, |
452 | + const QByteArray& path, |
453 | + const QVariantMap& actions); |
454 | + |
455 | + // for tests use |
456 | + Q_INVOKABLE virtual bool contains(const QByteArray& path); |
457 | + |
458 | +protected: |
459 | + QHash<QByteArray, QWeakPointer<UnityMenuModel>> m_registry; |
460 | + static QPointer<UnityMenuModelCache> theCache; |
461 | }; |
462 | |
463 | #endif // UNITYMENUMODELCACHE_H |
464 | |
465 | === modified file 'plugins/Unity/Launcher/Launcher.qmltypes' |
466 | --- plugins/Unity/Launcher/Launcher.qmltypes 2014-06-26 07:47:57 +0000 |
467 | +++ plugins/Unity/Launcher/Launcher.qmltypes 2014-10-14 14:19:22 +0000 |
468 | @@ -13,14 +13,6 @@ |
469 | exports: ["Unity.Launcher/LauncherItem 0.1"] |
470 | isCreatable: false |
471 | exportMetaObjectRevisions: [0] |
472 | - Signal { |
473 | - name: "favoriteChanged" |
474 | - Parameter { name: "favorite"; type: "bool" } |
475 | - } |
476 | - Signal { |
477 | - name: "runningChanged" |
478 | - Parameter { name: "running"; type: "bool" } |
479 | - } |
480 | } |
481 | Component { |
482 | name: "LauncherModel" |
483 | @@ -30,6 +22,10 @@ |
484 | isSingleton: true |
485 | exportMetaObjectRevisions: [0] |
486 | Method { |
487 | + name: "requestRemove" |
488 | + Parameter { name: "appId"; type: "string" } |
489 | + } |
490 | + Method { |
491 | name: "get" |
492 | type: "unity::shell::launcher::LauncherItemInterface*" |
493 | Parameter { name: "index"; type: "int" } |
494 | @@ -49,10 +45,6 @@ |
495 | Parameter { name: "appId"; type: "string" } |
496 | } |
497 | Method { |
498 | - name: "requestRemove" |
499 | - Parameter { name: "appId"; type: "string" } |
500 | - } |
501 | - Method { |
502 | name: "quickListActionInvoked" |
503 | Parameter { name: "appId"; type: "string" } |
504 | Parameter { name: "actionIndex"; type: "int" } |
505 | @@ -88,6 +80,7 @@ |
506 | Property { name: "recent"; type: "bool"; isReadonly: true } |
507 | Property { name: "progress"; type: "int"; isReadonly: true } |
508 | Property { name: "count"; type: "int"; isReadonly: true } |
509 | + Property { name: "countVisible"; type: "bool"; isReadonly: true } |
510 | Property { name: "focused"; type: "bool"; isReadonly: true } |
511 | Property { |
512 | name: "quickList" |
513 | @@ -96,6 +89,14 @@ |
514 | isPointer: true |
515 | } |
516 | Signal { |
517 | + name: "nameChanged" |
518 | + Parameter { name: "name"; type: "string" } |
519 | + } |
520 | + Signal { |
521 | + name: "iconChanged" |
522 | + Parameter { name: "icon"; type: "string" } |
523 | + } |
524 | + Signal { |
525 | name: "pinnedChanged" |
526 | Parameter { name: "pinned"; type: "bool" } |
527 | } |
528 | @@ -116,6 +117,10 @@ |
529 | Parameter { name: "count"; type: "int" } |
530 | } |
531 | Signal { |
532 | + name: "countVisibleChanged" |
533 | + Parameter { name: "countVisible"; type: "bool" } |
534 | + } |
535 | + Signal { |
536 | name: "focusedChanged" |
537 | Parameter { name: "focused"; type: "bool" } |
538 | } |
539 | |
540 | === modified file 'plugins/Unity/Session/Session.qmltypes' |
541 | --- plugins/Unity/Session/Session.qmltypes 2014-08-14 01:28:06 +0000 |
542 | +++ plugins/Unity/Session/Session.qmltypes 2014-10-14 14:19:22 +0000 |
543 | @@ -34,4 +34,14 @@ |
544 | Method { name: "RequestReboot" } |
545 | Method { name: "RequestShutdown" } |
546 | } |
547 | + Component { |
548 | + name: "OrientationLock" |
549 | + prototype: "QObject" |
550 | + exports: ["Unity.Session/OrientationLock 0.1"] |
551 | + isCreatable: false |
552 | + isSingleton: true |
553 | + exportMetaObjectRevisions: [0] |
554 | + Property { name: "enabled"; type: "bool"; isReadonly: true } |
555 | + Property { name: "savedOrientation"; type: "Qt::ScreenOrientation" } |
556 | + } |
557 | } |
558 | |
559 | === modified file 'plugins/Utils/Utils.qmltypes' |
560 | --- plugins/Utils/Utils.qmltypes 2014-08-14 01:28:06 +0000 |
561 | +++ plugins/Utils/Utils.qmltypes 2014-10-14 14:19:22 +0000 |
562 | @@ -107,6 +107,12 @@ |
563 | } |
564 | } |
565 | Component { |
566 | + name: "RelativeTimeFormatter" |
567 | + prototype: "TimeFormatter" |
568 | + exports: ["Utils/RelativeTimeFormatter 0.1"] |
569 | + exportMetaObjectRevisions: [0] |
570 | + } |
571 | + Component { |
572 | name: "TimeFormatter" |
573 | prototype: "QObject" |
574 | exports: ["Utils/GDateTimeFormatter 0.1", "Utils/TimeFormatter 0.1"] |
575 | |
576 | === modified file 'qml/Greeter/Clock.qml' |
577 | --- qml/Greeter/Clock.qml 2014-08-20 08:39:09 +0000 |
578 | +++ qml/Greeter/Clock.qml 2014-10-14 14:19:22 +0000 |
579 | @@ -34,21 +34,21 @@ |
580 | } |
581 | } |
582 | |
583 | - CachedUnityMenuModel { |
584 | + Indicators.SharedUnityMenuModel { |
585 | id: timeModel |
586 | objectName: "timeModel" |
587 | |
588 | busName: "com.canonical.indicator.datetime" |
589 | - actionsObjectPath: "/com/canonical/indicator/datetime" |
590 | + actions: { "indicator": "/com/canonical/indicator/datetime" } |
591 | menuObjectPath: clock.visible ? "/com/canonical/indicator/datetime/phone" : "" |
592 | + } |
593 | |
594 | - Indicators.RootActionState { |
595 | - menu: timeModel.model |
596 | - onUpdated: { |
597 | - if (timeLabel.text != rightLabel) { |
598 | - timeLabel.text = rightLabel; |
599 | - clock.currentDate = new Date(); |
600 | - } |
601 | + Indicators.RootActionState { |
602 | + menu: timeModel.model |
603 | + onUpdated: { |
604 | + if (timeLabel.text != rightLabel) { |
605 | + if (rightLabel != "") timeLabel.text = rightLabel; |
606 | + clock.currentDate = new Date(); |
607 | } |
608 | } |
609 | } |
610 | |
611 | === removed file 'qml/Panel/Indicators/CachedUnityMenuModel.qml' |
612 | --- qml/Panel/Indicators/CachedUnityMenuModel.qml 2014-08-20 08:39:09 +0000 |
613 | +++ qml/Panel/Indicators/CachedUnityMenuModel.qml 1970-01-01 00:00:00 +0000 |
614 | @@ -1,39 +0,0 @@ |
615 | -/* |
616 | - * Copyright 2013 Canonical Ltd. |
617 | - * |
618 | - * This program is free software; you can redistribute it and/or modify |
619 | - * it under the terms of the GNU Lesser General Public License as published by |
620 | - * the Free Software Foundation; version 3. |
621 | - * |
622 | - * This program is distributed in the hope that it will be useful, |
623 | - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
624 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
625 | - * GNU Lesser General Public License for more details. |
626 | - * |
627 | - * You should have received a copy of the GNU Lesser General Public License |
628 | - * along with this program. If not, see <http://www.gnu.org/licenses/>. |
629 | - * |
630 | - * Authors: |
631 | - * Nick Dedekind <nick.dedekind@canonical.com> |
632 | - */ |
633 | - |
634 | -import QtQuick 2.0 |
635 | -import QMenuModel 0.1 |
636 | -import Unity.Indicators 0.1 as Indicators |
637 | - |
638 | -// Make sure we don't duplicate models. |
639 | -Item { |
640 | - id: cachedModel |
641 | - property string busName |
642 | - property string actionsObjectPath |
643 | - property string menuObjectPath |
644 | - readonly property bool ready: busName!=="" && actionsObjectPath!=="" && menuObjectPath!=="" |
645 | - |
646 | - property var model: { |
647 | - if (!ready) return null; |
648 | - |
649 | - return Indicators.UnityMenuModelCache.model(cachedModel.busName, |
650 | - cachedModel.menuObjectPath, |
651 | - { "indicator": cachedModel.actionsObjectPath }); |
652 | - } |
653 | -} |
654 | |
655 | === modified file 'qml/Panel/Indicators/IndicatorBase.qml' |
656 | --- qml/Panel/Indicators/IndicatorBase.qml 2014-09-29 10:24:58 +0000 |
657 | +++ qml/Panel/Indicators/IndicatorBase.qml 2014-10-14 14:19:22 +0000 |
658 | @@ -37,10 +37,10 @@ |
659 | property alias menuModel: cachedModel.model |
660 | property alias rootActionState: rootAction |
661 | |
662 | - CachedUnityMenuModel { |
663 | + SharedUnityMenuModel { |
664 | id: cachedModel |
665 | busName: indicatorItem.busName |
666 | - actionsObjectPath: indicatorItem.actionsObjectPath |
667 | + actions: { "indicator": indicatorItem.actionsObjectPath } |
668 | menuObjectPath: indicatorItem.deviceMenuObjectPath |
669 | } |
670 | |
671 | |
672 | === modified file 'tests/mocks/AccountsService/AccountsService.qmltypes' |
673 | --- tests/mocks/AccountsService/AccountsService.qmltypes 2014-09-01 12:18:53 +0000 |
674 | +++ tests/mocks/AccountsService/AccountsService.qmltypes 2014-10-14 14:19:22 +0000 |
675 | @@ -23,6 +23,8 @@ |
676 | } |
677 | Property { name: "user"; type: "string" } |
678 | Property { name: "demoEdges"; type: "bool" } |
679 | + Property { name: "enableLauncherWhileLocked"; type: "bool" } |
680 | + Property { name: "enableIndicatorsWhileLocked"; type: "bool" } |
681 | Property { name: "backgroundFile"; type: "string" } |
682 | Property { name: "statsWelcomeScreen"; type: "bool" } |
683 | Property { name: "passwordDisplayHint"; type: "PasswordDisplayHint"; isReadonly: true } |
684 | |
685 | === modified file 'tests/mocks/LightDM/LightDM.qmltypes' |
686 | --- tests/mocks/LightDM/LightDM.qmltypes 2014-09-01 12:18:53 +0000 |
687 | +++ tests/mocks/LightDM/LightDM.qmltypes 2014-10-14 14:19:22 +0000 |
688 | @@ -37,6 +37,7 @@ |
689 | Signal { name: "isActiveChanged" } |
690 | Signal { name: "isAuthenticatedChanged" } |
691 | Signal { name: "showGreeter" } |
692 | + Signal { name: "hideGreeter" } |
693 | Signal { |
694 | name: "requestAuthenticationUser" |
695 | Parameter { name: "user"; type: "string" } |
696 | |
697 | === modified file 'tests/mocks/QMenuModel/QMenuModel.qmltypes' |
698 | --- tests/mocks/QMenuModel/QMenuModel.qmltypes 2014-08-14 01:28:06 +0000 |
699 | +++ tests/mocks/QMenuModel/QMenuModel.qmltypes 2014-10-14 14:19:22 +0000 |
700 | @@ -18,12 +18,12 @@ |
701 | prototype: "QAbstractListModel" |
702 | exports: ["QMenuModel/UnityMenuModel 0.1"] |
703 | exportMetaObjectRevisions: [0] |
704 | - Property { name: "modelData"; type: "QVariant" } |
705 | Property { name: "busName"; type: "QByteArray" } |
706 | Property { name: "actions"; type: "QVariantMap" } |
707 | Property { name: "menuObjectPath"; type: "QByteArray" } |
708 | Property { name: "actionStateParser"; type: "ActionStateParser"; isPointer: true } |
709 | Property { name: "nameOwner"; type: "string"; isReadonly: true } |
710 | + Property { name: "modelData"; type: "QVariant" } |
711 | Method { |
712 | name: "insertRow" |
713 | Parameter { name: "row"; type: "int" } |
714 | |
715 | === modified file 'tests/mocks/QMenuModel/unitymenumodel.cpp' |
716 | --- tests/mocks/QMenuModel/unitymenumodel.cpp 2014-08-26 08:14:44 +0000 |
717 | +++ tests/mocks/QMenuModel/unitymenumodel.cpp 2014-10-14 14:19:22 +0000 |
718 | @@ -50,13 +50,12 @@ |
719 | { |
720 | beginResetModel(); |
721 | |
722 | - m_modelData.clear(); |
723 | m_modelData = data.toList(); |
724 | + Q_EMIT modelDataChanged(); |
725 | |
726 | endResetModel(); |
727 | } |
728 | |
729 | - |
730 | void UnityMenuModel::insertRow(int row, const QVariant& data) |
731 | { |
732 | row = qMin(row, rowCount()); |
733 | |
734 | === modified file 'tests/mocks/QMenuModel/unitymenumodel.h' |
735 | --- tests/mocks/QMenuModel/unitymenumodel.h 2014-08-26 08:14:44 +0000 |
736 | +++ tests/mocks/QMenuModel/unitymenumodel.h 2014-10-14 14:19:22 +0000 |
737 | @@ -27,13 +27,15 @@ |
738 | class Q_DECL_EXPORT UnityMenuModel : public QAbstractListModel |
739 | { |
740 | Q_OBJECT |
741 | - Q_PROPERTY(QVariant modelData READ modelData WRITE setModelData NOTIFY modelDataChanged) |
742 | Q_PROPERTY(QByteArray busName READ busName WRITE setBusName NOTIFY busNameChanged) |
743 | Q_PROPERTY(QVariantMap actions READ actions WRITE setActions NOTIFY actionsChanged) |
744 | Q_PROPERTY(QByteArray menuObjectPath READ menuObjectPath WRITE setMenuObjectPath NOTIFY menuObjectPathChanged) |
745 | Q_PROPERTY(ActionStateParser* actionStateParser READ actionStateParser WRITE setActionStateParser NOTIFY actionStateParserChanged) |
746 | Q_PROPERTY(QString nameOwner READ nameOwner NOTIFY nameOwnerChanged) |
747 | |
748 | + // internal mock properties |
749 | + Q_PROPERTY(QVariant modelData READ modelData WRITE setModelData NOTIFY modelDataChanged) |
750 | + |
751 | public: |
752 | UnityMenuModel(QObject *parent = nullptr); |
753 | virtual ~UnityMenuModel(); |
754 | @@ -81,8 +83,10 @@ |
755 | void actionsChanged(); |
756 | void menuObjectPathChanged(); |
757 | void actionStateParserChanged(); |
758 | + void nameOwnerChanged(); |
759 | + |
760 | + // Internal mock usage |
761 | void modelDataChanged(); |
762 | - void nameOwnerChanged(); |
763 | |
764 | private: |
765 | QVariantMap rowData(int row) const; |
766 | |
767 | === modified file 'tests/mocks/Ubuntu/Payments/Payments.qmltypes' |
768 | --- tests/mocks/Ubuntu/Payments/Payments.qmltypes 2014-06-27 20:53:24 +0000 |
769 | +++ tests/mocks/Ubuntu/Payments/Payments.qmltypes 2014-10-14 14:19:22 +0000 |
770 | @@ -37,6 +37,8 @@ |
771 | Parameter { name: "error"; type: "string" } |
772 | } |
773 | Signal { name: "purchaseCompleted" } |
774 | + Signal { name: "purchaseCancelled" } |
775 | Method { name: "start" } |
776 | + Method { name: "process" } |
777 | } |
778 | } |
779 | |
780 | === modified file 'tests/mocks/Ubuntu/Telephony/Telephony.qmltypes' |
781 | --- tests/mocks/Ubuntu/Telephony/Telephony.qmltypes 2014-08-14 13:33:28 +0000 |
782 | +++ tests/mocks/Ubuntu/Telephony/Telephony.qmltypes 2014-10-14 14:19:22 +0000 |
783 | @@ -22,7 +22,8 @@ |
784 | exportMetaObjectRevisions: [0] |
785 | Property { name: "phoneNumber"; type: "string" } |
786 | Property { name: "isConference"; type: "bool" } |
787 | - Property { name: "elapsedTime"; type: "int"; isReadonly: true } |
788 | + Property { name: "elapsedTime"; type: "int" } |
789 | + Property { name: "elapsedTimerRunning"; type: "bool" } |
790 | } |
791 | Component { |
792 | name: "MockCallManager" |
793 | |
794 | === modified file 'tests/mocks/Unity/Application/Application.qmltypes' |
795 | --- tests/mocks/Unity/Application/Application.qmltypes 2014-09-01 12:24:06 +0000 |
796 | +++ tests/mocks/Unity/Application/Application.qmltypes 2014-10-14 14:19:22 +0000 |
797 | @@ -238,6 +238,7 @@ |
798 | Property { name: "state"; type: "State"; isReadonly: true } |
799 | Property { name: "name"; type: "string"; isReadonly: true } |
800 | Property { name: "live"; type: "bool"; isReadonly: true } |
801 | + Property { name: "orientation"; type: "Qt::ScreenOrientation" } |
802 | Signal { |
803 | name: "typeChanged" |
804 | Parameter { type: "Type" } |
805 | @@ -268,10 +269,15 @@ |
806 | exportMetaObjectRevisions: [0] |
807 | Property { name: "name"; type: "string"; isReadonly: true } |
808 | Property { name: "surface"; type: "MirSurfaceItem"; isReadonly: true; isPointer: true } |
809 | + Property { name: "application"; type: "ApplicationInfo"; isReadonly: true; isPointer: true } |
810 | Property { name: "parentSession"; type: "Session"; isReadonly: true; isPointer: true } |
811 | Property { name: "childSessions"; type: "SessionModel"; isReadonly: true; isPointer: true } |
812 | Property { name: "live"; type: "bool"; isReadonly: true } |
813 | Signal { |
814 | + name: "applicationChanged" |
815 | + Parameter { type: "ApplicationInfo"; isPointer: true } |
816 | + } |
817 | + Signal { |
818 | name: "surfaceChanged" |
819 | Parameter { type: "MirSurfaceItem"; isPointer: true } |
820 | } |
821 | @@ -368,6 +374,12 @@ |
822 | Property { name: "stage"; type: "Stage"; isReadonly: true } |
823 | Property { name: "state"; type: "State"; isReadonly: true } |
824 | Property { name: "focused"; type: "bool"; isReadonly: true } |
825 | + Property { name: "splashTitle"; type: "string"; isReadonly: true } |
826 | + Property { name: "splashImage"; type: "QUrl"; isReadonly: true } |
827 | + Property { name: "splashShowHeader"; type: "bool"; isReadonly: true } |
828 | + Property { name: "splashColor"; type: "QColor"; isReadonly: true } |
829 | + Property { name: "splashColorHeader"; type: "QColor"; isReadonly: true } |
830 | + Property { name: "splashColorFooter"; type: "QColor"; isReadonly: true } |
831 | Signal { |
832 | name: "nameChanged" |
833 | Parameter { name: "name"; type: "string" } |
834 | @@ -414,6 +426,7 @@ |
835 | Property { name: "count"; type: "int"; isReadonly: true } |
836 | Property { name: "focusedApplicationId"; type: "string"; isReadonly: true } |
837 | Property { name: "suspended"; type: "bool" } |
838 | + Property { name: "forceDashActive"; type: "bool" } |
839 | Signal { |
840 | name: "focusRequested" |
841 | Parameter { name: "appId"; type: "string" } |
842 | |
843 | === modified file 'tests/mocks/Unity/DashCommunicator/DashCommunicator.qmltypes' |
844 | --- tests/mocks/Unity/DashCommunicator/DashCommunicator.qmltypes 2014-08-14 13:33:28 +0000 |
845 | +++ tests/mocks/Unity/DashCommunicator/DashCommunicator.qmltypes 2014-10-14 14:19:22 +0000 |
846 | @@ -34,13 +34,13 @@ |
847 | name: "setCurrentScopeRequested" |
848 | Parameter { name: "scopeId"; type: "string" } |
849 | Parameter { name: "animate"; type: "bool" } |
850 | - Parameter { name: "reset"; type: "bool" } |
851 | + Parameter { name: "isSwipe"; type: "bool" } |
852 | } |
853 | Method { |
854 | name: "mockSetCurrentScope" |
855 | Parameter { name: "scopeId"; type: "string" } |
856 | Parameter { name: "animate"; type: "bool" } |
857 | - Parameter { name: "reset"; type: "bool" } |
858 | + Parameter { name: "isSwipe"; type: "bool" } |
859 | } |
860 | } |
861 | } |
862 | |
863 | === modified file 'tests/mocks/Unity/Indicators/CMakeLists.txt' |
864 | --- tests/mocks/Unity/Indicators/CMakeLists.txt 2014-08-20 08:39:09 +0000 |
865 | +++ tests/mocks/Unity/Indicators/CMakeLists.txt 2014-10-14 14:19:22 +0000 |
866 | @@ -12,24 +12,17 @@ |
867 | |
868 | set(IndicatorsFakeQml_SOURCES |
869 | fakeplugin.cpp |
870 | + fakeindicatorsmodel.cpp |
871 | + fakeunitymenumodelcache.cpp |
872 | ${CMAKE_SOURCE_DIR}/plugins/Unity/Indicators/indicators.h |
873 | ${CMAKE_SOURCE_DIR}/plugins/Unity/Indicators/menucontentactivator.cpp |
874 | + ${CMAKE_SOURCE_DIR}/plugins/Unity/Indicators/sharedunitymenumodel.cpp |
875 | ${CMAKE_SOURCE_DIR}/plugins/Unity/Indicators/unitymenumodelcache.cpp |
876 | ${CMAKE_SOURCE_DIR}/plugins/Unity/Indicators/unitymenumodelstack.cpp |
877 | ${CMAKE_SOURCE_DIR}/plugins/Unity/Indicators/visibleindicatorsmodel.cpp |
878 | - fakeindicatorsmodel.cpp |
879 | -) |
880 | - |
881 | -set(IndicatorsFakeQml_RESOURCES |
882 | - indicators_fake.qrc |
883 | -) |
884 | - |
885 | -qt5_add_resources(IndicatorsFakeQml_RESOURCES_RCC |
886 | - ${IndicatorsFakeQml_RESOURCES} |
887 | ) |
888 | |
889 | add_library(IndicatorsFakeQml SHARED |
890 | - ${IndicatorsFakeQml_RESOURCES_RCC} |
891 | ${IndicatorsFakeQml_SOURCES} |
892 | ) |
893 | add_definitions(-DUNITYINDICATORS_LIBRARY) |
894 | |
895 | === removed file 'tests/mocks/Unity/Indicators/FakeMenuPage.qml' |
896 | --- tests/mocks/Unity/Indicators/FakeMenuPage.qml 2014-09-09 15:10:52 +0000 |
897 | +++ tests/mocks/Unity/Indicators/FakeMenuPage.qml 1970-01-01 00:00:00 +0000 |
898 | @@ -1,27 +0,0 @@ |
899 | -/* |
900 | - * Copyright 2013 Canonical Ltd. |
901 | - * |
902 | - * This program is free software; you can redistribute it and/or modify |
903 | - * it under the terms of the GNU General Public License as published by |
904 | - * the Free Software Foundation; version 3. |
905 | - * |
906 | - * This program is distributed in the hope that it will be useful, |
907 | - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
908 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
909 | - * GNU General Public License for more details. |
910 | - * |
911 | - * You should have received a copy of the GNU General Public License |
912 | - * along with this program. If not, see <http://www.gnu.org/licenses/>. |
913 | - */ |
914 | - |
915 | -import QtQuick 2.0 |
916 | - |
917 | -Flickable { |
918 | - objectName: "fakeMenuPlugin" |
919 | - // Make it compatible with the PluginItem interface |
920 | - function reset() { |
921 | - if (shell != undefined && shell.indicator_status != undefined) { |
922 | - shell.indicator_status[objectName].reset++; |
923 | - } |
924 | - } |
925 | -} |
926 | |
927 | === modified file 'tests/mocks/Unity/Indicators/Indicators.qmltypes' |
928 | --- tests/mocks/Unity/Indicators/Indicators.qmltypes 2014-09-01 12:18:53 +0000 |
929 | +++ tests/mocks/Unity/Indicators/Indicators.qmltypes 2014-10-14 14:19:22 +0000 |
930 | @@ -29,6 +29,7 @@ |
931 | exports: ["Unity.Indicators/FakeIndicatorsModel 0.1"] |
932 | exportMetaObjectRevisions: [0] |
933 | Property { name: "count"; type: "int"; isReadonly: true } |
934 | + Property { name: "modelData"; type: "QVariant" } |
935 | Method { |
936 | name: "load" |
937 | Parameter { name: "profile"; type: "string" } |
938 | @@ -39,6 +40,15 @@ |
939 | Parameter { name: "row"; type: "QVariantMap" } |
940 | } |
941 | Method { |
942 | + name: "insert" |
943 | + Parameter { name: "row"; type: "int" } |
944 | + Parameter { name: "data"; type: "QVariantMap" } |
945 | + } |
946 | + Method { |
947 | + name: "remove" |
948 | + Parameter { name: "row"; type: "int" } |
949 | + } |
950 | + Method { |
951 | name: "data" |
952 | type: "QVariant" |
953 | Parameter { name: "row"; type: "int" } |
954 | @@ -46,6 +56,27 @@ |
955 | } |
956 | } |
957 | Component { |
958 | + name: "FakeUnityMenuModelCache" |
959 | + prototype: "UnityMenuModelCache" |
960 | + exports: ["Unity.Indicators/UnityMenuModelCache 0.1"] |
961 | + isCreatable: false |
962 | + isSingleton: true |
963 | + exportMetaObjectRevisions: [0] |
964 | + Method { |
965 | + name: "setCachedModelData" |
966 | + Parameter { name: "bus"; type: "QByteArray" } |
967 | + Parameter { name: "path"; type: "QByteArray" } |
968 | + Parameter { name: "actions"; type: "QVariantMap" } |
969 | + Parameter { name: "data"; type: "QVariant" } |
970 | + } |
971 | + Method { |
972 | + name: "setCachedModelData" |
973 | + Parameter { name: "bus"; type: "QByteArray" } |
974 | + Parameter { name: "path"; type: "QByteArray" } |
975 | + Parameter { name: "actions"; type: "QVariantMap" } |
976 | + } |
977 | + } |
978 | + Component { |
979 | name: "FlatMenuProxyModelRole" |
980 | prototype: "QObject" |
981 | exports: ["Unity.Indicators/FlatMenuProxyModelRole 0.1"] |
982 | @@ -160,19 +191,18 @@ |
983 | } |
984 | Component { name: "QIdentityProxyModel"; prototype: "QAbstractProxyModel" } |
985 | Component { |
986 | + name: "SharedUnityMenuModel" |
987 | + prototype: "QObject" |
988 | + exports: ["Unity.Indicators/SharedUnityMenuModel 0.1"] |
989 | + exportMetaObjectRevisions: [0] |
990 | + Property { name: "busName"; type: "QByteArray" } |
991 | + Property { name: "menuObjectPath"; type: "QByteArray" } |
992 | + Property { name: "actions"; type: "QVariantMap" } |
993 | + Property { name: "model"; type: "UnityMenuModel"; isReadonly: true; isPointer: true } |
994 | + } |
995 | + Component { |
996 | name: "UnityMenuModelCache" |
997 | prototype: "QObject" |
998 | - exports: ["Unity.Indicators/UnityMenuModelCache 0.1"] |
999 | - isCreatable: false |
1000 | - isSingleton: true |
1001 | - exportMetaObjectRevisions: [0] |
1002 | - Method { |
1003 | - name: "model" |
1004 | - type: "UnityMenuModel*" |
1005 | - Parameter { name: "bus"; type: "QByteArray" } |
1006 | - Parameter { name: "path"; type: "QByteArray" } |
1007 | - Parameter { name: "actions"; type: "QVariantMap" } |
1008 | - } |
1009 | Method { |
1010 | name: "contains" |
1011 | type: "bool" |
1012 | |
1013 | === modified file 'tests/mocks/Unity/Indicators/IndicatorsModel.qml' |
1014 | --- tests/mocks/Unity/Indicators/IndicatorsModel.qml 2014-03-03 11:55:00 +0000 |
1015 | +++ tests/mocks/Unity/Indicators/IndicatorsModel.qml 2014-10-14 14:19:22 +0000 |
1016 | @@ -18,43 +18,151 @@ |
1017 | import Unity.Indicators 0.1 as Indicators |
1018 | |
1019 | Indicators.FakeIndicatorsModel { |
1020 | + id: root |
1021 | + |
1022 | + Component.onCompleted: { |
1023 | + Indicators.UnityMenuModelCache.setCachedModelData("com.canonical.indicators.fake1", |
1024 | + "/com/canonical/indicators/fake1", |
1025 | + "/com/canonical/indicators/fake1", |
1026 | + getUnityMenuModelData("fake-indicator-bluetooth", |
1027 | + "Bluetooth (F)", |
1028 | + "", |
1029 | + [ "image://theme/bluetooth-active" ])); |
1030 | + Indicators.UnityMenuModelCache.setCachedModelData("com.canonical.indicators.fake2", |
1031 | + "/com/canonical/indicators/fake2", |
1032 | + "/com/canonical/indicators/fake2", |
1033 | + getUnityMenuModelData("fake-indicator-network", |
1034 | + "Network (F)", |
1035 | + "", |
1036 | + [ "image://theme/simcard-error", "image://theme/wifi-high" ])); |
1037 | + Indicators.UnityMenuModelCache.setCachedModelData("com.canonical.indicators.fake3", |
1038 | + "/com/canonical/indicators/fake3", |
1039 | + "/com/canonical/indicators/fake3", |
1040 | + getUnityMenuModelData("fake-indicator-sound", |
1041 | + "Messages (F)", |
1042 | + "", |
1043 | + [ "image://theme/messages-new" ])); |
1044 | + Indicators.UnityMenuModelCache.setCachedModelData("com.canonical.indicators.fake4", |
1045 | + "/com/canonical/indicators/fake4", |
1046 | + "/com/canonical/indicators/fake4", |
1047 | + getUnityMenuModelData("fake-indicator-power", |
1048 | + "Sound (F)", |
1049 | + "", |
1050 | + [ "image://theme/audio-volume-high" ])); |
1051 | + Indicators.UnityMenuModelCache.setCachedModelData("com.canonical.indicators.fake5", |
1052 | + "/com/canonical/indicators/fake5", |
1053 | + "/com/canonical/indicators/fake5", |
1054 | + getUnityMenuModelData("fake-indicator-power", |
1055 | + "Battery (F)", |
1056 | + "", |
1057 | + [ "image://theme/battery-020" ])); |
1058 | + } |
1059 | + |
1060 | + function getUnityMenuModelData(identifier, title, label, icons) { |
1061 | + var root = [{ |
1062 | + "rowData": { // 1 |
1063 | + "label": "", |
1064 | + "sensitive": true, |
1065 | + "isSeparator": false, |
1066 | + "icon": "", |
1067 | + "type": "com.canonical.indicator.root", |
1068 | + "ext": {}, |
1069 | + "action": "", |
1070 | + "actionState": { |
1071 | + "title": title, |
1072 | + "label": label, |
1073 | + "icons": icons |
1074 | + }, |
1075 | + "isCheck": false, |
1076 | + "isRadio": false, |
1077 | + "isToggled": false, |
1078 | + }, |
1079 | + "submenu": [] |
1080 | + }]; |
1081 | + |
1082 | + var submenus = []; |
1083 | + for (var i = 0; i < 8; i++) { |
1084 | + var submenu = { |
1085 | + "rowData": { // 1.1 |
1086 | + "label": identifier, |
1087 | + "sensitive": true, |
1088 | + "isSeparator": false, |
1089 | + "icon": "", |
1090 | + "type": undefined, |
1091 | + "ext": {}, |
1092 | + "action": "", |
1093 | + "actionState": {}, |
1094 | + "isCheck": false, |
1095 | + "isRadio": false, |
1096 | + "isToggled": false, |
1097 | + }}; |
1098 | + submenus.push(submenu); |
1099 | + } |
1100 | + root[0]["submenu"] = submenus; |
1101 | + |
1102 | + return root; |
1103 | + } |
1104 | + |
1105 | + property var originalModelData: [ |
1106 | + { |
1107 | + "identifier": "indicator-fake1", |
1108 | + "widgetSource": "Indicators/DefaultIndicatorWidget.qml", |
1109 | + "pageSource": "Indicators/DefaultIndicatorPage.qml", |
1110 | + "indicatorProperties": { |
1111 | + "enabled": true, |
1112 | + "busName": "com.canonical.indicators.fake1", |
1113 | + "menuObjectPath": "/com/canonical/indicators/fake1", |
1114 | + "actionsObjectPath": "/com/canonical/indicators/fake1" |
1115 | + } |
1116 | + }, |
1117 | + { |
1118 | + "identifier": "indicator-fake2", |
1119 | + "widgetSource": "Indicators/DefaultIndicatorWidget.qml", |
1120 | + "pageSource": "Indicators/DefaultIndicatorPage.qml", |
1121 | + "indicatorProperties": { |
1122 | + "enabled": true, |
1123 | + "busName": "com.canonical.indicators.fake2", |
1124 | + "menuObjectPath": "/com/canonical/indicators/fake2", |
1125 | + "actionsObjectPath": "/com/canonical/indicators/fake2" |
1126 | + } |
1127 | + }, |
1128 | + { |
1129 | + "identifier": "indicator-fake3", |
1130 | + "widgetSource": "Indicators/DefaultIndicatorWidget.qml", |
1131 | + "pageSource": "Indicators/DefaultIndicatorPage.qml", |
1132 | + "indicatorProperties": { |
1133 | + "enabled": true, |
1134 | + "busName": "com.canonical.indicators.fake3", |
1135 | + "menuObjectPath": "/com/canonical/indicators/fake3", |
1136 | + "actionsObjectPath": "/com/canonical/indicators/fake3" |
1137 | + } |
1138 | + }, |
1139 | + { |
1140 | + "identifier": "indicator-fake4", |
1141 | + "widgetSource": "Indicators/DefaultIndicatorWidget.qml", |
1142 | + "pageSource": "Indicators/DefaultIndicatorPage.qml", |
1143 | + "indicatorProperties": { |
1144 | + "enabled": true, |
1145 | + "busName": "com.canonical.indicators.fake4", |
1146 | + "menuObjectPath": "/com/canonical/indicators/fake4", |
1147 | + "actionsObjectPath": "/com/canonical/indicators/fake4" |
1148 | + } |
1149 | + }, |
1150 | + { |
1151 | + "identifier": "indicator-fake5", |
1152 | + "widgetSource": "Indicators/DefaultIndicatorWidget.qml", |
1153 | + "pageSource": "Indicators/DefaultIndicatorPage.qml", |
1154 | + "indicatorProperties": { |
1155 | + "enabled": true, |
1156 | + "busName": "com.canonical.indicators.fake5", |
1157 | + "menuObjectPath": "/com/canonical/indicators/fake5", |
1158 | + "actionsObjectPath": "/com/canonical/indicators/fake5" |
1159 | + } |
1160 | + } |
1161 | + ] |
1162 | |
1163 | function load(profile) { |
1164 | unload(); |
1165 | - |
1166 | - append({ "identifier": "indicator-fake1", |
1167 | - "position": 0, |
1168 | - "widgetSource": "qrc:/tests/indciators/qml/fake_menu_widget1.qml", |
1169 | - "pageSource": "qrc:/tests/indciators/qml/fake_menu_page1.qml", |
1170 | - "indicatorProperties": { enabled: true } |
1171 | - }); |
1172 | - |
1173 | - append({ "identifier": "indicator-fake2", |
1174 | - "position": 1, |
1175 | - "widgetSource": "qrc:/tests/indciators/qml/fake_menu_widget2.qml", |
1176 | - "pageSource": "qrc:/tests/indciators/qml/fake_menu_page2.qml", |
1177 | - "indicatorProperties": { enabled: true } |
1178 | - }); |
1179 | - |
1180 | - append({ "identifier": "indicator-fake3", |
1181 | - "position": 2, |
1182 | - "widgetSource": "qrc:/tests/indciators/qml/fake_menu_widget3.qml", |
1183 | - "pageSource": "qrc:/tests/indciators/qml/fake_menu_page3.qml", |
1184 | - "indicatorProperties": { enabled: true } |
1185 | - }); |
1186 | - |
1187 | - append({ "identifier": "indicator-fake4", |
1188 | - "position": 3, |
1189 | - "widgetSource": "qrc:/tests/indciators/qml/fake_menu_widget4.qml", |
1190 | - "pageSource": "qrc:/tests/indciators/qml/fake_menu_page4.qml", |
1191 | - "indicatorProperties": { enabled: true } |
1192 | - }); |
1193 | - |
1194 | - append({ "identifier": "indicator-fake5", |
1195 | - "position": 4, |
1196 | - "widgetSource": "qrc:/tests/indciators/qml/fake_menu_widget5.qml", |
1197 | - "pageSource": "qrc:/tests/indciators/qml/fake_menu_page5.qml", |
1198 | - "indicatorProperties": { enabled: true } |
1199 | - }); |
1200 | + root.modelData = originalModelData; |
1201 | } |
1202 | } |
1203 | |
1204 | === modified file 'tests/mocks/Unity/Indicators/RootActionState.qml' |
1205 | --- tests/mocks/Unity/Indicators/RootActionState.qml 2013-10-28 18:19:15 +0000 |
1206 | +++ tests/mocks/Unity/Indicators/RootActionState.qml 2014-10-14 14:19:22 +0000 |
1207 | @@ -19,15 +19,23 @@ |
1208 | |
1209 | import QtQuick 2.0 |
1210 | |
1211 | -QtObject { |
1212 | - property var menu |
1213 | - property bool valid: false |
1214 | - property string title |
1215 | - property string leftLabel |
1216 | - property string rightLabel |
1217 | - property var icons |
1218 | - property string accessibleName |
1219 | - property bool visible: true |
1220 | +Item { |
1221 | + property var menu: null |
1222 | + property bool valid: cachedState !== undefined |
1223 | + property string title: cachedState && cachedState.hasOwnProperty("title") ? cachedState["title"] : "" |
1224 | + property string leftLabel: cachedState && cachedState.hasOwnProperty("pre-label") ? cachedState["pre-label"] : "" |
1225 | + property string rightLabel: cachedState && cachedState.hasOwnProperty("label") ? cachedState["label"] : "" |
1226 | + property var icons: cachedState && cachedState.hasOwnProperty("icons") ? cachedState["icons"] : [] |
1227 | + property string accessibleName: cachedState && cachedState.hasOwnProperty("accessible-desc") ? cachedState["accessible-desc"] : "" |
1228 | + visible: cachedState && cachedState.hasOwnProperty("visible") ? cachedState["visible"] : true |
1229 | + |
1230 | + property var cachedState: menu ? menu.get(0, "actionState") : undefined |
1231 | + Connections { |
1232 | + target: menu |
1233 | + onModelDataChanged: { |
1234 | + cachedState = menu.get(0, "actionState"); |
1235 | + } |
1236 | + } |
1237 | |
1238 | signal updated |
1239 | |
1240 | |
1241 | === modified file 'tests/mocks/Unity/Indicators/fakeindicatorsmodel.cpp' |
1242 | --- tests/mocks/Unity/Indicators/fakeindicatorsmodel.cpp 2014-07-01 09:49:24 +0000 |
1243 | +++ tests/mocks/Unity/Indicators/fakeindicatorsmodel.cpp 2014-10-14 14:19:22 +0000 |
1244 | @@ -31,7 +31,6 @@ |
1245 | /*! \internal */ |
1246 | FakeIndicatorsModel::~FakeIndicatorsModel() |
1247 | { |
1248 | - qDeleteAll(m_indicators); |
1249 | } |
1250 | |
1251 | int FakeIndicatorsModel::count() const |
1252 | @@ -47,29 +46,61 @@ |
1253 | { |
1254 | beginResetModel(); |
1255 | |
1256 | - qDeleteAll(m_indicators); |
1257 | - m_indicators.clear(); |
1258 | - |
1259 | - endResetModel(); |
1260 | -} |
1261 | - |
1262 | - |
1263 | -void FakeIndicatorsModel::append(const QVariantMap& row) |
1264 | -{ |
1265 | - Indicator* new_row = new QHash<int, QVariant>(); |
1266 | - for (auto iter = row.begin(); iter != row.end(); ++iter ) |
1267 | - { |
1268 | - int key = roleNames().key(iter.key().toUtf8(), -1); |
1269 | - if (key != -1) { |
1270 | - new_row->insert(key, iter.value()); |
1271 | - } |
1272 | - } |
1273 | - |
1274 | - beginInsertRows(QModelIndex(), m_indicators.count(), m_indicators.count()); |
1275 | - |
1276 | - m_indicators.append(new_row); |
1277 | - |
1278 | - endInsertRows(); |
1279 | + m_modelData.clear(); |
1280 | + Q_EMIT modelDataChanged(); |
1281 | + |
1282 | + endResetModel(); |
1283 | +} |
1284 | + |
1285 | + |
1286 | +void FakeIndicatorsModel::append(const QVariantMap& data) |
1287 | +{ |
1288 | + QList<QVariant> allData = m_modelData.toList(); |
1289 | + beginInsertRows(QModelIndex(), allData.count(), allData.count()); |
1290 | + |
1291 | + allData.append(data); |
1292 | + m_modelData = allData; |
1293 | + Q_EMIT modelDataChanged(); |
1294 | + |
1295 | + endInsertRows(); |
1296 | +} |
1297 | + |
1298 | +void FakeIndicatorsModel::insert(int row, const QVariantMap& data) |
1299 | +{ |
1300 | + QList<QVariant> allData = m_modelData.toList(); |
1301 | + row = qMax(0, qMin(row, allData.count())); |
1302 | + |
1303 | + beginInsertRows(QModelIndex(), row, row); |
1304 | + |
1305 | + allData.insert(row, data); |
1306 | + m_modelData = allData; |
1307 | + Q_EMIT modelDataChanged(); |
1308 | + |
1309 | + endInsertRows(); |
1310 | +} |
1311 | + |
1312 | +void FakeIndicatorsModel::remove(int row) |
1313 | +{ |
1314 | + QList<QVariant> allData = m_modelData.toList(); |
1315 | + row = qMax(0, qMin(row, allData.count())); |
1316 | + |
1317 | + beginRemoveRows(QModelIndex(), row, row); |
1318 | + |
1319 | + allData.removeAt(row); |
1320 | + m_modelData = allData; |
1321 | + Q_EMIT modelDataChanged(); |
1322 | + |
1323 | + endRemoveRows(); |
1324 | +} |
1325 | + |
1326 | +void FakeIndicatorsModel::setModelData(const QVariant& modelData) |
1327 | +{ |
1328 | + beginResetModel(); |
1329 | + |
1330 | + m_modelData = modelData; |
1331 | + Q_EMIT modelDataChanged(); |
1332 | + |
1333 | + endResetModel(); |
1334 | } |
1335 | |
1336 | QHash<int, QByteArray> FakeIndicatorsModel::roleNames() const |
1337 | @@ -91,18 +122,18 @@ |
1338 | return 1; |
1339 | } |
1340 | |
1341 | -Q_INVOKABLE QVariant FakeIndicatorsModel::data(int row, int role) const |
1342 | +QVariant FakeIndicatorsModel::data(int row, int role) const |
1343 | { |
1344 | return data(index(row, 0), role); |
1345 | } |
1346 | |
1347 | QVariant FakeIndicatorsModel::data(const QModelIndex &index, int role) const |
1348 | { |
1349 | - if (!index.isValid() || index.row() >= m_indicators.size()) |
1350 | + QList<QVariant> dataList = m_modelData.toList(); |
1351 | + if (!index.isValid() || index.row() >= dataList.size()) |
1352 | return QVariant(); |
1353 | |
1354 | - Indicator* indicator = m_indicators[index.row()]; |
1355 | - return indicator->value(role, QVariant()); |
1356 | + return dataList[index.row()].toMap()[roleNames()[role]]; |
1357 | } |
1358 | |
1359 | QModelIndex FakeIndicatorsModel::parent(const QModelIndex&) const |
1360 | @@ -112,5 +143,5 @@ |
1361 | |
1362 | int FakeIndicatorsModel::rowCount(const QModelIndex&) const |
1363 | { |
1364 | - return m_indicators.count(); |
1365 | + return m_modelData.toList().count(); |
1366 | } |
1367 | |
1368 | === modified file 'tests/mocks/Unity/Indicators/fakeindicatorsmodel.h' |
1369 | --- tests/mocks/Unity/Indicators/fakeindicatorsmodel.h 2014-03-03 12:01:09 +0000 |
1370 | +++ tests/mocks/Unity/Indicators/fakeindicatorsmodel.h 2014-10-14 14:19:22 +0000 |
1371 | @@ -27,6 +27,7 @@ |
1372 | Q_OBJECT |
1373 | Q_ENUMS(Roles) |
1374 | Q_PROPERTY(int count READ count NOTIFY countChanged) |
1375 | + Q_PROPERTY(QVariant modelData READ modelData WRITE setModelData NOTIFY modelDataChanged) |
1376 | public: |
1377 | |
1378 | FakeIndicatorsModel(QObject *parent=0); |
1379 | @@ -36,9 +37,14 @@ |
1380 | Q_INVOKABLE void unload(); |
1381 | |
1382 | Q_INVOKABLE void append(const QVariantMap& row); |
1383 | + Q_INVOKABLE void insert(int row, const QVariantMap& data); |
1384 | + Q_INVOKABLE void remove(int row); |
1385 | |
1386 | Q_INVOKABLE QVariant data(int row, int role) const; |
1387 | |
1388 | + void setModelData(const QVariant& data); |
1389 | + QVariant modelData() const { return m_modelData; } |
1390 | + |
1391 | /* QAbstractItemModel */ |
1392 | QHash<int, QByteArray> roleNames() const; |
1393 | int columnCount(const QModelIndex &parent = QModelIndex()) const; |
1394 | @@ -48,12 +54,12 @@ |
1395 | |
1396 | Q_SIGNALS: |
1397 | void countChanged(); |
1398 | + void modelDataChanged(); |
1399 | |
1400 | private: |
1401 | int count() const; |
1402 | |
1403 | - typedef QHash<int, QVariant> Indicator; |
1404 | - QList<Indicator*> m_indicators; |
1405 | + QVariant m_modelData; |
1406 | }; |
1407 | |
1408 | #endif // FAKE_INDICATORSMODEL_H |
1409 | |
1410 | === modified file 'tests/mocks/Unity/Indicators/fakeplugin.cpp' |
1411 | --- tests/mocks/Unity/Indicators/fakeplugin.cpp 2014-08-20 08:39:09 +0000 |
1412 | +++ tests/mocks/Unity/Indicators/fakeplugin.cpp 2014-10-14 14:19:22 +0000 |
1413 | @@ -26,19 +26,22 @@ |
1414 | #include "fakeindicatorsmodel.h" |
1415 | #include "indicators.h" |
1416 | #include "menucontentactivator.h" |
1417 | -#include "unitymenumodelcache.h" |
1418 | +#include "sharedunitymenumodel.h" |
1419 | +#include "fakeunitymenumodelcache.h" |
1420 | #include "unitymenumodelstack.h" |
1421 | #include "visibleindicatorsmodel.h" |
1422 | |
1423 | +#include <unitymenumodel.h> |
1424 | + |
1425 | static QObject* menuModelCacheSingleton(QQmlEngine* engine, QJSEngine* scriptEngine) { |
1426 | Q_UNUSED(engine); |
1427 | Q_UNUSED(scriptEngine); |
1428 | - return new UnityMenuModelCache; |
1429 | + return FakeUnityMenuModelCache::singleton(); |
1430 | } |
1431 | |
1432 | void IndicatorsFakePlugin::registerTypes(const char * uri) |
1433 | { |
1434 | - Q_INIT_RESOURCE(indicators_fake); |
1435 | + qRegisterMetaType<UnityMenuModel*>("UnityMenuModel*"); |
1436 | |
1437 | // internal |
1438 | qmlRegisterType<FakeIndicatorsModel>(uri, 0, 1, "FakeIndicatorsModel"); |
1439 | @@ -47,8 +50,9 @@ |
1440 | qmlRegisterType<MenuContentActivator>(uri, 0, 1, "MenuContentActivator"); |
1441 | qmlRegisterType<UnityMenuModelStack>(uri, 0, 1, "UnityMenuModelStack"); |
1442 | qmlRegisterType<VisibleIndicatorsModel>(uri, 0, 1, "VisibleIndicatorsModel"); |
1443 | + qmlRegisterType<SharedUnityMenuModel>(uri, 0, 1, "SharedUnityMenuModel"); |
1444 | |
1445 | - qmlRegisterSingletonType<UnityMenuModelCache>(uri, 0, 1, "UnityMenuModelCache", menuModelCacheSingleton); |
1446 | + qmlRegisterSingletonType<FakeUnityMenuModelCache>(uri, 0, 1, "UnityMenuModelCache", menuModelCacheSingleton); |
1447 | |
1448 | // external uncreatables |
1449 | qmlRegisterUncreatableType<MenuContentState>(uri, 0, 1, "MenuContentState", "Can't create MenuContentState class"); |
1450 | |
1451 | === added file 'tests/mocks/Unity/Indicators/fakeunitymenumodelcache.cpp' |
1452 | --- tests/mocks/Unity/Indicators/fakeunitymenumodelcache.cpp 1970-01-01 00:00:00 +0000 |
1453 | +++ tests/mocks/Unity/Indicators/fakeunitymenumodelcache.cpp 2014-10-14 14:19:22 +0000 |
1454 | @@ -0,0 +1,57 @@ |
1455 | +/* |
1456 | + * Copyright 2014 Canonical Ltd. |
1457 | + * |
1458 | + * This program is free software; you can redistribute it and/or modify |
1459 | + * it under the terms of the GNU Lesser General Public License as published by |
1460 | + * the Free Software Foundation; version 3. |
1461 | + * |
1462 | + * This program is distributed in the hope that it will be useful, |
1463 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
1464 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
1465 | + * GNU Lesser General Public License for more details. |
1466 | + * |
1467 | + * You should have received a copy of the GNU Lesser General Public License |
1468 | + * along with this program. If not, see <http://www.gnu.org/licenses/>. |
1469 | + */ |
1470 | + |
1471 | +#include "fakeunitymenumodelcache.h" |
1472 | +#include <unitymenumodel.h> |
1473 | + |
1474 | +QPointer<FakeUnityMenuModelCache> FakeUnityMenuModelCache::theFakeCache = nullptr; |
1475 | + |
1476 | +FakeUnityMenuModelCache* FakeUnityMenuModelCache::singleton() |
1477 | +{ |
1478 | + if (theFakeCache.isNull()) { |
1479 | + theFakeCache = new FakeUnityMenuModelCache(); |
1480 | + } |
1481 | + return theFakeCache.data(); |
1482 | +} |
1483 | + |
1484 | +FakeUnityMenuModelCache::FakeUnityMenuModelCache(QObject* parent) |
1485 | + : UnityMenuModelCache(parent) |
1486 | +{ |
1487 | +} |
1488 | + |
1489 | +QSharedPointer<UnityMenuModel> FakeUnityMenuModelCache::model(const QByteArray& bus, |
1490 | + const QByteArray& path, |
1491 | + const QVariantMap& actions) |
1492 | +{ |
1493 | + return UnityMenuModelCache::singleton()->model(bus, path, actions); |
1494 | +} |
1495 | + |
1496 | +bool FakeUnityMenuModelCache::contains(const QByteArray& path) |
1497 | +{ |
1498 | + return UnityMenuModelCache::singleton()->contains(path); |
1499 | +} |
1500 | + |
1501 | +void FakeUnityMenuModelCache::setCachedModelData(const QByteArray& bus, |
1502 | + const QByteArray& path, |
1503 | + const QVariantMap& actions, |
1504 | + const QVariant& data) |
1505 | +{ |
1506 | + // keep a ref forever! |
1507 | + if (!m_models.contains(path)) { |
1508 | + m_models[path] = model(bus, path, actions); |
1509 | + } |
1510 | + m_models[path]->setModelData(data); |
1511 | +} |
1512 | |
1513 | === added file 'tests/mocks/Unity/Indicators/fakeunitymenumodelcache.h' |
1514 | --- tests/mocks/Unity/Indicators/fakeunitymenumodelcache.h 1970-01-01 00:00:00 +0000 |
1515 | +++ tests/mocks/Unity/Indicators/fakeunitymenumodelcache.h 2014-10-14 14:19:22 +0000 |
1516 | @@ -0,0 +1,49 @@ |
1517 | +/* |
1518 | + * Copyright 2014 Canonical Ltd. |
1519 | + * |
1520 | + * This program is free software; you can redistribute it and/or modify |
1521 | + * it under the terms of the GNU Lesser General Public License as published by |
1522 | + * the Free Software Foundation; version 3. |
1523 | + * |
1524 | + * This program is distributed in the hope that it will be useful, |
1525 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
1526 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
1527 | + * GNU Lesser General Public License for more details. |
1528 | + * |
1529 | + * You should have received a copy of the GNU Lesser General Public License |
1530 | + * along with this program. If not, see <http://www.gnu.org/licenses/>. |
1531 | + */ |
1532 | + |
1533 | +#ifndef FAKEUNITYMENUMODELCACHE_H |
1534 | +#define FAKEUNITYMENUMODELCACHE_H |
1535 | + |
1536 | +#include "unitymenumodelcache.h" |
1537 | + |
1538 | +#include <QVariantMap> |
1539 | + |
1540 | +class FakeUnityMenuModelCache : public UnityMenuModelCache |
1541 | +{ |
1542 | + Q_OBJECT |
1543 | +public: |
1544 | + FakeUnityMenuModelCache(QObject* parent = nullptr); |
1545 | + |
1546 | + static FakeUnityMenuModelCache* singleton(); |
1547 | + |
1548 | + QSharedPointer<UnityMenuModel> model(const QByteArray& bus, |
1549 | + const QByteArray& path, |
1550 | + const QVariantMap& actions) override; |
1551 | + bool contains(const QByteArray& path) override; |
1552 | + |
1553 | + |
1554 | + |
1555 | + Q_INVOKABLE void setCachedModelData(const QByteArray& bus, |
1556 | + const QByteArray& path, |
1557 | + const QVariantMap& actions, |
1558 | + const QVariant& data = QVariant()); |
1559 | + |
1560 | +private: |
1561 | + static QPointer<FakeUnityMenuModelCache> theFakeCache; |
1562 | + QHash<QByteArray, QSharedPointer<UnityMenuModel>> m_models; |
1563 | +}; |
1564 | + |
1565 | +#endif // FAKEUNITYMENUMODELCACHE_H |
1566 | |
1567 | === removed file 'tests/mocks/Unity/Indicators/indicators_fake.qrc' |
1568 | --- tests/mocks/Unity/Indicators/indicators_fake.qrc 2013-06-17 09:02:14 +0000 |
1569 | +++ tests/mocks/Unity/Indicators/indicators_fake.qrc 1970-01-01 00:00:00 +0000 |
1570 | @@ -1,14 +0,0 @@ |
1571 | -<RCC> |
1572 | - <qresource prefix="/tests/indciators"> |
1573 | - <file>qml/fake_menu_widget1.qml</file> |
1574 | - <file>qml/fake_menu_widget2.qml</file> |
1575 | - <file>qml/fake_menu_widget3.qml</file> |
1576 | - <file>qml/fake_menu_widget4.qml</file> |
1577 | - <file>qml/fake_menu_widget5.qml</file> |
1578 | - <file>qml/fake_menu_page1.qml</file> |
1579 | - <file>qml/fake_menu_page2.qml</file> |
1580 | - <file>qml/fake_menu_page3.qml</file> |
1581 | - <file>qml/fake_menu_page4.qml</file> |
1582 | - <file>qml/fake_menu_page5.qml</file> |
1583 | - </qresource> |
1584 | -</RCC> |
1585 | |
1586 | === removed directory 'tests/mocks/Unity/Indicators/qml' |
1587 | === removed file 'tests/mocks/Unity/Indicators/qml/fake_menu_page1.qml' |
1588 | --- tests/mocks/Unity/Indicators/qml/fake_menu_page1.qml 2014-01-14 16:44:35 +0000 |
1589 | +++ tests/mocks/Unity/Indicators/qml/fake_menu_page1.qml 1970-01-01 00:00:00 +0000 |
1590 | @@ -1,35 +0,0 @@ |
1591 | -/* |
1592 | - * Copyright 2013 Canonical Ltd. |
1593 | - * |
1594 | - * This program is free software; you can redistribute it and/or modify |
1595 | - * it under the terms of the GNU General Public License as published by |
1596 | - * the Free Software Foundation; version 3. |
1597 | - * |
1598 | - * This program is distributed in the hope that it will be useful, |
1599 | - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
1600 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
1601 | - * GNU General Public License for more details. |
1602 | - * |
1603 | - * You should have received a copy of the GNU General Public License |
1604 | - * along with this program. If not, see <http://www.gnu.org/licenses/>. |
1605 | - */ |
1606 | - |
1607 | -import QtQuick 2.0 |
1608 | -import Unity.Indicators 0.1 as Indicators |
1609 | - |
1610 | -Indicators.FakeMenuPage { |
1611 | - id: menu_plugin1 |
1612 | - |
1613 | - Rectangle { |
1614 | - id: contents |
1615 | - color: "red" |
1616 | - |
1617 | - height: 150 |
1618 | - width: 150 |
1619 | - |
1620 | - anchors { |
1621 | - horizontalCenter: parent.horizontalCenter |
1622 | - verticalCenter: parent.verticalCenter |
1623 | - } |
1624 | - } |
1625 | -} |
1626 | |
1627 | === removed file 'tests/mocks/Unity/Indicators/qml/fake_menu_page2.qml' |
1628 | --- tests/mocks/Unity/Indicators/qml/fake_menu_page2.qml 2014-01-14 16:44:35 +0000 |
1629 | +++ tests/mocks/Unity/Indicators/qml/fake_menu_page2.qml 1970-01-01 00:00:00 +0000 |
1630 | @@ -1,35 +0,0 @@ |
1631 | -/* |
1632 | - * Copyright 2013 Canonical Ltd. |
1633 | - * |
1634 | - * This program is free software; you can redistribute it and/or modify |
1635 | - * it under the terms of the GNU General Public License as published by |
1636 | - * the Free Software Foundation; version 3. |
1637 | - * |
1638 | - * This program is distributed in the hope that it will be useful, |
1639 | - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
1640 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
1641 | - * GNU General Public License for more details. |
1642 | - * |
1643 | - * You should have received a copy of the GNU General Public License |
1644 | - * along with this program. If not, see <http://www.gnu.org/licenses/>. |
1645 | - */ |
1646 | - |
1647 | -import QtQuick 2.0 |
1648 | -import Unity.Indicators 0.1 as Indicators |
1649 | - |
1650 | -Indicators.FakeMenuPage { |
1651 | - id: menu_plugin2 |
1652 | - |
1653 | - Rectangle { |
1654 | - id: contents |
1655 | - color: "blue" |
1656 | - |
1657 | - height: 150 |
1658 | - width: 150 |
1659 | - |
1660 | - anchors { |
1661 | - horizontalCenter: parent.horizontalCenter |
1662 | - verticalCenter: parent.verticalCenter |
1663 | - } |
1664 | - } |
1665 | -} |
1666 | |
1667 | === removed file 'tests/mocks/Unity/Indicators/qml/fake_menu_page3.qml' |
1668 | --- tests/mocks/Unity/Indicators/qml/fake_menu_page3.qml 2014-01-14 16:44:35 +0000 |
1669 | +++ tests/mocks/Unity/Indicators/qml/fake_menu_page3.qml 1970-01-01 00:00:00 +0000 |
1670 | @@ -1,35 +0,0 @@ |
1671 | -/* |
1672 | - * Copyright 2013 Canonical Ltd. |
1673 | - * |
1674 | - * This program is free software; you can redistribute it and/or modify |
1675 | - * it under the terms of the GNU General Public License as published by |
1676 | - * the Free Software Foundation; version 3. |
1677 | - * |
1678 | - * This program is distributed in the hope that it will be useful, |
1679 | - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
1680 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
1681 | - * GNU General Public License for more details. |
1682 | - * |
1683 | - * You should have received a copy of the GNU General Public License |
1684 | - * along with this program. If not, see <http://www.gnu.org/licenses/>. |
1685 | - */ |
1686 | - |
1687 | -import QtQuick 2.0 |
1688 | -import Unity.Indicators 0.1 as Indicators |
1689 | - |
1690 | -Indicators.FakeMenuPage { |
1691 | - id: menu_plugin3 |
1692 | - |
1693 | - Rectangle { |
1694 | - id: contents |
1695 | - color: "yellow" |
1696 | - |
1697 | - height: 150 |
1698 | - width: 150 |
1699 | - |
1700 | - anchors { |
1701 | - horizontalCenter: parent.horizontalCenter |
1702 | - verticalCenter: parent.verticalCenter |
1703 | - } |
1704 | - } |
1705 | -} |
1706 | |
1707 | === removed file 'tests/mocks/Unity/Indicators/qml/fake_menu_page4.qml' |
1708 | --- tests/mocks/Unity/Indicators/qml/fake_menu_page4.qml 2014-01-14 16:44:35 +0000 |
1709 | +++ tests/mocks/Unity/Indicators/qml/fake_menu_page4.qml 1970-01-01 00:00:00 +0000 |
1710 | @@ -1,35 +0,0 @@ |
1711 | -/* |
1712 | - * Copyright 2013 Canonical Ltd. |
1713 | - * |
1714 | - * This program is free software; you can redistribute it and/or modify |
1715 | - * it under the terms of the GNU General Public License as published by |
1716 | - * the Free Software Foundation; version 3. |
1717 | - * |
1718 | - * This program is distributed in the hope that it will be useful, |
1719 | - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
1720 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
1721 | - * GNU General Public License for more details. |
1722 | - * |
1723 | - * You should have received a copy of the GNU General Public License |
1724 | - * along with this program. If not, see <http://www.gnu.org/licenses/>. |
1725 | - */ |
1726 | - |
1727 | -import QtQuick 2.0 |
1728 | -import Unity.Indicators 0.1 as Indicators |
1729 | - |
1730 | -Indicators.FakeMenuPage { |
1731 | - id: menu_plugin4 |
1732 | - |
1733 | - Rectangle { |
1734 | - id: contents |
1735 | - color: "green" |
1736 | - |
1737 | - height: 150 |
1738 | - width: 150 |
1739 | - |
1740 | - anchors { |
1741 | - horizontalCenter: parent.horizontalCenter |
1742 | - verticalCenter: parent.verticalCenter |
1743 | - } |
1744 | - } |
1745 | -} |
1746 | |
1747 | === removed file 'tests/mocks/Unity/Indicators/qml/fake_menu_page5.qml' |
1748 | --- tests/mocks/Unity/Indicators/qml/fake_menu_page5.qml 2014-01-14 16:44:35 +0000 |
1749 | +++ tests/mocks/Unity/Indicators/qml/fake_menu_page5.qml 1970-01-01 00:00:00 +0000 |
1750 | @@ -1,35 +0,0 @@ |
1751 | -/* |
1752 | - * Copyright 2013 Canonical Ltd. |
1753 | - * |
1754 | - * This program is free software; you can redistribute it and/or modify |
1755 | - * it under the terms of the GNU General Public License as published by |
1756 | - * the Free Software Foundation; version 3. |
1757 | - * |
1758 | - * This program is distributed in the hope that it will be useful, |
1759 | - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
1760 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
1761 | - * GNU General Public License for more details. |
1762 | - * |
1763 | - * You should have received a copy of the GNU General Public License |
1764 | - * along with this program. If not, see <http://www.gnu.org/licenses/>. |
1765 | - */ |
1766 | - |
1767 | -import QtQuick 2.0 |
1768 | -import Unity.Indicators 0.1 as Indicators |
1769 | - |
1770 | -Indicators.FakeMenuPage { |
1771 | - id: menu_plugin5 |
1772 | - |
1773 | - Rectangle { |
1774 | - id: contents |
1775 | - color: "orange" |
1776 | - |
1777 | - height: 150 |
1778 | - width: 150 |
1779 | - |
1780 | - anchors { |
1781 | - horizontalCenter: parent.horizontalCenter |
1782 | - verticalCenter: parent.verticalCenter |
1783 | - } |
1784 | - } |
1785 | -} |
1786 | |
1787 | === removed file 'tests/mocks/Unity/Indicators/qml/fake_menu_widget1.qml' |
1788 | --- tests/mocks/Unity/Indicators/qml/fake_menu_widget1.qml 2013-06-17 09:02:14 +0000 |
1789 | +++ tests/mocks/Unity/Indicators/qml/fake_menu_widget1.qml 1970-01-01 00:00:00 +0000 |
1790 | @@ -1,23 +0,0 @@ |
1791 | -/* |
1792 | - * Copyright 2013 Canonical Ltd. |
1793 | - * |
1794 | - * This program is free software; you can redistribute it and/or modify |
1795 | - * it under the terms of the GNU General Public License as published by |
1796 | - * the Free Software Foundation; version 3. |
1797 | - * |
1798 | - * This program is distributed in the hope that it will be useful, |
1799 | - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
1800 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
1801 | - * GNU General Public License for more details. |
1802 | - * |
1803 | - * You should have received a copy of the GNU General Public License |
1804 | - * along with this program. If not, see <http://www.gnu.org/licenses/>. |
1805 | - */ |
1806 | - |
1807 | -import QtQuick 2.0 |
1808 | - |
1809 | -Rectangle { |
1810 | - width: 40 |
1811 | - height: 40 |
1812 | - color : "red" |
1813 | -} |
1814 | |
1815 | === removed file 'tests/mocks/Unity/Indicators/qml/fake_menu_widget2.qml' |
1816 | --- tests/mocks/Unity/Indicators/qml/fake_menu_widget2.qml 2014-01-13 16:25:32 +0000 |
1817 | +++ tests/mocks/Unity/Indicators/qml/fake_menu_widget2.qml 1970-01-01 00:00:00 +0000 |
1818 | @@ -1,23 +0,0 @@ |
1819 | -/* |
1820 | - * Copyright 2013 Canonical Ltd. |
1821 | - * |
1822 | - * This program is free software; you can redistribute it and/or modify |
1823 | - * it under the terms of the GNU General Public License as published by |
1824 | - * the Free Software Foundation; version 3. |
1825 | - * |
1826 | - * This program is distributed in the hope that it will be useful, |
1827 | - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
1828 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
1829 | - * GNU General Public License for more details. |
1830 | - * |
1831 | - * You should have received a copy of the GNU General Public License |
1832 | - * along with this program. If not, see <http://www.gnu.org/licenses/>. |
1833 | - */ |
1834 | - |
1835 | -import QtQuick 2.0 |
1836 | - |
1837 | -Rectangle { |
1838 | - width: 40 |
1839 | - height: 40 |
1840 | - color : "blue" |
1841 | -} |
1842 | |
1843 | === removed file 'tests/mocks/Unity/Indicators/qml/fake_menu_widget3.qml' |
1844 | --- tests/mocks/Unity/Indicators/qml/fake_menu_widget3.qml 2014-01-13 16:25:32 +0000 |
1845 | +++ tests/mocks/Unity/Indicators/qml/fake_menu_widget3.qml 1970-01-01 00:00:00 +0000 |
1846 | @@ -1,23 +0,0 @@ |
1847 | -/* |
1848 | - * Copyright 2013 Canonical Ltd. |
1849 | - * |
1850 | - * This program is free software; you can redistribute it and/or modify |
1851 | - * it under the terms of the GNU General Public License as published by |
1852 | - * the Free Software Foundation; version 3. |
1853 | - * |
1854 | - * This program is distributed in the hope that it will be useful, |
1855 | - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
1856 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
1857 | - * GNU General Public License for more details. |
1858 | - * |
1859 | - * You should have received a copy of the GNU General Public License |
1860 | - * along with this program. If not, see <http://www.gnu.org/licenses/>. |
1861 | - */ |
1862 | - |
1863 | -import QtQuick 2.0 |
1864 | - |
1865 | -Rectangle { |
1866 | - width: 40 |
1867 | - height: 40 |
1868 | - color : "yellow" |
1869 | -} |
1870 | |
1871 | === removed file 'tests/mocks/Unity/Indicators/qml/fake_menu_widget4.qml' |
1872 | --- tests/mocks/Unity/Indicators/qml/fake_menu_widget4.qml 2013-06-17 09:02:14 +0000 |
1873 | +++ tests/mocks/Unity/Indicators/qml/fake_menu_widget4.qml 1970-01-01 00:00:00 +0000 |
1874 | @@ -1,23 +0,0 @@ |
1875 | -/* |
1876 | - * Copyright 2013 Canonical Ltd. |
1877 | - * |
1878 | - * This program is free software; you can redistribute it and/or modify |
1879 | - * it under the terms of the GNU General Public License as published by |
1880 | - * the Free Software Foundation; version 3. |
1881 | - * |
1882 | - * This program is distributed in the hope that it will be useful, |
1883 | - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
1884 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
1885 | - * GNU General Public License for more details. |
1886 | - * |
1887 | - * You should have received a copy of the GNU General Public License |
1888 | - * along with this program. If not, see <http://www.gnu.org/licenses/>. |
1889 | - */ |
1890 | - |
1891 | -import QtQuick 2.0 |
1892 | - |
1893 | -Rectangle { |
1894 | - width: 40 |
1895 | - height: 40 |
1896 | - color : "green" |
1897 | -} |
1898 | |
1899 | === removed file 'tests/mocks/Unity/Indicators/qml/fake_menu_widget5.qml' |
1900 | --- tests/mocks/Unity/Indicators/qml/fake_menu_widget5.qml 2013-06-17 09:02:14 +0000 |
1901 | +++ tests/mocks/Unity/Indicators/qml/fake_menu_widget5.qml 1970-01-01 00:00:00 +0000 |
1902 | @@ -1,23 +0,0 @@ |
1903 | -/* |
1904 | - * Copyright 2013 Canonical Ltd. |
1905 | - * |
1906 | - * This program is free software; you can redistribute it and/or modify |
1907 | - * it under the terms of the GNU General Public License as published by |
1908 | - * the Free Software Foundation; version 3. |
1909 | - * |
1910 | - * This program is distributed in the hope that it will be useful, |
1911 | - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
1912 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
1913 | - * GNU General Public License for more details. |
1914 | - * |
1915 | - * You should have received a copy of the GNU General Public License |
1916 | - * along with this program. If not, see <http://www.gnu.org/licenses/>. |
1917 | - */ |
1918 | - |
1919 | -import QtQuick 2.0 |
1920 | - |
1921 | -Rectangle { |
1922 | - width: 40 |
1923 | - height: 40 |
1924 | - color : "orange" |
1925 | -} |
1926 | |
1927 | === modified file 'tests/mocks/Unity/Indicators/qmldir' |
1928 | --- tests/mocks/Unity/Indicators/qmldir 2014-08-20 08:39:09 +0000 |
1929 | +++ tests/mocks/Unity/Indicators/qmldir 2014-10-14 14:19:22 +0000 |
1930 | @@ -3,5 +3,4 @@ |
1931 | typeinfo Indicators.qmltypes |
1932 | |
1933 | IndicatorsModel 0.1 IndicatorsModel.qml |
1934 | -FakeMenuPage 0.1 FakeMenuPage.qml |
1935 | RootActionState 0.1 RootActionState.qml |
1936 | |
1937 | === modified file 'tests/mocks/Unity/Launcher/Launcher.qmltypes' |
1938 | --- tests/mocks/Unity/Launcher/Launcher.qmltypes 2014-06-26 07:47:57 +0000 |
1939 | +++ tests/mocks/Unity/Launcher/Launcher.qmltypes 2014-10-14 14:19:22 +0000 |
1940 | @@ -85,6 +85,7 @@ |
1941 | Property { name: "recent"; type: "bool"; isReadonly: true } |
1942 | Property { name: "progress"; type: "int"; isReadonly: true } |
1943 | Property { name: "count"; type: "int"; isReadonly: true } |
1944 | + Property { name: "countVisible"; type: "bool"; isReadonly: true } |
1945 | Property { name: "focused"; type: "bool"; isReadonly: true } |
1946 | Property { |
1947 | name: "quickList" |
1948 | @@ -93,6 +94,14 @@ |
1949 | isPointer: true |
1950 | } |
1951 | Signal { |
1952 | + name: "nameChanged" |
1953 | + Parameter { name: "name"; type: "string" } |
1954 | + } |
1955 | + Signal { |
1956 | + name: "iconChanged" |
1957 | + Parameter { name: "icon"; type: "string" } |
1958 | + } |
1959 | + Signal { |
1960 | name: "pinnedChanged" |
1961 | Parameter { name: "pinned"; type: "bool" } |
1962 | } |
1963 | @@ -113,6 +122,10 @@ |
1964 | Parameter { name: "count"; type: "int" } |
1965 | } |
1966 | Signal { |
1967 | + name: "countVisibleChanged" |
1968 | + Parameter { name: "countVisible"; type: "bool" } |
1969 | + } |
1970 | + Signal { |
1971 | name: "focusedChanged" |
1972 | Parameter { name: "focused"; type: "bool" } |
1973 | } |
1974 | |
1975 | === modified file 'tests/mocks/Unity/Unity.qmltypes' |
1976 | --- tests/mocks/Unity/Unity.qmltypes 2014-09-01 12:18:53 +0000 |
1977 | +++ tests/mocks/Unity/Unity.qmltypes 2014-10-14 14:19:22 +0000 |
1978 | @@ -30,6 +30,25 @@ |
1979 | Parameter { name: "row"; type: "int" } |
1980 | Parameter { name: "role"; type: "int" } |
1981 | } |
1982 | + Method { |
1983 | + name: "setCount" |
1984 | + Parameter { name: "count"; type: "int" } |
1985 | + } |
1986 | + Method { |
1987 | + name: "resultModel" |
1988 | + type: "ResultsModel*" |
1989 | + Parameter { name: "row"; type: "int" } |
1990 | + } |
1991 | + Method { |
1992 | + name: "setLayout" |
1993 | + Parameter { name: "row"; type: "int" } |
1994 | + Parameter { name: "layout"; type: "string" } |
1995 | + } |
1996 | + Method { |
1997 | + name: "setHeaderLink" |
1998 | + Parameter { name: "row"; type: "int" } |
1999 | + Parameter { name: "headerLink"; type: "string" } |
2000 | + } |
2001 | } |
2002 | Component { |
2003 | name: "PreviewModel" |
2004 | @@ -66,6 +85,10 @@ |
2005 | exports: ["Unity/FakeResultsModel 0.2", "Unity/ResultsModel 0.2"] |
2006 | isCreatable: false |
2007 | exportMetaObjectRevisions: [0, 0] |
2008 | + Method { |
2009 | + name: "setResultCount" |
2010 | + Parameter { name: "result_count"; type: "int" } |
2011 | + } |
2012 | } |
2013 | Component { |
2014 | name: "Scope" |
2015 | @@ -76,6 +99,15 @@ |
2016 | name: "performQuery" |
2017 | Parameter { name: "query"; type: "string" } |
2018 | } |
2019 | + Signal { name: "refreshed" } |
2020 | + Method { |
2021 | + name: "setId" |
2022 | + Parameter { name: "id"; type: "string" } |
2023 | + } |
2024 | + Method { |
2025 | + name: "setName" |
2026 | + Parameter { name: "name"; type: "string" } |
2027 | + } |
2028 | Method { |
2029 | name: "setSearchInProgress" |
2030 | Parameter { name: "inProg"; type: "bool" } |
2031 | |
2032 | === modified file 'tests/plugins/Unity/Indicators/CMakeLists.txt' |
2033 | --- tests/plugins/Unity/Indicators/CMakeLists.txt 2013-12-10 14:22:43 +0000 |
2034 | +++ tests/plugins/Unity/Indicators/CMakeLists.txt 2014-10-14 14:19:22 +0000 |
2035 | @@ -40,3 +40,4 @@ |
2036 | indicator_test(menucontentactivatortest ADDITIONAL_CPPS ${INDICATORS_DIR}/menucontentactivator.cpp) |
2037 | indicator_test(unitymenumodelstacktest ADDITIONAL_CPPS ${TEST_DIR}/mocks/QMenuModel/unitymenumodel.cpp ${INDICATORS_DIR}/unitymenumodelstack.cpp) |
2038 | indicator_test(rootactionstatetest ADDITIONAL_LIBS IndicatorsQml) |
2039 | +indicator_test(sharedunitymenumodeltest ADDITIONAL_LIBS IndicatorsQml) |
2040 | |
2041 | === added file 'tests/plugins/Unity/Indicators/sharedunitymenumodeltest.cpp' |
2042 | --- tests/plugins/Unity/Indicators/sharedunitymenumodeltest.cpp 1970-01-01 00:00:00 +0000 |
2043 | +++ tests/plugins/Unity/Indicators/sharedunitymenumodeltest.cpp 2014-10-14 14:19:22 +0000 |
2044 | @@ -0,0 +1,102 @@ |
2045 | +/* |
2046 | + * Copyright 2014 Canonical Ltd. |
2047 | + * |
2048 | + * This program is free software; you can redistribute it and/or modify |
2049 | + * it under the terms of the GNU Lesser General Public License as published by |
2050 | + * the Free Software Foundation; version 3. |
2051 | + * |
2052 | + * This program is distributed in the hope that it will be useful, |
2053 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
2054 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2055 | + * GNU Lesser General Public License for more details. |
2056 | + * |
2057 | + * You should have received a copy of the GNU Lesser General Public License |
2058 | + * along with this program. If not, see <http://www.gnu.org/licenses/>. |
2059 | + * |
2060 | + */ |
2061 | + |
2062 | +#include "sharedunitymenumodel.h" |
2063 | +#include "unitymenumodelcache.h" |
2064 | + |
2065 | +#include <QtTest> |
2066 | +#include <unitymenumodel.h> |
2067 | + |
2068 | +class SharedUnityMenuModelTest : public QObject |
2069 | +{ |
2070 | + Q_OBJECT |
2071 | + |
2072 | + SharedUnityMenuModel* createFullModel(const QByteArray& testId) |
2073 | + { |
2074 | + SharedUnityMenuModel* model = new SharedUnityMenuModel; |
2075 | + model->setBusName("com.canonical." + testId); |
2076 | + model->setMenuObjectPath("/com/canonical/" + testId); |
2077 | + QVariantMap actions; |
2078 | + actions["test"] = QString("/com/canonical/%1/actions").arg(QString(testId)); |
2079 | + model->setActions(actions); |
2080 | + |
2081 | + return model; |
2082 | + } |
2083 | + |
2084 | +private Q_SLOTS: |
2085 | + |
2086 | + void testCreateModel() |
2087 | + { |
2088 | + QSharedPointer<SharedUnityMenuModel> model(createFullModel("test1")); |
2089 | + QVERIFY(model->model() != nullptr); |
2090 | + } |
2091 | + |
2092 | + void testDifferentDataCreatesDifferentModels() |
2093 | + { |
2094 | + QSharedPointer<SharedUnityMenuModel> model1(createFullModel("test1")); |
2095 | + QSharedPointer<SharedUnityMenuModel> model2(createFullModel("test2")); |
2096 | + |
2097 | + QVERIFY(model1->model() != model2->model()); |
2098 | + } |
2099 | + |
2100 | + void testSameDataCreatesSameModels() |
2101 | + { |
2102 | + QSharedPointer<SharedUnityMenuModel> model1(createFullModel("test1")); |
2103 | + QSharedPointer<SharedUnityMenuModel> model2(createFullModel("test1")); |
2104 | + |
2105 | + QCOMPARE(model1->model(), model2->model()); |
2106 | + } |
2107 | + |
2108 | + void testSharedOwnership() |
2109 | + { |
2110 | + QSharedPointer<SharedUnityMenuModel> model1(createFullModel("test1")); |
2111 | + QSharedPointer<SharedUnityMenuModel> model2(createFullModel("test1")); |
2112 | + |
2113 | + QCOMPARE(UnityMenuModelCache::singleton()->contains("/com/canonical/test1"), true); |
2114 | + model1.clear(); |
2115 | + QCOMPARE(UnityMenuModelCache::singleton()->contains("/com/canonical/test1"), true); |
2116 | + model2.clear(); |
2117 | + QCOMPARE(UnityMenuModelCache::singleton()->contains("/com/canonical/test1"), false); |
2118 | + } |
2119 | + |
2120 | + // Tests that changing cached model data does not change the model path of others |
2121 | + void testLP1328646() |
2122 | + { |
2123 | + QSharedPointer<SharedUnityMenuModel> model1(createFullModel("test1")); |
2124 | + QSharedPointer<SharedUnityMenuModel> model2(createFullModel("test1")); |
2125 | + |
2126 | + model2->setMenuObjectPath("/com/canonical/LP1328646"); |
2127 | + |
2128 | + QVERIFY(model1->model() != model2->model()); |
2129 | + QCOMPARE(model1->model()->menuObjectPath(), QByteArray("/com/canonical/test1")); |
2130 | + QCOMPARE(model2->model()->menuObjectPath(), QByteArray("/com/canonical/LP1328646")); |
2131 | + } |
2132 | + |
2133 | + // Tests that the cache is recreated if deleted. |
2134 | + void testDeletedCache() |
2135 | + { |
2136 | + QSharedPointer<SharedUnityMenuModel> model1(createFullModel("test1")); |
2137 | + |
2138 | + QCOMPARE(UnityMenuModelCache::singleton()->contains("/com/canonical/test1"), true); |
2139 | + delete UnityMenuModelCache::singleton(); |
2140 | + QCOMPARE(UnityMenuModelCache::singleton()->contains("/com/canonical/test1"), false); |
2141 | + } |
2142 | + |
2143 | +}; |
2144 | + |
2145 | +QTEST_GUILESS_MAIN(SharedUnityMenuModelTest) |
2146 | +#include "sharedunitymenumodeltest.moc" |
2147 | |
2148 | === modified file 'tests/qmltests/CMakeLists.txt' |
2149 | --- tests/qmltests/CMakeLists.txt 2014-10-01 13:22:00 +0000 |
2150 | +++ tests/qmltests/CMakeLists.txt 2014-10-14 14:19:22 +0000 |
2151 | @@ -19,9 +19,9 @@ |
2152 | set(qmltest_DEFAULT_NO_ADD_TEST TRUE) |
2153 | set(qmltest_DEFAULT_PROPERTIES ENVIRONMENT "LC_ALL=C") |
2154 | |
2155 | -add_qml_test(. Shell ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/LightDM/single") |
2156 | -add_qml_test(. ShellWithPin ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/LightDM/single-pin") |
2157 | -add_qml_test(. TabletShell ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/LightDM/full") |
2158 | +add_qml_test(. Shell ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/LightDM/single:${CMAKE_BINARY_DIR}/tests/mocks/QMenuModel") |
2159 | +add_qml_test(. ShellWithPin ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/LightDM/single-pin:${CMAKE_BINARY_DIR}/tests/mocks/QMenuModel") |
2160 | +add_qml_test(. TabletShell ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/LightDM/full:${CMAKE_BINARY_DIR}/tests/mocks/QMenuModel") |
2161 | add_qml_test(Components Background) |
2162 | add_qml_test(Components Carousel) |
2163 | add_qml_test(Components DraggingArea) |
2164 | @@ -72,14 +72,13 @@ |
2165 | add_qml_test(Notifications Notifications) |
2166 | add_qml_test(Notifications VisualSnapDecisionsQueue) |
2167 | add_qml_test(Panel ActiveCallHint) |
2168 | -add_qml_test(Panel IndicatorRow) |
2169 | -add_qml_test(Panel Indicators) |
2170 | -add_qml_test(Panel MenuContent) |
2171 | -add_qml_test(Panel Panel) |
2172 | +add_qml_test(Panel IndicatorRow ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/QMenuModel") |
2173 | +add_qml_test(Panel Indicators ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/QMenuModel") |
2174 | +add_qml_test(Panel MenuContent ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/QMenuModel") |
2175 | +add_qml_test(Panel Panel ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/QMenuModel") |
2176 | add_qml_test(Panel SearchIndicator) |
2177 | add_qml_test(Panel/Indicators DefaultIndicatorWidget ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/QMenuModel") |
2178 | add_qml_test(Panel/Indicators DefaultIndicatorPage ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/QMenuModel") |
2179 | -add_qml_test(Panel/Indicators CachedUnityMenuModel ENVIRONMENT "LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/tests/mocks/QMenuModel") |
2180 | # These MenuItemFactory tests need the test/mocks/ to come before plugins/ |
2181 | add_qml_test(Panel/Indicators MenuItemFactory IMPORT_PATHS ${CMAKE_BINARY_DIR}/tests/mocks ${qmltest_DEFAULT_IMPORT_PATHS}) |
2182 | add_qml_test(Panel/Indicators MessageMenuItemFactory IMPORT_PATHS ${CMAKE_BINARY_DIR}/tests/mocks ${qmltest_DEFAULT_IMPORT_PATHS}) |
2183 | |
2184 | === modified file 'tests/qmltests/Greeter/tst_Clock.qml' |
2185 | --- tests/qmltests/Greeter/tst_Clock.qml 2014-05-01 14:25:18 +0000 |
2186 | +++ tests/qmltests/Greeter/tst_Clock.qml 2014-10-14 14:19:22 +0000 |
2187 | @@ -19,7 +19,7 @@ |
2188 | import ".." |
2189 | import "../../../qml/Greeter" |
2190 | import Ubuntu.Components 0.1 |
2191 | -import QMenuModel 0.1 |
2192 | +import Unity.Indicators 0.1 as Indicators |
2193 | import Unity.Test 0.1 as UT |
2194 | |
2195 | Rectangle { |
2196 | @@ -36,56 +36,73 @@ |
2197 | } |
2198 | } |
2199 | |
2200 | - UnityMenuModel { |
2201 | - id: menuModel |
2202 | - modelData: [{ |
2203 | - "rowData": { |
2204 | - "actionState": { "label": Qt.formatTime(new Date("October 13, 1975 11:13:00")) } |
2205 | - } |
2206 | - }] |
2207 | + function updateDatetimeModelTime(label) { |
2208 | + Indicators.UnityMenuModelCache.setCachedModelData("com.canonical.indicator.datetime", |
2209 | + "/com/canonical/indicator/datetime/phone", |
2210 | + "/com/canonical/indicator/datetime", |
2211 | + [{ |
2212 | + "rowData": { |
2213 | + "actionState": { "label": label } |
2214 | + } |
2215 | + }]); |
2216 | } |
2217 | |
2218 | UT.UnityTestCase { |
2219 | name: "Clock" |
2220 | + when: windowShown |
2221 | |
2222 | function init() { |
2223 | - var cachedModel = findChild(clock, "timeModel"); |
2224 | - verify(cachedModel !== undefined); |
2225 | - cachedModel.model = menuModel; |
2226 | - } |
2227 | - |
2228 | - function test_customDate() { |
2229 | - var dateObj = new Date("October 13, 1975 11:13:00") |
2230 | - var dateString = Qt.formatDate(dateObj, Qt.DefaultLocaleLongDate) |
2231 | - var timeString = Qt.formatTime(dateObj) |
2232 | - |
2233 | - clock.currentDate = dateObj |
2234 | - var dateLabel = findChild(clock, "dateLabel") |
2235 | - compare(dateLabel.text, dateString, "Not the expected date") |
2236 | - var timeLabel = findChild(clock, "timeLabel") |
2237 | - compare(timeLabel.text, timeString, "Not the expected time") |
2238 | - } |
2239 | - |
2240 | - function test_dateUpdate() { |
2241 | - var dateObj = new Date("October 13, 1975 11:13:00") |
2242 | - var dateString = Qt.formatDate(dateObj, Qt.DefaultLocaleLongDate) |
2243 | - var timeString = Qt.formatTime(dateObj) |
2244 | - |
2245 | + updateDatetimeModelTime(Qt.formatTime(new Date("October 13, 1975 12:14:00"))); |
2246 | + clock.visible = true; |
2247 | + } |
2248 | + |
2249 | + // Test that the date portion of the clock updates with custom value. |
2250 | + // Time portion is controlled by indicators |
2251 | + function test_updateDate() { |
2252 | + var dateLabel = findChild(clock, "dateLabel"); |
2253 | + var timeLabel = findChild(clock, "timeLabel"); |
2254 | + |
2255 | + var timeString = Qt.formatTime(new Date("October 13, 1975 12:14:00")); |
2256 | + |
2257 | + // initial date. |
2258 | + var dateObj = new Date("October 13, 1975 11:13:00"); |
2259 | + var dateString = Qt.formatDate(dateObj, Qt.DefaultLocaleLongDate); |
2260 | + clock.currentDate = dateObj; |
2261 | + |
2262 | + compare(dateLabel.text, dateString, "Not the expected date"); |
2263 | + compare(timeLabel.text, timeString, "Time should come from indicators"); |
2264 | + |
2265 | + // update date. |
2266 | + var dateObj2 = new Date("October 14, 1976 13:15:00"); |
2267 | + var dateString2 = Qt.formatDate(dateObj2, Qt.DefaultLocaleLongDate); |
2268 | + clock.currentDate = dateObj2; |
2269 | + |
2270 | + compare(dateLabel.text, dateString2, "Not the expected date"); |
2271 | + compare(timeLabel.text,timeString, "Time should come from indicators"); |
2272 | + } |
2273 | + |
2274 | + // Test that the date portion of the clock updates with custom value. |
2275 | + // Time portion is controlled by indicators |
2276 | + function test_updateTime() { |
2277 | + var timeLabel = findChild(clock, "timeLabel"); |
2278 | + |
2279 | + var timeString1 = Qt.formatTime(new Date("October 13, 1975 11:15:00")); |
2280 | + var timeString2 = Qt.formatTime(new Date("October 14, 1976 12:16:00")); |
2281 | + |
2282 | + updateDatetimeModelTime(timeString1); |
2283 | + compare(timeLabel.text, timeString1, "Time should come from indicators"); |
2284 | + |
2285 | + updateDatetimeModelTime(timeString2); |
2286 | + compare(timeLabel.text, timeString2, "Time should come from indicators"); |
2287 | + } |
2288 | + |
2289 | + function test_indicatorDisconnect() { |
2290 | clock.visible = false |
2291 | var timeModel = findInvisibleChild(clock, "timeModel") |
2292 | - |
2293 | compare(timeModel.menuObjectPath, "", "Clock shouldn't be connected to Indicators when not visible.") |
2294 | |
2295 | - clock.currentDate = dateObj |
2296 | - |
2297 | - var dateLabel = findChild(clock, "dateLabel") |
2298 | - compare(dateLabel.text, dateString, "Not the expected date") |
2299 | - var timeLabel = findChild(clock, "timeLabel") |
2300 | - compare(timeLabel.text, timeString, "Not the expected time") |
2301 | - |
2302 | clock.visible = true |
2303 | - |
2304 | - verify(timeModel.menuObjectPath != "", "Should be connected to Indicators.") |
2305 | + verify(timeModel.menuObjectPath !== "", "Should be connected to Indicators.") |
2306 | } |
2307 | } |
2308 | } |
2309 | |
2310 | === removed file 'tests/qmltests/Panel/Indicators/tst_CachedUnityMenuModel.qml' |
2311 | --- tests/qmltests/Panel/Indicators/tst_CachedUnityMenuModel.qml 2014-08-20 09:16:28 +0000 |
2312 | +++ tests/qmltests/Panel/Indicators/tst_CachedUnityMenuModel.qml 1970-01-01 00:00:00 +0000 |
2313 | @@ -1,137 +0,0 @@ |
2314 | -/* |
2315 | - * Copyright 2014 Canonical Ltd. |
2316 | - * |
2317 | - * This program is free software; you can redistribute it and/or modify |
2318 | - * it under the terms of the GNU General Public License as published by |
2319 | - * the Free Software Foundation; version 3. |
2320 | - * |
2321 | - * This program is distributed in the hope that it will be useful, |
2322 | - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
2323 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2324 | - * GNU General Public License for more details. |
2325 | - * |
2326 | - * You should have received a copy of the GNU General Public License |
2327 | - * along with this program. If not, see <http://www.gnu.org/licenses/>. |
2328 | - */ |
2329 | - |
2330 | -import QtQuick 2.0 |
2331 | -import QtTest 1.0 |
2332 | -import Unity.Test 0.1 as UT |
2333 | -import QMenuModel 0.1 |
2334 | -import Unity.Indicators 0.1 as Indicators |
2335 | -import "../../../../qml/Panel/Indicators" |
2336 | - |
2337 | -Item { |
2338 | - id: root |
2339 | - width: units.gu(40) |
2340 | - height: units.gu(70) |
2341 | - |
2342 | - Component { |
2343 | - id: model |
2344 | - CachedUnityMenuModel {} |
2345 | - } |
2346 | - |
2347 | - UT.UnityTestCase { |
2348 | - name: "CachedUnityMenuModel" |
2349 | - when: windowShown |
2350 | - |
2351 | - function cleanup() { |
2352 | - doGC(); |
2353 | - } |
2354 | - |
2355 | - function doGC() { |
2356 | - // need to put some wait cycles here to get gc going properly. |
2357 | - wait(10); |
2358 | - gc(); |
2359 | - wait(10); |
2360 | - } |
2361 | - |
2362 | - function test_createDifferent() { |
2363 | - var cachedObject = model.createObject(null, |
2364 | - { |
2365 | - "busName": "com.canonical.test1", |
2366 | - "menuObjectPath": "/com/canonical/test1", |
2367 | - "actionsObjectPath": "/com/canonical/test1" |
2368 | - }); |
2369 | - |
2370 | - var cachedObject2 = model.createObject(null, |
2371 | - { |
2372 | - "busName": "com.canonical.test2", |
2373 | - "menuObjectPath": "/com/canonical/test2", |
2374 | - "actionsObjectPath": "/com/canonical/test2" |
2375 | - }); |
2376 | - |
2377 | - verify(cachedObject.model !== cachedObject2.model); |
2378 | - } |
2379 | - |
2380 | - function test_createSame() { |
2381 | - var cachedObject = model.createObject(null, |
2382 | - { |
2383 | - "busName": "com.canonical.test3", |
2384 | - "menuObjectPath": "/com/canonical/test3", |
2385 | - "actionsObjectPath": "/com/canonical/test3" |
2386 | - }); |
2387 | - |
2388 | - var cachedObject2 = model.createObject(null, |
2389 | - { |
2390 | - "busName": "com.canonical.test3", |
2391 | - "menuObjectPath": "/com/canonical/test3", |
2392 | - "actionsObjectPath": "/com/canonical/test3" |
2393 | - }); |
2394 | - |
2395 | - verify(cachedObject.model === cachedObject2.model); |
2396 | - } |
2397 | - |
2398 | - // Tests that changing cached model data does not change the model path of others |
2399 | - function test_lp1328646() { |
2400 | - var cachedObject = model.createObject(null, |
2401 | - { |
2402 | - "busName": "com.canonical.test4", |
2403 | - "menuObjectPath": "/com/canonical/test4", |
2404 | - "actionsObjectPath": "/com/canonical/test4" |
2405 | - }); |
2406 | - |
2407 | - var cachedObject2 = model.createObject(null, |
2408 | - { |
2409 | - "busName": "com.canonical.test4", |
2410 | - "menuObjectPath": "/com/canonical/test4", |
2411 | - "actionsObjectPath": "/com/canonical/test4" |
2412 | - }); |
2413 | - |
2414 | - cachedObject.menuObjectPath = "/com/canonical/test5"; |
2415 | - compare(cachedObject.model.menuObjectPath, "/com/canonical/test5"); |
2416 | - compare(cachedObject2.model.menuObjectPath, "/com/canonical/test4"); |
2417 | - |
2418 | - verify(cachedObject.model !== cachedObject2.model); |
2419 | - } |
2420 | - |
2421 | - function createAndDestroy(test) { |
2422 | - var cachedObject = model.createObject(null, |
2423 | - { |
2424 | - "busName": "com.canonical."+test, |
2425 | - "menuObjectPath": "/com/canonical/"+test, |
2426 | - "actionsObjectPath": "/com/canonical/"+test |
2427 | - }); |
2428 | - var cachedObject2 = model.createObject(null, |
2429 | - { |
2430 | - "busName": "com.canonical."+test, |
2431 | - "menuObjectPath": "/com/canonical/"+test, |
2432 | - "actionsObjectPath": "/com/canonical/"+test |
2433 | - }); |
2434 | - cachedObject.destroy(); |
2435 | - return cachedObject2; |
2436 | - } |
2437 | - |
2438 | - function test_destroyAllDeletesModel() { |
2439 | - createAndDestroy("test6"); |
2440 | - doGC(); |
2441 | - compare(Indicators.UnityMenuModelCache.contains("/com/canonical/test6"), false); |
2442 | - } |
2443 | - |
2444 | - function test_destroyPartialKeepsModel() { |
2445 | - var model = createAndDestroy("test7"); |
2446 | - doGC(); |
2447 | - compare(Indicators.UnityMenuModelCache.contains("/com/canonical/test7"), true); |
2448 | - } |
2449 | - } |
2450 | -} |
2451 | |
2452 | === modified file 'tests/qmltests/Panel/Indicators/tst_DefaultIndicatorPage.qml' |
2453 | --- tests/qmltests/Panel/Indicators/tst_DefaultIndicatorPage.qml 2014-09-29 10:24:58 +0000 |
2454 | +++ tests/qmltests/Panel/Indicators/tst_DefaultIndicatorPage.qml 2014-10-14 14:19:22 +0000 |
2455 | @@ -17,7 +17,7 @@ |
2456 | import QtQuick 2.0 |
2457 | import QtTest 1.0 |
2458 | import Unity.Test 0.1 as UT |
2459 | -import QMenuModel 0.1 |
2460 | +import Unity.Indicators 0.1 as Indicators |
2461 | import "../../../../qml/Panel/Indicators" |
2462 | |
2463 | Item { |
2464 | @@ -25,18 +25,14 @@ |
2465 | width: units.gu(40) |
2466 | height: units.gu(70) |
2467 | |
2468 | - DefaultIndicatorPage { |
2469 | + DefaultIndicatorPage { |
2470 | id: page |
2471 | - |
2472 | anchors.fill: parent |
2473 | |
2474 | - menuModel: UnityMenuModel {} |
2475 | - busName: "test" |
2476 | - actionsObjectPath: "test" |
2477 | - menuObjectPath: "test" |
2478 | - |
2479 | identifier: "test-indicator" |
2480 | - rootMenuType: "com.canonical.indicator.root" |
2481 | + busName: "com.caninical.indicator.test" |
2482 | + actionsObjectPath: "/com/canonical/indicator/test" |
2483 | + menuObjectPath: "/com/canonical/indicator/test" |
2484 | } |
2485 | |
2486 | property var fullMenuData: [{ |
2487 | @@ -113,29 +109,30 @@ |
2488 | "submenu": [] |
2489 | }]; // end row 1 |
2490 | |
2491 | + function initializeMenuData(data) { |
2492 | + Indicators.UnityMenuModelCache.setCachedModelData("com.canonical.indicator.test", |
2493 | + "/com/canonical/indicator/test", |
2494 | + "/com/canonical/indicator/test", |
2495 | + data); |
2496 | + } |
2497 | + |
2498 | UT.UnityTestCase { |
2499 | name: "DefaultIndicatorPage" |
2500 | |
2501 | function init() { |
2502 | - var mainMenu = findChild(page, "mainMenu"); |
2503 | - page.menuModel.modelData = []; |
2504 | - verify(mainMenu.model !== null); |
2505 | + initializeMenuData([]); |
2506 | } |
2507 | |
2508 | function test_reloadData() { |
2509 | var mainMenu = findChild(page, "mainMenu"); |
2510 | |
2511 | - page.menuModel.modelData = []; |
2512 | - tryCompare(mainMenu, "count", 0); |
2513 | - |
2514 | - page.menuModel.modelData = fullMenuData; |
2515 | - tryCompare(mainMenu, "count", 3); |
2516 | - |
2517 | - page.menuModel.modelData = []; |
2518 | - tryCompare(mainMenu, "count", 0); |
2519 | - |
2520 | - page.menuModel.modelData = fullMenuData; |
2521 | - tryCompare(mainMenu, "count", 3); |
2522 | + tryCompare(mainMenu, "count", 0); |
2523 | + |
2524 | + initializeMenuData(fullMenuData); |
2525 | + tryCompare(mainMenu, "count", 3); |
2526 | + |
2527 | + initializeMenuData([]); |
2528 | + tryCompare(mainMenu, "count", 0); |
2529 | } |
2530 | |
2531 | function test_traverse_rootMenuType_data() { |
2532 | @@ -147,7 +144,7 @@ |
2533 | |
2534 | function test_traverse_rootMenuType(data) { |
2535 | page.rootMenuType = data.rootMenuType; |
2536 | - page.menuModel.modelData = fullMenuData; |
2537 | + initializeMenuData(fullMenuData); |
2538 | |
2539 | var mainMenu = findChild(page, "mainMenu"); |
2540 | tryCompare(mainMenu, "count", data.expectedCount); |
2541 | |
2542 | === modified file 'tests/qmltests/Panel/Indicators/tst_DefaultIndicatorWidget.qml' |
2543 | --- tests/qmltests/Panel/Indicators/tst_DefaultIndicatorWidget.qml 2014-07-03 13:46:51 +0000 |
2544 | +++ tests/qmltests/Panel/Indicators/tst_DefaultIndicatorWidget.qml 2014-10-14 14:19:22 +0000 |
2545 | @@ -33,7 +33,6 @@ |
2546 | top: parent.top |
2547 | } |
2548 | |
2549 | - menuModel: UnityMenuModel {} |
2550 | busName: "test" |
2551 | actionsObjectPath: "test" |
2552 | deviceMenuObjectPath: "test" |
2553 | @@ -48,13 +47,6 @@ |
2554 | name: "DefaultIndicatorWidget" |
2555 | when: windowShown |
2556 | |
2557 | - function init() { |
2558 | - widget.rootActionState.icons = []; |
2559 | - widget.rootActionState.leftLabel = ""; |
2560 | - widget.rootActionState.rightLabel = ""; |
2561 | - waitForRendering(widget) |
2562 | - } |
2563 | - |
2564 | // FIXME: add tests |
2565 | } |
2566 | } |
2567 | |
2568 | === modified file 'tests/qmltests/Panel/tst_IndicatorItem.qml' |
2569 | --- tests/qmltests/Panel/tst_IndicatorItem.qml 2014-01-07 14:29:23 +0000 |
2570 | +++ tests/qmltests/Panel/tst_IndicatorItem.qml 2014-10-14 14:19:22 +0000 |
2571 | @@ -43,7 +43,7 @@ |
2572 | |
2573 | function test_empty() { |
2574 | compare(indicatorItem.indicatorVisible, false, "IndicatorItem should not be visible."); |
2575 | - indicatorItem.widgetSource = "qrc:/tests/indciators/qml/fake_menu_widget1.qml"; |
2576 | + indicatorItem.widgetSource = "../../../qml/Panel/Indicators/DefaultIndicatorWidget.qml"; |
2577 | tryCompare(indicatorItem, "indicatorVisible", true); |
2578 | } |
2579 | } |
2580 | |
2581 | === modified file 'tests/qmltests/Panel/tst_IndicatorRow.qml' |
2582 | --- tests/qmltests/Panel/tst_IndicatorRow.qml 2014-03-03 11:55:00 +0000 |
2583 | +++ tests/qmltests/Panel/tst_IndicatorRow.qml 2014-10-14 14:19:22 +0000 |
2584 | @@ -30,15 +30,6 @@ |
2585 | width: units.gu(40) |
2586 | height: units.gu(60) |
2587 | |
2588 | - function init_test() |
2589 | - { |
2590 | - indicatorModel.load("test1"); |
2591 | - |
2592 | - indicatorRow.state = "initial"; |
2593 | - indicatorRow.setCurrentItemIndex(-1); |
2594 | - indicatorRow.unitProgress = 0.0; |
2595 | - } |
2596 | - |
2597 | PanelBackground { |
2598 | anchors.fill: indicatorRow |
2599 | } |
2600 | @@ -63,20 +54,33 @@ |
2601 | name: "IndicatorRow" |
2602 | when: windowShown |
2603 | |
2604 | + function init() { |
2605 | + indicatorModel.load("test1"); |
2606 | + |
2607 | + indicatorRow.state = "initial"; |
2608 | + indicatorRow.setCurrentItemIndex(-1); |
2609 | + indicatorRow.unitProgress = 0.0; |
2610 | + } |
2611 | + |
2612 | function get_indicator_item(index) { |
2613 | return findChild(indicatorRow.row, "item" + index); |
2614 | } |
2615 | |
2616 | function test_set_current_item() { |
2617 | - init_test(); |
2618 | indicatorRow.setCurrentItemIndex(0); |
2619 | - compare(indicatorRow.indicatorsModel.data(indicatorRow.currentItemIndex, Indicators.IndicatorsModelRole.Identifier), "indicator-fake1", "Incorrect item at position 0"); |
2620 | + compare(indicatorRow.indicatorsModel.data(indicatorRow.currentItemIndex, Indicators.IndicatorsModelRole.Identifier), |
2621 | + "indicator-fake1", |
2622 | + "Incorrect item at position 0"); |
2623 | |
2624 | indicatorRow.setCurrentItemIndex(1); |
2625 | - compare(indicatorRow.indicatorsModel.data(indicatorRow.currentItemIndex, Indicators.IndicatorsModelRole.Identifier), "indicator-fake2", "Incorrect item at position 1"); |
2626 | + compare(indicatorRow.indicatorsModel.data(indicatorRow.currentItemIndex, Indicators.IndicatorsModelRole.Identifier), |
2627 | + "indicator-fake2", |
2628 | + "Incorrect item at position 1"); |
2629 | |
2630 | indicatorRow.setCurrentItemIndex(2); |
2631 | - compare(indicatorRow.indicatorsModel.data(indicatorRow.currentItemIndex, Indicators.IndicatorsModelRole.Identifier), "indicator-fake3", "Incorrect item at position 2"); |
2632 | + compare(indicatorRow.indicatorsModel.data(indicatorRow.currentItemIndex, Indicators.IndicatorsModelRole.Identifier), |
2633 | + "indicator-fake3", |
2634 | + "Incorrect item at position 2"); |
2635 | } |
2636 | |
2637 | function test_highlight_data() { |
2638 | @@ -93,8 +97,6 @@ |
2639 | } |
2640 | |
2641 | function test_highlight(data) { |
2642 | - init_test(); |
2643 | - |
2644 | indicatorRow.unitProgress = data.progress; |
2645 | indicatorRow.setCurrentItemIndex(data.index); |
2646 | |
2647 | @@ -119,8 +121,6 @@ |
2648 | } |
2649 | |
2650 | function test_opacity(data) { |
2651 | - init_test(); |
2652 | - |
2653 | indicatorRow.unitProgress = data.progress; |
2654 | indicatorRow.setCurrentItemIndex(data.index); |
2655 | |
2656 | @@ -145,8 +145,6 @@ |
2657 | } |
2658 | |
2659 | function test_dimmed(data) { |
2660 | - init_test(); |
2661 | - |
2662 | indicatorRow.unitProgress = data.progress; |
2663 | indicatorRow.setCurrentItemIndex(data.index); |
2664 | |
2665 | |
2666 | === modified file 'tests/qmltests/Panel/tst_Indicators.qml' |
2667 | --- tests/qmltests/Panel/tst_Indicators.qml 2014-07-30 16:01:09 +0000 |
2668 | +++ tests/qmltests/Panel/tst_Indicators.qml 2014-10-14 14:19:22 +0000 |
2669 | @@ -158,6 +158,7 @@ |
2670 | function init_invisible_indicator(identifier) { |
2671 | tryCompareFunction(function() { return findChild(indicators, identifier+"-delegate") !== undefined }, true); |
2672 | var item = findChild(indicators, identifier+"-delegate"); |
2673 | + verify(item !== null); |
2674 | |
2675 | item.enabled = false; |
2676 | } |
2677 | |
2678 | === modified file 'tests/qmltests/Panel/tst_MenuContent.qml' |
2679 | --- tests/qmltests/Panel/tst_MenuContent.qml 2014-09-09 15:10:52 +0000 |
2680 | +++ tests/qmltests/Panel/tst_MenuContent.qml 2014-10-14 14:19:22 +0000 |
2681 | @@ -26,14 +26,6 @@ |
2682 | width: units.gu(40) |
2683 | height: units.gu(70) |
2684 | |
2685 | - property var indicator_status: { |
2686 | - 'indicator-fake1-page': { 'started': false, 'reset': 0 }, |
2687 | - 'indicator-fake2-page': { 'started': false, 'reset': 0 }, |
2688 | - 'indicator-fake3-page': { 'started': false, 'reset': 0 }, |
2689 | - 'indicator-fake4-page': { 'started': false, 'reset': 0 }, |
2690 | - 'indicator-fake5-page': { 'started': false, 'reset': 0 } |
2691 | - } |
2692 | - |
2693 | // Dummy objects |
2694 | Item { id: greeter } |
2695 | Item { id: handle } |
2696 | |
2697 | === modified file 'tests/qmltests/tst_Shell.qml' |
2698 | --- tests/qmltests/tst_Shell.qml 2014-10-13 15:42:40 +0000 |
2699 | +++ tests/qmltests/tst_Shell.qml 2014-10-14 14:19:22 +0000 |
2700 | @@ -65,6 +65,8 @@ |
2701 | property bool itemDestroyed: false |
2702 | sourceComponent: Component { |
2703 | Shell { |
2704 | + property string indicatorProfile: "phone" |
2705 | + |
2706 | Component.onDestruction: { |
2707 | shellLoader.itemDestroyed = true; |
2708 | } |
2709 | |
2710 | === modified file 'tests/qmltests/tst_ShellWithPin.qml' |
2711 | --- tests/qmltests/tst_ShellWithPin.qml 2014-10-13 15:42:15 +0000 |
2712 | +++ tests/qmltests/tst_ShellWithPin.qml 2014-10-14 14:19:22 +0000 |
2713 | @@ -61,6 +61,8 @@ |
2714 | property bool itemDestroyed: false |
2715 | sourceComponent: Component { |
2716 | Shell { |
2717 | + property string indicatorProfile: "phone" |
2718 | + |
2719 | Component.onDestruction: { |
2720 | shellLoader.itemDestroyed = true |
2721 | } |
2722 | |
2723 | === modified file 'tests/qmltests/tst_TabletShell.qml' |
2724 | --- tests/qmltests/tst_TabletShell.qml 2014-10-09 13:05:21 +0000 |
2725 | +++ tests/qmltests/tst_TabletShell.qml 2014-10-14 14:19:22 +0000 |
2726 | @@ -57,6 +57,8 @@ |
2727 | property bool itemDestroyed: false |
2728 | sourceComponent: Component { |
2729 | Shell { |
2730 | + property string indicatorProfile: "phone" |
2731 | + |
2732 | Component.onDestruction: { |
2733 | shellLoader.itemDestroyed = true |
2734 | } |
FAILED: Continuous integration, rev:1265 jenkins. qa.ubuntu. com/job/ unity8- ci/4293/ jenkins. qa.ubuntu. com/job/ generic- deb-autopilot- utopic- touch/4768/ console jenkins. qa.ubuntu. com/job/ unity-phablet- qmluitests- utopic/ 1294 jenkins. qa.ubuntu. com/job/ unity8- utopic- amd64-ci/ 1387 jenkins. qa.ubuntu. com/job/ unity8- utopic- i386-ci/ 1387 jenkins. qa.ubuntu. com/job/ generic- deb-autopilot- runner- mako/4537/ console jenkins. qa.ubuntu. com/job/ generic- mediumtests- builder- utopic- armhf/6020 jenkins. qa.ubuntu. com/job/ generic- mediumtests- builder- utopic- armhf/6020/ artifact/ work/output/ *zip*/output. zip s-jenkins. ubuntu- ci:8080/ job/touch- flash-device/ 13122
http://
Executed test runs:
FAILURE: http://
UNSTABLE: http://
SUCCESS: http://
SUCCESS: http://
FAILURE: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild: s-jenkins. ubuntu- ci:8080/ job/unity8- ci/4293/ rebuild
http://