summaryrefslogtreecommitdiffstats
path: root/tests/auto/widgets
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2017-09-26 16:08:55 +0200
committerLiang Qi <liang.qi@qt.io>2017-09-26 16:14:54 +0200
commitaadfe7d634de04519102c5827ca885dc2e2199c9 (patch)
treed92db346ca95332b177036a53f1f6beb2e24fb74 /tests/auto/widgets
parent4b6c1448047362b8c38d265e6414f0e3e59b8d37 (diff)
parenta732e16d5fd9dbf8a0289fec9f948b12e9ba2c19 (diff)
Merge remote-tracking branch 'origin/5.10' into dev
Conflicts: src/gui/kernel/qguiapplication.cpp src/platformsupport/input/libinput/qlibinputpointer.cpp src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.h src/plugins/platforms/cocoa/qcocoawindow.h src/testlib/qtestsystem.h Change-Id: I5975ffb3261c2dd82fe02ec4e57df7c0950226c5
Diffstat (limited to 'tests/auto/widgets')
-rw-r--r--tests/auto/widgets/dialogs/qdialog/tst_qdialog.cpp16
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsscene/BLACKLIST2
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsview/BLACKLIST2
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp48
-rw-r--r--tests/auto/widgets/itemviews/qitemdelegate/BLACKLIST2
-rw-r--r--tests/auto/widgets/kernel/qwidget/BLACKLIST1
-rw-r--r--tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp216
-rw-r--r--tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp6
8 files changed, 195 insertions, 98 deletions
diff --git a/tests/auto/widgets/dialogs/qdialog/tst_qdialog.cpp b/tests/auto/widgets/dialogs/qdialog/tst_qdialog.cpp
index d3bc83fe6d..d704d212dd 100644
--- a/tests/auto/widgets/dialogs/qdialog/tst_qdialog.cpp
+++ b/tests/auto/widgets/dialogs/qdialog/tst_qdialog.cpp
@@ -73,7 +73,7 @@ private slots:
void toolDialogPosition();
void deleteMainDefault();
void deleteInExec();
-#ifndef QT_NO_SIZEGRIP
+#if QT_CONFIG(sizegrip)
void showSizeGrip();
#endif
void setVisible();
@@ -235,7 +235,7 @@ void tst_QDialog::showMaximized()
{
QDialog dialog(0);
dialog.setSizeGripEnabled(true);
-#ifndef QT_NO_SIZEGRIP
+#if QT_CONFIG(sizegrip)
QSizeGrip *sizeGrip = dialog.findChild<QSizeGrip *>();
QVERIFY(sizeGrip);
#endif
@@ -243,14 +243,14 @@ void tst_QDialog::showMaximized()
dialog.showMaximized();
QVERIFY(dialog.isMaximized());
QVERIFY(dialog.isVisible());
-#if !defined(QT_NO_SIZEGRIP) && !defined(Q_OS_MAC) && !defined(Q_OS_IRIX) && !defined(Q_OS_HPUX)
+#if QT_CONFIG(sizegrip) && !defined(Q_OS_DARWIN) && !defined(Q_OS_IRIX) && !defined(Q_OS_HPUX)
QVERIFY(!sizeGrip->isVisible());
#endif
dialog.showNormal();
QVERIFY(!dialog.isMaximized());
QVERIFY(dialog.isVisible());
-#ifndef QT_NO_SIZEGRIP
+#if QT_CONFIG(sizegrip)
QVERIFY(sizeGrip->isVisible());
#endif
@@ -312,7 +312,7 @@ void tst_QDialog::showFullScreen()
{
QDialog dialog(0, Qt::X11BypassWindowManagerHint);
dialog.setSizeGripEnabled(true);
-#ifndef QT_NO_SIZEGRIP
+#if QT_CONFIG(sizegrip)
QSizeGrip *sizeGrip = dialog.findChild<QSizeGrip *>();
QVERIFY(sizeGrip);
#endif
@@ -320,14 +320,14 @@ void tst_QDialog::showFullScreen()
dialog.showFullScreen();
QVERIFY(dialog.isFullScreen());
QVERIFY(dialog.isVisible());
-#ifndef QT_NO_SIZEGRIP
+#if QT_CONFIG(sizegrip)
QVERIFY(!sizeGrip->isVisible());
#endif
dialog.showNormal();
QVERIFY(!dialog.isFullScreen());
QVERIFY(dialog.isVisible());
-#ifndef QT_NO_SIZEGRIP
+#if QT_CONFIG(sizegrip)
QVERIFY(sizeGrip->isVisible());
#endif
@@ -414,7 +414,7 @@ void tst_QDialog::deleteInExec()
QCOMPARE(dialog->exec(), int(QDialog::Rejected));
}
-#ifndef QT_NO_SIZEGRIP
+#if QT_CONFIG(sizegrip)
// From Task 124269
void tst_QDialog::showSizeGrip()
{
diff --git a/tests/auto/widgets/graphicsview/qgraphicsscene/BLACKLIST b/tests/auto/widgets/graphicsview/qgraphicsscene/BLACKLIST
index c6f69a51a5..70170d2822 100644
--- a/tests/auto/widgets/graphicsview/qgraphicsscene/BLACKLIST
+++ b/tests/auto/widgets/graphicsview/qgraphicsscene/BLACKLIST
@@ -1,3 +1,5 @@
[removeItem]
# QTBUG-60754, QTest::mouseMove is not always respected, or the CI moves the cursor
osx-10.11 ci
+[isActive]
+opensuse-42.3 ci
diff --git a/tests/auto/widgets/graphicsview/qgraphicsview/BLACKLIST b/tests/auto/widgets/graphicsview/qgraphicsview/BLACKLIST
index 3cba8bad7e..40d106e3ba 100644
--- a/tests/auto/widgets/graphicsview/qgraphicsview/BLACKLIST
+++ b/tests/auto/widgets/graphicsview/qgraphicsview/BLACKLIST
@@ -12,7 +12,5 @@ xcb
xcb
[forwardMousePress]
xcb
-[hoverLeave]
-xcb
[resizeAnchor]
xcb
diff --git a/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp b/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp
index 1430911cf0..3d87836698 100644
--- a/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp
+++ b/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp
@@ -4777,8 +4777,6 @@ class GraphicsItemWithHover : public QGraphicsRectItem
{
public:
GraphicsItemWithHover()
- : receivedEnterEvent(false), receivedLeaveEvent(false),
- enterWidget(0), leaveWidget(0)
{
setRect(0, 0, 100, 100);
setAcceptHoverEvents(true);
@@ -4786,6 +4784,9 @@ public:
bool sceneEvent(QEvent *event)
{
+ if (!checkEvents) // ensures that we don't look at stray events before we are ready
+ return QGraphicsRectItem::sceneEvent(event);
+
if (event->type() == QEvent::GraphicsSceneHoverEnter) {
receivedEnterEvent = true;
enterWidget = static_cast<QGraphicsSceneHoverEvent *>(event)->widget();
@@ -4796,50 +4797,39 @@ public:
return QGraphicsRectItem::sceneEvent(event);
}
- bool receivedEnterEvent;
- bool receivedLeaveEvent;
- QWidget *enterWidget;
- QWidget *leaveWidget;
+ bool receivedEnterEvent = false;
+ bool receivedLeaveEvent = false;
+ QWidget *enterWidget = nullptr;
+ QWidget *leaveWidget = nullptr;
+ bool checkEvents = false;
};
void tst_QGraphicsView::hoverLeave()
{
- if (platformName == QStringLiteral("cocoa")) {
- QSKIP("Insignificant on OSX");
- } else if (platformName == QStringLiteral("minimal")
- || (platformName == QStringLiteral("offscreen"))) {
- QSKIP("Fails in minimal/offscreen platforms if forwardMouseDoubleClick has been run");
- }
- const QRect availableGeometry = QGuiApplication::primaryScreen()->availableGeometry();
QGraphicsScene scene;
QGraphicsView view(&scene);
view.resize(160, 160);
- view.move(availableGeometry.center() - QPoint(80, 80));
GraphicsItemWithHover *item = new GraphicsItemWithHover;
scene.addItem(item);
- // move the cursor out of the way
- const QPoint outOfWindow = view.geometry().topRight() + QPoint(50, 0);
- QCursor::setPos(outOfWindow);
-
view.showNormal();
qApp->setActiveWindow(&view);
- QVERIFY(QTest::qWaitForWindowActive(&view));
-
- QPoint pos = view.viewport()->mapToGlobal(view.mapFromScene(item->mapToScene(10, 10)));
- QCursor::setPos(pos);
+ QVERIFY(QTest::qWaitForWindowExposed(&view));
-#if defined(Q_OS_QNX)
- QEXPECT_FAIL("", "QCursor does not set native cursor on QNX", Abort);
-#endif
+ QWindow *viewWindow = view.window()->windowHandle();
+ QPoint posOutsideItem = view.mapFromScene(item->mapToScene(0, 0)) - QPoint(5, 0);
+ QPoint posOutsideItemGlobal = view.mapToGlobal(posOutsideItem);
+ QPoint posOutsideItemInWindow = viewWindow->mapFromGlobal(posOutsideItemGlobal);
+ QTest::mouseMove(viewWindow, posOutsideItemInWindow);
+ item->checkEvents = true;
+ QPoint posInItemGlobal = view.mapToGlobal(view.mapFromScene(item->mapToScene(10, 10)));
+ QTest::mouseMove(viewWindow, viewWindow->mapFromGlobal(posInItemGlobal));
QTRY_VERIFY(item->receivedEnterEvent);
QCOMPARE(item->enterWidget, view.viewport());
- QCursor::setPos(outOfWindow);
-#ifdef Q_OS_MAC
- QEXPECT_FAIL("", "QTBUG-26274 - behaviour regression", Abort);
-#endif
+ QTest::mouseMove(viewWindow, posOutsideItemInWindow);
+
QTRY_VERIFY(item->receivedLeaveEvent);
QCOMPARE(item->leaveWidget, view.viewport());
}
diff --git a/tests/auto/widgets/itemviews/qitemdelegate/BLACKLIST b/tests/auto/widgets/itemviews/qitemdelegate/BLACKLIST
new file mode 100644
index 0000000000..a16fd19b99
--- /dev/null
+++ b/tests/auto/widgets/itemviews/qitemdelegate/BLACKLIST
@@ -0,0 +1,2 @@
+[enterKey]
+opensuse-42.3
diff --git a/tests/auto/widgets/kernel/qwidget/BLACKLIST b/tests/auto/widgets/kernel/qwidget/BLACKLIST
index 5648218d04..8e8602840e 100644
--- a/tests/auto/widgets/kernel/qwidget/BLACKLIST
+++ b/tests/auto/widgets/kernel/qwidget/BLACKLIST
@@ -60,6 +60,7 @@ osx
[maskedUpdate]
osx
opensuse-42.1
+opensuse-42.3
[hideWhenFocusWidgetIsChild]
osx-10.10
[hideOpaqueChildWhileHidden]
diff --git a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
index 6fcf6dc3ed..81fb332a62 100644
--- a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
+++ b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
@@ -196,7 +196,9 @@ private slots:
void mapFromAndTo();
void focusChainOnHide();
void focusChainOnReparent();
- void setTabOrder();
+ void defaultTabOrder();
+ void reverseTabOrder();
+ void tabOrderWithProxy();
#ifdef Q_OS_WIN
void activation();
#endif
@@ -1667,74 +1669,185 @@ public:
: QFrame(parent)
{
setObjectName(name);
- //QHBoxLayout* hbox = new QHBoxLayout(this, 2, 0);
- //hbox->setAutoAdd(true);
+
+ lineEdit1 = new QLineEdit;
+ lineEdit2 = new QLineEdit;
+
QHBoxLayout* hbox = new QHBoxLayout(this);
+ hbox->addWidget(lineEdit1);
+ hbox->addWidget(lineEdit2);
+ }
- lineEdit = new QLineEdit(this);
- hbox->addWidget(lineEdit);
+public:
+ QLineEdit *lineEdit1;
+ QLineEdit *lineEdit2;
+};
- button = new QPushButton(this);
- hbox->addWidget(button);
- button->setFocusPolicy( Qt::NoFocus );
+void tst_QWidget::defaultTabOrder()
+{
+ const int compositeCount = 2;
+ Container container;
+ Composite *composite[compositeCount];
- setFocusProxy( lineEdit );
- setFocusPolicy( Qt::StrongFocus );
+ QLineEdit *firstEdit = new QLineEdit;
+ container.box->addWidget(firstEdit);
- setTabOrder(lineEdit, button);
+ for (int i = 0; i < compositeCount; i++) {
+ composite[i] = new Composite();
+ container.box->addWidget(composite[i]);
}
-private:
- QLineEdit* lineEdit;
- QPushButton* button;
-};
+ QLineEdit *lastEdit = new QLineEdit();
+ container.box->addWidget(lastEdit);
-#define NUM_WIDGETS 4
+ container.show();
+ container.activateWindow();
+ qApp->setActiveWindow(&container);
+ QVERIFY(QTest::qWaitForWindowActive(&container));
-void tst_QWidget::setTabOrder()
-{
- QTest::qWait(100);
+ QTRY_VERIFY(firstEdit->hasFocus());
- Container container;
- container.setObjectName("setTabOrder");
- container.setWindowTitle(container.objectName());
+ // Check that focus moves between the line edits when we tab forward
+ for (int i = 0; i < compositeCount; ++i) {
+ container.tab();
+ QVERIFY(composite[i]->lineEdit1->hasFocus());
+ QVERIFY(!composite[i]->lineEdit2->hasFocus());
+ container.tab();
+ QVERIFY(!composite[i]->lineEdit1->hasFocus());
+ QVERIFY(composite[i]->lineEdit2->hasFocus());
+ }
+
+ container.tab();
+ QVERIFY(lastEdit->hasFocus());
- Composite* comp[NUM_WIDGETS];
+ // Check that focus moves between the line edits in reverse
+ // order when we tab backwards
+ for (int i = compositeCount - 1; i >= 0; --i) {
+ container.backTab();
+ QVERIFY(!composite[i]->lineEdit1->hasFocus());
+ QVERIFY(composite[i]->lineEdit2->hasFocus());
+
+ container.backTab();
+ QVERIFY(composite[i]->lineEdit1->hasFocus());
+ QVERIFY(!composite[i]->lineEdit2->hasFocus());
+ }
+
+ container.backTab();
+ QVERIFY(firstEdit->hasFocus());
+}
+
+void tst_QWidget::reverseTabOrder()
+{
+ const int compositeCount = 2;
+ Container container;
+ Composite* composite[compositeCount];
- QLineEdit *firstEdit = new QLineEdit(&container);
+ QLineEdit *firstEdit = new QLineEdit();
container.box->addWidget(firstEdit);
- int i = 0;
- for(i = 0; i < NUM_WIDGETS; i++) {
- comp[i] = new Composite(&container);
- container.box->addWidget(comp[i]);
+ for (int i = 0; i < compositeCount; i++) {
+ composite[i] = new Composite();
+ container.box->addWidget(composite[i]);
}
- QLineEdit *lastEdit = new QLineEdit(&container);
+ QLineEdit *lastEdit = new QLineEdit();
container.box->addWidget(lastEdit);
- container.setTabOrder(lastEdit, comp[NUM_WIDGETS-1]);
- for(i = NUM_WIDGETS-1; i > 0; i--) {
- container.setTabOrder(comp[i], comp[i-1]);
+ // Reverse tab order inside each composite
+ for (int i = 0; i < compositeCount; ++i)
+ QWidget::setTabOrder(composite[i]->lineEdit2, composite[i]->lineEdit1);
+
+ container.show();
+ container.activateWindow();
+ qApp->setActiveWindow(&container);
+ QVERIFY(QTest::qWaitForWindowActive(&container));
+
+ QTRY_VERIFY(firstEdit->hasFocus());
+
+ // Check that focus moves in reverse order when tabbing inside the composites
+ // (but in the correct order when tabbing between them)
+ for (int i = 0; i < compositeCount; ++i) {
+ container.tab();
+ QVERIFY(!composite[i]->lineEdit1->hasFocus());
+ QVERIFY(composite[i]->lineEdit2->hasFocus());
+ container.tab();
+ QVERIFY(composite[i]->lineEdit1->hasFocus());
+ QVERIFY(!composite[i]->lineEdit2->hasFocus());
+ }
+
+ container.tab();
+ QVERIFY(lastEdit->hasFocus());
+
+ // Check that focus moves in "normal" order when tabbing backwards inside the
+ // composites (since backwards of reversed order cancels each other out),
+ // but in the reverse order when tabbing between them.
+ for (int i = compositeCount - 1; i >= 0; --i) {
+ container.backTab();
+ QVERIFY(composite[i]->lineEdit1->hasFocus());
+ QVERIFY(!composite[i]->lineEdit2->hasFocus());
+ container.backTab();
+ QVERIFY(!composite[i]->lineEdit1->hasFocus());
+ QVERIFY(composite[i]->lineEdit2->hasFocus());
}
- container.setTabOrder(comp[0], firstEdit);
- int current = NUM_WIDGETS-1;
- lastEdit->setFocus();
+ container.backTab();
+ QVERIFY(firstEdit->hasFocus());
+}
+
+void tst_QWidget::tabOrderWithProxy()
+{
+ const int compositeCount = 2;
+ Container container;
+ Composite* composite[compositeCount];
+
+ QLineEdit *firstEdit = new QLineEdit();
+ container.box->addWidget(firstEdit);
+
+ for (int i = 0; i < compositeCount; i++) {
+ composite[i] = new Composite();
+ container.box->addWidget(composite[i]);
+
+ // Set second child as focus proxy
+ composite[i]->setFocusPolicy(Qt::StrongFocus);
+ composite[i]->setFocusProxy(composite[i]->lineEdit2);
+ }
+
+ QLineEdit *lastEdit = new QLineEdit();
+ container.box->addWidget(lastEdit);
container.show();
container.activateWindow();
qApp->setActiveWindow(&container);
QVERIFY(QTest::qWaitForWindowActive(&container));
- QTRY_VERIFY(lastEdit->hasFocus());
- container.tab();
- do {
- QVERIFY(comp[current]->focusProxy()->hasFocus());
+ QTRY_VERIFY(firstEdit->hasFocus());
+
+ // Check that focus moves between the second line edits
+ // (the focus proxies) when we tab forward
+ for (int i = 0; i < compositeCount; ++i) {
container.tab();
- current--;
- } while (current >= 0);
+ QVERIFY(!composite[i]->lineEdit1->hasFocus());
+ QVERIFY(composite[i]->lineEdit2->hasFocus());
+ }
+ container.tab();
+ QVERIFY(lastEdit->hasFocus());
+
+ // Check that focus moves between the line edits
+ // in reverse order when we tab backwards.
+ // Note that in this case, the focus proxies should not
+ // be taken into consideration, since they only take
+ // effect when tabbing forward
+ for (int i = compositeCount - 1; i >= 0; --i) {
+ container.backTab();
+ QVERIFY(!composite[i]->lineEdit1->hasFocus());
+ QVERIFY(composite[i]->lineEdit2->hasFocus());
+ container.backTab();
+ QVERIFY(composite[i]->lineEdit1->hasFocus());
+ QVERIFY(!composite[i]->lineEdit2->hasFocus());
+ }
+
+ container.backTab();
QVERIFY(firstEdit->hasFocus());
}
@@ -1743,8 +1856,6 @@ void tst_QWidget::activation()
{
Q_CHECK_PAINTEVENTS
- int waitTime = 100;
-
QWidget widget1;
widget1.setObjectName("activation-Widget1");
widget1.setWindowTitle(widget1.objectName());
@@ -1756,25 +1867,18 @@ void tst_QWidget::activation()
widget1.show();
widget2.show();
- QTest::qWait(waitTime);
- QCOMPARE(QApplication::activeWindow(), &widget2);
+ QTRY_COMPARE(QApplication::activeWindow(), &widget2);
widget2.showMinimized();
- QTest::qWait(waitTime);
- QCOMPARE(QApplication::activeWindow(), &widget1);
+ QTRY_COMPARE(QApplication::activeWindow(), &widget1);
widget2.showMaximized();
- QTest::qWait(waitTime);
- QCOMPARE(QApplication::activeWindow(), &widget2);
+ QTRY_COMPARE(QApplication::activeWindow(), &widget2);
widget2.showMinimized();
- QTest::qWait(waitTime);
- QCOMPARE(QApplication::activeWindow(), &widget1);
+ QTRY_COMPARE(QApplication::activeWindow(), &widget1);
widget2.showNormal();
- QTest::qWait(waitTime);
- QTest::qWait(waitTime);
- QCOMPARE(QApplication::activeWindow(), &widget2);
+ QTRY_COMPARE(QApplication::activeWindow(), &widget2);
widget2.hide();
- QTest::qWait(waitTime);
- QCOMPARE(QApplication::activeWindow(), &widget1);
+ QTRY_COMPARE(QApplication::activeWindow(), &widget1);
}
#endif // Q_OS_WIN
diff --git a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp
index b865a10874..a396063c1c 100644
--- a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp
+++ b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp
@@ -261,7 +261,7 @@ private slots:
// task-specific tests:
void task180999_focus();
void task174640_editingFinished();
-#ifndef QT_NO_COMPLETER
+#if QT_CONFIG(completer)
void task198789_currentCompletion();
void task210502_caseInsensitiveInlineCompletion();
#endif
@@ -3629,7 +3629,7 @@ void tst_QLineEdit::task174640_editingFinished()
QCOMPARE(editingFinishedSpy.count(), 1);
}
-#ifndef QT_NO_COMPLETER
+#if QT_CONFIG(completer)
class task198789_Widget : public QWidget
{
Q_OBJECT
@@ -3688,7 +3688,7 @@ void tst_QLineEdit::task210502_caseInsensitiveInlineCompletion()
QCOMPARE(lineEdit.text(), completion);
}
-#endif // QT_NO_COMPLETER
+#endif // QT_CONFIG(completer)
void tst_QLineEdit::task229938_dontEmitChangedWhenTextIsNotChanged()