on 0263412 help sign in
unity8/tests/plugins/DashViews/verticaljournaltest.cpp
317 lines 14 kB history raw
1/*
2 * Copyright (C) 2013 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 */
17#include <QQuickView>
18#include <QtTestGui>
19#include <QDebug>
20#include <QGuiApplication>
21#include <QQuickView>
22#include <QtQml/qqml.h>
23#include <QStringListModel>
24#include <QQmlContext>
25#include <private/qquickitem_p.h>
27#include "verticaljournal.h"
29class QHeightModel : public QStringListModel {
30public:
31 QHash<int, QByteArray> roleNames() const
32 {
33 QHash<int, QByteArray> roles;
34 roles.insert(Qt::DisplayRole, "modelHeight");
35 return roles;
36 }
37};
39class VerticalJournalTest : public QObject
41 Q_OBJECT
43private:
44 void verifyItem(const VerticalJournal::ViewItem &item, int modelIndex, qreal x, qreal y, bool visible)
45 {
46 QTRY_COMPARE(item.m_modelIndex, modelIndex);
47 QTRY_COMPARE(item.x(), x);
48 QTRY_COMPARE(item.y(), y);
49 QTRY_COMPARE(item.height(), heightList[modelIndex].toDouble());
50 QTRY_COMPARE(QQuickItemPrivate::get(item.m_item)->culled, !visible);
51 }
53 void checkInitialPositions()
54 {
55 QTRY_COMPARE(vj->m_columnVisibleItems.count(), 3);
56 QTRY_COMPARE(vj->m_columnVisibleItems[0].count(), 5);
57 QTRY_COMPARE(vj->m_columnVisibleItems[1].count(), 7);
58 QTRY_COMPARE(vj->m_columnVisibleItems[2].count(), 6);
59 verifyItem(vj->m_columnVisibleItems[0][0], 0, 10, 10, true);
60 verifyItem(vj->m_columnVisibleItems[1][0], 1, 170, 10, true);
61 verifyItem(vj->m_columnVisibleItems[2][0], 2, 330, 10, true);
62 verifyItem(vj->m_columnVisibleItems[1][1], 3, 170, 70, true);
63 verifyItem(vj->m_columnVisibleItems[1][2], 4, 170, 90, true);
64 verifyItem(vj->m_columnVisibleItems[0][1], 5, 10, 120, true);
65 verifyItem(vj->m_columnVisibleItems[1][3], 6, 170, 140, true);
66 verifyItem(vj->m_columnVisibleItems[2][1], 7, 330, 145, true);
67 verifyItem(vj->m_columnVisibleItems[0][2], 8, 10, 200, true);
68 verifyItem(vj->m_columnVisibleItems[2][2], 9, 330, 265, true);
69 verifyItem(vj->m_columnVisibleItems[2][3], 10, 330, 295, true);
70 verifyItem(vj->m_columnVisibleItems[2][4], 11, 330, 325, true);
71 verifyItem(vj->m_columnVisibleItems[1][4], 12, 170, 350, true);
72 verifyItem(vj->m_columnVisibleItems[0][3], 13, 10, 370, true);
73 verifyItem(vj->m_columnVisibleItems[2][5], 14, 330, 400, false);
74 verifyItem(vj->m_columnVisibleItems[1][5], 15, 170, 440, false);
75 verifyItem(vj->m_columnVisibleItems[0][4], 16, 10, 580, false);
76 verifyItem(vj->m_columnVisibleItems[1][6], 17, 170, 580, false);
77 QCOMPARE(vj->implicitHeight(), 990. + 2. * 990. / 18.);
78 }
80private Q_SLOTS:
81 void initTestCase()
82 {
83 qmlRegisterType<QAbstractItemModel>();
84 qmlRegisterType<VerticalJournal>("Journals", 0, 1, "VerticalJournal");
85 }
87 void init()
88 {
89 view = new QQuickView();
90 view->setResizeMode(QQuickView::SizeRootObjectToView);
92 model = new QHeightModel();
93 heightList.clear();
94 heightList << "100" << "50" << "125" << "10" << "40" << "70" << "200" << "110" << "160" << "20" << "20" << "65" << "80" << "200" << "300" << "130" << "400" << "300" << "500" << "10";
95 model->setStringList(heightList);
97 view->rootContext()->setContextProperty("theModel", model);
99 view->setSource(QUrl::fromLocalFile(DASHVIEWSTEST_FOLDER "/verticaljournaltest.qml"));
101 view->show();
102 view->resize(490, 400);
103 QTest::qWaitForWindowExposed(view);
105 vj = view->rootObject()->findChild<VerticalJournal*>();
106 vj->setModel(model);
108 checkInitialPositions();
109 }
111 void cleanup()
112 {
113 delete view;
114 delete model;
115 }
117 void testWidthResize()
118 {
119 view->resize(649, 400);
121 // This is exactly the same block as above as nothing changed, just white space on the right
122 checkInitialPositions();
124 view->resize(650, 400);
126 QTRY_COMPARE(vj->m_columnVisibleItems.count(), 4);
127 QTRY_COMPARE(vj->m_columnVisibleItems[0].count(), 4);
128 QTRY_COMPARE(vj->m_columnVisibleItems[1].count(), 7);
129 QTRY_COMPARE(vj->m_columnVisibleItems[2].count(), 4);
130 QTRY_COMPARE(vj->m_columnVisibleItems[3].count(), 5);
131 verifyItem(vj->m_columnVisibleItems[0][0], 0, 10, 10, true);
132 verifyItem(vj->m_columnVisibleItems[1][0], 1, 170, 10, true);
133 verifyItem(vj->m_columnVisibleItems[2][0], 2, 330, 10, true);
134 verifyItem(vj->m_columnVisibleItems[3][0], 3, 490, 10, true);
135 verifyItem(vj->m_columnVisibleItems[3][1], 4, 490, 30, true);
136 verifyItem(vj->m_columnVisibleItems[1][1], 5, 170, 70, true);
137 verifyItem(vj->m_columnVisibleItems[3][2], 6, 490, 80, true);
138 verifyItem(vj->m_columnVisibleItems[0][1], 7, 10, 120, true);
139 verifyItem(vj->m_columnVisibleItems[2][1], 8, 330, 145, true);
140 verifyItem(vj->m_columnVisibleItems[1][2], 9, 170, 150, true);
141 verifyItem(vj->m_columnVisibleItems[1][3], 10, 170, 180, true);
142 verifyItem(vj->m_columnVisibleItems[1][4], 11, 170, 210, true);
143 verifyItem(vj->m_columnVisibleItems[0][2], 12, 10, 240, true);
144 verifyItem(vj->m_columnVisibleItems[1][5], 13, 170, 285, true);
145 verifyItem(vj->m_columnVisibleItems[3][3], 14, 490, 290, true);
146 verifyItem(vj->m_columnVisibleItems[2][2], 15, 330, 315, true);
147 verifyItem(vj->m_columnVisibleItems[0][3], 16, 10, 330, true);
148 verifyItem(vj->m_columnVisibleItems[2][3], 17, 330, 455, false);
149 verifyItem(vj->m_columnVisibleItems[1][6], 18, 170, 495, false);
150 verifyItem(vj->m_columnVisibleItems[3][4], 19, 490, 600, false);
151 QTRY_COMPARE(vj->implicitHeight(), 1005.);
153 view->resize(490, 400);
155 // This is exactly the same block as the first again
156 checkInitialPositions();
157 }
159 void testHorizontalSpacing()
160 {
161 vj->setHorizontalSpacing(11);
163 QTRY_COMPARE(vj->m_needsRelayout, false);
164 QTRY_COMPARE(vj->m_columnVisibleItems.count(), 2);
165 QTRY_COMPARE(vj->m_columnVisibleItems[0].count(), 7);
166 QTRY_COMPARE(vj->m_columnVisibleItems[1].count(), 7);
167 verifyItem(vj->m_columnVisibleItems[0][0], 0, 11, 10, true);
168 verifyItem(vj->m_columnVisibleItems[1][0], 1, 172, 10, true);
169 verifyItem(vj->m_columnVisibleItems[1][1], 2, 172, 70, true);
170 verifyItem(vj->m_columnVisibleItems[0][1], 3, 11, 120, true);
171 verifyItem(vj->m_columnVisibleItems[0][2], 4, 11, 140, true);
172 verifyItem(vj->m_columnVisibleItems[0][3], 5, 11, 190, true);
173 verifyItem(vj->m_columnVisibleItems[1][2], 6, 172, 205, true);
174 verifyItem(vj->m_columnVisibleItems[0][4], 7, 11, 270, true);
175 verifyItem(vj->m_columnVisibleItems[0][5], 8, 11, 390, true);
176 verifyItem(vj->m_columnVisibleItems[1][3], 9, 172, 415, false);
177 verifyItem(vj->m_columnVisibleItems[1][4], 10, 172, 445, false);
178 verifyItem(vj->m_columnVisibleItems[1][5], 11, 172, 475, false);
179 verifyItem(vj->m_columnVisibleItems[1][6], 12, 172, 550, false);
180 verifyItem(vj->m_columnVisibleItems[0][6], 13, 11, 560, false);
181 QCOMPARE(vj->implicitHeight(), 770. + 6. * 770. / 14.);
183 vj->setHorizontalSpacing(10);
184 QTRY_COMPARE(vj->m_needsRelayout, false);
186 // This is exactly the same block as the first again
187 checkInitialPositions();
188 }
190 void testVerticalSpacing()
191 {
192 vj->setVerticalSpacing(11);
194 QTRY_COMPARE(vj->m_needsRelayout, false);
195 QTRY_COMPARE(vj->m_columnVisibleItems.count(), 3);
196 QTRY_COMPARE(vj->m_columnVisibleItems[0].count(), 5);
197 QTRY_COMPARE(vj->m_columnVisibleItems[1].count(), 7);
198 QTRY_COMPARE(vj->m_columnVisibleItems[2].count(), 6);
199 verifyItem(vj->m_columnVisibleItems[0][0], 0, 10, 11, true);
200 verifyItem(vj->m_columnVisibleItems[1][0], 1, 170, 11, true);
201 verifyItem(vj->m_columnVisibleItems[2][0], 2, 330, 11, true);
202 verifyItem(vj->m_columnVisibleItems[1][1], 3, 170, 72, true);
203 verifyItem(vj->m_columnVisibleItems[1][2], 4, 170, 93, true);
204 verifyItem(vj->m_columnVisibleItems[0][1], 5, 10, 122, true);
205 verifyItem(vj->m_columnVisibleItems[1][3], 6, 170, 144, true);
206 verifyItem(vj->m_columnVisibleItems[2][1], 7, 330, 147, true);
207 verifyItem(vj->m_columnVisibleItems[0][2], 8, 10, 203, true);
208 verifyItem(vj->m_columnVisibleItems[2][2], 9, 330, 268, true);
209 verifyItem(vj->m_columnVisibleItems[2][3], 10, 330, 299, true);
210 verifyItem(vj->m_columnVisibleItems[2][4], 11, 330, 330, true);
211 verifyItem(vj->m_columnVisibleItems[1][4], 12, 170, 355, true);
212 verifyItem(vj->m_columnVisibleItems[0][3], 13, 10, 374, true);
213 verifyItem(vj->m_columnVisibleItems[2][5], 14, 330, 406, false);
214 verifyItem(vj->m_columnVisibleItems[1][5], 15, 170, 446, false);
215 verifyItem(vj->m_columnVisibleItems[0][4], 16, 10, 585, false);
216 verifyItem(vj->m_columnVisibleItems[1][6], 17, 170, 587, false);
217 QCOMPARE(vj->implicitHeight(), 990. + 2. * 990. / 18.);
219 vj->setVerticalSpacing(10);
220 QTRY_COMPARE(vj->m_needsRelayout, false);
222 // This is exactly the same block as the first again
223 checkInitialPositions();
224 }
226 void testDelegateCreationRanges()
227 {
228 vj->setDelegateCreationBegin(200);
229 vj->setDelegateCreationEnd(view->height());
231 QTRY_COMPARE(vj->m_columnVisibleItems.count(), 3);
232 QTRY_COMPARE(vj->m_columnVisibleItems[0].count(), 4);
233 QTRY_COMPARE(vj->m_columnVisibleItems[1].count(), 4);
234 QTRY_COMPARE(vj->m_columnVisibleItems[2].count(), 6);
235 verifyItem(vj->m_columnVisibleItems[0][0], 0, 10, 10, false);
236 verifyItem(vj->m_columnVisibleItems[2][0], 2, 330, 10, false);
237 verifyItem(vj->m_columnVisibleItems[1][0], 4, 170, 90, false);
238 verifyItem(vj->m_columnVisibleItems[0][1], 5, 10, 120, false);
239 verifyItem(vj->m_columnVisibleItems[1][1], 6, 170, 140, true);
240 verifyItem(vj->m_columnVisibleItems[2][1], 7, 330, 145, true);
241 verifyItem(vj->m_columnVisibleItems[0][2], 8, 10, 200, true);
242 verifyItem(vj->m_columnVisibleItems[2][2], 9, 330, 265, true);
243 verifyItem(vj->m_columnVisibleItems[2][3], 10, 330, 295, true);
244 verifyItem(vj->m_columnVisibleItems[2][4], 11, 330, 325, true);
245 verifyItem(vj->m_columnVisibleItems[1][2], 12, 170, 350, true);
246 verifyItem(vj->m_columnVisibleItems[0][3], 13, 10, 370, true);
247 verifyItem(vj->m_columnVisibleItems[2][5], 14, 330, 400, false);
248 verifyItem(vj->m_columnVisibleItems[1][3], 15, 170, 440, false);
249 QCOMPARE(vj->implicitHeight(), 710. + 4. * 710. / 16.);
251 vj->resetDelegateCreationBegin();
252 vj->resetDelegateCreationEnd();
254 // This is exactly the same block as the first again
255 checkInitialPositions();
256 }
259 void testColumnWidthChange()
260 {
261 vj->setColumnWidth(200);
262 QTRY_COMPARE(vj->m_columnVisibleItems.count(), 2);
263 QTRY_COMPARE(vj->m_columnVisibleItems[0].count(), 7);
264 QTRY_COMPARE(vj->m_columnVisibleItems[1].count(), 7);
265 verifyItem(vj->m_columnVisibleItems[0][0], 0, 10, 10, true);
266 verifyItem(vj->m_columnVisibleItems[1][0], 1, 220, 10, true);
267 verifyItem(vj->m_columnVisibleItems[1][1], 2, 220, 70, true);
268 verifyItem(vj->m_columnVisibleItems[0][1], 3, 10, 120, true);
269 verifyItem(vj->m_columnVisibleItems[0][2], 4, 10, 140, true);
270 verifyItem(vj->m_columnVisibleItems[0][3], 5, 10, 190, true);
271 verifyItem(vj->m_columnVisibleItems[1][2], 6, 220, 205, true);
272 verifyItem(vj->m_columnVisibleItems[0][4], 7, 10, 270, true);
273 verifyItem(vj->m_columnVisibleItems[0][5], 8, 10, 390, true);
274 verifyItem(vj->m_columnVisibleItems[1][3], 9, 220, 415, false);
275 verifyItem(vj->m_columnVisibleItems[1][4], 10, 220, 445, false);
276 verifyItem(vj->m_columnVisibleItems[1][5], 11, 220, 475, false);
277 verifyItem(vj->m_columnVisibleItems[1][6], 12, 220, 550, false);
278 verifyItem(vj->m_columnVisibleItems[0][6], 13, 10, 560, false);
279 QCOMPARE(vj->implicitHeight(), 770. + 6. * 770. / 14.);
281 vj->setColumnWidth(150);
283 // This is exactly the same block as the first again
284 checkInitialPositions();
285 }
287 void testChangeModel()
288 {
289 QHeightModel model2;
290 QStringList list2;
291 list2 << "100" << "50" << "25" << "25" << "50" << "50";
292 model2.setStringList(list2);
293 vj->setModel(&model2);
294 heightList = list2;
296 QTRY_COMPARE(vj->m_columnVisibleItems.count(), 3);
297 QTRY_COMPARE(vj->m_columnVisibleItems[0].count(), 1);
298 QTRY_COMPARE(vj->m_columnVisibleItems[1].count(), 2);
299 QTRY_COMPARE(vj->m_columnVisibleItems[2].count(), 3);
300 verifyItem(vj->m_columnVisibleItems[0][0], 0, 10, 10, true);
301 verifyItem(vj->m_columnVisibleItems[1][0], 1, 170, 10, true);
302 verifyItem(vj->m_columnVisibleItems[2][0], 2, 330, 10, true);
303 verifyItem(vj->m_columnVisibleItems[2][1], 3, 330, 45, true);
304 verifyItem(vj->m_columnVisibleItems[1][1], 4, 170, 70, true);
305 verifyItem(vj->m_columnVisibleItems[2][2], 5, 330, 80, true);
306 }
308private:
309 QQuickView *view;
310 VerticalJournal *vj;
311 QStringList heightList;
312 QHeightModel *model;
313};
315QTEST_MAIN(VerticalJournalTest)
317#include "verticaljournaltest.moc"