on xenial help sign in
Add tests
46d9032Albert Astals Cid
qml/ApplicationMenus/MenuBar.qml+3−2
@@ -131,8 +131,8 @@ Item {
131 opacity: shouldDisplay ? 1 : 0
131 opacity: shouldDisplay ? 1 : 0
132
132
133 function show() {
133 function show() {
134− root.unityMenuModel.aboutToShow(visualItem.__ownIndex);
135 if (!__popup) {
134 if (!__popup) {
135+ root.unityMenuModel.aboutToShow(visualItem.__ownIndex);
136 __popup = menuComponent.createObject(root,
136 __popup = menuComponent.createObject(root,
137 {
137 {
138 objectName: visualItem.objectName + "-menu",
138 objectName: visualItem.objectName + "-menu",
@@ -143,7 +143,8 @@ Item {
143 __popup.reset();
143 __popup.reset();
144 __popup.childActivated.connect(dismiss);
144 __popup.childActivated.connect(dismiss);
145 // force the current item to be the newly popped up menu
145 // force the current item to be the newly popped up menu
146− } else {
146+ } else if (!__popup.visible) {
147+ root.unityMenuModel.aboutToShow(visualItem.__ownIndex);
147 __popup.show();
148 __popup.show();
148 }
149 }
149 d.currentItem = visualItem;
150 d.currentItem = visualItem;
qml/ApplicationMenus/MenuPopup.qml+3−2
@@ -301,8 +301,8 @@ UbuntuShape {
301 d.currentItem = parent;
301 d.currentItem = parent;
302
302
303 if (hasSubmenu) {
303 if (hasSubmenu) {
304− root.unityMenuModel.aboutToShow(__ownIndex);
305 if (!popup) {
304 if (!popup) {
305+ root.unityMenuModel.aboutToShow(__ownIndex);
306 var model = root.unityMenuModel.submenu(__ownIndex);
306 var model = root.unityMenuModel.submenu(__ownIndex);
307 popup = submenuComponent.createObject(focusScope, {
307 popup = submenuComponent.createObject(focusScope, {
308 objectName: parent.objectName + "-",
308 objectName: parent.objectName + "-",
@@ -324,7 +324,8 @@ UbuntuShape {
324 popup = null;
324 popup = null;
325 root.childActivated();
325 root.childActivated();
326 });
326 });
327− } else if (popup) {
327+ } else if (!popup.visible) {
328+ root.unityMenuModel.aboutToShow(__ownIndex);
328 popup.visible = true;
329 popup.visible = true;
329 }
330 }
330 } else {
331 } else {
tests/mocks/QMenuModel/unitymenumodel.cpp+2−1
@@ -273,8 +273,9 @@ void UnityMenuModel::activate(int row, const QVariant&)
273 Q_EMIT activated(rd[roleNames()[ActionRole]].toString());
273 Q_EMIT activated(rd[roleNames()[ActionRole]].toString());
274}
274}
275
275
276−void UnityMenuModel::aboutToShow(int)
276+void UnityMenuModel::aboutToShow(int index)
277{
277{
278+ Q_EMIT aboutToShowCalled(index);
278}
279}
279
280
280void UnityMenuModel::changeState(int, const QVariant&)
281void UnityMenuModel::changeState(int, const QVariant&)
tests/mocks/QMenuModel/unitymenumodel.h+1
@@ -88,6 +88,7 @@ Q_SIGNALS:
88
88
89 // Internal mock usage
89 // Internal mock usage
90 void modelDataChanged();
90 void modelDataChanged();
91+ void aboutToShowCalled(int index);
91
92
92 void activated(const QString& action);
93 void activated(const QString& action);
93
94
tests/qmltests/ApplicationMenus/tst_MenuBar.qml+43
@@ -76,6 +76,12 @@ Item {
76 signalName: "activated"
76 signalName: "activated"
77 }
77 }
78
78
79+ SignalSpy {
80+ id: aboutToShowCalledSpy
81+ target: menuBackend
82+ signalName: "aboutToShowCalled"
83+ }
84+
79 UnityTestCase {
85 UnityTestCase {
80 id: testCase
86 id: testCase
81 name: "MenuBar"
87 name: "MenuBar"
@@ -115,6 +121,43 @@ Item {
115 compare(menuItem0.popupVisible, true, "Popup should be visible");
121 compare(menuItem0.popupVisible, true, "Popup should be visible");
116 }
122 }
117
123
124+ function test_aboutToShow() {
125+ menuBackend.modelData = appMenuData.generateTestData(3,3,0,0, "menu");
126+ wait(50) // wait for row to build
127+ var priv = findInvisibleChild(menuBar, "d");
128+
129+ var menuItem0 = findChild(menuBar, "menuBar-item0");
130+ var menuItem1 = findChild(menuBar, "menuBar-item1");
131+
132+ aboutToShowCalledSpy.clear();
133+ menuItem0.show();
134+ compare(aboutToShowCalledSpy.count, 1);
135+
136+ menuItem0.show();
137+ // It's already shown so nothing happens
138+ compare(aboutToShowCalledSpy.count, 1);
139+
140+ menuItem0.hide();
141+ menuItem0.show();
142+ compare(aboutToShowCalledSpy.count, 2);
143+
144+ menuItem0.dismiss();
145+ menuItem0.show();
146+ compare(aboutToShowCalledSpy.count, 3);
147+
148+ menuItem1.show();
149+ compare(aboutToShowCalledSpy.count, 4);
150+
151+ menuItem0.show();
152+ compare(aboutToShowCalledSpy.count, 5);
153+
154+ compare(aboutToShowCalledSpy.signalArguments[0][0], 0);
155+ compare(aboutToShowCalledSpy.signalArguments[1][0], 0);
156+ compare(aboutToShowCalledSpy.signalArguments[2][0], 0);
157+ compare(aboutToShowCalledSpy.signalArguments[3][0], 1);
158+ compare(aboutToShowCalledSpy.signalArguments[4][0], 0);
159+ }
160+
118 function test_keyboardNavigation_RightKeySelectsNextMenuItem(data) {
161 function test_keyboardNavigation_RightKeySelectsNextMenuItem(data) {
119 menuBackend.modelData = appMenuData.generateTestData(3,3,0,0, "menu");
162 menuBackend.modelData = appMenuData.generateTestData(3,3,0,0, "menu");
120 var priv = findInvisibleChild(menuBar, "d");
163 var priv = findInvisibleChild(menuBar, "d");
tests/qmltests/ApplicationMenus/tst_MenuPopup.qml+34−9
@@ -59,18 +59,13 @@ Item {
59 }}
59 }}
60 ]
60 ]
61 }
61 }
62−
63− Binding {
64− target: activatedSpy
65− property: "target"
66− value: unityMenuModel
67− }
68 }
62 }
69 }
63 }
70
64
71 SignalSpy {
65 SignalSpy {
72− id: activatedSpy
66+ id: aboutToShowCalledSpy
67+ target: loader.item ? loader.item.unityMenuModel : undefined
73− signalName: "activated"
68+ signalName: "aboutToShowCalled"
74 }
69 }
75
70
76 UnityTestCase {
71 UnityTestCase {
@@ -88,7 +83,6 @@ Item {
88 function cleanup() {
83 function cleanup() {
89 menu.reset();
84 menu.reset();
90 wait(100); // let the page dismiss
85 wait(100); // let the page dismiss
91− activatedSpy.clear();
92
86
93 loader.active = false;
87 loader.active = false;
94 tryCompare(loader, "item", null);
88 tryCompare(loader, "item", null);
@@ -194,6 +188,37 @@ Item {
194 compare(priv.currentItem, item0, "CurrentItem should have moved to item 2");
188 compare(priv.currentItem, item0, "CurrentItem should have moved to item 2");
195 }
189 }
196
190
191+ function test_aboutToShow() {
192+ menu.unityMenuModel.modelData = appMenuData.generateTestData(3,3,1,0,"menu",false);
193+
194+ var item0 = findChild(menu, "menu-item0");
195+ var item1 = findChild(menu, "menu-item1");
196+ var item2 = findChild(menu, "menu-item2");
197+
198+ aboutToShowCalledSpy.clear();
199+
200+ mouseMove(item0, item0.width/2, item0.height/2);
201+ tryCompare(aboutToShowCalledSpy, "count", 1);
202+
203+ mouseMove(item1, item0.width/2, item0.height/2);
204+ tryCompare(aboutToShowCalledSpy, "count", 2);
205+
206+ mouseMove(item2, item0.width/2, item0.height/2);
207+ tryCompare(aboutToShowCalledSpy, "count", 3);
208+
209+ mouseMove(item0, item0.width/2, item0.height/2);
210+ tryCompare(aboutToShowCalledSpy, "count", 4);
211+
212+ item0.item.trigger();
213+ // it's already visible
214+ tryCompare(aboutToShowCalledSpy, "count", 4);
215+
216+ compare(aboutToShowCalledSpy.signalArguments[0][0], 0);
217+ compare(aboutToShowCalledSpy.signalArguments[1][0], 1);
218+ compare(aboutToShowCalledSpy.signalArguments[2][0], 2);
219+ compare(aboutToShowCalledSpy.signalArguments[3][0], 0);
220+ }
221+
197 function test_keyboardNavigation_RightKeyEntersSubMenu() {
222 function test_keyboardNavigation_RightKeyEntersSubMenu() {
198 menu.unityMenuModel.modelData = appMenuData.generateTestData(3,3,1,0,"menu",false);
223 menu.unityMenuModel.modelData = appMenuData.generateTestData(3,3,1,0,"menu",false);
199
224
tests/qmltests/Panel/tst_Panel.qml+34
@@ -57,6 +57,11 @@ PanelTest {
57 color: "darkgrey"
57 color: "darkgrey"
58 }
58 }
59
59
60+ SignalSpy {
61+ id: aboutToShowCalledSpy
62+ signalName: "aboutToShowCalled"
63+ }
64+
60 RowLayout {
65 RowLayout {
61 anchors.fill: parent
66 anchors.fill: parent
62 anchors.margins: units.gu(1)
67 anchors.margins: units.gu(1)
@@ -838,5 +843,34 @@ PanelTest {
838 keyClick(Qt.Key_Escape);
843 keyClick(Qt.Key_Escape);
839 tryCompare(panel.indicators, "fullyClosed", true);
844 tryCompare(panel.indicators, "fullyClosed", true);
840 }
845 }
846+
847+ function test_aboutToShowMenu() {
848+ waitForRendering(panel);
849+
850+ aboutToShowCalledSpy.target = panel.applicationMenus.model
851+ aboutToShowCalledSpy.clear();
852+
853+ var indicatorsBar = findChild(panel.applicationMenus, "indicatorsBar");
854+
855+ PanelState.title = "Fake Title"
856+ pullDownApplicationsMenu();
857+ compare(aboutToShowCalledSpy.count, 1);
858+
859+ keyClick(Qt.Key_Right);
860+ tryCompare(indicatorsBar, "currentItemIndex", 1);
861+ compare(aboutToShowCalledSpy.count, 2);
862+
863+ compare(aboutToShowCalledSpy.signalArguments[0][0], 0);
864+ compare(aboutToShowCalledSpy.signalArguments[1][0], 1);
865+
866+ keyClick(Qt.Key_Tab);
867+ keyClick(Qt.Key_Tab);
868+
869+ aboutToShowCalledSpy.target = panel.applicationMenus.model.submenu(1);
870+ aboutToShowCalledSpy.clear();
871+
872+ keyClick(Qt.Key_Enter);
873+ compare(aboutToShowCalledSpy.count, 1);
874+ }
841 }
875 }
842}
876}