diff options
Diffstat (limited to 'tests/auto/qscrollbar/tst_qscrollbar.cpp')
-rw-r--r-- | tests/auto/qscrollbar/tst_qscrollbar.cpp | 147 |
1 files changed, 147 insertions, 0 deletions
diff --git a/tests/auto/qscrollbar/tst_qscrollbar.cpp b/tests/auto/qscrollbar/tst_qscrollbar.cpp new file mode 100644 index 0000000..b22e724 --- /dev/null +++ b/tests/auto/qscrollbar/tst_qscrollbar.cpp @@ -0,0 +1,147 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, 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.0, 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. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $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(50); + 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" |