File indexing completed on 2024-04-28 16:08:49
0001 /* ============================================================ 0002 * Falkon - Qt web browser 0003 * Copyright (C) 2018 David Rosca <nowrep@gmail.com> 0004 * 0005 * This program is free software: you can redistribute it and/or modify 0006 * it under the terms of the GNU General Public License as published by 0007 * the Free Software Foundation, either version 3 of the License, or 0008 * (at your option) any later version. 0009 * 0010 * This program is distributed in the hope that it will be useful, 0011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 0012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 0013 * GNU General Public License for more details. 0014 * 0015 * You should have received a copy of the GNU General Public License 0016 * along with this program. If not, see <http://www.gnu.org/licenses/>. 0017 * ============================================================ */ 0018 #include "tabmodeltest.h" 0019 #include "autotests.h" 0020 #include "tabmodel.h" 0021 #include "tabtreemodel.h" 0022 #include "tabmrumodel.h" 0023 #include "webtab.h" 0024 #include "tabwidget.h" 0025 #include "mainapplication.h" 0026 #include "browserwindow.h" 0027 0028 #include "modeltest.h" 0029 0030 void TabModelTest::initTestCase() 0031 { 0032 } 0033 0034 void TabModelTest::cleanupTestCase() 0035 { 0036 } 0037 0038 void TabModelTest::basicTest() 0039 { 0040 BrowserWindow *w = mApp->createWindow(Qz::BW_NewWindow); 0041 0042 TabModel model1(w); 0043 ModelTest modelTest(&model1); 0044 0045 QSignalSpy rowsInsertedSpy(&model1, &TabModel::rowsInserted); 0046 QSignalSpy rowsRemovedSpy(&model1, &TabModel::rowsRemoved); 0047 0048 QCOMPARE(model1.rowCount(), 0); 0049 0050 rowsInsertedSpy.wait(); 0051 0052 QCOMPARE(rowsInsertedSpy.count(), 1); 0053 WebTab *tab0 = w->tabWidget()->webTab(0); 0054 QCOMPARE(rowsInsertedSpy.at(0).at(0).value<QModelIndex>(), QModelIndex()); 0055 QCOMPARE(rowsInsertedSpy.at(0).at(1).toInt(), 0); 0056 QCOMPARE(rowsInsertedSpy.at(0).at(2).toInt(), 0); 0057 QCOMPARE(model1.data(model1.index(0, 0), TabModel::WebTabRole).value<WebTab*>(), tab0); 0058 0059 rowsInsertedSpy.clear(); 0060 0061 w->tabWidget()->addView(QUrl(QSL("http://test.com"))); 0062 0063 QCOMPARE(rowsInsertedSpy.count(), 1); 0064 WebTab *tab1 = w->tabWidget()->webTab(1); 0065 QCOMPARE(rowsInsertedSpy.at(0).at(0).value<QModelIndex>(), QModelIndex()); 0066 QCOMPARE(rowsInsertedSpy.at(0).at(1).toInt(), 1); 0067 QCOMPARE(rowsInsertedSpy.at(0).at(2).toInt(), 1); 0068 QCOMPARE(model1.data(model1.index(1, 0), TabModel::WebTabRole).value<WebTab*>(), tab1); 0069 0070 w->tabWidget()->moveTab(0, 1); 0071 QCOMPARE(w->tabWidget()->webTab(0), tab1); 0072 QCOMPARE(w->tabWidget()->webTab(1), tab0); 0073 0074 w->tabWidget()->moveTab(1, 0); 0075 QCOMPARE(w->tabWidget()->webTab(0), tab0); 0076 QCOMPARE(w->tabWidget()->webTab(1), tab1); 0077 0078 w->tabWidget()->moveTab(0, 1); 0079 QCOMPARE(w->tabWidget()->webTab(0), tab1); 0080 QCOMPARE(w->tabWidget()->webTab(1), tab0); 0081 0082 QCOMPARE(rowsRemovedSpy.count(), 0); 0083 0084 w->tabWidget()->closeTab(1); 0085 0086 QCOMPARE(rowsRemovedSpy.count(), 1); 0087 QCOMPARE(rowsRemovedSpy.at(0).at(0).value<QModelIndex>(), QModelIndex()); 0088 QCOMPARE(rowsRemovedSpy.at(0).at(1).toInt(), 1); 0089 QCOMPARE(rowsRemovedSpy.at(0).at(2).toInt(), 1); 0090 0091 QCOMPARE(model1.rowCount(), 1); 0092 0093 TabModel model2(w); 0094 ModelTest modelTest2(&model2); 0095 QCOMPARE(model2.rowCount(), 1); 0096 0097 delete w; 0098 } 0099 0100 void TabModelTest::dataTest() 0101 { 0102 BrowserWindow *w = mApp->createWindow(Qz::BW_NewWindow); 0103 TabModel model(w); 0104 ModelTest modelTest(&model); 0105 0106 QTRY_COMPARE(model.rowCount(), 1); 0107 0108 WebTab *tab0 = w->tabWidget()->webTab(0); 0109 QCOMPARE(model.index(0, 0).data(TabModel::TitleRole).toString(), tab0->title()); 0110 QCOMPARE(model.index(0, 0).data(Qt::DisplayRole).toString(), tab0->title()); 0111 QCOMPARE(model.index(0, 0).data(TabModel::IconRole).value<QIcon>().pixmap(16), tab0->icon().pixmap(16)); 0112 QCOMPARE(model.index(0, 0).data(Qt::DecorationRole).value<QIcon>().pixmap(16), tab0->icon().pixmap(16)); 0113 QCOMPARE(model.index(0, 0).data(TabModel::PinnedRole).toBool(), tab0->isPinned()); 0114 QCOMPARE(model.index(0, 0).data(TabModel::RestoredRole).toBool(), tab0->isRestored()); 0115 QCOMPARE(model.index(0, 0).data(TabModel::CurrentTabRole).toBool(), true); 0116 0117 w->tabWidget()->addView(QUrl(QSL("http://test.com"))); 0118 0119 delete w; 0120 } 0121 void TabModelTest::pinTabTest() 0122 { 0123 BrowserWindow *w = mApp->createWindow(Qz::BW_NewWindow); 0124 0125 TabModel model(w); 0126 ModelTest modelTest(&model); 0127 0128 w->tabWidget()->addView(QUrl(QSL("http://test.com"))); 0129 0130 QTRY_COMPARE(model.rowCount(), 2); 0131 0132 WebTab *tab0 = w->tabWidget()->webTab(0); 0133 WebTab *tab1 = w->tabWidget()->webTab(1); 0134 0135 QCOMPARE(model.data(model.index(0, 0), TabModel::WebTabRole).value<WebTab*>(), tab0); 0136 QCOMPARE(model.data(model.index(1, 0), TabModel::WebTabRole).value<WebTab*>(), tab1); 0137 0138 tab1->togglePinned(); 0139 0140 QCOMPARE(model.data(model.index(0, 0), TabModel::WebTabRole).value<WebTab*>(), tab1); 0141 QCOMPARE(model.data(model.index(1, 0), TabModel::WebTabRole).value<WebTab*>(), tab0); 0142 0143 delete w; 0144 } 0145 0146 void TabModelTest::treeModelTest() 0147 { 0148 BrowserWindow *w = mApp->createWindow(Qz::BW_NewWindow); 0149 0150 TabModel sourceModel(w); 0151 TabTreeModel model(w); 0152 model.setSourceModel(&sourceModel); 0153 ModelTest modelTest(&model); 0154 0155 w->tabWidget()->addView(QUrl()); 0156 w->tabWidget()->addView(QUrl()); 0157 w->tabWidget()->addView(QUrl()); 0158 w->tabWidget()->addView(QUrl()); 0159 w->tabWidget()->addView(QUrl()); 0160 0161 QTRY_COMPARE(model.rowCount(QModelIndex()), 6); 0162 0163 WebTab *tab1 = w->tabWidget()->webTab(0); 0164 WebTab *tab2 = w->tabWidget()->webTab(1); 0165 WebTab *tab3 = w->tabWidget()->webTab(2); 0166 WebTab *tab4 = w->tabWidget()->webTab(3); 0167 WebTab *tab5 = w->tabWidget()->webTab(4); 0168 WebTab *tab6 = w->tabWidget()->webTab(5); 0169 0170 QCOMPARE(model.index(0, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab1); 0171 QCOMPARE(model.index(1, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab2); 0172 QCOMPARE(model.index(2, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab3); 0173 QCOMPARE(model.index(3, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab4); 0174 QCOMPARE(model.index(4, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab5); 0175 QCOMPARE(model.index(5, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab6); 0176 0177 QPersistentModelIndex tab1index = model.index(0, 0); 0178 QPersistentModelIndex tab2index = model.index(1, 0); 0179 QPersistentModelIndex tab3index = model.index(2, 0); 0180 QPersistentModelIndex tab4index = model.index(3, 0); 0181 QPersistentModelIndex tab5index = model.index(4, 0); 0182 QPersistentModelIndex tab6index = model.index(5, 0); 0183 0184 QCOMPARE(model.rowCount(tab1index), 0); 0185 tab1->addChildTab(tab2); 0186 0187 QCOMPARE(model.rowCount(tab1index), 1); 0188 QCOMPARE(model.index(0, 0, tab1index).data(TabModel::WebTabRole).value<WebTab*>(), tab2); 0189 0190 tab1->addChildTab(tab3); 0191 QCOMPARE(model.rowCount(tab1index), 2); 0192 QCOMPARE(model.index(0, 0, tab1index).data(TabModel::WebTabRole).value<WebTab*>(), tab2); 0193 QCOMPARE(model.index(1, 0, tab1index).data(TabModel::WebTabRole).value<WebTab*>(), tab3); 0194 0195 tab1->addChildTab(tab4, 1); 0196 QCOMPARE(model.rowCount(tab1index), 3); 0197 QCOMPARE(model.index(0, 0, tab1index).data(TabModel::WebTabRole).value<WebTab*>(), tab2); 0198 QCOMPARE(model.index(1, 0, tab1index).data(TabModel::WebTabRole).value<WebTab*>(), tab4); 0199 QCOMPARE(model.index(2, 0, tab1index).data(TabModel::WebTabRole).value<WebTab*>(), tab3); 0200 0201 tab4->addChildTab(tab5); 0202 tab4->addChildTab(tab6); 0203 0204 QCOMPARE(model.rowCount(tab4index), 2); 0205 QCOMPARE(model.index(0, 0, tab4index).data(TabModel::WebTabRole).value<WebTab*>(), tab5); 0206 QCOMPARE(model.index(1, 0, tab4index).data(TabModel::WebTabRole).value<WebTab*>(), tab6); 0207 0208 w->tabWidget()->closeTab(tab4->tabIndex()); 0209 0210 QCOMPARE(model.rowCount(tab1index), 4); 0211 QCOMPARE(model.index(0, 0, tab1index).data(TabModel::WebTabRole).value<WebTab*>(), tab2); 0212 QCOMPARE(model.index(1, 0, tab1index).data(TabModel::WebTabRole).value<WebTab*>(), tab5); 0213 QCOMPARE(model.index(2, 0, tab1index).data(TabModel::WebTabRole).value<WebTab*>(), tab6); 0214 QCOMPARE(model.index(3, 0, tab1index).data(TabModel::WebTabRole).value<WebTab*>(), tab3); 0215 0216 tab1->addChildTab(tab3, 0); 0217 0218 QCOMPARE(model.rowCount(tab1index), 4); 0219 QCOMPARE(model.index(0, 0, tab1index).data(TabModel::WebTabRole).value<WebTab*>(), tab3); 0220 QCOMPARE(model.index(1, 0, tab1index).data(TabModel::WebTabRole).value<WebTab*>(), tab2); 0221 QCOMPARE(model.index(2, 0, tab1index).data(TabModel::WebTabRole).value<WebTab*>(), tab5); 0222 QCOMPARE(model.index(3, 0, tab1index).data(TabModel::WebTabRole).value<WebTab*>(), tab6); 0223 0224 tab2->setParentTab(nullptr); 0225 0226 QCOMPARE(model.rowCount(tab1index), 3); 0227 QCOMPARE(model.index(0, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab2); 0228 QCOMPARE(model.index(0, 0, tab1index).data(TabModel::WebTabRole).value<WebTab*>(), tab3); 0229 QCOMPARE(model.index(1, 0, tab1index).data(TabModel::WebTabRole).value<WebTab*>(), tab5); 0230 QCOMPARE(model.index(2, 0, tab1index).data(TabModel::WebTabRole).value<WebTab*>(), tab6); 0231 0232 w->tabWidget()->closeTab(tab1->tabIndex()); 0233 0234 QCOMPARE(model.rowCount(QModelIndex()), 4); 0235 QCOMPARE(model.index(0, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab2); 0236 QCOMPARE(model.index(1, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab3); 0237 QCOMPARE(model.index(2, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab5); 0238 QCOMPARE(model.index(3, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab6); 0239 0240 delete w; 0241 } 0242 0243 void TabModelTest::resetTreeModelTest() 0244 { 0245 BrowserWindow *w = mApp->createWindow(Qz::BW_NewWindow); 0246 0247 TabModel sourceModel(w); 0248 TabTreeModel model(w); 0249 model.setSourceModel(&sourceModel); 0250 ModelTest modelTest(&model); 0251 0252 QTRY_COMPARE(model.rowCount(QModelIndex()), 1); 0253 0254 delete w; 0255 0256 QCOMPARE(model.rowCount(QModelIndex()), 0); 0257 } 0258 void TabModelTest::mruModelTest() 0259 { 0260 BrowserWindow *w = mApp->createWindow(Qz::BW_NewWindow); 0261 0262 TabModel sourceModel(w); 0263 TabMruModel model(w); 0264 model.setSourceModel(&sourceModel); 0265 ModelTest modelTest(&model); 0266 0267 w->tabWidget()->addView(QUrl()); 0268 w->tabWidget()->addView(QUrl()); 0269 w->tabWidget()->addView(QUrl()); 0270 w->tabWidget()->addView(QUrl()); 0271 w->tabWidget()->addView(QUrl()); 0272 0273 QTRY_COMPARE(model.rowCount(QModelIndex()), 6); 0274 0275 WebTab *tab0 = w->tabWidget()->webTab(0); 0276 WebTab *tab1 = w->tabWidget()->webTab(1); 0277 WebTab *tab2 = w->tabWidget()->webTab(2); 0278 WebTab *tab3 = w->tabWidget()->webTab(3); 0279 WebTab *tab4 = w->tabWidget()->webTab(4); 0280 WebTab *tab5 = w->tabWidget()->webTab(5); 0281 0282 QCOMPARE(model.index(0, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab0); 0283 QCOMPARE(model.index(1, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab1); 0284 QCOMPARE(model.index(2, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab2); 0285 QCOMPARE(model.index(3, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab3); 0286 QCOMPARE(model.index(4, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab4); 0287 QCOMPARE(model.index(5, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab5); 0288 0289 w->tabWidget()->setCurrentIndex(2); 0290 QCOMPARE(model.index(0, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab2); 0291 QCOMPARE(model.index(1, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab0); 0292 QCOMPARE(model.index(2, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab1); 0293 QCOMPARE(model.index(3, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab3); 0294 QCOMPARE(model.index(4, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab4); 0295 QCOMPARE(model.index(5, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab5); 0296 w->tabWidget()->setCurrentIndex(2); 0297 0298 w->tabWidget()->setCurrentIndex(4); 0299 QCOMPARE(model.index(0, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab4); 0300 QCOMPARE(model.index(1, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab2); 0301 QCOMPARE(model.index(2, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab0); 0302 QCOMPARE(model.index(3, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab1); 0303 QCOMPARE(model.index(4, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab3); 0304 QCOMPARE(model.index(5, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab5); 0305 0306 w->tabWidget()->setCurrentIndex(5); 0307 QCOMPARE(model.index(0, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab5); 0308 QCOMPARE(model.index(1, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab4); 0309 QCOMPARE(model.index(2, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab2); 0310 QCOMPARE(model.index(3, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab0); 0311 QCOMPARE(model.index(4, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab1); 0312 QCOMPARE(model.index(5, 0).data(TabModel::WebTabRole).value<WebTab*>(), tab3); 0313 0314 delete w; 0315 } 0316 0317 FALKONTEST_MAIN(TabModelTest)