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 "webtabtest.h"
0019 #include "autotests.h"
0020 #include "webtab.h"
0021 #include "tabwidget.h"
0022 #include "tabbedwebview.h"
0023 #include "mainapplication.h"
0024 #include "browserwindow.h"
0025 
0026 #include <QWebEngineHistory>
0027 
0028 void WebTabTest::initTestCase()
0029 {
0030 }
0031 
0032 void WebTabTest::cleanupTestCase()
0033 {
0034     WebTab::setAddChildBehavior(WebTab::AppendChild);
0035 }
0036 
0037 void WebTabTest::init()
0038 {
0039     WebTab::setAddChildBehavior(WebTab::AppendChild);
0040 }
0041 
0042 void WebTabTest::parentChildTabsTest()
0043 {
0044     WebTab tab1;
0045     WebTab tab2;
0046     WebTab tab3;
0047     WebTab tab4;
0048     WebTab tab5;
0049     WebTab tab6;
0050 
0051     tab1.addChildTab(&tab2);
0052     QCOMPARE(tab1.childTabs(), QVector<WebTab*>{&tab2});
0053     QCOMPARE(tab2.parentTab(), &tab1);
0054     QCOMPARE(tab2.childTabs(), QVector<WebTab*>{});
0055 
0056     tab1.addChildTab(&tab3);
0057     QCOMPARE(tab1.childTabs(), (QVector<WebTab*>{&tab2, &tab3}));
0058     QCOMPARE(tab3.parentTab(), &tab1);
0059     QCOMPARE(tab3.childTabs(), QVector<WebTab*>{});
0060 
0061     tab1.addChildTab(&tab4, 1);
0062     QCOMPARE(tab1.childTabs(), (QVector<WebTab*>{&tab2, &tab4, &tab3}));
0063     QCOMPARE(tab4.parentTab(), &tab1);
0064     QCOMPARE(tab4.childTabs(), QVector<WebTab*>{});
0065 
0066     tab4.addChildTab(&tab5);
0067     tab4.addChildTab(&tab6);
0068 
0069     tab4.attach(mApp->getWindow());
0070     tab4.detach();
0071 
0072     QCOMPARE(tab1.childTabs(), (QVector<WebTab*>{&tab2, &tab5, &tab6, &tab3}));
0073     QCOMPARE(tab4.parentTab(), nullptr);
0074     QCOMPARE(tab4.childTabs(), QVector<WebTab*>{});
0075 
0076     tab3.addChildTab(&tab4);
0077     tab3.setParentTab(nullptr);
0078     tab1.addChildTab(&tab3, 0);
0079 
0080     QCOMPARE(tab1.childTabs(), (QVector<WebTab*>{&tab3, &tab2, &tab5, &tab6}));
0081     QCOMPARE(tab3.parentTab(), &tab1);
0082     QCOMPARE(tab3.childTabs(), QVector<WebTab*>{&tab4});
0083     QCOMPARE(tab4.parentTab(), &tab3);
0084 
0085     tab3.addChildTab(&tab2);
0086     QCOMPARE(tab3.childTabs(), (QVector<WebTab*>{&tab4, &tab2}));
0087     QCOMPARE(tab1.childTabs(), (QVector<WebTab*>{&tab3, &tab5, &tab6}));
0088 }
0089 
0090 void WebTabTest::prependChildTabsTest()
0091 {
0092     WebTab::setAddChildBehavior(WebTab::PrependChild);
0093 
0094     WebTab tab1;
0095     WebTab tab2;
0096     WebTab tab3;
0097     WebTab tab4;
0098     WebTab tab5;
0099     WebTab tab6;
0100 
0101     tab1.addChildTab(&tab2);
0102     QCOMPARE(tab1.childTabs(), QVector<WebTab*>{&tab2});
0103     QCOMPARE(tab2.parentTab(), &tab1);
0104     QCOMPARE(tab2.childTabs(), QVector<WebTab*>{});
0105 
0106     tab1.addChildTab(&tab3);
0107     QCOMPARE(tab1.childTabs(), (QVector<WebTab*>{&tab3, &tab2}));
0108     QCOMPARE(tab3.parentTab(), &tab1);
0109     QCOMPARE(tab3.childTabs(), QVector<WebTab*>{});
0110 
0111     tab1.addChildTab(&tab4, 1);
0112     QCOMPARE(tab1.childTabs(), (QVector<WebTab*>{&tab3, &tab4, &tab2}));
0113     QCOMPARE(tab4.parentTab(), &tab1);
0114     QCOMPARE(tab4.childTabs(), QVector<WebTab*>{});
0115 
0116     tab4.addChildTab(&tab5);
0117     tab4.addChildTab(&tab6);
0118 
0119     QCOMPARE(tab4.childTabs(), (QVector<WebTab*>{&tab6, &tab5}));
0120 
0121     tab4.attach(mApp->getWindow());
0122     tab4.detach();
0123 
0124     QCOMPARE(tab1.childTabs(), (QVector<WebTab*>{&tab3, &tab6, &tab5, &tab2}));
0125     QCOMPARE(tab4.parentTab(), nullptr);
0126     QCOMPARE(tab4.childTabs(), QVector<WebTab*>{});
0127 
0128     tab3.addChildTab(&tab4);
0129     tab3.setParentTab(nullptr);
0130     tab1.addChildTab(&tab3, 0);
0131 
0132     QCOMPARE(tab1.childTabs(), (QVector<WebTab*>{&tab3, &tab6, &tab5, &tab2}));
0133     QCOMPARE(tab3.parentTab(), &tab1);
0134     QCOMPARE(tab3.childTabs(), QVector<WebTab*>{&tab4});
0135     QCOMPARE(tab4.parentTab(), &tab3);
0136 
0137     tab3.addChildTab(&tab2);
0138     QCOMPARE(tab3.childTabs(), (QVector<WebTab*>{&tab2, &tab4}));
0139     QCOMPARE(tab1.childTabs(), (QVector<WebTab*>{&tab3, &tab6, &tab5}));
0140 }
0141 
0142 void WebTabTest::moveTabTest()
0143 {
0144     BrowserWindow *w = mApp->createWindow(Qz::BW_NewWindow);
0145 
0146     QSignalSpy movedSpy(w->tabWidget(), &TabWidget::tabMoved);
0147 
0148     w->tabWidget()->addView(QUrl());
0149     w->tabWidget()->addView(QUrl());
0150     w->tabWidget()->addView(QUrl());
0151     w->tabWidget()->addView(QUrl());
0152     QTRY_COMPARE(w->tabWidget()->count(), 5);
0153 
0154     WebTab *tab0 = w->tabWidget()->webTab(0);
0155     WebTab *tab1 = w->tabWidget()->webTab(1);
0156     WebTab *tab2 = w->tabWidget()->webTab(2);
0157     WebTab *tab3 = w->tabWidget()->webTab(3);
0158     WebTab *tab4 = w->tabWidget()->webTab(4);
0159 
0160     movedSpy.clear();
0161     tab0->moveTab(2); // 1, 2, 0, 3, 4
0162     QCOMPARE(movedSpy.count(), 1);
0163     QCOMPARE(movedSpy.at(0).at(0).toInt(), 0);
0164     QCOMPARE(movedSpy.at(0).at(1).toInt(), 2);
0165 
0166     QCOMPARE(w->tabWidget()->webTab(0), tab1);
0167     QCOMPARE(w->tabWidget()->webTab(1), tab2);
0168     QCOMPARE(w->tabWidget()->webTab(2), tab0);
0169     QCOMPARE(w->tabWidget()->webTab(3), tab3);
0170     QCOMPARE(w->tabWidget()->webTab(4), tab4);
0171 
0172     movedSpy.clear();
0173     tab4->moveTab(0); // 4, 1, 2, 0, 3
0174     QCOMPARE(movedSpy.count(), 1);
0175     QCOMPARE(movedSpy.at(0).at(0).toInt(), 4);
0176     QCOMPARE(movedSpy.at(0).at(1).toInt(), 0);
0177 
0178     tab4->togglePinned(); // [4], 1, 2, 0, 3
0179 
0180     movedSpy.clear();
0181     tab2->moveTab(0); // [2, 4], 1, 0, 3
0182     QCOMPARE(tab2->isPinned(), true);
0183     QCOMPARE(movedSpy.count(), 1);
0184     QCOMPARE(movedSpy.at(0).at(0).toInt(), 2);
0185     QCOMPARE(movedSpy.at(0).at(1).toInt(), 0);
0186 
0187     movedSpy.clear();
0188     tab0->moveTab(1); // [2, 0, 4], 1, 3
0189     QCOMPARE(tab0->isPinned(), true);
0190     QCOMPARE(movedSpy.count(), 1);
0191     QCOMPARE(movedSpy.at(0).at(0).toInt(), 3);
0192     QCOMPARE(movedSpy.at(0).at(1).toInt(), 1);
0193 
0194     QCOMPARE(w->tabWidget()->webTab(0), tab2);
0195     QCOMPARE(w->tabWidget()->webTab(1), tab0);
0196     QCOMPARE(w->tabWidget()->webTab(2), tab4);
0197     QCOMPARE(w->tabWidget()->webTab(3), tab1);
0198     QCOMPARE(w->tabWidget()->webTab(4), tab3);
0199 
0200     movedSpy.clear();
0201     tab0->moveTab(0); // [0, 2, 4], 1, 3
0202     QCOMPARE(movedSpy.count(), 1);
0203     QCOMPARE(movedSpy.at(0).at(0).toInt(), 1);
0204     QCOMPARE(movedSpy.at(0).at(1).toInt(), 0);
0205 
0206     QCOMPARE(w->tabWidget()->webTab(0), tab0);
0207     QCOMPARE(w->tabWidget()->webTab(1), tab2);
0208     QCOMPARE(w->tabWidget()->webTab(2), tab4);
0209     QCOMPARE(w->tabWidget()->webTab(3), tab1);
0210     QCOMPARE(w->tabWidget()->webTab(4), tab3);
0211 
0212     movedSpy.clear();
0213     tab0->moveTab(3); // [2, 4], 1, 0, 3
0214     QCOMPARE(tab0->isPinned(), false);
0215     QCOMPARE(movedSpy.count(), 1);
0216     QCOMPARE(movedSpy.at(0).at(0).toInt(), 0);
0217     QCOMPARE(movedSpy.at(0).at(1).toInt(), 3);
0218 
0219     QCOMPARE(w->tabWidget()->webTab(0), tab2);
0220     QCOMPARE(w->tabWidget()->webTab(1), tab4);
0221     QCOMPARE(w->tabWidget()->webTab(2), tab1);
0222     QCOMPARE(w->tabWidget()->webTab(3), tab0);
0223     QCOMPARE(w->tabWidget()->webTab(4), tab3);
0224 
0225     movedSpy.clear();
0226     tab2->moveTab(4); // [4], 1, 0, 3, 2
0227     QCOMPARE(tab0->isPinned(), false);
0228     QCOMPARE(movedSpy.count(), 1);
0229     QCOMPARE(movedSpy.at(0).at(0).toInt(), 0);
0230     QCOMPARE(movedSpy.at(0).at(1).toInt(), 4);
0231 
0232     movedSpy.clear();
0233     tab4->moveTab(2); // 1, 0, 4, 3, 2
0234     QCOMPARE(tab0->isPinned(), false);
0235     QCOMPARE(movedSpy.count(), 1);
0236     QCOMPARE(movedSpy.at(0).at(0).toInt(), 0);
0237     QCOMPARE(movedSpy.at(0).at(1).toInt(), 2);
0238 
0239     QCOMPARE(w->tabWidget()->webTab(0), tab1);
0240     QCOMPARE(w->tabWidget()->webTab(1), tab0);
0241     QCOMPARE(w->tabWidget()->webTab(2), tab4);
0242     QCOMPARE(w->tabWidget()->webTab(3), tab3);
0243     QCOMPARE(w->tabWidget()->webTab(4), tab2);
0244 
0245     // Invalid moves
0246     movedSpy.clear();
0247     tab4->moveTab(tab4->tabIndex());
0248     tab4->moveTab(-1);
0249     tab4->moveTab(5);
0250     tab4->moveTab(6);
0251     QCOMPARE(movedSpy.count(), 0);
0252 
0253     delete w;
0254 }
0255 
0256 void WebTabTest::loadNotRestoredTabTest()
0257 {
0258     WebTab tab;
0259 
0260     tab.load(QUrl(QSL("qrc:autotests/data/basic_page.html")));
0261     QVERIFY(waitForLoadfinished(&tab));
0262     QTRY_COMPARE(tab.webView()->history()->count(), 1);
0263 
0264     tab.unload();
0265     QVERIFY(!tab.isRestored());
0266 
0267     tab.load(QUrl(QSL("qrc:autotests/data/basic_page2.html")));
0268     QVERIFY(waitForLoadfinished(&tab));
0269     QTRY_COMPARE(tab.webView()->history()->count(), 2);
0270 
0271     QCOMPARE(tab.url(), QUrl(QSL("qrc:autotests/data/basic_page2.html")));
0272     QCOMPARE(tab.webView()->history()->currentItem().url(), QUrl(QSL("qrc:autotests/data/basic_page2.html")));
0273     QCOMPARE(tab.webView()->history()->backItem().url(), QUrl(QSL("qrc:autotests/data/basic_page.html")));
0274 }
0275 
0276 void WebTabTest::saveNotRestoredTabTest()
0277 {
0278     WebTab tab;
0279 
0280     tab.load(QUrl(QSL("qrc:autotests/data/basic_page.html")));
0281     QVERIFY(waitForLoadfinished(&tab));
0282     QTRY_COMPARE(tab.webView()->history()->count(), 1);
0283 
0284     tab.unload();
0285     QVERIFY(!tab.isRestored());
0286 
0287     WebTab::SavedTab saved(&tab);
0288     QVERIFY(saved.isValid());
0289     QCOMPARE(saved.url, QUrl(QSL("qrc:autotests/data/basic_page.html")));
0290 }
0291 
0292 FALKONTEST_MAIN(WebTabTest)