aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/focus
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@theqtcompany.com>2016-03-10 15:16:34 +0100
committerJ-P Nurmi <jpnurmi@theqtcompany.com>2016-03-15 10:37:45 +0000
commite1add88186ed3ace78c7f6c1e3d683285a1a51fa (patch)
treec7ec71f88d49ac225ef7922f6bea1e4618181c3b /tests/auto/focus
parent3211db409e6fcfdee930bc651761b1036dd7649f (diff)
Move focusReason and focusPolicy tests to tst_focus
This speeds up 'make check' a bit. There's no reason to repeat these tests for all styles. Change-Id: I091f6430172d55dbf1974d88f81a383167b30f20 Reviewed-by: Liang Qi <liang.qi@theqtcompany.com>
Diffstat (limited to 'tests/auto/focus')
-rw-r--r--tests/auto/focus/focus.pro2
-rw-r--r--tests/auto/focus/tst_focus.cpp96
2 files changed, 97 insertions, 1 deletions
diff --git a/tests/auto/focus/focus.pro b/tests/auto/focus/focus.pro
index 5eed4a4a..c4ca8861 100644
--- a/tests/auto/focus/focus.pro
+++ b/tests/auto/focus/focus.pro
@@ -8,4 +8,4 @@ include (../shared/util.pri)
TESTDATA = data/*
-QT += core-private gui-private qml-private quick-private testlib
+QT += core-private gui-private qml-private quick-private labstemplates-private testlib
diff --git a/tests/auto/focus/tst_focus.cpp b/tests/auto/focus/tst_focus.cpp
index d7283e4d..aed38c03 100644
--- a/tests/auto/focus/tst_focus.cpp
+++ b/tests/auto/focus/tst_focus.cpp
@@ -41,6 +41,7 @@
#include <QtQml/qqmlcontext.h>
#include <QtQuick/qquickview.h>
#include <QtQuick/private/qquickitem_p.h>
+#include <QtLabsTemplates/private/qquickcontrol_p.h>
#include <QtGui/private/qguiapplication_p.h>
#include <QtGui/qstylehints.h>
#include "../shared/util.h"
@@ -57,6 +58,11 @@ private slots:
void navigation_data();
void navigation();
+
+ void policy();
+
+ void reason_data();
+ void reason();
};
void tst_focus::initTestCase()
@@ -114,6 +120,96 @@ void tst_focus::navigation()
QGuiApplication::styleHints()->setTabFocusBehavior(Qt::TabFocusBehavior(-1));
}
+void tst_focus::policy()
+{
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.setData("import Qt.labs.controls 1.0; ApplicationWindow { width: 100; height: 100; Button { anchors.fill: parent } }", QUrl());
+
+ QScopedPointer<QQuickApplicationWindow> window(qobject_cast<QQuickApplicationWindow *>(component.create()));
+ QVERIFY(window);
+
+ QQuickControl *control = qobject_cast<QQuickControl *>(window->contentItem()->childItems().first());
+ QVERIFY(control);
+
+ window->show();
+ window->requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(window.data()));
+
+ // Qt::TabFocus vs. QQuickItem::activeFocusOnTab
+ control->setActiveFocusOnTab(true);
+ QCOMPARE(control->focusPolicy(), Qt::TabFocus);
+ control->setActiveFocusOnTab(false);
+ QCOMPARE(control->focusPolicy(), Qt::NoFocus);
+
+ control->setFocusPolicy(Qt::TabFocus);
+ QCOMPARE(control->focusPolicy(), Qt::TabFocus);
+ QCOMPARE(control->activeFocusOnTab(), true);
+
+ // Qt::ClickFocus
+ QTest::mouseClick(window.data(), Qt::LeftButton, Qt::NoModifier, QPoint(control->width() / 2, control->height() / 2));
+ QVERIFY(!control->hasActiveFocus());
+
+ control->setFocusPolicy(Qt::ClickFocus);
+ QCOMPARE(control->focusPolicy(), Qt::ClickFocus);
+ QTest::mouseClick(window.data(), Qt::LeftButton, Qt::NoModifier, QPoint(control->width() / 2, control->height() / 2));
+ QVERIFY(control->hasActiveFocus());
+
+ // reset
+ control->setFocus(false);
+ QVERIFY(!control->hasActiveFocus());
+
+ // Qt::WheelFocus
+ QWheelEvent wheelEvent(QPoint(control->width() / 2, control->height() / 2), 10, Qt::NoButton, Qt::NoModifier);
+ QGuiApplication::sendEvent(control, &wheelEvent);
+ QVERIFY(!control->hasActiveFocus());
+
+ control->setFocusPolicy(Qt::WheelFocus);
+ QCOMPARE(control->focusPolicy(), Qt::WheelFocus);
+
+ QGuiApplication::sendEvent(control, &wheelEvent);
+ QVERIFY(control->hasActiveFocus());
+}
+
+void tst_focus::reason_data()
+{
+ QTest::addColumn<QString>("name");
+
+ QTest::newRow("Control") << "Control";
+ QTest::newRow("TextField") << "TextField";
+ QTest::newRow("TextArea") << "TextArea";
+ QTest::newRow("SpinBox") << "SpinBox";
+ QTest::newRow("ComboBox") << "ComboBox";
+}
+
+void tst_focus::reason()
+{
+ QFETCH(QString, name);
+
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.setData(QString("import Qt.labs.controls 1.0; ApplicationWindow { width: 100; height: 100; %1 { anchors.fill: parent } }").arg(name).toUtf8(), QUrl());
+
+ QScopedPointer<QQuickApplicationWindow> window(qobject_cast<QQuickApplicationWindow *>(component.create()));
+ QVERIFY(window.data());
+
+ QQuickItem *control = window->contentItem()->childItems().first();
+ QVERIFY(control);
+
+ window->show();
+ window->requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(window.data()));
+
+ QCOMPARE(control->property("focusReason").toInt(), int(Qt::OtherFocusReason));
+ control->forceActiveFocus(Qt::MouseFocusReason);
+ QVERIFY(control->hasActiveFocus());
+ QCOMPARE(control->property("focusReason").toInt(), int(Qt::MouseFocusReason));
+
+ window->contentItem()->forceActiveFocus(Qt::TabFocusReason);
+ QVERIFY(!control->hasActiveFocus());
+ QCOMPARE(control->property("focusReason").toInt(), int(Qt::TabFocusReason));
+}
+
QTEST_MAIN(tst_focus)
#include "tst_focus.moc"