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)