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