1 /* 2 This file is part of the KDE libraries 3 SPDX-FileCopyrightText: 2010 Aurélien Gâteau <agateau@kde.org> 4 5 SPDX-License-Identifier: LGPL-2.1-or-later 6 */ 7 #include <kdualaction.h> 8 9 #include <QSignalSpy> 10 #include <QTest> 11 12 #include "kguiitem.h" 13 14 static const QString INACTIVE_TEXT = QStringLiteral("Show Foo"); 15 static const QString ACTIVE_TEXT = QStringLiteral("Hide Foo"); 16 17 class KDualActionTest : public QObject 18 { 19 Q_OBJECT 20 21 private Q_SLOTS: initTestCase()22 void initTestCase() 23 { 24 qRegisterMetaType<QAction *>("QAction*"); 25 } 26 testSetGuiItem()27 void testSetGuiItem() 28 { 29 KDualAction action(nullptr); 30 action.setInactiveGuiItem(KGuiItem(INACTIVE_TEXT)); 31 action.setActiveGuiItem(KGuiItem(ACTIVE_TEXT)); 32 QCOMPARE(action.inactiveText(), INACTIVE_TEXT); 33 QCOMPARE(action.activeText(), ACTIVE_TEXT); 34 QCOMPARE(action.text(), INACTIVE_TEXT); 35 } 36 testSetIconForStates()37 void testSetIconForStates() 38 { 39 QIcon icon(QPixmap(16, 16)); 40 QVERIFY(!icon.isNull()); 41 KDualAction action(nullptr); 42 QVERIFY(action.inactiveIcon().isNull()); 43 QVERIFY(action.activeIcon().isNull()); 44 action.setIconForStates(icon); 45 QCOMPARE(action.inactiveIcon(), icon); 46 QCOMPARE(action.activeIcon(), icon); 47 } 48 testSetActive()49 void testSetActive() 50 { 51 KDualAction action(INACTIVE_TEXT, ACTIVE_TEXT, nullptr); 52 QVERIFY(!action.isActive()); 53 QCOMPARE(action.text(), INACTIVE_TEXT); 54 QSignalSpy activeChangedSpy(&action, &KDualAction::activeChanged); 55 QSignalSpy activeChangedByUserSpy(&action, &KDualAction::activeChangedByUser); 56 57 action.setActive(true); 58 QVERIFY(action.isActive()); 59 QCOMPARE(action.text(), ACTIVE_TEXT); 60 QCOMPARE(activeChangedSpy.count(), 1); 61 QCOMPARE(activeChangedSpy.takeFirst().at(0).toBool(), true); 62 QCOMPARE(activeChangedByUserSpy.count(), 0); 63 64 action.setActive(false); 65 QVERIFY(!action.isActive()); 66 QCOMPARE(action.text(), INACTIVE_TEXT); 67 QCOMPARE(activeChangedSpy.count(), 1); 68 QCOMPARE(activeChangedSpy.takeFirst().at(0).toBool(), false); 69 QCOMPARE(activeChangedByUserSpy.count(), 0); 70 } 71 testTrigger()72 void testTrigger() 73 { 74 KDualAction action(INACTIVE_TEXT, ACTIVE_TEXT, nullptr); 75 QVERIFY(!action.isActive()); 76 QCOMPARE(action.text(), INACTIVE_TEXT); 77 QSignalSpy activeChangedSpy(&action, &KDualAction::activeChanged); 78 QSignalSpy activeChangedByUserSpy(&action, &KDualAction::activeChangedByUser); 79 80 action.trigger(); 81 QVERIFY(action.isActive()); 82 QCOMPARE(action.text(), ACTIVE_TEXT); 83 QCOMPARE(activeChangedSpy.count(), 1); 84 QCOMPARE(activeChangedSpy.takeFirst().at(0).toBool(), true); 85 QCOMPARE(activeChangedByUserSpy.count(), 1); 86 QCOMPARE(activeChangedByUserSpy.takeFirst().at(0).toBool(), true); 87 88 action.trigger(); 89 QVERIFY(!action.isActive()); 90 QCOMPARE(action.text(), INACTIVE_TEXT); 91 QCOMPARE(activeChangedSpy.count(), 1); 92 QCOMPARE(activeChangedSpy.takeFirst().at(0).toBool(), false); 93 QCOMPARE(activeChangedByUserSpy.count(), 1); 94 QCOMPARE(activeChangedByUserSpy.takeFirst().at(0).toBool(), false); 95 96 // Turn off autoToggle, nothing should happen 97 action.setAutoToggle(false); 98 action.trigger(); 99 QVERIFY(!action.isActive()); 100 QCOMPARE(action.text(), INACTIVE_TEXT); 101 QCOMPARE(activeChangedSpy.count(), 0); 102 QCOMPARE(activeChangedByUserSpy.count(), 0); 103 104 // Turn on autoToggle, action should change 105 action.setAutoToggle(true); 106 action.trigger(); 107 QCOMPARE(action.text(), ACTIVE_TEXT); 108 QCOMPARE(activeChangedSpy.count(), 1); 109 QCOMPARE(activeChangedSpy.takeFirst().at(0).toBool(), true); 110 QCOMPARE(activeChangedByUserSpy.count(), 1); 111 QCOMPARE(activeChangedByUserSpy.takeFirst().at(0).toBool(), true); 112 } 113 }; 114 115 QTEST_MAIN(KDualActionTest) 116 117 #include "kdualactiontest.moc" 118