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"