@@ -0,0 +1,148 @@
1+/*
2+ * Copyright 2014 Canonical Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+import QtQuick 2.0
18+import QtTest 1.0
19+import "../../../../qml/Dash/Previews"
20+import Unity.Test 0.1 as UT
21+import Ubuntu.Components 0.1
22+
23+
24+Rectangle {
25+ id: root
26+ width: units.gu(60)
27+ height: units.gu(80)
28+
29+ property var actionDataOneAction: {
30+ "actions": [{"label": "Some Label", "icon": "../graphics/play_button.png", "id": "someid"}]
31+ }
32+
33+ property var actionDataTwoActions: {
34+ "actions": [{"label": "Some Label A", "icon": "../graphics/icon_clear.png", "id": "someid1"},
35+ {"label": "Some Label B", "icon": "../graphics/play_button.png", "id": "someid2"}
36+ ]
37+ }
38+
39+ property var actionDataFiveActions: {
40+ "actions": [{"label": "Some Label C", "icon": "../graphics/play_button.png", "id": "someid3"},
41+ {"label": "Some Label D", "icon": "../graphics/icon_clear.png", "id": "someid4"},
42+ {"label": "Some Label E", "icon": "../graphics/play_button.png", "id": "someid5"},
43+ {"label": "Some Label F", "icon": "../graphics/icon_clear.png", "id": "someid6"},
44+ {"label": "Some Label G", "icon": "../graphics/play_button.png", "id": "someid7"}
45+ ]
46+ }
47+
48+ SignalSpy {
49+ id: spy
50+ signalName: "triggered"
51+ }
52+
53+ Column {
54+ spacing: units.gu(1)
55+
56+ PreviewActions {
57+ id: oneAction
58+ widgetId: "button"
59+ widgetData: actionDataOneAction
60+ onTriggered: console.log("triggered", widgetId, actionId);
61+ width: units.gu(50)
62+
63+ Rectangle {
64+ anchors.fill: parent
65+ color: "red"
66+ opacity: 0.1
67+ }
68+ }
69+
70+ PreviewActions {
71+ id: buttonAndCombo
72+ widgetId: "buttonAndCombo"
73+ widgetData: actionDataFiveActions
74+ onTriggered: console.log("triggered", widgetId, actionId);
75+ width: units.gu(40)
76+
77+ Rectangle {
78+ anchors.fill: parent
79+ color: "red"
80+ opacity: 0.1
81+ }
82+ }
83+
84+ PreviewActions {
85+ id: twoActions
86+ widgetId: "2buttons"
87+ widgetData: actionDataTwoActions
88+ onTriggered: console.log("triggered", widgetId, actionId);
89+ width: units.gu(60)
90+ }
91+ }
92+
93+ UT.UnityTestCase {
94+ name: "PreviewActionTest"
95+ when: windowShown
96+
97+ function cleanup()
98+ {
99+ spy.clear();
100+ }
101+
102+ function checkButtonPressSignal(target, id)
103+ {
104+ var button = findChild(root, "button" + id);
105+ verify(button != null);
106+ spy.target = target;
107+ mouseClick(button, button.width / 2, button.height / 2);
108+ compare(spy.count, 1);
109+ compare(spy.signalArguments[0][0], target.widgetId);
110+ compare(spy.signalArguments[0][1], id);
111+ }
112+
113+ function test_checkButtons_data() {
114+ return [
115+ {tag: "oneActionButton", target: oneAction, id: "someid" },
116+ {tag: "twobuttonsButton0", target: twoActions, id: "someid1" },
117+ {tag: "twobuttonsButton1", target: twoActions, id: "someid2" },
118+ {tag: "buttonAndComboButton0", target: buttonAndCombo, id: "someid3" }
119+ ]
120+ }
121+
122+ function test_checkButtons(data) {
123+ checkButtonPressSignal(data.target, data.id, data.buttonNumber)
124+ }
125+
126+ function test_comboButton_data() {
127+ return [
128+ {tag: "button1", id: "someid4" },
129+ {tag: "button2", id: "someid5" },
130+ {tag: "button3", id: "someid6" },
131+ {tag: "button4", id: "someid7" }
132+ ]
133+ }
134+
135+ function test_comboButton(data) {
136+ var button = findChild(root, "moreLessButton");
137+ var buttonColumn = findChild(root, "buttonColumn");
138+ verify(button != null);
139+ var twoActionsY = twoActions.y
140+ mouseClick(button, button.width / 2, button.height / 2);
141+ tryCompareFunction(function () { return twoActions.y <= twoActionsY; }, false);
142+ tryCompare(buttonColumn, "height", buttonColumn.implicitHeight);
143+ checkButtonPressSignal(buttonAndCombo, data.id, data.buttonNumber);
144+ mouseClick(button, button.width / 2, button.height / 2);
145+ tryCompare(twoActions, "y", twoActionsY);
146+ }
147+ }
148+}