Warning, file /frameworks/knewstuff/autotests/kmoretools/kmoretoolstest2.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

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"