File indexing completed on 2024-05-12 16:23:40

0001 /*
0002  *  SPDX-FileCopyrightText: 2020 Jonah BrĂ¼chert <jbb@kaidan.im>
0003  *
0004  *  SPDX-License-Identifier: LGPL-2.0-only
0005  */
0006 
0007 #include <QtTest/QTest>
0008 
0009 #include "tabsmodel.h"
0010 
0011 class TabsModelTest : public QObject
0012 {
0013     Q_OBJECT
0014 
0015 private Q_SLOTS:
0016     void initTestCase()
0017     {
0018         m_tabsModel = new TabsModel();
0019     }
0020 
0021     void testInitialTabExists()
0022     {
0023         QCOMPARE(m_tabsModel->tabs().size(), 1);
0024 
0025         // Current tab should be initial tab
0026         QCOMPARE(m_tabsModel->currentTab(), 0);
0027         QCOMPARE(m_tabsModel->tab(0).url(), QUrl(QStringLiteral("about:blank")));
0028     }
0029 
0030     void testNewTab()
0031     {
0032         m_tabsModel->newTab(QUrl(QStringLiteral("https://kde.org")));
0033         QCOMPARE(m_tabsModel->tabs().size(), 2);
0034 
0035         qDebug() << m_tabsModel->tab(1).url() << m_tabsModel->tab(0).isMobile();
0036         QCOMPARE(m_tabsModel->tab(1).url(), QUrl(QStringLiteral("https://kde.org")));
0037 
0038         // newly created tab should be current tab now
0039         QCOMPARE(m_tabsModel->currentTab(), 1);
0040     }
0041 
0042     void testCurrentTab()
0043     {
0044         QCOMPARE(m_tabsModel->tabs().at(m_tabsModel->currentTab()).url(), QUrl(QStringLiteral("https://kde.org")));
0045     }
0046 
0047     void testCloseTab() {
0048         // Close initial tab, keep kde.org one
0049         m_tabsModel->closeTab(0);
0050         QCOMPARE(m_tabsModel->tabs().size(), 1);
0051 
0052         // Check tabs moved properly
0053         QCOMPARE(m_tabsModel->tabs().at(0).url(), QUrl(QStringLiteral("https://kde.org")));
0054     }
0055 
0056     void testLoad() {
0057         m_tabsModel->setUrl(0, QUrl(QStringLiteral("https://debian.org")));
0058 
0059         // Number of tabs must not change
0060         QCOMPARE(m_tabsModel->tabs().size(), 1);
0061 
0062         QCOMPARE(m_tabsModel->tabs().at(0).url(), QUrl(QStringLiteral("https://debian.org")));
0063     }
0064 
0065     void testRowCountMatches() {
0066         QCOMPARE(m_tabsModel->tabs().size(), m_tabsModel->rowCount());
0067     }
0068 
0069     void testCloseCurrentTab() {
0070         //
0071         // Case 1: There is only one tab, a new one should be created
0072         //
0073         QCOMPARE(m_tabsModel->tabs().size(), 1);
0074         m_tabsModel->setCurrentTab(0);
0075         m_tabsModel->closeTab(0);
0076 
0077         // Check whether a new empty tab was created (count must not be less than one)
0078         QCOMPARE(m_tabsModel->tabs().size(), 1);
0079         QCOMPARE(m_tabsModel->tabs().at(0).url(), QUrl(QStringLiteral("about:blank")));
0080 
0081         //
0082         // Case 2: There are multiple tabs
0083         //
0084         m_tabsModel->newTab(QUrl(QStringLiteral("second")));
0085         m_tabsModel->newTab(QUrl(QStringLiteral("third")));
0086 
0087         QCOMPARE(m_tabsModel->tabs(), std::vector<TabState>({
0088             TabState(QUrl(QStringLiteral("about:blank")), m_tabsModel->isMobileDefault()),
0089             TabState(QUrl(QStringLiteral("second")), m_tabsModel->isMobileDefault()),
0090             TabState(QUrl(QStringLiteral("third")), m_tabsModel->isMobileDefault())
0091         }));
0092 
0093         // current tab is 2
0094         // close tab "second"
0095         m_tabsModel->closeTab(1);
0096         // current tab should now be 0, since we reset to first tab if the current tab is closed
0097         QCOMPARE(m_tabsModel->currentTab(), 0);
0098 
0099         // "second" is indeed gone
0100         QCOMPARE(m_tabsModel->tabs(), std::vector<TabState>({
0101             TabState(QUrl(QStringLiteral("about:blank")),  m_tabsModel->isMobileDefault()),
0102             TabState(QUrl(QStringLiteral("third")),  m_tabsModel->isMobileDefault())
0103         }));
0104     }
0105 
0106     void testSetTab() {
0107         m_tabsModel->setUrl(0, QUrl(QStringLiteral("https://debian.org")));
0108         QCOMPARE(m_tabsModel->tabs(), std::vector<TabState>({
0109             TabState(QUrl(QStringLiteral("https://debian.org")),  m_tabsModel->isMobileDefault()),
0110             TabState(QUrl(QStringLiteral("third")),  m_tabsModel->isMobileDefault())}
0111         ));
0112     }
0113 
0114     void testPrivateMode() {
0115         // private mode is off by default
0116         QCOMPARE(m_tabsModel->privateMode(), false);
0117 
0118         m_tabsModel->setPrivateMode(true);
0119         QCOMPARE(m_tabsModel->privateMode(), true);
0120 
0121         m_tabsModel->setPrivateMode(false);
0122         QCOMPARE(m_tabsModel->privateMode(), false);
0123     }
0124 private:
0125     TabsModel *m_tabsModel;
0126 };
0127 
0128 QTEST_GUILESS_MAIN(TabsModelTest);
0129 
0130 #include "tabsmodeltest.moc"