|
1 /* |
|
2 * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). |
|
3 * All rights reserved. |
|
4 * This component and the accompanying materials are made available |
|
5 * under the terms of "Eclipse Public License v1.0" |
|
6 * which accompanies this distribution, and is available |
|
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
8 * |
|
9 * Initial Contributors: |
|
10 * Nokia Corporation - initial contribution. |
|
11 * |
|
12 * Contributors: |
|
13 * |
|
14 * Description: |
|
15 * |
|
16 */ |
|
17 |
|
18 #ifndef ONLY_MENU_TESTCASES |
|
19 |
|
20 #include <HbMainWindow> |
|
21 #include <HbInstance> |
|
22 |
|
23 #include "t_hsdomainmodel.h" |
|
24 #include "hsconfiguration.h" |
|
25 #include "hsgui.h" |
|
26 #include "hswidgetpositioningonwidgetadd.h" |
|
27 |
|
28 inline bool hsRectCompare(const QRectF& p1, const QRectF& p2) |
|
29 { |
|
30 const qreal offset = 0.1; |
|
31 bool rectsAreSame = (qAbs(p1.x()-p2.x()) < offset) && (qAbs(p1.y()-p2.y()) < offset) && (qAbs(p1.width()-p2.width()) < offset) && (qAbs(p1.height()-p2.height()) < offset); |
|
32 if ( !rectsAreSame) { |
|
33 qDebug() << "rects are not the same: actual" << p1 << "expected" << p2; |
|
34 } |
|
35 return rectsAreSame; |
|
36 } |
|
37 |
|
38 Q_DECLARE_METATYPE(QList<QRectF>) |
|
39 |
|
40 void TestHsDomainModel::testWidgetPositioningOnWidgetAddChangeInstance() |
|
41 { |
|
42 QVERIFY(!HsWidgetPositioningOnWidgetAdd::instance()); |
|
43 HsWidgetPositioningOnWidgetAdd::setInstance(0); |
|
44 QVERIFY(!HsWidgetPositioningOnWidgetAdd::instance()); |
|
45 HsWidgetPositioningOnWidgetAdd *c = new HsAnchorPointInBottomRight; |
|
46 HsWidgetPositioningOnWidgetAdd::setInstance(c); |
|
47 QVERIFY(HsWidgetPositioningOnWidgetAdd::instance() == c); |
|
48 HsWidgetPositioningOnWidgetAdd::setInstance(0); |
|
49 QVERIFY(!HsWidgetPositioningOnWidgetAdd::instance()); |
|
50 } |
|
51 |
|
52 void TestHsDomainModel::testHsAnchorPointInBottomRight_data() |
|
53 { |
|
54 QTest::addColumn<QRectF>("contentArea"); |
|
55 QTest::addColumn<QList<QRectF> >("widgets"); |
|
56 QTest::addColumn<QList<QRectF> >("expectedWidgets"); |
|
57 |
|
58 QTest::newRow("square") |
|
59 << QRectF(0, 0, 100, 100) |
|
60 << (QList<QRectF>() << QRectF(0, 0, 10, 10) << QRectF(50, 50, 10, 10) << QRectF(50, 50, 20, 10) << QRectF(50, 50, 10, 10)) |
|
61 << (QList<QRectF>() << QRectF(45, 45, 10, 10) << QRectF(30.8579, 30.8579, 10, 10) << QRectF(6.71573, 16.7157, 20, 10) << QRectF(2.57359, 2.57359, 10, 10)); |
|
62 |
|
63 QTest::newRow("portrait") |
|
64 << QRectF(0, 0, 50, 100) |
|
65 << (QList<QRectF>() << QRectF(0, 0, 10, 10) << QRectF(50, 50, 10, 10) << QRectF(50, 50, 10, 20) << QRectF(50, 50, 10, 10)) |
|
66 << (QList<QRectF>() << QRectF(20, 50, 10, 10) << QRectF(8.45299, 26.906, 10, 10) << QRectF(40,80, 10, 20) << QRectF(28.453, 66.906, 10, 10)); |
|
67 |
|
68 QTest::newRow("landscape") |
|
69 << QRectF(0, 0, 100, 50) |
|
70 << (QList<QRectF>() << QRectF(0, 0, 20, 10) << QRectF(50, 50, 20, 10) << QRectF(50, 50, 10, 20) << QRectF(50, 50, 10, 10)) |
|
71 << (QList<QRectF>() << QRectF(40, 20, 20, 10) << QRectF(23.6701, 11.835, 20, 10) << QRectF(90, 30, 10, 20) << QRectF(73.6701, 31.835, 10, 10)); |
|
72 |
|
73 QTest::newRow("out of rect") |
|
74 << QRectF(0, 0, 100, 100) |
|
75 << (QList<QRectF>() << QRectF(0, 0, 200, 200) ) |
|
76 << (QList<QRectF>() << QRectF(0, 0, 200, 200) ); |
|
77 } |
|
78 |
|
79 void TestHsDomainModel::testHsAnchorPointInBottomRight() |
|
80 { |
|
81 QFETCH(QRectF, contentArea); |
|
82 QFETCH(QList<QRectF>, widgets); |
|
83 QFETCH(QList<QRectF>, expectedWidgets); |
|
84 |
|
85 HsWidgetPositioningOnWidgetAdd *converter = |
|
86 new HsAnchorPointInBottomRight; |
|
87 |
|
88 QList<QRectF> convertedWidgets = |
|
89 converter->convert(contentArea, QList<QRectF>(), |
|
90 widgets, QPointF()); |
|
91 |
|
92 QCOMPARE(convertedWidgets.count(), |
|
93 expectedWidgets.count()); |
|
94 |
|
95 for (int i = 0; i < expectedWidgets.count(); ++i) { |
|
96 QVERIFY(hsRectCompare(convertedWidgets.at(i),expectedWidgets.at(i))); |
|
97 } |
|
98 |
|
99 delete converter; |
|
100 } |
|
101 |
|
102 void TestHsDomainModel::testHsWidgetOrganizerCase1_data() |
|
103 { |
|
104 // Case 1: anchorDistance = 5, searchRowByRow, portrait |
|
105 QTest::addColumn<QRectF>("contentArea"); |
|
106 QTest::addColumn<QList<QRectF> >("existingWidgets"); |
|
107 QTest::addColumn<QList<QRectF> >("widgets"); |
|
108 QTest::addColumn<QList<QRectF> >("expectedWidgets"); |
|
109 |
|
110 // empty parameters |
|
111 QTest::newRow("case1.1") |
|
112 << QRectF() << QList<QRectF>() << QList<QRectF>() << QList<QRectF>(); |
|
113 |
|
114 // invalid parameters |
|
115 QTest::newRow("case1.2") |
|
116 << QRectF(0, 0, 100, 100) << QList<QRectF>() |
|
117 << (QList<QRectF>() << QRectF(0, 0, 10, 10) << QRectF(0, 0, 10, 10) << QRectF(0, 0, 10, 10)) |
|
118 << (QList<QRectF>() << QRectF(0, 0, 10, 10) << QRectF(15, 0, 10, 10) << QRectF(30, 0, 10, 10)); |
|
119 |
|
120 // basic set of similar size rects to simple content area's first row |
|
121 QTest::newRow("case1.3") |
|
122 << QRectF(54, 763, 24, 5434) |
|
123 << (QList<QRectF>() << QRectF(343, 321, 1034, 102) << QRectF(3320, 3420, 1430, 1043) << QRectF(0, 43, 10, 997)) |
|
124 << (QList<QRectF>() << QRectF(322, 12, 835, 623) << QRectF(624, 56, 536, 895) << QRectF(31, 423, 32, 9823)) |
|
125 << QList<QRectF>(); |
|
126 |
|
127 // set of similar height rects to simple content area on multiple rows |
|
128 QTest::newRow("case1.4") |
|
129 << QRectF(0, 0, 100, 100) << QList<QRectF>() |
|
130 << (QList<QRectF>() << QRectF(0, 0, 40, 10) << QRectF(0, 0, 50, 10) << QRectF(0, 0, 95, 10) << QRectF(0, 0, 50, 10) << QRectF(0, 0, 10, 10)) |
|
131 << (QList<QRectF>() << QRectF(0, 0, 40, 10) << QRectF(45, 0, 50, 10) << QRectF(0, 15, 95, 10) << QRectF(0, 30, 50, 10) << QRectF(55, 30, 10, 10)); |
|
132 |
|
133 // set of random size rects to simple content area on multiple rows |
|
134 QTest::newRow("case1.5") |
|
135 << QRectF(0, 0, 100, 100) << QList<QRectF>() |
|
136 << (QList<QRectF>() << QRectF(0, 0, 13, 22) << QRectF(0, 0, 59, 39) << QRectF(0, 0, 93, 8) << QRectF(0, 0, 44, 17) << QRectF(0, 0, 22, 31)) |
|
137 << (QList<QRectF>() << QRectF(85, 0, 13, 22) << QRectF(0, 0, 59, 39) << QRectF(0, 60, 93, 8) << QRectF(0, 40, 44, 17) << QRectF(60, 0, 22, 31)); |
|
138 |
|
139 // set of random size rects to simple content area on multiple rows with existing widgets |
|
140 QTest::newRow("case1.6") |
|
141 << QRectF(0, 0, 100, 100) |
|
142 << (QList<QRectF>() << QRectF(42, 16, 14, 11) << QRectF(9, 12, 13, 62) << QRectF(55, 65, 20, 20) << QRectF(70, 20, 13, 11) << QRectF(30, 90, 22, 8)) |
|
143 << (QList<QRectF>() << QRectF(0, 0, 13, 22) << QRectF(0, 0, 42, 34) << QRectF(0, 0, 54, 8) << QRectF(0, 0, 32, 17) << QRectF(0, 0, 27, 24)) |
|
144 << (QList<QRectF>() << QRectF(25, 0, 13, 22) << QRectF(25, 30, 42, 34) << QRectF(0, 75, 54, 8) << QRectF(60, 0, 32, 17) << QRectF(70, 35, 27, 24)); |
|
145 |
|
146 } |
|
147 |
|
148 void TestHsDomainModel::testHsWidgetOrganizerCase1() |
|
149 { |
|
150 QFETCH(QRectF, contentArea); |
|
151 QFETCH(QList<QRectF>, existingWidgets); |
|
152 QFETCH(QList<QRectF>, widgets); |
|
153 QFETCH(QList<QRectF>, expectedWidgets); |
|
154 |
|
155 HsWidgetOrganizer *widgetOrganizer = |
|
156 new HsWidgetOrganizer(5, HsConfiguration::SearchRowByRow); |
|
157 |
|
158 QList<QRectF> convertedWidgets = widgetOrganizer->convert(contentArea, existingWidgets, |
|
159 widgets, QPointF()); |
|
160 // Verify amount |
|
161 QCOMPARE(convertedWidgets.count(), expectedWidgets.count()); |
|
162 // Compare calculated and expected values |
|
163 for (int i = 0; i < expectedWidgets.count(); ++i) { |
|
164 QVERIFY(hsRectCompare(convertedWidgets.at(i), expectedWidgets.at(i))); |
|
165 } |
|
166 |
|
167 delete widgetOrganizer; |
|
168 } |
|
169 |
|
170 void TestHsDomainModel::testHsWidgetOrganizerCase2_data() |
|
171 { |
|
172 // CASE 2: anchorDistance = 5, searchColumnByColumn, landscape |
|
173 QTest::addColumn<QRectF>("contentArea"); |
|
174 QTest::addColumn<QList<QRectF> >("existingWidgets"); |
|
175 QTest::addColumn<QList<QRectF> >("widgets"); |
|
176 QTest::addColumn<QList<QRectF> >("expectedWidgets"); |
|
177 |
|
178 // basic set of similar size rects to simple content area's first column |
|
179 QTest::newRow("case2.1") |
|
180 << QRectF(0, 0, 100, 100) << QList<QRectF>() |
|
181 << (QList<QRectF>() << QRectF(0, 0, 10, 10) << QRectF(0, 0, 10, 10) << QRectF(0, 0, 10, 10)) |
|
182 << (QList<QRectF>() << QRectF(0, 0, 10, 10) << QRectF(0, 15, 10, 10) << QRectF(0, 30, 10, 10)); |
|
183 |
|
184 // set of random size rects to simple content area on multiple columns with existing widgets |
|
185 QTest::newRow("case2.2") |
|
186 << QRectF(0, 0, 100, 100) |
|
187 << (QList<QRectF>() << QRectF(20, 0, 14, 18) << QRectF(68, 0, 13, 21) << QRectF(32, 30, 14, 53) << QRectF(62, 60, 31, 13) << QRectF(90, 33, 9, 8)) |
|
188 << (QList<QRectF>() << QRectF(0, 0, 43, 12) << QRectF(0, 0, 20, 16) << QRectF(0, 0, 14, 25) << QRectF(0, 0, 22, 47) << QRectF(0, 0, 24, 11)) |
|
189 << (QList<QRectF>() << QRectF(15, 85, 43, 12) << QRectF(35, 0, 20, 16) << QRectF(0, 70, 14, 25) << QRectF(0, 20, 22, 47) << QRectF(50, 25, 24, 11)); |
|
190 } |
|
191 |
|
192 void TestHsDomainModel::testHsWidgetOrganizerCase2() |
|
193 { |
|
194 QFETCH(QRectF, contentArea); |
|
195 QFETCH(QList<QRectF>, existingWidgets); |
|
196 QFETCH(QList<QRectF>, widgets); |
|
197 QFETCH(QList<QRectF>, expectedWidgets); |
|
198 |
|
199 mainWindow.setOrientation(Qt::Horizontal); |
|
200 HsWidgetOrganizer *widgetOrganizer = |
|
201 new HsWidgetOrganizer(5, HsConfiguration::SearchColumnByColumn); |
|
202 QList<QRectF> convertedWidgets = widgetOrganizer->convert(contentArea, existingWidgets, |
|
203 widgets, QPointF()); |
|
204 QCOMPARE(convertedWidgets.count(), expectedWidgets.count()); |
|
205 for (int i = 0; i < expectedWidgets.count(); ++i) { |
|
206 QVERIFY(hsRectCompare(convertedWidgets.at(i), expectedWidgets.at(i))); |
|
207 } |
|
208 |
|
209 delete widgetOrganizer; |
|
210 // set orientation back to normal |
|
211 mainWindow.setOrientation(Qt::Vertical); |
|
212 } |
|
213 |
|
214 void TestHsDomainModel::testHsWidgetOrganizerCase3_data() |
|
215 { |
|
216 // CASE 3: anchorDistance = 1, searchRowByRow, portrait |
|
217 QTest::addColumn<QRectF>("contentArea"); |
|
218 QTest::addColumn<QList<QRectF> >("existingWidgets"); |
|
219 QTest::addColumn<QList<QRectF> >("widgets"); |
|
220 QTest::addColumn<QList<QRectF> >("expectedWidgets"); |
|
221 |
|
222 // basic set of similar size rects to simple content area's first column |
|
223 QTest::newRow("case3.1") |
|
224 << QRectF(0, 0, 100, 100) << QList<QRectF>() |
|
225 << (QList<QRectF>() << QRectF(0, 0, 10, 10) << QRectF(0, 0, 10, 10) << QRectF(0, 0, 10, 10)) |
|
226 << (QList<QRectF>() << QRectF(0, 0, 10, 10) << QRectF(11, 0, 10, 10) << QRectF(22, 0, 10, 10)); |
|
227 |
|
228 // set of random size rects to simple content area on multiple columns with existing widgets |
|
229 QTest::newRow("case3.2") |
|
230 << QRectF(0, 0, 100, 100) |
|
231 << (QList<QRectF>() << QRectF(10, 0, 14, 22) << QRectF(64, 0, 14, 34) << QRectF(0, 54, 34, 14) << QRectF(74, 69, 26, 12) << QRectF(41, 80, 11, 20)) |
|
232 << (QList<QRectF>() << QRectF(0, 0, 46, 16) << QRectF(0, 0, 40, 19) << QRectF(0, 0, 38, 53) << QRectF(0, 0, 20, 40) << QRectF(0, 0, 38, 25)) |
|
233 << (QList<QRectF>() << QRectF(53, 82, 46, 16) << QRectF(0, 80, 40, 19) << QRectF(25, 0, 38, 53) << QRectF(79, 0, 20, 40) << QRectF(35, 54, 38, 25)); |
|
234 |
|
235 } |
|
236 |
|
237 void TestHsDomainModel::testHsWidgetOrganizerCase3() |
|
238 { |
|
239 QFETCH(QRectF, contentArea); |
|
240 QFETCH(QList<QRectF>, existingWidgets); |
|
241 QFETCH(QList<QRectF>, widgets); |
|
242 QFETCH(QList<QRectF>, expectedWidgets); |
|
243 |
|
244 HsWidgetOrganizer *widgetOrganizer = |
|
245 new HsWidgetOrganizer(1, HsConfiguration::SearchRowByRow); |
|
246 QList<QRectF> convertedWidgets = widgetOrganizer->convert(contentArea, existingWidgets, |
|
247 widgets, QPointF()); |
|
248 QCOMPARE(convertedWidgets.count(), expectedWidgets.count()); |
|
249 for (int i = 0; i < expectedWidgets.count(); ++i) { |
|
250 QVERIFY(hsRectCompare(convertedWidgets.at(i), expectedWidgets.at(i))); |
|
251 } |
|
252 |
|
253 delete widgetOrganizer; |
|
254 } |
|
255 |
|
256 #endif // ONLY_MENU_TESTCASES |