diff options
Diffstat (limited to 'tests/auto/widgets/widgets/qtabbar/tst_qtabbar.cpp')
-rw-r--r-- | tests/auto/widgets/widgets/qtabbar/tst_qtabbar.cpp | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/tests/auto/widgets/widgets/qtabbar/tst_qtabbar.cpp b/tests/auto/widgets/widgets/qtabbar/tst_qtabbar.cpp index 79a963f532..f04f803ecf 100644 --- a/tests/auto/widgets/widgets/qtabbar/tst_qtabbar.cpp +++ b/tests/auto/widgets/widgets/qtabbar/tst_qtabbar.cpp @@ -98,6 +98,9 @@ private slots: void mouseReleaseOutsideTabBar(); + void scrollButtons_data(); + void scrollButtons(); + private: void checkPositions(const TabBar &tabbar, const QList<int> &positions); }; @@ -869,5 +872,71 @@ void tst_QTabBar::checkPositions(const TabBar &tabbar, const QList<int> &positio } } +void tst_QTabBar::scrollButtons_data() +{ + QTest::addColumn<QTabWidget::TabPosition>("tabPosition"); + QTest::addColumn<Qt::LayoutDirection>("layoutDirection"); + + for (auto ld : {Qt::LeftToRight, Qt::RightToLeft}) { + const char *ldStr = ld == Qt::LeftToRight ? "LTR" : "RTL"; + QTest::addRow("North, %s", ldStr) << QTabWidget::North << ld; + QTest::addRow("South, %s", ldStr) << QTabWidget::South << ld; + QTest::addRow("West, %s", ldStr) << QTabWidget::West << ld; + QTest::addRow("East, %s", ldStr) << QTabWidget::East << ld; + } +} + +void tst_QTabBar::scrollButtons() +{ + QFETCH(QTabWidget::TabPosition, tabPosition); + QFETCH(Qt::LayoutDirection, layoutDirection); + + QWidget window; + QTabWidget tabWidget(&window); + tabWidget.setLayoutDirection(layoutDirection); + tabWidget.setTabPosition(tabPosition); + tabWidget.setElideMode(Qt::ElideNone); + tabWidget.setUsesScrollButtons(true); + + const int tabCount = 5; + for (int i = 0; i < tabCount; ++i) + { + const QString num = QString::number(i); + tabWidget.addTab(new QPushButton(num), num + " - Really long tab name to force arrows"); + } + tabWidget.move(0, 0); + tabWidget.resize(tabWidget.minimumSizeHint()); + window.show(); + QVERIFY(QTest::qWaitForWindowActive(&window)); + + auto *leftB = tabWidget.tabBar()->findChild<QAbstractButton*>(QStringLiteral("ScrollLeftButton")); + auto *rightB = tabWidget.tabBar()->findChild<QAbstractButton*>(QStringLiteral("ScrollRightButton")); + + QVERIFY(leftB->isVisible()); + QVERIFY(!leftB->isEnabled()); + QVERIFY(rightB->isVisible()); + QVERIFY(rightB->isEnabled()); + QVERIFY(!tabWidget.tabBar()->tabRect(1).intersects(tabWidget.tabBar()->rect())); + + int index = 0; + for (; index < tabWidget.count(); ++index) { + QCOMPARE(leftB->isEnabled(), index > 0); + QCOMPARE(rightB->isEnabled(), index < tabWidget.count() - 1); + QVERIFY(tabWidget.tabBar()->tabRect(index).intersects(tabWidget.tabBar()->rect())); + QCOMPARE(tabWidget.tabBar()->tabAt(tabWidget.tabBar()->rect().center()), index); + if (rightB->isEnabled()) + rightB->click(); + } + for (--index; index >= 0; --index) { + QCOMPARE(leftB->isEnabled(), index >= 0); + QCOMPARE(rightB->isEnabled(), index < tabWidget.count() - 1); + + QVERIFY(tabWidget.tabBar()->tabRect(index).intersects(tabWidget.tabBar()->rect())); + if (leftB->isEnabled()) + leftB->click(); + } + QVERIFY(!leftB->isEnabled()); +} + QTEST_MAIN(tst_QTabBar) #include "tst_qtabbar.moc" |