Warning, file /graphics/okular/autotests/toggleactionmenutest.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 /*
0002     SPDX-FileCopyrightText: 2020 David Hurka <david.hurka@mailbox.org>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include <QTest>
0008 
0009 #include "../part/toggleactionmenu.h"
0010 #include <QToolBar>
0011 
0012 class ToggleActionMenuTest : public QObject
0013 {
0014     Q_OBJECT
0015 
0016 private Q_SLOTS:
0017     void testSetDefaultAction();
0018     void testDeleteToolBarButton();
0019 };
0020 
0021 void ToggleActionMenuTest::testSetDefaultAction()
0022 {
0023     QToolBar dummyToolBar;
0024     ToggleActionMenu menu(QStringLiteral("Menu"), this);
0025     QAction *actionA = new QAction(QStringLiteral("A"), this);
0026     QAction *actionB = new QAction(QStringLiteral("B"), this);
0027 
0028     // Do not set a default action, the menu should behave as plain KActionMenu.
0029     QCOMPARE(menu.defaultAction(), &menu);
0030     QToolButton *menuButton = qobject_cast<QToolButton *>(menu.createWidget(&dummyToolBar));
0031     QVERIFY(menuButton);
0032     QCOMPARE(menuButton->defaultAction(), &menu);
0033 
0034     // Should still behave as plain KActionMenu when actions are added.
0035     menu.addAction(actionA);
0036     QCOMPARE(menu.defaultAction(), &menu);
0037     QCOMPARE(menuButton->defaultAction(), &menu);
0038 
0039     // Set an action from the menu as default action, should work.
0040     menu.setDefaultAction(actionA);
0041     QCOMPARE(menu.defaultAction(), actionA);
0042     QCOMPARE(menuButton->defaultAction(), actionA);
0043 
0044     // Set a foreign action as default action, should reset the default action.
0045     menu.setDefaultAction(actionB);
0046     QCOMPARE(menu.defaultAction(), &menu);
0047     QCOMPARE(menuButton->defaultAction(), &menu);
0048 
0049     // Set an action of the menu as default action, should work.
0050     menu.setDefaultAction(actionA);
0051     QCOMPARE(menu.defaultAction(), actionA);
0052     QCOMPARE(menuButton->defaultAction(), actionA);
0053 
0054     // Remove default action from menu, should reset the default action.
0055     menu.removeAction(actionA);
0056     QCOMPARE(menu.defaultAction(), &menu);
0057     QCOMPARE(menuButton->defaultAction(), &menu);
0058 }
0059 
0060 void ToggleActionMenuTest::testDeleteToolBarButton()
0061 {
0062     QToolBar dummyToolBar;
0063     ToggleActionMenu menu(QStringLiteral("Menu"), this);
0064     QAction *actionA = new QAction(QStringLiteral("A"), this);
0065     QAction *actionB = new QAction(QStringLiteral("B"), this);
0066 
0067     // Setup: set a default action and create two toolbar buttons.
0068     menu.addAction(actionA);
0069     menu.addAction(actionB);
0070     menu.setDefaultAction(actionA);
0071     QToolButton *menuButtonA = qobject_cast<QToolButton *>(menu.createWidget(&dummyToolBar));
0072     QVERIFY(menuButtonA);
0073     QCOMPARE(menuButtonA->defaultAction(), actionA);
0074     QToolButton *menuButtonB = qobject_cast<QToolButton *>(menu.createWidget(&dummyToolBar));
0075     QVERIFY(menuButtonB);
0076 
0077     // Delete button B, and set a new default action. Button A shall be updated without segfaulting on the deleted button B.
0078     delete menuButtonB;
0079     menu.setDefaultAction(actionB);
0080     QCOMPARE(menuButtonA->defaultAction(), actionB);
0081 }
0082 
0083 QTEST_MAIN(ToggleActionMenuTest)
0084 
0085 #include "toggleactionmenutest.moc"