File indexing completed on 2024-04-21 03:53:20

0001 /*
0002     This file is part of the KDE libraries
0003     SPDX-FileCopyrightText: 2015 Laurent Montel <montel@kde.org>
0004 
0005     SPDX-License-Identifier: LGPL-2.0-or-later
0006 */
0007 
0008 #include "krecentfilesactiontest.h"
0009 
0010 #include <QActionGroup>
0011 #include <QMenu>
0012 #include <QTest>
0013 #include <krecentfilesaction.h>
0014 
0015 KRecentFilesActionTest::KRecentFilesActionTest(QObject *parent)
0016     : QObject(parent)
0017 {
0018 }
0019 
0020 KRecentFilesActionTest::~KRecentFilesActionTest()
0021 {
0022 }
0023 
0024 QStringList KRecentFilesActionTest::extractActionNames(QMenu *menu)
0025 {
0026     QStringList ret;
0027     const auto lstActions = menu->actions();
0028     for (const QAction *action : lstActions) {
0029         ret.append(action->objectName());
0030     }
0031     return ret;
0032 }
0033 
0034 QList<bool> KRecentFilesActionTest::extractActionEnableVisibleState(QMenu *menu)
0035 {
0036     QList<bool> ret;
0037     const auto lstActions = menu->actions();
0038     for (const QAction *action : lstActions) {
0039         ret.append(action->isEnabled());
0040         ret.append(action->isVisible());
0041     }
0042     return ret;
0043 }
0044 
0045 void KRecentFilesActionTest::shouldHaveDefaultValue()
0046 {
0047     KRecentFilesAction recentAction(nullptr);
0048     QVERIFY(recentAction.urls().isEmpty());
0049     QVERIFY(recentAction.menu());
0050     QVERIFY(!recentAction.menu()->actions().isEmpty());
0051     QCOMPARE(recentAction.menu()->actions().count(), 3);
0052     QCOMPARE(extractActionNames(recentAction.menu()),
0053              QStringList() << QLatin1String("no_entries") << QLatin1String("separator") << QLatin1String("clear_action"));
0054     QCOMPARE(extractActionEnableVisibleState(recentAction.menu()),
0055              QList<bool>() << false << true /*no_entries*/
0056                            << false << false /*separator*/
0057                            << false << false /*clear_action*/
0058     );
0059 }
0060 
0061 void KRecentFilesActionTest::shouldAddActionInTop()
0062 {
0063     KRecentFilesAction recentAction(nullptr);
0064     recentAction.addUrl(QUrl(QStringLiteral("http://www.kde.org")));
0065     QList<QAction *> lstAction = recentAction.menu()->actions();
0066     QCOMPARE(lstAction.count(), 4);
0067 
0068     QCOMPARE(extractActionNames(recentAction.menu()),
0069              QStringList() << QString() << QLatin1String("no_entries") << QLatin1String("separator") << QLatin1String("clear_action"));
0070     QCOMPARE(extractActionEnableVisibleState(recentAction.menu()),
0071              QList<bool>() << true << true /* new action*/
0072                            << false << false /*no_entries*/
0073                            << true << true /*separator*/
0074                            << true << true /*clear_action*/
0075     );
0076 }
0077 
0078 void KRecentFilesActionTest::shouldClearMenu()
0079 {
0080     KRecentFilesAction recentAction(nullptr);
0081     recentAction.addUrl(QUrl(QStringLiteral("http://www.kde.org")));
0082     QList<QAction *> lstAction = recentAction.menu()->actions();
0083     QCOMPARE(lstAction.count(), 4);
0084     recentAction.clear();
0085 
0086     lstAction = recentAction.menu()->actions();
0087     QCOMPARE(lstAction.count(), 3);
0088 
0089     QCOMPARE(extractActionNames(recentAction.menu()),
0090              QStringList() << QLatin1String("no_entries") << QLatin1String("separator") << QLatin1String("clear_action"));
0091     QCOMPARE(extractActionEnableVisibleState(recentAction.menu()),
0092              QList<bool>() << false << true /*no_entries*/
0093                            << false << false /*separator*/
0094                            << false << false /*clear_action*/
0095     );
0096 }
0097 
0098 void KRecentFilesActionTest::testUrlsOrder()
0099 {
0100     const QUrl kde = QUrl("http://www.kde.org");
0101     const QUrl foo = QUrl("http://www.foo.org");
0102     const QUrl bar = QUrl("http://www.bar.org");
0103 
0104     KRecentFilesAction recentActions(nullptr);
0105     recentActions.addUrl(kde);
0106     recentActions.addUrl(foo);
0107     recentActions.addUrl(bar);
0108 
0109     const QList<QAction *> list = recentActions.menu()->actions();
0110     // 3 + no_entries, separator, clear_action
0111     QCOMPARE(list.size(), 6);
0112 
0113     QCOMPARE(list.at(0)->text(), " [" + bar.toString() + ']');
0114     QCOMPARE(list.at(1)->text(), " [" + foo.toString() + ']');
0115     QCOMPARE(list.at(2)->text(), " [" + kde.toString() + ']');
0116 
0117     const QList<QUrl> urlList = recentActions.urls();
0118     QCOMPARE(urlList.size(), 3);
0119     // urls() method returns the urls in the same order as they appear in the menu
0120     QCOMPARE(urlList.at(0), bar);
0121     QCOMPARE(urlList.at(1), foo);
0122     QCOMPARE(urlList.at(2), kde);
0123 }
0124 
0125 void KRecentFilesActionTest::addUrlAlreadyInList()
0126 {
0127     const QUrl kde = QUrl("http://www.kde.org");
0128     const QUrl foo = QUrl("http://www.foo.org");
0129     const QUrl bar = QUrl("http://www.bar.org");
0130 
0131     KRecentFilesAction recentAction(nullptr);
0132     recentAction.addUrl(kde);
0133     recentAction.addUrl(foo);
0134     recentAction.addUrl(bar);
0135 
0136     QList<QAction *> list = recentAction.menu()->actions();
0137     // 3 + no_entries, separator, clear_action
0138     QCOMPARE(list.size(), 6);
0139 
0140     QCOMPARE(list.at(0)->text(), " [" + bar.toString() + ']');
0141 
0142     // Add kde url again
0143     recentAction.addUrl(kde);
0144     list = recentAction.menu()->actions();
0145     // Number of actions is the same
0146     QCOMPARE(list.size(), 6);
0147     // kde url should be now at the top
0148     QCOMPARE(list.at(0)->text(), " [" + kde.toString() + ']');
0149     // bar url is second
0150     QCOMPARE(list.at(1)->text(), " [" + bar.toString() + ']');
0151 
0152     // Add foo url again
0153     recentAction.addUrl(foo);
0154     list = recentAction.menu()->actions();
0155     // Number of actions is the same
0156     QCOMPARE(list.size(), 6);
0157     // foo url should be now at the top
0158     QCOMPARE(list.at(0)->text(), " [" + foo.toString() + ']');
0159 
0160     QCOMPARE(list.at(1)->text(), " [" + kde.toString() + ']');
0161     QCOMPARE(list.at(2)->text(), " [" + bar.toString() + ']');
0162 }
0163 
0164 void KRecentFilesActionTest::removeExecessItems()
0165 {
0166     const QUrl kde = QUrl("http://www.kde.org");
0167     const QUrl foo = QUrl("http://www.foo.org");
0168     const QUrl bar = QUrl("http://www.bar.org");
0169 
0170     KRecentFilesAction recentAction(nullptr);
0171     recentAction.addUrl(kde);
0172     recentAction.addUrl(foo);
0173     recentAction.addUrl(bar);
0174 
0175     QList<QAction *> list = recentAction.selectableActionGroup()->actions();
0176     QCOMPARE(list.size(), 3);
0177 
0178     recentAction.setMaxItems(2);
0179     list = recentAction.menu()->actions();
0180     QCOMPARE(recentAction.selectableActionGroup()->actions().size(), 2);
0181     // Oldest url was removed
0182     QCOMPARE(list.at(0)->text(), " [" + bar.toString() + ']');
0183     QCOMPARE(list.at(1)->text(), " [" + foo.toString() + ']');
0184 }
0185 
0186 QTEST_MAIN(KRecentFilesActionTest)
0187 
0188 #include "moc_krecentfilesactiontest.cpp"