diff options
author | Simon Hausmann <simon.hausmann@theqtcompany.com> | 2014-12-10 07:58:06 +0100 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@theqtcompany.com> | 2014-12-10 07:58:06 +0100 |
commit | 015002fec9abff6a4c1bb3fa4b9de87279a079c3 (patch) | |
tree | ad93af535a503d0a49d6c6367e990a8fbca163d3 /tests/auto/widgets | |
parent | f1e00262321cc8daa3c7506153653453e2779886 (diff) | |
parent | b9547af45ea2bbbc634722c1ef41afdb54216ce2 (diff) |
Merge remote-tracking branch 'origin/5.4' into dev
Conflicts:
doc/global/template/style/online.css
mkspecs/android-g++/qmake.conf
Change-Id: Ib39ea7bd42f5ae12e82a3bc59a66787a16bdfc61
Diffstat (limited to 'tests/auto/widgets')
4 files changed, 197 insertions, 17 deletions
diff --git a/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp b/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp index f2a40576f6..f487e256a3 100644 --- a/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp +++ b/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp @@ -180,6 +180,16 @@ public: { doAutoScroll(); } }; +class GeometriesTestView : public QTableView +{ + Q_OBJECT +public: + GeometriesTestView() : QTableView(), updateGeometriesCalled(false) {} + bool updateGeometriesCalled; +protected slots: + void updateGeometries() Q_DECL_OVERRIDE { updateGeometriesCalled = true; QTableView::updateGeometries(); } +}; + class tst_QAbstractItemView : public QObject { Q_OBJECT @@ -241,6 +251,7 @@ private slots: void testFocusPolicy(); void QTBUG31411_noSelection(); void QTBUG39324_settingSameInstanceOfIndexWidget(); + void sizeHintChangeTriggersLayout(); }; class MyAbstractItemDelegate : public QAbstractItemDelegate @@ -248,7 +259,7 @@ class MyAbstractItemDelegate : public QAbstractItemDelegate public: MyAbstractItemDelegate() : QAbstractItemDelegate() { calledVirtualDtor = false; } void paint(QPainter *, const QStyleOptionViewItem &, const QModelIndex &) const {} - QSize sizeHint(const QStyleOptionViewItem &, const QModelIndex &) const { return QSize(); } + QSize sizeHint(const QStyleOptionViewItem &, const QModelIndex &) const { return size; } QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &, const QModelIndex &) const { openedEditor = new QWidget(parent); @@ -259,9 +270,10 @@ public: calledVirtualDtor = true; editor->deleteLater(); } - + void changeSize() { size = QSize(50, 50); emit sizeHintChanged(QModelIndex()); } mutable bool calledVirtualDtor; mutable QWidget *openedEditor; + QSize size; }; // Testing get/set functions @@ -730,6 +742,34 @@ void tst_QAbstractItemView::columnDelegate() QCOMPARE(w->metaObject()->className(), "QWidget"); } +void tst_QAbstractItemView::sizeHintChangeTriggersLayout() +{ + QStandardItemModel model(4, 4); + MyAbstractItemDelegate delegate; + MyAbstractItemDelegate rowDelegate; + MyAbstractItemDelegate columnDelegate; + + GeometriesTestView view; + view.setModel(&model); + view.setItemDelegate(&delegate); + view.setItemDelegateForRow(1, &rowDelegate); + view.setItemDelegateForColumn(2, &columnDelegate); + view.show(); + QVERIFY(QTest::qWaitForWindowExposed(&view)); + view.updateGeometriesCalled = false; + delegate.changeSize(); + QCoreApplication::sendPostedEvents(); + QVERIFY(view.updateGeometriesCalled); + view.updateGeometriesCalled = false; + rowDelegate.changeSize(); + QCoreApplication::sendPostedEvents(); + QVERIFY(view.updateGeometriesCalled); + view.updateGeometriesCalled = false; + columnDelegate.changeSize(); + QCoreApplication::sendPostedEvents(); + QVERIFY(view.updateGeometriesCalled); +} + void tst_QAbstractItemView::selectAll() { QStandardItemModel model(4,4); diff --git a/tests/auto/widgets/kernel/qwindowcontainer/tst_qwindowcontainer.cpp b/tests/auto/widgets/kernel/qwindowcontainer/tst_qwindowcontainer.cpp index 61ec15a135..1be3f8a4ef 100644 --- a/tests/auto/widgets/kernel/qwindowcontainer/tst_qwindowcontainer.cpp +++ b/tests/auto/widgets/kernel/qwindowcontainer/tst_qwindowcontainer.cpp @@ -40,6 +40,8 @@ #include <qdockwidget.h> #include <qmainwindow.h> +#include <qscreen.h> +#include <qscopedpointer.h> class Window : public QWindow @@ -65,6 +67,10 @@ public: class tst_QWindowContainer: public QObject { Q_OBJECT + +public: + tst_QWindowContainer() : m_availableGeometry(QGuiApplication::primaryScreen()->availableGeometry()) {} + private slots: void testShow(); void testPositionAndSize(); @@ -75,14 +81,22 @@ private slots: void testActivation(); void testAncestorChange(); void testDockWidget(); -}; + void cleanup(); +private: + const QRect m_availableGeometry; +}; +void tst_QWindowContainer::cleanup() +{ + QVERIFY(QGuiApplication::topLevelWindows().isEmpty()); +} void tst_QWindowContainer::testShow() { QWidget root; - root.setGeometry(100, 100, 400, 400); + root.setWindowTitle(QTest::currentTestFunction()); + root.setGeometry(m_availableGeometry.x() + 100, m_availableGeometry.y() + 100, 400, 400); Window *window = new Window(); QWidget *container = QWidget::createWindowContainer(window, &root); @@ -99,14 +113,15 @@ void tst_QWindowContainer::testShow() void tst_QWindowContainer::testPositionAndSize() { QWindow *window = new QWindow(); - window->setGeometry(300, 400, 500, 600); + window->setGeometry(m_availableGeometry.x() + 300, m_availableGeometry.y() + 400, 500, 600); - QWidget *container = QWidget::createWindowContainer(window); + QScopedPointer<QWidget> container(QWidget::createWindowContainer(window)); + container->setWindowTitle(QTest::currentTestFunction()); container->setGeometry(50, 50, 200, 200); container->show(); - QVERIFY(QTest::qWaitForWindowExposed(container)); + QVERIFY(QTest::qWaitForWindowExposed(container.data())); QCOMPARE(window->x(), 0); QCOMPARE(window->y(), 0); @@ -120,11 +135,12 @@ void tst_QWindowContainer::testExposeObscure() { Window *window = new Window(); - QWidget *container = QWidget::createWindowContainer(window); - container->setGeometry(50, 50, 200, 200); + QScopedPointer<QWidget> container(QWidget::createWindowContainer(window)); + container->setWindowTitle(QTest::currentTestFunction()); + container->setGeometry(m_availableGeometry.x() + 50, m_availableGeometry.y() + 50, 200, 200); container->show(); - QVERIFY(QTest::qWaitForWindowExposed(container)); + QVERIFY(QTest::qWaitForWindowExposed(container.data())); QVERIFY(QTest::qWaitForWindowExposed(window)); QVERIFY(window->numberOfExposes > 0); @@ -173,12 +189,13 @@ void tst_QWindowContainer::testBehindTheScenesDeletion() void tst_QWindowContainer::testActivation() { QWidget root; + root.setWindowTitle(QTest::currentTestFunction()); QWindow *window = new QWindow(); QWidget *container = QWidget::createWindowContainer(window, &root); container->setGeometry(100, 100, 200, 100); - root.setGeometry(100, 100, 400, 300); + root.setGeometry(m_availableGeometry.x() + 100, m_availableGeometry.y() + 100, 400, 300); root.show(); root.activateWindow(); @@ -212,14 +229,15 @@ void tst_QWindowContainer::testActivation() void tst_QWindowContainer::testUnparenting() { QWindow *window = new QWindow(); - QWidget *container = QWidget::createWindowContainer(window); - container->setGeometry(100, 100, 200, 100); + QScopedPointer<QWidget> container(QWidget::createWindowContainer(window)); + container->setWindowTitle(QTest::currentTestFunction()); + container->setGeometry(m_availableGeometry.x() + 100, m_availableGeometry.y() + 100, 200, 100); window->setParent(0); container->show(); - QVERIFY(QTest::qWaitForWindowExposed(container)); + QVERIFY(QTest::qWaitForWindowExposed(container.data())); // Window should not be made visible by container.. QVERIFY(!window->isVisible()); @@ -228,10 +246,12 @@ void tst_QWindowContainer::testUnparenting() void tst_QWindowContainer::testAncestorChange() { QWidget root; + root.setWindowTitle(QStringLiteral("Root ") + QTest::currentTestFunction()); QWidget *left = new QWidget(&root); QWidget *right = new QWidget(&root); - root.setGeometry(0, 0, 200, 100); + + root.setGeometry(m_availableGeometry.x() + 50, m_availableGeometry.y() + 50, 200, 100); left->setGeometry(0, 0, 100, 100); right->setGeometry(100, 0, 100, 100); @@ -257,6 +277,7 @@ void tst_QWindowContainer::testAncestorChange() QCOMPARE(window->geometry(), QRect(100, 0, 100, 100)); QWidget *newRoot = new QWidget(&root); + newRoot->setWindowTitle(QStringLiteral("newRoot ") + QTest::currentTestFunction()); newRoot->setGeometry(50, 50, 200, 200); right->setParent(newRoot); // Root @@ -270,7 +291,8 @@ void tst_QWindowContainer::testAncestorChange() QCOMPARE(window->geometry(), QRect(100, 0, 100, 100)); newRoot->setParent(0); - newRoot->setGeometry(100, 100, 200, 200); + QScopedPointer<QWidget> newRootGuard(newRoot); + newRoot->setGeometry(m_availableGeometry.x() + 100, m_availableGeometry.y() + 100, 200, 200); newRoot->show(); QVERIFY(QTest::qWaitForWindowExposed(newRoot)); QCOMPARE(newRoot->windowHandle(), window->parent()); @@ -285,9 +307,11 @@ void tst_QWindowContainer::testAncestorChange() void tst_QWindowContainer::testDockWidget() { QMainWindow mainWindow; + mainWindow.setWindowTitle(QTest::currentTestFunction()); mainWindow.resize(200, 200); + mainWindow.move(m_availableGeometry.center() - QPoint(100, 100)); - QDockWidget *dock = new QDockWidget(); + QDockWidget *dock = new QDockWidget(QStringLiteral("Dock ") + QTest::currentTestFunction()); QWindow *window = new QWindow(); QWidget *container = QWidget::createWindowContainer(window); dock->setWidget(container); diff --git a/tests/auto/widgets/widgets/qmainwindow/tst_qmainwindow.cpp b/tests/auto/widgets/widgets/qmainwindow/tst_qmainwindow.cpp index 751a16c59d..15f2f88a8d 100644 --- a/tests/auto/widgets/widgets/qmainwindow/tst_qmainwindow.cpp +++ b/tests/auto/widgets/widgets/qmainwindow/tst_qmainwindow.cpp @@ -46,6 +46,7 @@ #include <qlabel.h> #include <qtextedit.h> #include <qstylehints.h> +#include <qdesktopwidget.h> #include <private/qmainwindowlayout_p.h> #include <private/qdockarealayout_p.h> @@ -132,6 +133,8 @@ private slots: void saveRestore_data(); void statusBar(); #endif + void contentsMargins_data(); + void contentsMargins(); void isSeparator(); #ifndef QTEST_NO_CURSOR void setCursor(); @@ -749,8 +752,41 @@ void tst_QMainWindow::statusBar() QVERIFY(indexOfSb == -1); } } + #endif +void tst_QMainWindow::contentsMargins_data() +{ + QTest::addColumn<int>("contentsMargin"); + QTest::newRow("0") << 0; + QTest::newRow("10") << 10; +} + +void tst_QMainWindow::contentsMargins() +{ + QFETCH(int, contentsMargin); + + QMainWindow mw; + const QRect availGeometry = QApplication::desktop()->availableGeometry(); + mw.menuBar()->addMenu("File"); + mw.setWindowTitle(QLatin1String(QTest::currentTestFunction()) + + QLatin1Char(' ') + QLatin1String(QTest::currentDataTag())); + mw.resize(availGeometry.size() / 4); + mw.move((availGeometry.width() - mw.width()) / 2, + (availGeometry.height() - mw.height()) / 2); + mw.setContentsMargins(contentsMargin, contentsMargin, contentsMargin, contentsMargin); + mw.statusBar()->showMessage("Hello"); + + mw.show(); + QVERIFY(QTest::qWaitForWindowExposed(&mw)); + + QCOMPARE(mw.menuBar()->geometry().left(), contentsMargin); + QCOMPARE(mw.menuBar()->geometry().top(), contentsMargin); + + QCOMPARE(mw.statusBar()->geometry().left(), contentsMargin); + QCOMPARE(mw.statusBar()->geometry().bottom() + 1, mw.height() - contentsMargin); +} + void tst_QMainWindow::centralWidget() { { diff --git a/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp b/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp index f4e2cc174e..7588950b76 100644 --- a/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp +++ b/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp @@ -42,6 +42,8 @@ #include <qdesktopwidget.h> #include <qaction.h> #include <qstyleoption.h> +#include <QVBoxLayout> +#include <QLabel> #include <qscreen.h> #include <qobject.h> @@ -83,6 +85,7 @@ public: private slots: void getSetCheck(); + void cleanup(); void clear(); void removeItemAt(); @@ -126,6 +129,8 @@ private slots: #endif void taskQTBUG11823_crashwithInvisibleActions(); void closeOnSecondClick(); + void cornerWidgets_data(); + void cornerWidgets(); protected slots: void onSimpleActivated( QAction*); @@ -195,6 +200,11 @@ void tst_QMenuBar::onSimpleActivated( QAction* action ) m_simpleActivatedCount++; } +void tst_QMenuBar::cleanup() +{ + QVERIFY(QApplication::topLevelWidgets().isEmpty()); +} + // Create a simple menu bar and connect its actions to onSimpleActivated(). TestMenu tst_QMenuBar::initSimpleMenuBar(QMenuBar *mb) @@ -1325,5 +1335,75 @@ void tst_QMenuBar::closeOnSecondClick() // QTBUG-32807, menu should close on 2nd QTRY_VERIFY(!fileMenu->isVisible()); } +Q_DECLARE_METATYPE(Qt::Corner) + +void tst_QMenuBar::cornerWidgets_data() +{ + QTest::addColumn<Qt::Corner>("corner"); + QTest::newRow("left") << Qt::TopLeftCorner; + QTest::newRow("right") << Qt::TopRightCorner; +} + +static QByteArray msgComparison(int v1, const char *op, int v2) +{ + QString result; + QDebug(&result) << v1 << op << v2 << "failed"; + return result.toLocal8Bit(); +} + +void tst_QMenuBar::cornerWidgets() +{ + enum { cornerWidgetWidth = 100 }; + + QFETCH(Qt::Corner, corner); + +#if defined(Q_OS_OSX) || defined(Q_OS_WINCE) + QSKIP("Test interferes with native menu bars on this platform"); +#endif + + QWidget widget; + const QString dataTag = QLatin1String(QTest::currentDataTag()); + widget.setWindowTitle(QLatin1String(QTest::currentTestFunction()) + dataTag); + QVBoxLayout *layout = new QVBoxLayout(&widget); + QMenuBar *menuBar = new QMenuBar(&widget); + layout->addWidget(menuBar); + QMenu *fileMenu = menuBar->addMenu("File"); + fileMenu->addAction("Quit"); + QMenu *editMenu =menuBar->addMenu("Edit"); + editMenu->addAction("Copy"); + centerOnScreen(&widget); + + QLabel *cornerLabel = new QLabel(dataTag); + cornerLabel->setFixedWidth(cornerWidgetWidth); + menuBar->setCornerWidget(cornerLabel, corner); + QCOMPARE(menuBar->cornerWidget(corner), cornerLabel); + widget.show(); + QVERIFY(QTest::qWaitForWindowExposed(&widget)); + + const QRect fileMenuGeometry = menuBar->actionGeometry(fileMenu->menuAction()); + const QRect editMenuGeometry = menuBar->actionGeometry(editMenu->menuAction()); + const int menuBarWidth = menuBar->width(); + switch (corner) { // QTBUG-36010 , verify corner widget geometry is correct + case Qt::TopLeftCorner: + QVERIFY2(fileMenuGeometry.left() >= cornerWidgetWidth, + msgComparison(fileMenuGeometry.left(), ">=", cornerWidgetWidth)); + QVERIFY2(menuBarWidth - editMenuGeometry.right() < cornerWidgetWidth, + msgComparison(menuBarWidth - editMenuGeometry.right(), "<", cornerWidgetWidth)); + break; + case Qt::TopRightCorner: + QVERIFY2(fileMenuGeometry.left() < cornerWidgetWidth, + msgComparison(fileMenuGeometry.left(), "<", cornerWidgetWidth)); + QVERIFY2(menuBarWidth - editMenuGeometry.right() >= cornerWidgetWidth, + msgComparison(menuBarWidth - editMenuGeometry.right(), ">=", cornerWidgetWidth)); + break; + default: + break; + } + + menuBar->setCornerWidget(0, corner); // Don't crash. + QVERIFY(!menuBar->cornerWidget(corner)); + delete cornerLabel; +} + QTEST_MAIN(tst_QMenuBar) #include "tst_qmenubar.moc" |