File indexing completed on 2024-04-28 15:31:51

0001 /*
0002     This file is part of the KDE frameworks
0003     SPDX-FileCopyrightText: 2016 Ragnar Thomsen <rthomsen6@gmail.com>
0004 
0005     SPDX-License-Identifier: LGPL-2.1-or-later
0006 */
0007 
0008 #include "kcollapsiblegroupbox_test.h"
0009 
0010 #include <KCollapsibleGroupBox>
0011 
0012 #include <QCheckBox>
0013 #include <QDialog>
0014 #include <QLabel>
0015 #include <QLineEdit>
0016 #include <QTest>
0017 #include <QVBoxLayout>
0018 
0019 QTEST_MAIN(KCollapsibleGroupBoxTest)
0020 
0021 void KCollapsibleGroupBoxTest::testDestructorCrash()
0022 {
0023     // The unittest does not crash the first time,
0024     // so we run it twice.
0025     int i = 0;
0026     while (i != 2) {
0027         QDialog *dlg = new QDialog(nullptr);
0028 
0029         QVBoxLayout *mainvlayout = new QVBoxLayout(dlg);
0030         KCollapsibleGroupBox *collapsible = new KCollapsibleGroupBox(dlg);
0031         collapsible->setTitle(QStringLiteral("A test KCollapsibleGroupBox"));
0032 
0033         QVBoxLayout *collapsiblevlayout = new QVBoxLayout(collapsible);
0034 
0035         QLabel *lbl = new QLabel(QStringLiteral("A test label."), collapsible);
0036         collapsiblevlayout->addWidget(lbl);
0037 
0038         collapsible->expand();
0039 
0040         mainvlayout->addWidget(collapsible);
0041 
0042         connect(dlg, &QDialog::finished, dlg, &QObject::deleteLater);
0043 
0044         dlg->open();
0045 
0046         QVERIFY(collapsible);
0047 
0048         // If waiting for less than ~500ms the test crashes every time.
0049         // Not waiting or waiting for more than ~500ms is ok.
0050         // Using qSleep(400) does NOT provoke the crash.
0051         QTest::qWait(400);
0052 
0053         dlg->accept();
0054 
0055         i++;
0056     }
0057 }
0058 
0059 void KCollapsibleGroupBoxTest::testOverrideFocus()
0060 {
0061     KCollapsibleGroupBox collapsible;
0062     QVBoxLayout layout(&collapsible);
0063 
0064     QCheckBox checkBox;
0065     QCOMPARE(checkBox.focusPolicy(), Qt::StrongFocus);
0066 
0067     layout.addWidget(&checkBox);
0068     // The ChildAdded event is processed asynchronously.
0069     qApp->processEvents();
0070     // Make sure focus policy has been overridden.
0071     collapsible.show();
0072     QVERIFY(checkBox.isVisible());
0073     QCOMPARE(checkBox.focusPolicy(), Qt::NoFocus);
0074 
0075     // Make sure focus policy is restored on expand event.
0076     collapsible.expand();
0077     QVERIFY(checkBox.isVisible());
0078     QCOMPARE(checkBox.focusPolicy(), Qt::StrongFocus);
0079 
0080     // Make sure focus policy is overridden again on next collapse.
0081     collapsible.collapse();
0082     QVERIFY(checkBox.isVisible());
0083     QCOMPARE(checkBox.focusPolicy(), Qt::NoFocus);
0084 }
0085 
0086 void KCollapsibleGroupBoxTest::childShouldGetFocus()
0087 {
0088     KCollapsibleGroupBox collapsible;
0089     auto spinBox = new QLineEdit(&collapsible);
0090     // The ChildAdded event is processed asynchronously.
0091     // This also "simulates" user who manually expands.
0092     qApp->processEvents();
0093     collapsible.expand();
0094     QCOMPARE(spinBox->focusPolicy(), Qt::StrongFocus);
0095 }
0096 
0097 #include "moc_kcollapsiblegroupbox_test.cpp"