Falkon Develop
Cross-platform Qt-based web browser
tabmodeltest.cpp
Go to the documentation of this file.
1/* ============================================================
2* Falkon - Qt web browser
3* Copyright (C) 2018 David Rosca <nowrep@gmail.com>
4*
5* This program is free software: you can redistribute it and/or modify
6* it under the terms of the GNU General Public License as published by
7* the Free Software Foundation, either version 3 of the License, or
8* (at your option) any later version.
9*
10* This program is distributed in the hope that it will be useful,
11* but WITHOUT ANY WARRANTY; without even the implied warranty of
12* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13* GNU General Public License for more details.
14*
15* You should have received a copy of the GNU General Public License
16* along with this program. If not, see <http://www.gnu.org/licenses/>.
17* ============================================================ */
18#include "tabmodeltest.h"
19#include "autotests.h"
20#include "tabmodel.h"
21#include "tabtreemodel.h"
22#include "tabmrumodel.h"
23#include "webtab.h"
24#include "tabwidget.h"
25#include "mainapplication.h"
26#include "browserwindow.h"
27
28#include "modeltest.h"
29
30void TabModelTest::initTestCase()
31{
32}
33
34void TabModelTest::cleanupTestCase()
35{
36}
37
38void TabModelTest::basicTest()
39{
40 BrowserWindow *w = mApp->createWindow(Qz::BW_NewWindow);
41
42 TabModel model1(w);
43 ModelTest modelTest(&model1);
44
45 QSignalSpy rowsInsertedSpy(&model1, &TabModel::rowsInserted);
46 QSignalSpy rowsRemovedSpy(&model1, &TabModel::rowsRemoved);
47
48 QCOMPARE(model1.rowCount(), 0);
49
50 rowsInsertedSpy.wait();
51
52 QCOMPARE(rowsInsertedSpy.count(), 1);
53 WebTab *tab0 = w->tabWidget()->webTab(0);
54 QCOMPARE(rowsInsertedSpy.at(0).at(0).value<QModelIndex>(), QModelIndex());
55 QCOMPARE(rowsInsertedSpy.at(0).at(1).toInt(), 0);
56 QCOMPARE(rowsInsertedSpy.at(0).at(2).toInt(), 0);
57 QCOMPARE(model1.data(model1.index(0, 0), TabModel::WebTabRole).value<WebTab*>(), tab0);
58
59 rowsInsertedSpy.clear();
60
61 w->tabWidget()->addView(QUrl(QSL("http://test.com")));
62
63 QCOMPARE(rowsInsertedSpy.count(), 1);
64 WebTab *tab1 = w->tabWidget()->webTab(1);
65 QCOMPARE(rowsInsertedSpy.at(0).at(0).value<QModelIndex>(), QModelIndex());
66 QCOMPARE(rowsInsertedSpy.at(0).at(1).toInt(), 1);
67 QCOMPARE(rowsInsertedSpy.at(0).at(2).toInt(), 1);
68 QCOMPARE(model1.data(model1.index(1, 0), TabModel::WebTabRole).value<WebTab*>(), tab1);
69
70 w->tabWidget()->moveTab(0, 1);
71 QCOMPARE(w->tabWidget()->webTab(0), tab1);
72 QCOMPARE(w->tabWidget()->webTab(1), tab0);
73
74 w->tabWidget()->moveTab(1, 0);
75 QCOMPARE(w->tabWidget()->webTab(0), tab0);
76 QCOMPARE(w->tabWidget()->webTab(1), tab1);
77
78 w->tabWidget()->moveTab(0, 1);
79 QCOMPARE(w->tabWidget()->webTab(0), tab1);
80 QCOMPARE(w->tabWidget()->webTab(1), tab0);
81
82 QCOMPARE(rowsRemovedSpy.count(), 0);
83
84 w->tabWidget()->closeTab(1);
85
86 QCOMPARE(rowsRemovedSpy.count(), 1);
87 QCOMPARE(rowsRemovedSpy.at(0).at(0).value<QModelIndex>(), QModelIndex());
88 QCOMPARE(rowsRemovedSpy.at(0).at(1).toInt(), 1);
89 QCOMPARE(rowsRemovedSpy.at(0).at(2).toInt(), 1);
90
91 QCOMPARE(model1.rowCount(), 1);
92
93 TabModel model2(w);
94 ModelTest modelTest2(&model2);
95 QCOMPARE(model2.rowCount(), 1);
96
97 delete w;
98}
99
100void TabModelTest::dataTest()
101{
102 BrowserWindow *w = mApp->createWindow(Qz::BW_NewWindow);
103 TabModel model(w);
104 ModelTest modelTest(&model);
105
106 QTRY_COMPARE(model.rowCount(), 1);
107
108 WebTab *tab0 = w->tabWidget()->webTab(0);
109 QCOMPARE(model.index(0, 0).data(TabModel::TitleRole).toString(), tab0->title());
110 QCOMPARE(model.index(0, 0).data(Qt::DisplayRole).toString(), tab0->title());
111 QCOMPARE(model.index(0, 0).data(TabModel::IconRole).value<QIcon>().pixmap(16), tab0->icon().pixmap(16));
112 QCOMPARE(model.index(0, 0).data(Qt::DecorationRole).value<QIcon>().pixmap(16), tab0->icon().pixmap(16));
113 QCOMPARE(model.index(0, 0).data(TabModel::PinnedRole).toBool(), tab0->isPinned());
114 QCOMPARE(model.index(0, 0).data(TabModel::RestoredRole).toBool(), tab0->isRestored());
115 QCOMPARE(model.index(0, 0).data(TabModel::CurrentTabRole).toBool(), true);
116
117 w->tabWidget()->addView(QUrl(QSL("http://test.com")));
118
119 delete w;
120}
121void TabModelTest::pinTabTest()
122{
123 BrowserWindow *w = mApp->createWindow(Qz::BW_NewWindow);
124
125 TabModel model(w);
126 ModelTest modelTest(&model);
127
128 w->tabWidget()->addView(QUrl(QSL("http://test.com")));
129
130 QTRY_COMPARE(model.rowCount(), 2);
131
132 WebTab *tab0 = w->tabWidget()->webTab(0);
133 WebTab *tab1 = w->tabWidget()->webTab(1);
134
135 QCOMPARE(model.data(model.index(0, 0), TabModel::WebTabRole).value<WebTab*>(), tab0);
136 QCOMPARE(model.data(model.index(1, 0), TabModel::WebTabRole).value<WebTab*>(), tab1);
137
138 tab1->togglePinned();
139
140 QCOMPARE(model.data(model.index(0, 0), TabModel::WebTabRole).value<WebTab*>(), tab1);
141 QCOMPARE(model.data(model.index(1, 0), TabModel::WebTabRole).value<WebTab*>(), tab0);
142
143 delete w;
144}
145
146void TabModelTest::treeModelTest()
147{
148 BrowserWindow *w = mApp->createWindow(Qz::BW_NewWindow);
149
150 TabModel sourceModel(w);
151 TabTreeModel model(w);
152 model.setSourceModel(&sourceModel);
153 ModelTest modelTest(&model);
154
155 w->tabWidget()->addView(QUrl());
156 w->tabWidget()->addView(QUrl());
157 w->tabWidget()->addView(QUrl());
158 w->tabWidget()->addView(QUrl());
159 w->tabWidget()->addView(QUrl());
160
161 QTRY_COMPARE(model.rowCount(QModelIndex()), 6);
162
163 WebTab *tab1 = w->tabWidget()->webTab(0);
164 WebTab *tab2 = w->tabWidget()->webTab(1);
165 WebTab *tab3 = w->tabWidget()->webTab(2);
166 WebTab *tab4 = w->tabWidget()->webTab(3);
167 WebTab *tab5 = w->tabWidget()->webTab(4);
168 WebTab *tab6 = w->tabWidget()->webTab(5);
169
170 QCOMPARE(model.index(0, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab1);
171 QCOMPARE(model.index(1, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab2);
172 QCOMPARE(model.index(2, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab3);
173 QCOMPARE(model.index(3, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab4);
174 QCOMPARE(model.index(4, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab5);
175 QCOMPARE(model.index(5, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab6);
176
177 QPersistentModelIndex tab1index = model.index(0, 0);
178 QPersistentModelIndex tab2index = model.index(1, 0);
179 QPersistentModelIndex tab3index = model.index(2, 0);
180 QPersistentModelIndex tab4index = model.index(3, 0);
181 QPersistentModelIndex tab5index = model.index(4, 0);
182 QPersistentModelIndex tab6index = model.index(5, 0);
183
184 QCOMPARE(model.rowCount(tab1index), 0);
185 tab1->addChildTab(tab2);
186
187 QCOMPARE(model.rowCount(tab1index), 1);
188 QCOMPARE(model.index(0, 0, tab1index).data(TabModel::WebTabRole).value<WebTab*>(), tab2);
189
190 tab1->addChildTab(tab3);
191 QCOMPARE(model.rowCount(tab1index), 2);
192 QCOMPARE(model.index(0, 0, tab1index).data(TabModel::WebTabRole).value<WebTab*>(), tab2);
193 QCOMPARE(model.index(1, 0, tab1index).data(TabModel::WebTabRole).value<WebTab*>(), tab3);
194
195 tab1->addChildTab(tab4, 1);
196 QCOMPARE(model.rowCount(tab1index), 3);
197 QCOMPARE(model.index(0, 0, tab1index).data(TabModel::WebTabRole).value<WebTab*>(), tab2);
198 QCOMPARE(model.index(1, 0, tab1index).data(TabModel::WebTabRole).value<WebTab*>(), tab4);
199 QCOMPARE(model.index(2, 0, tab1index).data(TabModel::WebTabRole).value<WebTab*>(), tab3);
200
201 tab4->addChildTab(tab5);
202 tab4->addChildTab(tab6);
203
204 QCOMPARE(model.rowCount(tab4index), 2);
205 QCOMPARE(model.index(0, 0, tab4index).data(TabModel::WebTabRole).value<WebTab*>(), tab5);
206 QCOMPARE(model.index(1, 0, tab4index).data(TabModel::WebTabRole).value<WebTab*>(), tab6);
207
208 w->tabWidget()->closeTab(tab4->tabIndex());
209
210 QCOMPARE(model.rowCount(tab1index), 4);
211 QCOMPARE(model.index(0, 0, tab1index).data(TabModel::WebTabRole).value<WebTab*>(), tab2);
212 QCOMPARE(model.index(1, 0, tab1index).data(TabModel::WebTabRole).value<WebTab*>(), tab5);
213 QCOMPARE(model.index(2, 0, tab1index).data(TabModel::WebTabRole).value<WebTab*>(), tab6);
214 QCOMPARE(model.index(3, 0, tab1index).data(TabModel::WebTabRole).value<WebTab*>(), tab3);
215
216 tab1->addChildTab(tab3, 0);
217
218 QCOMPARE(model.rowCount(tab1index), 4);
219 QCOMPARE(model.index(0, 0, tab1index).data(TabModel::WebTabRole).value<WebTab*>(), tab3);
220 QCOMPARE(model.index(1, 0, tab1index).data(TabModel::WebTabRole).value<WebTab*>(), tab2);
221 QCOMPARE(model.index(2, 0, tab1index).data(TabModel::WebTabRole).value<WebTab*>(), tab5);
222 QCOMPARE(model.index(3, 0, tab1index).data(TabModel::WebTabRole).value<WebTab*>(), tab6);
223
224 tab2->setParentTab(nullptr);
225
226 QCOMPARE(model.rowCount(tab1index), 3);
227 QCOMPARE(model.index(0, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab2);
228 QCOMPARE(model.index(0, 0, tab1index).data(TabModel::WebTabRole).value<WebTab*>(), tab3);
229 QCOMPARE(model.index(1, 0, tab1index).data(TabModel::WebTabRole).value<WebTab*>(), tab5);
230 QCOMPARE(model.index(2, 0, tab1index).data(TabModel::WebTabRole).value<WebTab*>(), tab6);
231
232 w->tabWidget()->closeTab(tab1->tabIndex());
233
234 QCOMPARE(model.rowCount(QModelIndex()), 4);
235 QCOMPARE(model.index(0, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab2);
236 QCOMPARE(model.index(1, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab3);
237 QCOMPARE(model.index(2, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab5);
238 QCOMPARE(model.index(3, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab6);
239
240 delete w;
241}
242
243void TabModelTest::resetTreeModelTest()
244{
245 BrowserWindow *w = mApp->createWindow(Qz::BW_NewWindow);
246
247 TabModel sourceModel(w);
248 TabTreeModel model(w);
249 model.setSourceModel(&sourceModel);
250 ModelTest modelTest(&model);
251
252 QTRY_COMPARE(model.rowCount(QModelIndex()), 1);
253
254 delete w;
255
256 QCOMPARE(model.rowCount(QModelIndex()), 0);
257}
258void TabModelTest::mruModelTest()
259{
260 BrowserWindow *w = mApp->createWindow(Qz::BW_NewWindow);
261
262 TabModel sourceModel(w);
263 TabMruModel model(w);
264 model.setSourceModel(&sourceModel);
265 ModelTest modelTest(&model);
266
267 w->tabWidget()->addView(QUrl());
268 w->tabWidget()->addView(QUrl());
269 w->tabWidget()->addView(QUrl());
270 w->tabWidget()->addView(QUrl());
271 w->tabWidget()->addView(QUrl());
272
273 QTRY_COMPARE(model.rowCount(QModelIndex()), 6);
274
275 WebTab *tab0 = w->tabWidget()->webTab(0);
276 WebTab *tab1 = w->tabWidget()->webTab(1);
277 WebTab *tab2 = w->tabWidget()->webTab(2);
278 WebTab *tab3 = w->tabWidget()->webTab(3);
279 WebTab *tab4 = w->tabWidget()->webTab(4);
280 WebTab *tab5 = w->tabWidget()->webTab(5);
281
282 QCOMPARE(model.index(0, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab0);
283 QCOMPARE(model.index(1, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab1);
284 QCOMPARE(model.index(2, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab2);
285 QCOMPARE(model.index(3, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab3);
286 QCOMPARE(model.index(4, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab4);
287 QCOMPARE(model.index(5, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab5);
288
289 w->tabWidget()->setCurrentIndex(2);
290 QCOMPARE(model.index(0, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab2);
291 QCOMPARE(model.index(1, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab0);
292 QCOMPARE(model.index(2, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab1);
293 QCOMPARE(model.index(3, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab3);
294 QCOMPARE(model.index(4, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab4);
295 QCOMPARE(model.index(5, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab5);
296 w->tabWidget()->setCurrentIndex(2);
297
298 w->tabWidget()->setCurrentIndex(4);
299 QCOMPARE(model.index(0, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab4);
300 QCOMPARE(model.index(1, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab2);
301 QCOMPARE(model.index(2, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab0);
302 QCOMPARE(model.index(3, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab1);
303 QCOMPARE(model.index(4, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab3);
304 QCOMPARE(model.index(5, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab5);
305
306 w->tabWidget()->setCurrentIndex(5);
307 QCOMPARE(model.index(0, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab5);
308 QCOMPARE(model.index(1, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab4);
309 QCOMPARE(model.index(2, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab2);
310 QCOMPARE(model.index(3, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab0);
311 QCOMPARE(model.index(4, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab1);
312 QCOMPARE(model.index(5, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab3);
313
314 delete w;
315}
316
#define FALKONTEST_MAIN(Test)
Definition: autotests.h:23
TabWidget * tabWidget() const
@ PinnedRole
Definition: tabmodel.h:57
@ RestoredRole
Definition: tabmodel.h:58
@ CurrentTabRole
Definition: tabmodel.h:59
@ WebTabRole
Definition: tabmodel.h:54
@ IconRole
Definition: tabmodel.h:56
@ TitleRole
Definition: tabmodel.h:55
void setCurrentIndex(int index)
Definition: tabwidget.cpp:536
WebTab * webTab(int index=-1) const
Definition: tabwidget.cpp:570
void closeTab(int index=-1)
Definition: tabwidget.cpp:437
void moveTab(int from, int to)
Definition: tabwidget.cpp:657
int addView(const LoadRequest &req, const Qz::NewTabPositionFlags &openFlags, bool selectLine=false, bool pinned=false)
Definition: tabwidget.cpp:314
Definition: webtab.h:40
int tabIndex() const
Definition: webtab.cpp:710
bool isRestored() const
Definition: webtab.cpp:548
void setParentTab(WebTab *tab)
Definition: webtab.cpp:474
QString title(bool allowEmpty=false) const
Definition: webtab.cpp:276
bool isPinned() const
Definition: webtab.cpp:414
void addChildTab(WebTab *tab, int index=-1)
Definition: webtab.cpp:502
void togglePinned()
Definition: webtab.cpp:715
QIcon icon(bool allowNull=false) const
Definition: webtab.cpp:286
#define mApp
@ BW_NewWindow
Definition: qzcommon.h:67
#define QSL(x)
Definition: qzcommon.h:40