summaryrefslogtreecommitdiffstats
path: root/tests/auto/widgets
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@theqtcompany.com>2014-12-10 07:58:06 +0100
committerSimon Hausmann <simon.hausmann@theqtcompany.com>2014-12-10 07:58:06 +0100
commit015002fec9abff6a4c1bb3fa4b9de87279a079c3 (patch)
treead93af535a503d0a49d6c6367e990a8fbca163d3 /tests/auto/widgets
parentf1e00262321cc8daa3c7506153653453e2779886 (diff)
parentb9547af45ea2bbbc634722c1ef41afdb54216ce2 (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')
-rw-r--r--tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp44
-rw-r--r--tests/auto/widgets/kernel/qwindowcontainer/tst_qwindowcontainer.cpp54
-rw-r--r--tests/auto/widgets/widgets/qmainwindow/tst_qmainwindow.cpp36
-rw-r--r--tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp80
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"