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"