summaryrefslogtreecommitdiffstats
path: root/tests/auto/widgets
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@theqtcompany.com>2015-11-04 20:18:14 +0100
committerLiang Qi <liang.qi@theqtcompany.com>2015-11-04 20:18:14 +0100
commit4159ee840549df11287294f0928e90f35f3e06ff (patch)
tree4a3947e37d54bdb78b4042e9ced20dbf181b5a2c /tests/auto/widgets
parent59dbf1786f22ec4ac88d8f9d38cac5cfb82acaea (diff)
parentc8c39ecc37c156ac2677de09a26548dfc274b564 (diff)
Merge remote-tracking branch 'origin/5.6' into dev
Conflicts: config.tests/unix/ptrsize.test configure src/corelib/global/qnamespace.h src/network/socket/qabstractsocket.cpp tests/auto/other/networkselftest/networkselftest.pro Change-Id: Ic78abb4a34f9068567cea876861d4220f5a07672
Diffstat (limited to 'tests/auto/widgets')
-rw-r--r--tests/auto/widgets/dialogs/qdialog/tst_qdialog.cpp33
-rw-r--r--tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp38
-rw-r--r--tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp3
-rw-r--r--tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp19
-rw-r--r--tests/auto/widgets/styles/qstyleoption/tst_qstyleoption.cpp16
-rw-r--r--tests/auto/widgets/styles/qstylesheetstyle/tst_qstylesheetstyle.cpp4
-rw-r--r--tests/auto/widgets/widgets/qdockwidget/tst_qdockwidget.cpp40
-rw-r--r--tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp58
-rw-r--r--tests/auto/widgets/widgets/qprogressbar/tst_qprogressbar.cpp2
9 files changed, 163 insertions, 50 deletions
diff --git a/tests/auto/widgets/dialogs/qdialog/tst_qdialog.cpp b/tests/auto/widgets/dialogs/qdialog/tst_qdialog.cpp
index 2982d80477..d5769554be 100644
--- a/tests/auto/widgets/dialogs/qdialog/tst_qdialog.cpp
+++ b/tests/auto/widgets/dialogs/qdialog/tst_qdialog.cpp
@@ -42,6 +42,8 @@
#include <QVBoxLayout>
#include <QSizeGrip>
#include <QDesktopWidget>
+#include <QGraphicsProxyWidget>
+#include <QGraphicsView>
#include <QWindow>
#include <private/qguiapplication_p.h>
#include <qpa/qplatformtheme.h>
@@ -80,6 +82,7 @@ private slots:
void snapToDefaultButton();
void transientParent_data();
void transientParent();
+ void dialogInGraphicsView();
private:
QDialog *testWidget;
@@ -118,9 +121,11 @@ public:
class ToolDialog : public QDialog
{
public:
- ToolDialog(QWidget *parent = 0) : QDialog(parent, Qt::Tool), mWasActive(false), tId(-1) {
- }
+ ToolDialog(QWidget *parent = 0)
+ : QDialog(parent, Qt::Tool), mWasActive(false), mWasModalWindow(false), tId(-1) {}
+
bool wasActive() const { return mWasActive; }
+ bool wasModalWindow() const { return mWasModalWindow; }
int exec() {
tId = startTimer(300);
@@ -131,12 +136,14 @@ protected:
if (tId == event->timerId()) {
killTimer(tId);
mWasActive = isActiveWindow();
+ mWasModalWindow = QGuiApplication::modalWindow() == windowHandle();
reject();
}
}
private:
int mWasActive;
+ bool mWasModalWindow;
int tId;
};
@@ -616,5 +623,27 @@ void tst_QDialog::transientParent()
QCOMPARE(dialog.windowHandle()->transientParent(), topLevel.windowHandle());
}
+void tst_QDialog::dialogInGraphicsView()
+{
+ // QTBUG-49124: A dialog embedded into QGraphicsView has Qt::WA_DontShowOnScreen
+ // set (as has a native dialog). It must not trigger the modal handling though
+ // as not to lock up.
+ QGraphicsScene scene;
+ QGraphicsView view(&scene);
+ view.setWindowTitle(QTest::currentTestFunction());
+ const QRect availableGeometry = QGuiApplication::primaryScreen()->availableGeometry();
+ view.resize(availableGeometry.size() / 2);
+ view.move(availableGeometry.left() + availableGeometry.width() / 4,
+ availableGeometry.top() + availableGeometry.height() / 4);
+ ToolDialog *dialog = new ToolDialog;
+ scene.addWidget(dialog);
+ view.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&view));
+ for (int i = 0; i < 3; ++i) {
+ dialog->exec();
+ QVERIFY(!dialog->wasModalWindow());
+ }
+}
+
QTEST_MAIN(tst_QDialog)
#include "tst_qdialog.moc"
diff --git a/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp b/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp
index 25a154e2a1..5e6d4120b3 100644
--- a/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp
+++ b/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp
@@ -250,6 +250,7 @@ private slots:
void QTBUG39324_settingSameInstanceOfIndexWidget();
void sizeHintChangeTriggersLayout();
void shiftSelectionAfterChangingModelContents();
+ void QTBUG48968_reentrant_updateEditorGeometries();
};
class MyAbstractItemDelegate : public QAbstractItemDelegate
@@ -1990,5 +1991,42 @@ void tst_QAbstractItemView::shiftSelectionAfterChangingModelContents()
QVERIFY(selected.contains(indexE));
}
+void tst_QAbstractItemView::QTBUG48968_reentrant_updateEditorGeometries()
+{
+
+ QStandardItemModel *m = new QStandardItemModel(this);
+ for (int i=0; i<10; ++i) {
+ QStandardItem *item = new QStandardItem(QString("Item number %1").arg(i));
+ item->setEditable(true);
+ for (int j=0; j<5; ++j) {
+ QStandardItem *child = new QStandardItem(QString("Child Item number %1").arg(j));
+ item->setChild(j, 0, child);
+ }
+ m->setItem(i, 0, item);
+ }
+
+ QTreeView tree;
+ tree.setModel(m);
+ tree.setRootIsDecorated(false);
+ QObject::connect(&tree, SIGNAL(doubleClicked(QModelIndex)), &tree, SLOT(setRootIndex(QModelIndex)));
+ tree.show();
+ QTest::qWaitForWindowActive(&tree);
+
+ // Trigger editing idx
+ QModelIndex idx = m->index(1, 0);
+ const QPoint pos = tree.visualRect(idx).center();
+ QTest::mouseClick(tree.viewport(), Qt::LeftButton, Qt::NoModifier, pos);
+ QTest::mouseDClick(tree.viewport(), Qt::LeftButton, Qt::NoModifier, pos);
+
+ // Add more children to idx
+ QStandardItem *item = m->itemFromIndex(idx);
+ for (int j=5; j<10; ++j) {
+ QStandardItem *child = new QStandardItem(QString("Child Item number %1").arg(j));
+ item->setChild(j, 0, child);
+ }
+
+ // No crash, all fine.
+}
+
QTEST_MAIN(tst_QAbstractItemView)
#include "tst_qabstractitemview.moc"
diff --git a/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp b/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp
index 50309ecd84..6d811ff4e1 100644
--- a/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp
+++ b/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp
@@ -2017,8 +2017,7 @@ void tst_QListView::styleOptionViewItem()
public:
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
- QVERIFY(qstyleoption_cast<const QStyleOptionViewItemV4 *>(&option));
- QStyleOptionViewItemV4 opt(option);
+ QStyleOptionViewItem opt(option);
initStyleOption(&opt, index);
QCOMPARE(opt.index, index);
diff --git a/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp b/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp
index bdbd4e9941..dec6a66a7f 100644
--- a/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp
+++ b/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp
@@ -3082,7 +3082,7 @@ void tst_QTreeView::styleOptionViewItem()
{
class MyDelegate : public QStyledItemDelegate
{
- static QString posToString(QStyleOptionViewItemV4::ViewItemPosition pos) {
+ static QString posToString(QStyleOptionViewItem::ViewItemPosition pos) {
static const char* s_pos[] = { "Invalid", "Beginning", "Middle", "End", "OnlyOne" };
return s_pos[pos];
}
@@ -3095,8 +3095,7 @@ void tst_QTreeView::styleOptionViewItem()
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index ) const
{
- QVERIFY(qstyleoption_cast<const QStyleOptionViewItemV4 *>(&option));
- QStyleOptionViewItemV4 opt(option);
+ QStyleOptionViewItem opt(option);
initStyleOption(&opt, index);
QVERIFY(!opt.text.isEmpty());
@@ -3104,20 +3103,20 @@ void tst_QTreeView::styleOptionViewItem()
//qDebug() << index << opt.text;
if (allCollapsed)
- QCOMPARE(!(opt.features & QStyleOptionViewItemV2::Alternate), !(index.row() % 2));
- QCOMPARE(!(opt.features & QStyleOptionViewItemV2::HasCheckIndicator), !opt.text.contains("Checkable"));
+ QCOMPARE(!(opt.features & QStyleOptionViewItem::Alternate), !(index.row() % 2));
+ QCOMPARE(!(opt.features & QStyleOptionViewItem::HasCheckIndicator), !opt.text.contains("Checkable"));
if (opt.text.contains("Beginning"))
- QCOMPARE(posToString(opt.viewItemPosition), posToString(QStyleOptionViewItemV4::Beginning));
+ QCOMPARE(posToString(opt.viewItemPosition), posToString(QStyleOptionViewItem::Beginning));
if (opt.text.contains("Middle"))
- QCOMPARE(posToString(opt.viewItemPosition), posToString(QStyleOptionViewItemV4::Middle));
+ QCOMPARE(posToString(opt.viewItemPosition), posToString(QStyleOptionViewItem::Middle));
if (opt.text.contains("End"))
- QCOMPARE(posToString(opt.viewItemPosition), posToString(QStyleOptionViewItemV4::End));
+ QCOMPARE(posToString(opt.viewItemPosition), posToString(QStyleOptionViewItem::End));
if (opt.text.contains("OnlyOne"))
- QCOMPARE(posToString(opt.viewItemPosition), posToString(QStyleOptionViewItemV4::OnlyOne));
+ QCOMPARE(posToString(opt.viewItemPosition), posToString(QStyleOptionViewItem::OnlyOne));
if (opt.text.contains("Checked"))
QCOMPARE(opt.checkState, Qt::Checked);
@@ -4206,7 +4205,7 @@ void tst_QTreeView::taskQTBUG_25333_adjustViewOptionsForIndex()
#ifdef QT_BUILD_INTERNAL
{
- QStyleOptionViewItemV4 option;
+ QStyleOptionViewItem option;
view.aiv_priv()->adjustViewOptionsForIndex(&option, model.indexFromItem(item1));
diff --git a/tests/auto/widgets/styles/qstyleoption/tst_qstyleoption.cpp b/tests/auto/widgets/styles/qstyleoption/tst_qstyleoption.cpp
index 3c1d4c589b..2e26ba609b 100644
--- a/tests/auto/widgets/styles/qstyleoption/tst_qstyleoption.cpp
+++ b/tests/auto/widgets/styles/qstyleoption/tst_qstyleoption.cpp
@@ -43,7 +43,6 @@ class tst_QStyleOption: public QObject
private slots:
void qstyleoptioncast_data();
void qstyleoptioncast();
- void copyconstructors();
};
// Just a simple container for QStyleOption-pointer
@@ -133,21 +132,6 @@ void tst_QStyleOption::qstyleoptioncast()
delete testOption;
}
-void tst_QStyleOption::copyconstructors()
-{
- QStyleOptionFrame frame;
- QStyleOptionFrameV2 frame2(frame);
- QCOMPARE(frame2.version, int(QStyleOptionFrameV2::Version));
- frame2 = frame;
- QCOMPARE(frame2.version, int(QStyleOptionFrameV2::Version));
-
- QStyleOptionProgressBar bar;
- QStyleOptionProgressBarV2 bar2(bar);
- QCOMPARE(bar2.version, int(QStyleOptionProgressBarV2::Version));
- bar2 = bar;
- QCOMPARE(bar2.version, int(QStyleOptionProgressBarV2::Version));
-}
-
QTEST_MAIN(tst_QStyleOption)
#include "tst_qstyleoption.moc"
diff --git a/tests/auto/widgets/styles/qstylesheetstyle/tst_qstylesheetstyle.cpp b/tests/auto/widgets/styles/qstylesheetstyle/tst_qstylesheetstyle.cpp
index 5372714b6b..3d42ee98a8 100644
--- a/tests/auto/widgets/styles/qstylesheetstyle/tst_qstylesheetstyle.cpp
+++ b/tests/auto/widgets/styles/qstylesheetstyle/tst_qstylesheetstyle.cpp
@@ -1369,9 +1369,9 @@ void tst_QStyleSheetStyle::proxyStyle()
QTest::qWait(100);
// Test for QTBUG-7198 - style sheet overrides custom element size
- QStyleOptionViewItemV4 opt;
+ QStyleOptionViewItem opt;
opt.initFrom(w);
- opt.features |= QStyleOptionViewItemV2::HasCheckIndicator;
+ opt.features |= QStyleOptionViewItem::HasCheckIndicator;
QVERIFY(pb5->style()->subElementRect(QStyle::SE_ItemViewItemCheckIndicator,
&opt, pb5).width() == 3);
delete w;
diff --git a/tests/auto/widgets/widgets/qdockwidget/tst_qdockwidget.cpp b/tests/auto/widgets/widgets/qdockwidget/tst_qdockwidget.cpp
index 82832bced1..70df31ed69 100644
--- a/tests/auto/widgets/widgets/qdockwidget/tst_qdockwidget.cpp
+++ b/tests/auto/widgets/widgets/qdockwidget/tst_qdockwidget.cpp
@@ -40,6 +40,7 @@
#include <qdockwidget.h>
#include <qmainwindow.h>
#include <qlineedit.h>
+#include <qtabbar.h>
#include <QDesktopWidget>
#include <QtGui/QPainter>
#include "private/qdockwidget_p.h"
@@ -68,6 +69,7 @@ private slots:
void allowedAreas();
void toggleViewAction();
void visibilityChanged();
+ void updateTabBarOnVisibilityChanged();
void dockLocationChanged();
void setTitleBarWidget();
void titleBarDoubleClick();
@@ -586,6 +588,44 @@ void tst_QDockWidget::visibilityChanged()
QCOMPARE(spy.at(0).at(0).toBool(), true);
}
+void tst_QDockWidget::updateTabBarOnVisibilityChanged()
+{
+ // QTBUG49045: Populate tabified dock area with 4 widgets, set the tab
+ // index to 2 (dw2), hide dw0, dw1 and check that the tab index is 0 (dw3).
+ QMainWindow mw;
+ mw.setMinimumSize(400, 400);
+ mw.setWindowTitle(QTest::currentTestFunction());
+ QDockWidget *dw0 = new QDockWidget("d1", &mw);
+ dw0->setAllowedAreas(Qt::LeftDockWidgetArea);
+ mw.addDockWidget(Qt::LeftDockWidgetArea, dw0);
+ QDockWidget *dw1 = new QDockWidget("d2", &mw);
+ dw1->setAllowedAreas(Qt::LeftDockWidgetArea);
+ mw.addDockWidget(Qt::LeftDockWidgetArea, dw1);
+ QDockWidget *dw2 = new QDockWidget("d3", &mw);
+ dw2->setAllowedAreas(Qt::LeftDockWidgetArea);
+ mw.addDockWidget(Qt::LeftDockWidgetArea, dw2);
+ QDockWidget *dw3 = new QDockWidget("d4", &mw);
+ dw3->setAllowedAreas(Qt::LeftDockWidgetArea);
+ mw.addDockWidget(Qt::LeftDockWidgetArea, dw3);
+ mw.tabifyDockWidget(dw0, dw1);
+ mw.tabifyDockWidget(dw1, dw2);
+ mw.tabifyDockWidget(dw2, dw3);
+
+ QTabBar *tabBar = mw.findChild<QTabBar *>();
+ QVERIFY(tabBar);
+ tabBar->setCurrentIndex(2);
+
+ mw.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&mw));
+
+ QCOMPARE(tabBar->currentIndex(), 2);
+
+ dw0->hide();
+ dw1->hide();
+ QTRY_COMPARE(tabBar->count(), 2);
+ QCOMPARE(tabBar->currentIndex(), 0);
+}
+
Q_DECLARE_METATYPE(Qt::DockWidgetArea)
void tst_QDockWidget::dockLocationChanged()
diff --git a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp
index f936670d9e..ba700ed58d 100644
--- a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp
+++ b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp
@@ -4326,10 +4326,10 @@ void tst_QLineEdit::clearButtonVisibleAfterSettingText_QTBUG_45518()
#endif // QT_BUILD_INTERNAL
}
-static inline QIcon sideWidgetTestIcon()
+static inline QIcon sideWidgetTestIcon(Qt::GlobalColor color = Qt::yellow)
{
QImage image(QSize(20, 20), QImage::Format_ARGB32);
- image.fill(Qt::yellow);
+ image.fill(color);
return QIcon(QPixmap::fromImage(image));
}
@@ -4367,6 +4367,15 @@ void tst_QLineEdit::sideWidgets()
lineEdit->addAction(iconAction);
}
+template <class T> T *findAssociatedWidget(const QAction *a)
+{
+ foreach (QWidget *w, a->associatedWidgets()) {
+ if (T *result = qobject_cast<T *>(w))
+ return result;
+ }
+ return Q_NULLPTR;
+}
+
void tst_QLineEdit::sideWidgetsActionEvents()
{
// QTBUG-39660, verify whether action events are handled by the widget.
@@ -4375,28 +4384,43 @@ void tst_QLineEdit::sideWidgetsActionEvents()
QLineEdit *lineEdit = new QLineEdit(&testWidget);
l->addWidget(lineEdit);
l->addSpacerItem(new QSpacerItem(0, 50, QSizePolicy::Ignored, QSizePolicy::Fixed));
- QAction *iconAction = lineEdit->addAction(sideWidgetTestIcon(), QLineEdit::LeadingPosition);
+ QAction *iconAction1 = lineEdit->addAction(sideWidgetTestIcon(Qt::red), QLineEdit::LeadingPosition);
+ QAction *iconAction2 = lineEdit->addAction(sideWidgetTestIcon(Qt::blue), QLineEdit::LeadingPosition);
+ QAction *iconAction3 = lineEdit->addAction(sideWidgetTestIcon(Qt::yellow), QLineEdit::LeadingPosition);
+ iconAction3->setVisible(false);
+
testWidget.move(300, 300);
testWidget.show();
QVERIFY(QTest::qWaitForWindowExposed(&testWidget));
- QWidget *toolButton = Q_NULLPTR;
- foreach (QWidget *w, iconAction->associatedWidgets()) {
- if (qobject_cast<QToolButton *>(w)) {
- toolButton = w;
- break;
- }
- }
- QVERIFY(toolButton);
+ QWidget *toolButton1 = findAssociatedWidget<QToolButton>(iconAction1);
+ QWidget *toolButton2 = findAssociatedWidget<QToolButton>(iconAction2);
+ QWidget *toolButton3 = findAssociatedWidget<QToolButton>(iconAction3);
+
+ QVERIFY(toolButton1);
+ QVERIFY(toolButton2);
+ QVERIFY(toolButton3);
+
+ QVERIFY(!toolButton3->isVisible()); // QTBUG-48899 , action hidden before show().
+
+ QVERIFY(toolButton1->isVisible());
+ QVERIFY(toolButton1->isEnabled());
+
+ QVERIFY(toolButton2->isVisible());
+ QVERIFY(toolButton2->isEnabled());
+
+ const int toolButton1X = toolButton1->x();
+ const int toolButton2X = toolButton2->x();
+ QVERIFY(toolButton1X < toolButton2X); // QTBUG-48806, positioned beside each other.
- QVERIFY(toolButton->isVisible());
- QVERIFY(toolButton->isEnabled());
+ iconAction1->setEnabled(false);
+ QVERIFY(!toolButton1->isEnabled());
- iconAction->setEnabled(false);
- QVERIFY(!toolButton->isEnabled());
+ iconAction1->setVisible(false);
+ QVERIFY(!toolButton1->isVisible());
- iconAction->setVisible(false);
- QVERIFY(!toolButton->isVisible());
+ // QTBUG-39660, button 2 takes position of invisible button 1.
+ QCOMPARE(toolButton2->x(), toolButton1X);
}
Q_DECLARE_METATYPE(Qt::AlignmentFlag)
diff --git a/tests/auto/widgets/widgets/qprogressbar/tst_qprogressbar.cpp b/tests/auto/widgets/widgets/qprogressbar/tst_qprogressbar.cpp
index 4a5f9d535b..5455ebb830 100644
--- a/tests/auto/widgets/widgets/qprogressbar/tst_qprogressbar.cpp
+++ b/tests/auto/widgets/widgets/qprogressbar/tst_qprogressbar.cpp
@@ -267,7 +267,7 @@ void tst_QProgressBar::sizeHint()
//test if the sizeHint is big enough
QFontMetrics fm = bar.fontMetrics();
- QStyleOptionProgressBarV2 opt;
+ QStyleOptionProgressBar opt;
bar.initStyleOption(&opt);
QSize size = QSize(9 * 7 + fm.width(QLatin1Char('0')) * 4, fm.height() + 8);
size= bar.style()->sizeFromContents(QStyle::CT_ProgressBar, &opt, size, &bar);