1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
|
/*
SPDX-FileCopyrightText: 2014, 2015 Gregor Mi <codestruct@posteo.org>
SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
*/
#include <../src/kmoretools/kmoretools.h>
#include <../src/kmoretools/kmoretools_p.h>
#include <../src/kmoretools/kmoretoolsmenufactory.h>
#include <../src/kmoretools/kmoretoolspresets.h>
#include <QTest>
/**
* The tests in this class have some runtime requirements.
* Details see comment in implementation of each test case.
*/
class KMoreToolsTest2 : public QObject
{
Q_OBJECT
private Q_SLOTS:
void init();
void cleanup();
// use cases:
void testInstalledAppStructure();
void testInstalledAppSetInitialItemText();
void test_buildMenu_ShowConfigureMenuItem();
};
void KMoreToolsTest2::init()
{
}
void KMoreToolsTest2::cleanup()
{
}
/**
* NOTE: we assume kate is installed
*/
void KMoreToolsTest2::testInstalledAppStructure()
{
KMoreTools kmt(_("unittest-kmoretools/2"));
const auto kateApp = kmt.registerServiceByDesktopEntryName(_("org.kde.kate"));
const auto menuBuilder = kmt.menuBuilder();
menuBuilder->addMenuItem(kateApp);
QString s = menuBuilder->menuStructureAsString(false);
qDebug() << s;
QCOMPARE(s, QString(_("|main|:org.kde.kate.|more|:|notinstalled|:")));
}
/**
* NOTE: we assume kate is installed
* and that the translated Name is "Kate"
*/
void KMoreToolsTest2::testInstalledAppSetInitialItemText()
{
KMoreTools kmt(_("unittest-kmoretools/2"));
const auto kateApp = kmt.registerServiceByDesktopEntryName(_("org.kde.kate"));
const auto menuBuilder = kmt.menuBuilder();
auto kateAppItem = menuBuilder->addMenuItem(kateApp);
kateAppItem->setInitialItemText(kateApp->formatString(_("$Name in super-user mode")));
auto action = kateAppItem->action();
QVERIFY(action); // because kate is installed;
QCOMPARE(action->text(), QString(_("Kate in super-user mode")));
}
bool menuAtLeastOneActionWithText(const QMenu *menu, const QString &text)
{
const auto lstActions = menu->actions();
for (auto a : lstActions) {
if (a->text() == text) {
return true;
}
}
return false;
}
bool menuAtLeastNoActionWithText(const QMenu *menu, const QString &text)
{
const auto lstActions = menu->actions();
for (auto a : lstActions) {
if (a->text() == text) {
qDebug() << a->text();
return false;
}
}
return true;
}
/**
* NOTE: we assume kate is installed
*/
void KMoreToolsTest2::test_buildMenu_ShowConfigureMenuItem()
{
{
KMoreTools kmt(_("unittest-kmoretools/2"));
const auto kateApp = kmt.registerServiceByDesktopEntryName(_("org.kde.kate"));
// porcelain: other (interactive) tests will reuse the kmt id so we make sure that
// no user configuration disturbs this test:
const auto menuBuilder = kmt.menuBuilder(_("porcelain"));
menuBuilder->addMenuItem(kateApp);
QMenu menu;
menuBuilder->buildByAppendingToMenu(&menu); // == KMoreTools::ConfigureDialogAccessible_Always
qDebug() << menuBuilder->menuStructureAsString(true);
QVERIFY(menuAtLeastOneActionWithText(&menu, _("Configure..."))); // "Kate", "Separator", "Configure..."
{
menu.clear();
menuBuilder->buildByAppendingToMenu(&menu, KMoreTools::ConfigureDialogAccessible_Defensive);
QVERIFY(menuAtLeastNoActionWithText(&menu, _("Configure...")));
}
}
{
KMoreTools kmt(_("unittest-kmoretools/2"));
const auto kateApp = kmt.registerServiceByDesktopEntryName(_("org.kde.kate"));
const auto mynotInstalledApp = kmt.registerServiceByDesktopEntryName(_("mynotinstalledapp"));
const auto menuBuilder = kmt.menuBuilder(_("porcelain"));
menuBuilder->addMenuItem(kateApp);
menuBuilder->addMenuItem(mynotInstalledApp);
QMenu menu;
menuBuilder->buildByAppendingToMenu(&menu); // == KMoreTools::ConfigureDialogAccessible_Always
auto doAssert = [](QMenu *menu) {
const QList<QAction *> actions = menu->actions();
QCOMPARE(actions.count(), 3); // "Kate", "Separator", "More..."
auto moreMenu = actions[2]->menu();
QCOMPARE(moreMenu->actions().count(), 4); // "Not-installed-section", "Not installed app", "Separator", "Configure menu..."
auto configureMenu = actions[3];
QCOMPARE(configureMenu->data().toString(), QString(_("configureItem")));
};
doAssert(&menu);
{
menu.clear();
menuBuilder->buildByAppendingToMenu(&menu, KMoreTools::ConfigureDialogAccessible_Defensive);
doAssert(&menu); // = same as _Always because there is one not-installed item
}
}
}
QTEST_MAIN(KMoreToolsTest2)
#include "kmoretoolstest2.moc"
|