diff options
Diffstat (limited to 'tests/auto/widgets/widgets/qscrollbar')
-rw-r--r-- | tests/auto/widgets/widgets/qscrollbar/.gitignore | 1 | ||||
-rw-r--r-- | tests/auto/widgets/widgets/qscrollbar/qscrollbar.pro | 6 | ||||
-rw-r--r-- | tests/auto/widgets/widgets/qscrollbar/tst_qscrollbar.cpp | 147 |
3 files changed, 154 insertions, 0 deletions
diff --git a/tests/auto/widgets/widgets/qscrollbar/.gitignore b/tests/auto/widgets/widgets/qscrollbar/.gitignore new file mode 100644 index 0000000000..ae4ffe1e02 --- /dev/null +++ b/tests/auto/widgets/widgets/qscrollbar/.gitignore @@ -0,0 +1 @@ +tst_qscrollbar diff --git a/tests/auto/widgets/widgets/qscrollbar/qscrollbar.pro b/tests/auto/widgets/widgets/qscrollbar/qscrollbar.pro new file mode 100644 index 0000000000..262855452f --- /dev/null +++ b/tests/auto/widgets/widgets/qscrollbar/qscrollbar.pro @@ -0,0 +1,6 @@ +load(qttest_p4) +QT += widgets +SOURCES += tst_qscrollbar.cpp + +mac*:CONFIG+=insignificant_test +CONFIG += insignificant_test # QTBUG-21402 diff --git a/tests/auto/widgets/widgets/qscrollbar/tst_qscrollbar.cpp b/tests/auto/widgets/widgets/qscrollbar/tst_qscrollbar.cpp new file mode 100644 index 0000000000..c4b64f3f1e --- /dev/null +++ b/tests/auto/widgets/widgets/qscrollbar/tst_qscrollbar.cpp @@ -0,0 +1,147 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +#include <QtTest/QtTest> +#include <QScrollBar> +#include <QStyleOptionSlider> +#include <QScrollArea> + +class tst_QScrollBar : public QObject +{ + Q_OBJECT +public slots: + void initTestCase(); + void cleanupTestCase(); + void hideAndShow(int action); + +private slots: + void scrollSingleStep(); + void task_209492(); + +private: + QScrollBar *testWidget; +}; + +void tst_QScrollBar::initTestCase() +{ + testWidget = new QScrollBar(Qt::Horizontal); + testWidget->resize(100, testWidget->height()); + testWidget->show(); +} + +void tst_QScrollBar::cleanupTestCase() +{ + delete testWidget; + testWidget = 0; +} + +void tst_QScrollBar::hideAndShow(int) +{ + testWidget->hide(); + testWidget->show(); +} + +// Check that the scrollbar doesn't scroll after calling hide and show +// from a slot connected to the scrollbar's actionTriggered signal. +void tst_QScrollBar::scrollSingleStep() +{ + testWidget->setValue(testWidget->minimum()); + QCOMPARE(testWidget->value(), testWidget->minimum()); + connect(testWidget, SIGNAL(actionTriggered(int)), this, SLOT(hideAndShow(int))); + + // Get rect for the area to click on + const QStyleOptionSlider opt = qt_qscrollbarStyleOption(testWidget); + QRect sr = testWidget->style()->subControlRect(QStyle::CC_ScrollBar, &opt, + QStyle::SC_ScrollBarAddLine, testWidget); + + if (!sr.isValid()) + QSKIP("SC_ScrollBarAddLine not valid", SkipAll); + + QTest::mouseClick(testWidget, Qt::LeftButton, Qt::NoModifier, QPoint(sr.x(), sr.y())); + QTest::qWait(510); // initial delay is 500 for setRepeatAction + disconnect(testWidget, SIGNAL(actionTriggered(int)), 0, 0); + QCOMPARE(testWidget->value(), testWidget->singleStep()); +} + +void tst_QScrollBar::task_209492() +{ + class MyScrollArea : public QScrollArea + { + public: + int scrollCount; + MyScrollArea(QWidget *parent = 0) : QScrollArea(parent), scrollCount(0) {} + protected: + void paintEvent(QPaintEvent *) { QTest::qSleep(600); } + void scrollContentsBy(int, int) { ++scrollCount; viewport()->update(); } + }; + + MyScrollArea scrollArea; + QScrollBar *verticalScrollBar = scrollArea.verticalScrollBar(); + verticalScrollBar->setRange(0, 1000); + scrollArea.show(); + QTest::qWait(300); + + QSignalSpy spy(verticalScrollBar, SIGNAL(actionTriggered(int))); + QCOMPARE(scrollArea.scrollCount, 0); + QCOMPARE(spy.count(), 0); + + // Simulate a mouse click on the "scroll down button". + const QPoint pressPoint(verticalScrollBar->width() / 2, verticalScrollBar->height() - 10); + const QPoint globalPressPoint = verticalScrollBar->mapToGlobal(globalPressPoint); + QMouseEvent mousePressEvent(QEvent::MouseButtonPress, pressPoint, globalPressPoint, + Qt::LeftButton, Qt::LeftButton, 0); + QApplication::sendEvent(verticalScrollBar, &mousePressEvent); + QTest::qWait(1); + QMouseEvent mouseReleaseEvent(QEvent::MouseButtonRelease, pressPoint, globalPressPoint, + Qt::LeftButton, Qt::LeftButton, 0); + QApplication::sendEvent(verticalScrollBar, &mouseReleaseEvent); + + // Check that the action was triggered once. +#ifdef Q_WS_MAC + QEXPECT_FAIL("", "Fix does does not work on Mac due to paint architechure differences.", Abort); +#endif + QCOMPARE(scrollArea.scrollCount, 1); + QCOMPARE(spy.count(), 1); +} + +QTEST_MAIN(tst_QScrollBar) +#include "tst_qscrollbar.moc" |