File indexing completed on 2024-04-21 04:55:39

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)