File indexing completed on 2023-09-24 04:10:26
0001 /* 0002 SPDX-FileCopyrightText: 2014, 2015 Gregor Mi <codestruct@posteo.org> 0003 0004 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0005 */ 0006 0007 #include <../src/kmoretools/kmoretools.h> 0008 #include <../src/kmoretools/kmoretools_p.h> 0009 #include <../src/kmoretools/kmoretoolsmenufactory.h> 0010 #include <../src/kmoretools/kmoretoolspresets.h> 0011 0012 #include <QTest> 0013 0014 /** 0015 * The tests in this class have some runtime requirements. 0016 * Details see comment in implementation of each test case. 0017 */ 0018 class KMoreToolsTest2 : public QObject 0019 { 0020 Q_OBJECT 0021 0022 private Q_SLOTS: 0023 void init(); 0024 void cleanup(); 0025 0026 // use cases: 0027 void testInstalledAppStructure(); 0028 void testInstalledAppSetInitialItemText(); 0029 void test_buildMenu_ShowConfigureMenuItem(); 0030 }; 0031 0032 void KMoreToolsTest2::init() 0033 { 0034 } 0035 0036 void KMoreToolsTest2::cleanup() 0037 { 0038 } 0039 0040 /** 0041 * NOTE: we assume kate is installed 0042 */ 0043 void KMoreToolsTest2::testInstalledAppStructure() 0044 { 0045 KMoreTools kmt(_("unittest-kmoretools/2")); 0046 const auto kateApp = kmt.registerServiceByDesktopEntryName(_("org.kde.kate")); 0047 const auto menuBuilder = kmt.menuBuilder(); 0048 menuBuilder->addMenuItem(kateApp); 0049 QString s = menuBuilder->menuStructureAsString(false); 0050 qDebug() << s; 0051 QCOMPARE(s, QString(_("|main|:org.kde.kate.|more|:|notinstalled|:"))); 0052 } 0053 0054 /** 0055 * NOTE: we assume kate is installed 0056 * and that the translated Name is "Kate" 0057 */ 0058 void KMoreToolsTest2::testInstalledAppSetInitialItemText() 0059 { 0060 KMoreTools kmt(_("unittest-kmoretools/2")); 0061 const auto kateApp = kmt.registerServiceByDesktopEntryName(_("org.kde.kate")); 0062 const auto menuBuilder = kmt.menuBuilder(); 0063 auto kateAppItem = menuBuilder->addMenuItem(kateApp); 0064 kateAppItem->setInitialItemText(kateApp->formatString(_("$Name in super-user mode"))); 0065 auto action = kateAppItem->action(); 0066 QVERIFY(action); // because kate is installed; 0067 QCOMPARE(action->text(), QString(_("Kate in super-user mode"))); 0068 } 0069 0070 bool menuAtLeastOneActionWithText(const QMenu *menu, const QString &text) 0071 { 0072 const auto lstActions = menu->actions(); 0073 for (auto a : lstActions) { 0074 if (a->text() == text) { 0075 return true; 0076 } 0077 } 0078 0079 return false; 0080 } 0081 0082 bool menuAtLeastNoActionWithText(const QMenu *menu, const QString &text) 0083 { 0084 const auto lstActions = menu->actions(); 0085 for (auto a : lstActions) { 0086 if (a->text() == text) { 0087 qDebug() << a->text(); 0088 return false; 0089 } 0090 } 0091 0092 return true; 0093 } 0094 0095 /** 0096 * NOTE: we assume kate is installed 0097 */ 0098 void KMoreToolsTest2::test_buildMenu_ShowConfigureMenuItem() 0099 { 0100 { 0101 KMoreTools kmt(_("unittest-kmoretools/2")); 0102 const auto kateApp = kmt.registerServiceByDesktopEntryName(_("org.kde.kate")); 0103 // porcelain: other (interactive) tests will reuse the kmt id so we make sure that 0104 // no user configuration disturbs this test: 0105 const auto menuBuilder = kmt.menuBuilder(_("porcelain")); 0106 menuBuilder->addMenuItem(kateApp); 0107 QMenu menu; 0108 menuBuilder->buildByAppendingToMenu(&menu); // == KMoreTools::ConfigureDialogAccessible_Always 0109 qDebug() << menuBuilder->menuStructureAsString(true); 0110 QVERIFY(menuAtLeastOneActionWithText(&menu, _("Configure..."))); // "Kate", "Separator", "Configure..." 0111 0112 { 0113 menu.clear(); 0114 menuBuilder->buildByAppendingToMenu(&menu, KMoreTools::ConfigureDialogAccessible_Defensive); 0115 QVERIFY(menuAtLeastNoActionWithText(&menu, _("Configure..."))); 0116 } 0117 } 0118 0119 { 0120 KMoreTools kmt(_("unittest-kmoretools/2")); 0121 const auto kateApp = kmt.registerServiceByDesktopEntryName(_("org.kde.kate")); 0122 const auto mynotInstalledApp = kmt.registerServiceByDesktopEntryName(_("mynotinstalledapp")); 0123 const auto menuBuilder = kmt.menuBuilder(_("porcelain")); 0124 menuBuilder->addMenuItem(kateApp); 0125 menuBuilder->addMenuItem(mynotInstalledApp); 0126 QMenu menu; 0127 menuBuilder->buildByAppendingToMenu(&menu); // == KMoreTools::ConfigureDialogAccessible_Always 0128 0129 auto doAssert = [](QMenu *menu) { 0130 const QList<QAction *> actions = menu->actions(); 0131 QCOMPARE(actions.count(), 3); // "Kate", "Separator", "More..." 0132 auto moreMenu = actions[2]->menu(); 0133 QCOMPARE(moreMenu->actions().count(), 4); // "Not-installed-section", "Not installed app", "Separator", "Configure menu..." 0134 auto configureMenu = actions[3]; 0135 QCOMPARE(configureMenu->data().toString(), QString(_("configureItem"))); 0136 }; 0137 0138 doAssert(&menu); 0139 0140 { 0141 menu.clear(); 0142 menuBuilder->buildByAppendingToMenu(&menu, KMoreTools::ConfigureDialogAccessible_Defensive); 0143 doAssert(&menu); // = same as _Always because there is one not-installed item 0144 } 0145 } 0146 } 0147 0148 QTEST_MAIN(KMoreToolsTest2) 0149 0150 #include "kmoretoolstest2.moc"