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"