diff options
author | Lars Knoll <lars.knoll@nokia.com> | 2009-03-23 09:18:55 (GMT) |
---|---|---|
committer | Simon Hausmann <simon.hausmann@nokia.com> | 2009-03-23 09:18:55 (GMT) |
commit | e5fcad302d86d316390c6b0f62759a067313e8a9 (patch) | |
tree | c2afbf6f1066b6ce261f14341cf6d310e5595bc1 /tests/auto/qscrollarea | |
download | Qt-e5fcad302d86d316390c6b0f62759a067313e8a9.zip Qt-e5fcad302d86d316390c6b0f62759a067313e8a9.tar.gz Qt-e5fcad302d86d316390c6b0f62759a067313e8a9.tar.bz2 |
Long live Qt 4.5!
Diffstat (limited to 'tests/auto/qscrollarea')
-rw-r--r-- | tests/auto/qscrollarea/.gitignore | 1 | ||||
-rw-r--r-- | tests/auto/qscrollarea/qscrollarea.pro | 9 | ||||
-rw-r--r-- | tests/auto/qscrollarea/tst_qscrollarea.cpp | 185 |
3 files changed, 195 insertions, 0 deletions
diff --git a/tests/auto/qscrollarea/.gitignore b/tests/auto/qscrollarea/.gitignore new file mode 100644 index 0000000..aace58e --- /dev/null +++ b/tests/auto/qscrollarea/.gitignore @@ -0,0 +1 @@ +tst_qscrollarea diff --git a/tests/auto/qscrollarea/qscrollarea.pro b/tests/auto/qscrollarea/qscrollarea.pro new file mode 100644 index 0000000..bcb2ff3 --- /dev/null +++ b/tests/auto/qscrollarea/qscrollarea.pro @@ -0,0 +1,9 @@ +############################################################ +# Project file for autotest for file qscrollarea.h +############################################################ + +load(qttest_p4) + +SOURCES += tst_qscrollarea.cpp + + diff --git a/tests/auto/qscrollarea/tst_qscrollarea.cpp b/tests/auto/qscrollarea/tst_qscrollarea.cpp new file mode 100644 index 0000000..764b09c --- /dev/null +++ b/tests/auto/qscrollarea/tst_qscrollarea.cpp @@ -0,0 +1,185 @@ +/**************************************************************************** +** +** 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 <qcoreapplication.h> +#include <qdebug.h> +#include <qscrollarea.h> +#include <qlayout.h> + +//TESTED_CLASS= +//TESTED_FILES= + +class tst_QScrollArea : public QObject +{ +Q_OBJECT + +public: + tst_QScrollArea(); + virtual ~tst_QScrollArea(); + +private slots: + void getSetCheck(); + void ensureMicroFocusVisible_Task_167838(); + void checkHFW_Task_197736(); +}; + +tst_QScrollArea::tst_QScrollArea() +{ +} + +tst_QScrollArea::~tst_QScrollArea() +{ +} + +// Testing get/set functions +void tst_QScrollArea::getSetCheck() +{ + QScrollArea obj1; + // QWidget * QScrollArea::widget() + // void QScrollArea::setWidget(QWidget *) + QWidget *var1 = new QWidget(); + obj1.setWidget(var1); + QCOMPARE(var1, obj1.widget()); + obj1.setWidget((QWidget *)0); + QCOMPARE(var1, obj1.widget()); // Cannot set a 0-widget. Old widget returned + // delete var1; // No delete, since QScrollArea takes ownership + + // bool QScrollArea::widgetResizable() + // void QScrollArea::setWidgetResizable(bool) + obj1.setWidgetResizable(false); + QCOMPARE(false, obj1.widgetResizable()); + obj1.setWidgetResizable(true); + QCOMPARE(true, obj1.widgetResizable()); +} + +class WidgetWithMicroFocus : public QWidget +{ +public: + WidgetWithMicroFocus(QWidget *parent = 0) : QWidget(parent) + { + setBackgroundRole(QPalette::Dark); + } +protected: + QVariant inputMethodQuery(Qt::InputMethodQuery query) const + { + if (query == Qt::ImMicroFocus) + return QRect(width() / 2, height() / 2, 5, 5); + return QWidget::inputMethodQuery(query); + } +// void paintEvent(QPaintEvent *event) +// { +// QPainter painter(this); +// painter.fillRect(rect(), QBrush(Qt::red)); +// } +}; + +void tst_QScrollArea::ensureMicroFocusVisible_Task_167838() +{ + QScrollArea scrollArea; + scrollArea.resize(100, 100); + scrollArea.show(); + QWidget *parent = new QWidget; + parent->setLayout(new QVBoxLayout); + QWidget *child = new WidgetWithMicroFocus; + parent->layout()->addWidget(child); + parent->resize(300, 300); + scrollArea.setWidget(parent); + scrollArea.ensureWidgetVisible(child, 10, 10); + QRect microFocus = child->inputMethodQuery(Qt::ImMicroFocus).toRect(); + QPoint p = child->mapTo(scrollArea.viewport(), microFocus.topLeft()); + microFocus.translate(p - microFocus.topLeft()); + QVERIFY(scrollArea.viewport()->rect().contains(microFocus)); +} + +class HFWWidget : public QWidget +{ + public: + HFWWidget(); + int heightForWidth(int w) const; +}; + +HFWWidget::HFWWidget() + : QWidget() +{ + setMinimumSize(QSize(100,50)); + QSizePolicy s = sizePolicy(); + s.setHeightForWidth(true); + setSizePolicy(s); +} + +int HFWWidget::heightForWidth(int w) const +{ + // Mimic a label - the narrower we are, the taller we have to be + if (w > 0) + return 40000 / w; + else + return 40000; +} + +void tst_QScrollArea::checkHFW_Task_197736() +{ + QScrollArea scrollArea; + HFWWidget *w = new HFWWidget; + scrollArea.resize(200,100); + scrollArea.show(); + scrollArea.setWidgetResizable(true); + scrollArea.setWidget(w); + + // at 200x100px, we expect HFW to be 200px tall, not 100px + QVERIFY(w->height() >= 200); + + // at 200x300px, we expect HFW to be 300px tall (the heightForWidth is a min, not prescribed) + scrollArea.resize(QSize(200, 300)); + QVERIFY(w->height() >= 250); // 50px for a fudge factor (size of frame margins/scrollbars etc) + + // make sure this only happens with widget resizable + scrollArea.setWidgetResizable(false); + scrollArea.resize(QSize(100,100)); + w->resize(QSize(200,200)); + QVERIFY(w->width() == 200); + QVERIFY(w->height() == 200); +} + +QTEST_MAIN(tst_QScrollArea) +#include "tst_qscrollarea.moc" |