diff options
author | J-P Nurmi <jpnurmi@theqtcompany.com> | 2016-03-10 15:16:34 +0100 |
---|---|---|
committer | J-P Nurmi <jpnurmi@theqtcompany.com> | 2016-03-15 10:37:45 +0000 |
commit | e1add88186ed3ace78c7f6c1e3d683285a1a51fa (patch) | |
tree | c7ec71f88d49ac225ef7922f6bea1e4618181c3b /tests/auto/focus | |
parent | 3211db409e6fcfdee930bc651761b1036dd7649f (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.pro | 2 | ||||
-rw-r--r-- | tests/auto/focus/tst_focus.cpp | 96 |
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" |