1 /*
2     This file is part of the KDE frameworks
3     SPDX-FileCopyrightText: 2014 Aurélien Gâteau <agateau@kde.org>
4 
5     SPDX-License-Identifier: LGPL-2.1-or-later
6 */
7 
8 #include <kcolumnresizertest.h>
9 
10 #include <KColumnResizer>
11 
12 #include "ui_kcolumnresizertest-forms.h"
13 #include "ui_kcolumnresizertest-grid-and-form.h"
14 #include "ui_kcolumnresizertest-grids.h"
15 #include <QTest>
16 
QTEST_MAIN(KColumnResizerTest)17 QTEST_MAIN(KColumnResizerTest)
18 
19 void KColumnResizerTest::test_data()
20 {
21     QTest::addColumn<QWidget *>("parent");
22 
23     QWidget *forms = new QWidget;
24     Ui::KColumnResizerTestForms().setupUi(forms);
25     QTest::newRow("forms") << forms;
26 
27     QWidget *grids = new QWidget;
28     Ui::KColumnResizerTestGrids().setupUi(grids);
29     QTest::newRow("grids") << grids;
30 
31     QWidget *gridAndForm = new QWidget;
32     Ui::KColumnResizerTestGridAndForms().setupUi(gridAndForm);
33     QTest::newRow("grid-and-form") << gridAndForm;
34 }
35 
test()36 void KColumnResizerTest::test()
37 {
38     // This test checks the x coordinate of the widgets from the column
39     // immediately after the resized column, rather than checking the width of
40     // the resized column itself because checking the width of the column cannot
41     // be done the same way for all layout types.
42     QFETCH(QWidget *, parent);
43     QVERIFY(parent);
44 
45     auto layout1 = parent->findChild<QLayout *>(QStringLiteral("layout1"));
46     auto layout2 = parent->findChild<QLayout *>(QStringLiteral("layout2"));
47     auto widget1 = parent->findChild<QWidget *>(QStringLiteral("widget1"));
48     auto widget2 = parent->findChild<QWidget *>(QStringLiteral("widget2"));
49     QVERIFY(layout1);
50     QVERIFY(layout2);
51     QVERIFY(widget1);
52     QVERIFY(widget2);
53 
54     // Show the widget so that geometries are updated
55     parent->show();
56 
57     int widget1x = widget1->x();
58     int widget2x = widget2->x();
59     QVERIFY(widget1x < widget2x);
60 
61     auto resizer = new KColumnResizer(parent);
62     resizer->addWidgetsFromLayout(layout1);
63     resizer->addWidgetsFromLayout(layout2);
64 
65     // Wait for resizer to do the work
66     QCoreApplication::processEvents();
67     // Now wait for the layout change to propagate
68     QCoreApplication::processEvents();
69 
70     QCOMPARE(widget1->x(), widget2x);
71     QCOMPARE(widget2->x(), widget2x);
72 
73     delete parent;
74 }
75