/* SPDX-FileCopyrightText: 2014 Montel Laurent SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL */ #include "ksplittercollapserbuttontest.h" #include "ksplittercollapserbutton.h" #include #include #include #include #include #include "windowscheck.h" Q_DECLARE_METATYPE(Qt::Orientation) TestSplitter::TestSplitter(QWidget *parent) : QWidget(parent) { QHBoxLayout *lay = new QHBoxLayout(this); splitter = new QSplitter; lay->addWidget(splitter); splitter->setObjectName(QStringLiteral("splitter")); edit1 = new QTextEdit; edit1->setObjectName(QStringLiteral("edit1")); splitter->addWidget(edit1); edit2 = new QTextEdit; edit2->setObjectName(QStringLiteral("edit2")); splitter->addWidget(edit2); } KSplitterCollapserButtonTest::KSplitterCollapserButtonTest(QObject *parent) : QObject(parent) { } KSplitterCollapserButtonTest::~KSplitterCollapserButtonTest() { } void KSplitterCollapserButtonTest::shouldHaveDefaultValue() { if (isWindowsCI()) { QSKIP("GUI Tests on Windows CI are not supported"); } TestSplitter testSplitter; KSplitterCollapserButton *collapser = new KSplitterCollapserButton(testSplitter.edit2, testSplitter.splitter); testSplitter.show(); QVERIFY(QTest::qWaitForWindowExposed(&testSplitter)); QVERIFY(testSplitter.isVisible()); QVERIFY(!collapser->isWidgetCollapsed()); QTextEdit *edit1 = testSplitter.findChild(QStringLiteral("edit1")); QVERIFY(edit1); QTextEdit *edit2 = testSplitter.findChild(QStringLiteral("edit2")); QVERIFY(edit2); QSplitter *splitter = testSplitter.findChild(QStringLiteral("splitter")); QVERIFY(splitter); } void KSplitterCollapserButtonTest::shouldCollapseWhenClickOnButton() { if (isWindowsCI()) { QSKIP("GUI Tests on Windows CI are not supported"); } TestSplitter testSplitter; KSplitterCollapserButton *splitterCollapser = new KSplitterCollapserButton(testSplitter.edit2, testSplitter.splitter); testSplitter.show(); QVERIFY(QTest::qWaitForWindowExposed(&testSplitter)); QVERIFY(!splitterCollapser->isWidgetCollapsed()); QTest::mouseClick(splitterCollapser, Qt::LeftButton); QVERIFY(splitterCollapser->isWidgetCollapsed()); QTest::mouseClick(splitterCollapser, Qt::LeftButton); QVERIFY(!splitterCollapser->isWidgetCollapsed()); } void KSplitterCollapserButtonTest::shouldRestoreCorrectPosition() { if (isWindowsCI()) { QSKIP("GUI Tests on Windows CI are not supported"); } TestSplitter testSplitter; KSplitterCollapserButton *splitterCollapser = new KSplitterCollapserButton(testSplitter.edit2, testSplitter.splitter); testSplitter.show(); QVERIFY(QTest::qWaitForWindowExposed(&testSplitter)); QVERIFY(testSplitter.isVisible()); QVERIFY(!splitterCollapser->isWidgetCollapsed()); QTextEdit *edit2 = testSplitter.findChild(QStringLiteral("edit2")); int size = edit2->width(); QTest::mouseClick(splitterCollapser, Qt::LeftButton); QVERIFY(splitterCollapser->isWidgetCollapsed()); QCOMPARE(edit2->width(), 0); QTest::mouseClick(splitterCollapser, Qt::LeftButton); QVERIFY(!splitterCollapser->isWidgetCollapsed()); QCOMPARE(edit2->width(), size); } void KSplitterCollapserButtonTest::shouldRestoreCorrectPositionForFirstWidget() { if (isWindowsCI()) { QSKIP("GUI Tests on Windows CI are not supported"); } TestSplitter testSplitter; KSplitterCollapserButton *splitterCollapser = new KSplitterCollapserButton(testSplitter.edit1, testSplitter.splitter); testSplitter.show(); QVERIFY(QTest::qWaitForWindowExposed(&testSplitter)); QVERIFY(testSplitter.isVisible()); QVERIFY(!splitterCollapser->isWidgetCollapsed()); QTextEdit *edit1 = testSplitter.findChild(QStringLiteral("edit1")); int size = edit1->width(); QTest::mouseClick(splitterCollapser, Qt::LeftButton); QVERIFY(splitterCollapser->isWidgetCollapsed()); QCOMPARE(edit1->width(), 0); QTest::mouseClick(splitterCollapser, Qt::LeftButton); QVERIFY(!splitterCollapser->isWidgetCollapsed()); QCOMPARE(edit1->width(), size); } void KSplitterCollapserButtonTest::shouldTestVerticalSplitterFirstWidget() { if (isWindowsCI()) { QSKIP("GUI Tests on Windows CI are not supported"); } TestSplitter testSplitter; testSplitter.splitter->setOrientation(Qt::Vertical); KSplitterCollapserButton *splitterCollapser = new KSplitterCollapserButton(testSplitter.edit1, testSplitter.splitter); testSplitter.show(); QVERIFY(QTest::qWaitForWindowExposed(&testSplitter)); QVERIFY(testSplitter.isVisible()); QVERIFY(!splitterCollapser->isWidgetCollapsed()); QTextEdit *edit1 = testSplitter.findChild(QStringLiteral("edit1")); int size = edit1->height(); QTest::mouseClick(splitterCollapser, Qt::LeftButton); QVERIFY(splitterCollapser->isWidgetCollapsed()); QCOMPARE(edit1->height(), 0); QTest::mouseClick(splitterCollapser, Qt::LeftButton); QVERIFY(!splitterCollapser->isWidgetCollapsed()); QCOMPARE(edit1->height(), size); } void KSplitterCollapserButtonTest::shouldTestVerticalSplitterSecondWidget() { if (isWindowsCI()) { QSKIP("GUI Tests on Windows CI are not supported"); } TestSplitter testSplitter; testSplitter.splitter->setOrientation(Qt::Vertical); KSplitterCollapserButton *splitterCollapser = new KSplitterCollapserButton(testSplitter.edit2, testSplitter.splitter); testSplitter.show(); QVERIFY(QTest::qWaitForWindowExposed(&testSplitter)); QVERIFY(testSplitter.isVisible()); QVERIFY(!splitterCollapser->isWidgetCollapsed()); QTextEdit *edit2 = testSplitter.findChild(QStringLiteral("edit2")); int size = edit2->height(); QTest::mouseClick(splitterCollapser, Qt::LeftButton); QVERIFY(splitterCollapser->isWidgetCollapsed()); QCOMPARE(edit2->height(), 0); QTest::mouseClick(splitterCollapser, Qt::LeftButton); QVERIFY(!splitterCollapser->isWidgetCollapsed()); QCOMPARE(edit2->height(), size); } void KSplitterCollapserButtonTest::shouldBeVisible_data() { QTest::addColumn("splitterOrientation"); QTest::addColumn("widgetPosition"); QTest::newRow("Horizontal, first widget") << Qt::Horizontal << 0 /*first widget*/; QTest::newRow("Horizontal, second widget") << Qt::Horizontal << 1 /*second widget*/; QTest::newRow("Vertical, first widget") << Qt::Vertical << 0 /*first widget*/; QTest::newRow("Vertical, first widget") << Qt::Vertical << 1 /*second widget*/; } void KSplitterCollapserButtonTest::shouldBeVisible() { if (isWindowsCI()) { QSKIP("GUI Tests on Windows CI are not supported"); } QFETCH(Qt::Orientation, splitterOrientation); QFETCH(int, widgetPosition); // GIVEN a splitter with two widgets and a collapser button (Horizontal splitter, and apply collapser on first widget) TestSplitter testSplitter; testSplitter.splitter->setOrientation(splitterOrientation); QWidget *widget = (widgetPosition == 0) ? testSplitter.edit1 : testSplitter.edit2; KSplitterCollapserButton *collapser = new KSplitterCollapserButton(widget, testSplitter.splitter); // WHEN showing the splitter testSplitter.show(); QVERIFY(QTest::qWaitForWindowExposed(&testSplitter)); QVERIFY(testSplitter.isVisible()); // THEN the button should be visible QVERIFY(collapser->isVisible()); QVERIFY(collapser->x() > 0); QVERIFY(collapser->y() > 0); } void KSplitterCollapserButtonTest::shouldBeVisibleWhenMovingHandle_data() { QTest::addColumn>("splitterPosition"); QTest::addColumn("expectedVisibility"); QTest::addColumn("splitterOrientation"); QTest::addColumn("widgetPosition"); QTest::newRow("(Horizontal first widget) middle") << (QList() << 1 << 1) << true << Qt::Horizontal << 0; QTest::newRow("(Horizontal first widget) 1/3") << (QList() << 1 << 3) << true << Qt::Horizontal << 0; QTest::newRow("(Horizontal first widget) editor collapsed") << (QList() << 0 << 1) << false << Qt::Horizontal << 0; QTest::newRow("(Horizontal first widget) second editor collapsed") << (QList() << 1 << 0) << true << Qt::Horizontal << 0; QTest::newRow("(Horizontal second widget) middle") << (QList() << 1 << 1) << true << Qt::Horizontal << 1; QTest::newRow("(Horizontal second widget) 1/3") << (QList() << 1 << 3) << true << Qt::Horizontal << 1; QTest::newRow("(Horizontal second widget) editor collapsed") << (QList() << 1 << 0) << true << Qt::Horizontal << 1; QTest::newRow("(Horizontal second widget) first editor collapsed") << (QList() << 0 << 1) << true << Qt::Horizontal << 1; QTest::newRow("(Vertical first widget) middle") << (QList() << 1 << 1) << true << Qt::Vertical << 0; QTest::newRow("(Vertical first widget) 1/3") << (QList() << 1 << 3) << true << Qt::Vertical << 0; QTest::newRow("(Vertical first widget) editor collapsed") << (QList() << 0 << 1) << true << Qt::Vertical << 0; QTest::newRow("(Vertical first widget) second editor collapsed") << (QList() << 1 << 0) << true << Qt::Vertical << 0; QTest::newRow("(Vertical second widget) middle") << (QList() << 1 << 1) << true << Qt::Vertical << 1; QTest::newRow("(Vertical second widget) 1/3") << (QList() << 1 << 3) << true << Qt::Vertical << 1; QTest::newRow("(Vertical second widget) editor collapsed") << (QList() << 1 << 0) << true << Qt::Vertical << 1; QTest::newRow("(Vertical second widget) first editor collapsed") << (QList() << 0 << 1) << false << Qt::Vertical << 1; } void KSplitterCollapserButtonTest::shouldBeVisibleWhenMovingHandle() { if (isWindowsCI()) { QSKIP("GUI Tests on Windows CI are not supported"); } QFETCH(QList, splitterPosition); QFETCH(bool, expectedVisibility); QFETCH(Qt::Orientation, splitterOrientation); QFETCH(int, widgetPosition); // GIVEN a splitter with two widgets and a collapser button (Horizontal splitter, and apply collapser on first widget) TestSplitter testSplitter; testSplitter.splitter->setOrientation(splitterOrientation); QWidget *widget = (widgetPosition == 0) ? testSplitter.edit1 : testSplitter.edit2; KSplitterCollapserButton *collapser = new KSplitterCollapserButton(widget, testSplitter.splitter); // WHEN showing the splitter testSplitter.show(); QVERIFY(QTest::qWaitForWindowExposed(&testSplitter)); QVERIFY(testSplitter.isVisible()); testSplitter.splitter->setSizes(splitterPosition); // THEN the button should be visible QVERIFY(collapser->isVisible()); if (widgetPosition == 0) { QCOMPARE(collapser->x() > 0, expectedVisibility); } else { QCOMPARE(collapser->y() > 0, expectedVisibility); } } QTEST_MAIN(KSplitterCollapserButtonTest) #include "moc_ksplittercollapserbuttontest.cpp"