summaryrefslogtreecommitdiffstats
path: root/tests/auto/widgets/widgets/qtabbar/tst_qtabbar.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/widgets/widgets/qtabbar/tst_qtabbar.cpp')
-rw-r--r--tests/auto/widgets/widgets/qtabbar/tst_qtabbar.cpp115
1 files changed, 101 insertions, 14 deletions
diff --git a/tests/auto/widgets/widgets/qtabbar/tst_qtabbar.cpp b/tests/auto/widgets/widgets/qtabbar/tst_qtabbar.cpp
index 550cca8145..e27600bad2 100644
--- a/tests/auto/widgets/widgets/qtabbar/tst_qtabbar.cpp
+++ b/tests/auto/widgets/widgets/qtabbar/tst_qtabbar.cpp
@@ -33,6 +33,7 @@
#include <qpushbutton.h>
#include <qstyle.h>
+#include <qstyleoption.h>
class tst_QTabBar : public QObject
{
@@ -60,6 +61,10 @@ private slots:
void removeTab_data();
void removeTab();
+ void hideTab_data();
+ void hideTab();
+ void hideAllTabs();
+
void setElideMode_data();
void setElideMode();
void sizeHints();
@@ -244,6 +249,96 @@ void tst_QTabBar::removeTab()
QTEST(tabbar.currentIndex(), "finalIndex");
}
+void tst_QTabBar::hideTab_data()
+{
+ QTest::addColumn<int>("currentIndex");
+ QTest::addColumn<int>("hideIndex");
+ QTest::addColumn<int>("spyCount");
+ QTest::addColumn<int>("finalIndex");
+
+ QTest::newRow("hideEnd") << 0 << 2 << 0 << 0;
+ QTest::newRow("hideEndWithIndexOnEnd") << 2 << 2 << 1 << 1;
+ QTest::newRow("hideMiddle") << 2 << 1 << 0 << 2;
+ QTest::newRow("hideMiddleOnMiddle") << 1 << 1 << 1 << 2;
+ QTest::newRow("hideFirst") << 2 << 0 << 0 << 2;
+ QTest::newRow("hideFirstOnFirst") << 0 << 0 << 1 << 1;
+}
+
+void tst_QTabBar::hideTab()
+{
+ QTabBar tabbar;
+
+ QFETCH(int, currentIndex);
+ QFETCH(int, hideIndex);
+ tabbar.addTab("foo");
+ tabbar.addTab("bar");
+ tabbar.addTab("baz");
+ tabbar.setCurrentIndex(currentIndex);
+ QSignalSpy spy(&tabbar, &QTabBar::currentChanged);
+ tabbar.setTabVisible(hideIndex, false);
+ QTEST(spy.count(), "spyCount");
+ QTEST(tabbar.currentIndex(), "finalIndex");
+}
+
+class TabBar : public QTabBar
+{
+public:
+ using QTabBar::QTabBar;
+ using QTabBar::initStyleOption;
+ using QTabBar::moveTab;
+};
+
+void tst_QTabBar::hideAllTabs()
+{
+ TabBar tabbar;
+ auto checkPositions = [&tabbar](const QVector<int> &positions)
+ {
+ QStyleOptionTab option;
+ int iPos = 0;
+ for (int i = 0; i < tabbar.count(); ++i) {
+ if (!tabbar.isTabVisible(i))
+ continue;
+ tabbar.initStyleOption(&option, i);
+ QCOMPARE(option.position, positions.at(iPos++));
+ }
+ };
+
+ tabbar.addTab("foo");
+ tabbar.addTab("bar");
+ tabbar.addTab("baz");
+ tabbar.setCurrentIndex(0);
+ checkPositions({QStyleOptionTab::Beginning, QStyleOptionTab::Middle, QStyleOptionTab::End});
+
+ // Check we don't crash trying to hide an unexistant tab
+ QSize prevSizeHint = tabbar.sizeHint();
+ tabbar.setTabVisible(3, false);
+ checkPositions({QStyleOptionTab::Beginning, QStyleOptionTab::Middle, QStyleOptionTab::End});
+ QCOMPARE(tabbar.currentIndex(), 0);
+ QSize sizeHint = tabbar.sizeHint();
+ QVERIFY(sizeHint.width() == prevSizeHint.width());
+ prevSizeHint = sizeHint;
+
+ tabbar.setTabVisible(1, false);
+ checkPositions({QStyleOptionTab::Beginning, QStyleOptionTab::End});
+ QCOMPARE(tabbar.currentIndex(), 0);
+ sizeHint = tabbar.sizeHint();
+ QVERIFY(sizeHint.width() < prevSizeHint.width());
+ prevSizeHint = sizeHint;
+
+ tabbar.setTabVisible(2, false);
+ checkPositions({QStyleOptionTab::OnlyOneTab});
+ QCOMPARE(tabbar.currentIndex(), 0);
+ sizeHint = tabbar.sizeHint();
+ QVERIFY(sizeHint.width() < prevSizeHint.width());
+ prevSizeHint = sizeHint;
+
+ tabbar.setTabVisible(0, false);
+ // We cannot set currentIndex < 0
+ QCOMPARE(tabbar.currentIndex(), 0);
+ sizeHint = tabbar.sizeHint();
+ QVERIFY(sizeHint.width() < prevSizeHint.width());
+}
+
void tst_QTabBar::setElideMode_data()
{
QTest::addColumn<int>("tabElideMode");
@@ -500,14 +595,6 @@ void tst_QTabBar::selectionBehaviorOnRemove()
QCOMPARE(tabbar.currentIndex(), expected);
}
-class TabBar : public QTabBar
-{
- Q_OBJECT
-public:
- void callMoveTab(int from, int to){ moveTab(from, to); }
-};
-
-
Q_DECLARE_METATYPE(QTabBar::Shape)
void tst_QTabBar::moveTab_data()
{
@@ -542,7 +629,7 @@ void tst_QTabBar::moveTab()
bar.setShape(shape);
while(--tabs >= 0)
bar.addTab(QString::number(tabs));
- bar.callMoveTab(from, to);
+ bar.moveTab(from, to);
}
@@ -605,7 +692,7 @@ void tst_QTabBar::changeTitleWhileDoubleClickingTab()
QPoint tabPos = bar.tabRect(0).center();
for(int i=0; i < 10; i++)
- QTest::mouseDClick(&bar, Qt::LeftButton, 0, tabPos);
+ QTest::mouseDClick(&bar, Qt::LeftButton, {}, tabPos);
}
class Widget10052 : public QWidget
@@ -655,12 +742,12 @@ void tst_QTabBar::tabBarClicked()
while (button <= Qt::MaxMouseButton) {
const QPoint tabPos = tabBar.tabRect(0).center();
- QTest::mouseClick(&tabBar, button, 0, tabPos);
+ QTest::mouseClick(&tabBar, button, {}, tabPos);
QCOMPARE(clickSpy.count(), 1);
QCOMPARE(clickSpy.takeFirst().takeFirst().toInt(), 0);
QCOMPARE(doubleClickSpy.count(), 0);
- QTest::mouseDClick(&tabBar, button, 0, tabPos);
+ QTest::mouseDClick(&tabBar, button, {}, tabPos);
QCOMPARE(clickSpy.count(), 1);
QCOMPARE(clickSpy.takeFirst().takeFirst().toInt(), 0);
QCOMPARE(doubleClickSpy.count(), 1);
@@ -668,12 +755,12 @@ void tst_QTabBar::tabBarClicked()
const QPoint barPos(tabBar.tabRect(0).right() + 5, tabBar.tabRect(0).center().y());
- QTest::mouseClick(&tabBar, button, 0, barPos);
+ QTest::mouseClick(&tabBar, button, {}, barPos);
QCOMPARE(clickSpy.count(), 1);
QCOMPARE(clickSpy.takeFirst().takeFirst().toInt(), -1);
QCOMPARE(doubleClickSpy.count(), 0);
- QTest::mouseDClick(&tabBar, button, 0, barPos);
+ QTest::mouseDClick(&tabBar, button, {}, barPos);
QCOMPARE(clickSpy.count(), 1);
QCOMPARE(clickSpy.takeFirst().takeFirst().toInt(), -1);
QCOMPARE(doubleClickSpy.count(), 1);