File indexing completed on 2024-04-28 15:31:52

0001 /*
0002     This file is part of the KDE libraries
0003     SPDX-FileCopyrightText: 2010 Aurélien Gâteau <agateau@kde.org>
0004 
0005     SPDX-License-Identifier: LGPL-2.1-or-later
0006 */
0007 #include <kdualaction.h>
0008 
0009 #include <QSignalSpy>
0010 #include <QTest>
0011 
0012 #include "kguiitem.h"
0013 
0014 static const QString INACTIVE_TEXT = QStringLiteral("Show Foo");
0015 static const QString ACTIVE_TEXT = QStringLiteral("Hide Foo");
0016 
0017 class KDualActionTest : public QObject
0018 {
0019     Q_OBJECT
0020 
0021 private Q_SLOTS:
0022     void initTestCase()
0023     {
0024         qRegisterMetaType<QAction *>("QAction*");
0025     }
0026 
0027     void testSetGuiItem()
0028     {
0029         KDualAction action(nullptr);
0030         action.setInactiveGuiItem(KGuiItem(INACTIVE_TEXT));
0031         action.setActiveGuiItem(KGuiItem(ACTIVE_TEXT));
0032         QCOMPARE(action.inactiveText(), INACTIVE_TEXT);
0033         QCOMPARE(action.activeText(), ACTIVE_TEXT);
0034         QCOMPARE(action.text(), INACTIVE_TEXT);
0035     }
0036 
0037     void testSetIconForStates()
0038     {
0039         QIcon icon(QPixmap(16, 16));
0040         QVERIFY(!icon.isNull());
0041         KDualAction action(nullptr);
0042         QVERIFY(action.inactiveIcon().isNull());
0043         QVERIFY(action.activeIcon().isNull());
0044         action.setIconForStates(icon);
0045         QCOMPARE(action.inactiveIcon(), icon);
0046         QCOMPARE(action.activeIcon(), icon);
0047     }
0048 
0049     void testSetActive()
0050     {
0051         KDualAction action(INACTIVE_TEXT, ACTIVE_TEXT, nullptr);
0052         QVERIFY(!action.isActive());
0053         QCOMPARE(action.text(), INACTIVE_TEXT);
0054         QSignalSpy activeChangedSpy(&action, &KDualAction::activeChanged);
0055         QSignalSpy activeChangedByUserSpy(&action, &KDualAction::activeChangedByUser);
0056 
0057         action.setActive(true);
0058         QVERIFY(action.isActive());
0059         QCOMPARE(action.text(), ACTIVE_TEXT);
0060         QCOMPARE(activeChangedSpy.count(), 1);
0061         QCOMPARE(activeChangedSpy.takeFirst().at(0).toBool(), true);
0062         QCOMPARE(activeChangedByUserSpy.count(), 0);
0063 
0064         action.setActive(false);
0065         QVERIFY(!action.isActive());
0066         QCOMPARE(action.text(), INACTIVE_TEXT);
0067         QCOMPARE(activeChangedSpy.count(), 1);
0068         QCOMPARE(activeChangedSpy.takeFirst().at(0).toBool(), false);
0069         QCOMPARE(activeChangedByUserSpy.count(), 0);
0070     }
0071 
0072     void testTrigger()
0073     {
0074         KDualAction action(INACTIVE_TEXT, ACTIVE_TEXT, nullptr);
0075         QVERIFY(!action.isActive());
0076         QCOMPARE(action.text(), INACTIVE_TEXT);
0077         QSignalSpy activeChangedSpy(&action, &KDualAction::activeChanged);
0078         QSignalSpy activeChangedByUserSpy(&action, &KDualAction::activeChangedByUser);
0079 
0080         action.trigger();
0081         QVERIFY(action.isActive());
0082         QCOMPARE(action.text(), ACTIVE_TEXT);
0083         QCOMPARE(activeChangedSpy.count(), 1);
0084         QCOMPARE(activeChangedSpy.takeFirst().at(0).toBool(), true);
0085         QCOMPARE(activeChangedByUserSpy.count(), 1);
0086         QCOMPARE(activeChangedByUserSpy.takeFirst().at(0).toBool(), true);
0087 
0088         action.trigger();
0089         QVERIFY(!action.isActive());
0090         QCOMPARE(action.text(), INACTIVE_TEXT);
0091         QCOMPARE(activeChangedSpy.count(), 1);
0092         QCOMPARE(activeChangedSpy.takeFirst().at(0).toBool(), false);
0093         QCOMPARE(activeChangedByUserSpy.count(), 1);
0094         QCOMPARE(activeChangedByUserSpy.takeFirst().at(0).toBool(), false);
0095 
0096         // Turn off autoToggle, nothing should happen
0097         action.setAutoToggle(false);
0098         action.trigger();
0099         QVERIFY(!action.isActive());
0100         QCOMPARE(action.text(), INACTIVE_TEXT);
0101         QCOMPARE(activeChangedSpy.count(), 0);
0102         QCOMPARE(activeChangedByUserSpy.count(), 0);
0103 
0104         // Turn on autoToggle, action should change
0105         action.setAutoToggle(true);
0106         action.trigger();
0107         QCOMPARE(action.text(), ACTIVE_TEXT);
0108         QCOMPARE(activeChangedSpy.count(), 1);
0109         QCOMPARE(activeChangedSpy.takeFirst().at(0).toBool(), true);
0110         QCOMPARE(activeChangedByUserSpy.count(), 1);
0111         QCOMPARE(activeChangedByUserSpy.takeFirst().at(0).toBool(), true);
0112     }
0113 };
0114 
0115 QTEST_MAIN(KDualActionTest)
0116 
0117 #include "kdualactiontest.moc"