1 /*
2 SPDX-FileCopyrightText: 2020 David Hurka <david.hurka@mailbox.org>
3
4 SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7 #include <QtTest>
8
9 #include "../part/toggleactionmenu.h"
10 #include <QToolBar>
11
12 class ToggleActionMenuTest : public QObject
13 {
14 Q_OBJECT
15
16 private Q_SLOTS:
17 void testSetDefaultAction();
18 void testDeleteToolBarButton();
19 };
20
testSetDefaultAction()21 void ToggleActionMenuTest::testSetDefaultAction()
22 {
23 QToolBar dummyToolBar;
24 ToggleActionMenu menu(QStringLiteral("Menu"), this);
25 QAction *actionA = new QAction(QStringLiteral("A"), this);
26 QAction *actionB = new QAction(QStringLiteral("B"), this);
27
28 // Do not set a default action, the menu should behave as plain KActionMenu.
29 QCOMPARE(menu.defaultAction(), &menu);
30 QToolButton *menuButton = qobject_cast<QToolButton *>(menu.createWidget(&dummyToolBar));
31 QVERIFY(menuButton);
32 QCOMPARE(menuButton->defaultAction(), &menu);
33
34 // Should still behave as plain KActionMenu when actions are added.
35 menu.addAction(actionA);
36 QCOMPARE(menu.defaultAction(), &menu);
37 QCOMPARE(menuButton->defaultAction(), &menu);
38
39 // Set an action from the menu as default action, should work.
40 menu.setDefaultAction(actionA);
41 QCOMPARE(menu.defaultAction(), actionA);
42 QCOMPARE(menuButton->defaultAction(), actionA);
43
44 // Set a foreign action as default action, should reset the default action.
45 menu.setDefaultAction(actionB);
46 QCOMPARE(menu.defaultAction(), &menu);
47 QCOMPARE(menuButton->defaultAction(), &menu);
48
49 // Set an action of the menu as default action, should work.
50 menu.setDefaultAction(actionA);
51 QCOMPARE(menu.defaultAction(), actionA);
52 QCOMPARE(menuButton->defaultAction(), actionA);
53
54 // Remove default action from menu, should reset the default action.
55 menu.removeAction(actionA);
56 QCOMPARE(menu.defaultAction(), &menu);
57 QCOMPARE(menuButton->defaultAction(), &menu);
58 }
59
testDeleteToolBarButton()60 void ToggleActionMenuTest::testDeleteToolBarButton()
61 {
62 QToolBar dummyToolBar;
63 ToggleActionMenu menu(QStringLiteral("Menu"), this);
64 QAction *actionA = new QAction(QStringLiteral("A"), this);
65 QAction *actionB = new QAction(QStringLiteral("B"), this);
66
67 // Setup: set a default action and create two toolbar buttons.
68 menu.addAction(actionA);
69 menu.addAction(actionB);
70 menu.setDefaultAction(actionA);
71 QToolButton *menuButtonA = qobject_cast<QToolButton *>(menu.createWidget(&dummyToolBar));
72 QVERIFY(menuButtonA);
73 QCOMPARE(menuButtonA->defaultAction(), actionA);
74 QToolButton *menuButtonB = qobject_cast<QToolButton *>(menu.createWidget(&dummyToolBar));
75 QVERIFY(menuButtonB);
76
77 // Delete button B, and set a new default action. Button A shall be updated without segfaulting on the deleted button B.
78 delete menuButtonB;
79 menu.setDefaultAction(actionB);
80 QCOMPARE(menuButtonA->defaultAction(), actionB);
81 }
82
83 QTEST_MAIN(ToggleActionMenuTest)
84
85 #include "toggleactionmenutest.moc"
86