aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/activeFocusOnTab
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@theqtcompany.com>2016-03-09 11:37:43 +0100
committerJ-P Nurmi <jpnurmi@theqtcompany.com>2016-03-10 17:01:09 +0000
commitdaf8b6655d5fdf12e5f86396ac7d7dc90060e05b (patch)
tree0f31bc9b4115887d34b5c927e0248b027c54621c /tests/auto/activeFocusOnTab
parenta4e2cb7bae62e1f0d18e49ea0c61636348bcc21f (diff)
Refactor tst_activeFocusOnTab
Use data-driven tests to have less repeat and to make it easier to add new controls to the list. Change-Id: Ib24b314ff3ebea0912e2bbc50912b1fad148d23a Reviewed-by: Liang Qi <liang.qi@theqtcompany.com>
Diffstat (limited to 'tests/auto/activeFocusOnTab')
-rw-r--r--tests/auto/activeFocusOnTab/data/activeFocusOnTab.qml2
-rw-r--r--tests/auto/activeFocusOnTab/tst_activeFocusOnTab.cpp452
2 files changed, 37 insertions, 417 deletions
diff --git a/tests/auto/activeFocusOnTab/data/activeFocusOnTab.qml b/tests/auto/activeFocusOnTab/data/activeFocusOnTab.qml
index 93601359..46f9f522 100644
--- a/tests/auto/activeFocusOnTab/data/activeFocusOnTab.qml
+++ b/tests/auto/activeFocusOnTab/data/activeFocusOnTab.qml
@@ -129,6 +129,8 @@ Item {
RangeSlider {
id: rangeslider
objectName: "rangeslider"
+ first.handle.objectName: "rangeslider.first"
+ second.handle.objectName: "rangeslider.second"
}
// ScrollBar
ScrollIndicator {
diff --git a/tests/auto/activeFocusOnTab/tst_activeFocusOnTab.cpp b/tests/auto/activeFocusOnTab/tst_activeFocusOnTab.cpp
index 951611f2..2da73955 100644
--- a/tests/auto/activeFocusOnTab/tst_activeFocusOnTab.cpp
+++ b/tests/auto/activeFocusOnTab/tst_activeFocusOnTab.cpp
@@ -51,440 +51,58 @@ using namespace QQuickVisualTestUtil;
class tst_activeFocusOnTab : public QQmlDataTest
{
Q_OBJECT
-public:
- tst_activeFocusOnTab();
private slots:
void initTestCase();
- void cleanup();
- void allControls();
- void textControls();
-
-private:
- QQmlEngine engine;
+ void tabNavigation_data();
+ void tabNavigation();
};
-tst_activeFocusOnTab::tst_activeFocusOnTab()
-{
-}
-
void tst_activeFocusOnTab::initTestCase()
{
QQmlDataTest::initTestCase();
}
-void tst_activeFocusOnTab::cleanup()
-{
-}
-
-void tst_activeFocusOnTab::allControls()
+void tst_activeFocusOnTab::tabNavigation_data()
{
- QGuiApplication::styleHints()->setTabFocusBehavior(Qt::TabFocusAllControls);
-
- QQuickView *window = new QQuickView(0);
- window->setBaseSize(QSize(800,600));
-
- window->setSource(testFileUrl("activeFocusOnTab.qml"));
- window->show();
- window->requestActivate();
- QVERIFY(QTest::qWaitForWindowActive(window));
- QVERIFY(QGuiApplication::focusWindow() == window);
-
- // original: button1
- QQuickItem *item = findItem<QQuickItem>(window->rootObject(), "button1");
- QVERIFY(item);
- QVERIFY(item->hasActiveFocus());
-
- // Tab: button1->button2
- QKeyEvent key(QEvent::KeyPress, Qt::Key_Tab, Qt::NoModifier, "", false, 1);
- QGuiApplication::sendEvent(window, &key);
- QVERIFY(key.isAccepted());
-
- item = findItem<QQuickItem>(window->rootObject(), "button2");
- QVERIFY(item);
- QVERIFY(item->hasActiveFocus());
-
- // Tab: button2->checkbox
- key = QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::NoModifier, "", false, 1);
- QGuiApplication::sendEvent(window, &key);
- QVERIFY(key.isAccepted());
-
- item = findItem<QQuickItem>(window->rootObject(), "checkbox");
- QVERIFY(item);
- QVERIFY(item->hasActiveFocus());
-
- // Tab: checkbox->checkbox1
- key = QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::NoModifier, "", false, 1);
- QGuiApplication::sendEvent(window, &key);
- QVERIFY(key.isAccepted());
-
- item = findItem<QQuickItem>(window->rootObject(), "checkbox1");
- QVERIFY(item);
- QVERIFY(item->hasActiveFocus());
-
- // Tab: checkbox1->checkbox2
- key = QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::NoModifier, "", false, 1);
- QGuiApplication::sendEvent(window, &key);
- QVERIFY(key.isAccepted());
-
- item = findItem<QQuickItem>(window->rootObject(), "checkbox2");
- QVERIFY(item);
- QVERIFY(item->hasActiveFocus());
-
- // Tab: checkbox2->radiobutton
- key = QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::NoModifier, "", false, 1);
- QGuiApplication::sendEvent(window, &key);
- QVERIFY(key.isAccepted());
-
- item = findItem<QQuickItem>(window->rootObject(), "radiobutton");
- QVERIFY(item);
- QVERIFY(item->hasActiveFocus());
-
- // Tab: radiobutton->radiobutton1
- key = QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::NoModifier, "", false, 1);
- QGuiApplication::sendEvent(window, &key);
- QVERIFY(key.isAccepted());
-
- item = findItem<QQuickItem>(window->rootObject(), "radiobutton1");
- QVERIFY(item);
- QVERIFY(item->hasActiveFocus());
-
- // Tab: radiobutton1->radiobutton2
- key = QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::NoModifier, "", false, 1);
- QGuiApplication::sendEvent(window, &key);
- QVERIFY(key.isAccepted());
-
- item = findItem<QQuickItem>(window->rootObject(), "radiobutton2");
- QVERIFY(item);
- QVERIFY(item->hasActiveFocus());
-
- // Tab: radiobutton2->rangeslider.first.handle
- key = QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::NoModifier, "", false, 1);
- QGuiApplication::sendEvent(window, &key);
- QVERIFY(key.isAccepted());
-
- item = findItem<QQuickItem>(window->rootObject(), "rangeslider");
- QVERIFY(item);
- item = item->property("first").value<QObject*>()->property("handle").value<QQuickItem*>();
- QVERIFY(item->hasActiveFocus());
-
- // Tab: rangeslider.first.handle->rangeslider.second.handle
- key = QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::NoModifier, "", false, 1);
- QGuiApplication::sendEvent(window, &key);
- QVERIFY(key.isAccepted());
-
- item = findItem<QQuickItem>(window->rootObject(), "rangeslider");
- QVERIFY(item);
- item = item->property("second").value<QObject*>()->property("handle").value<QQuickItem*>();
- QVERIFY(item->hasActiveFocus());
-
- // Tab: rangeslider.second.handle->slider
- key = QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::NoModifier, "", false, 1);
- QGuiApplication::sendEvent(window, &key);
- QVERIFY(key.isAccepted());
-
- item = findItem<QQuickItem>(window->rootObject(), "slider");
- QVERIFY(item);
- QVERIFY(item->hasActiveFocus());
-
- // Tab: slider->spinbox
- key = QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::NoModifier, "", false, 1);
- QGuiApplication::sendEvent(window, &key);
- QVERIFY(key.isAccepted());
-
- item = findItem<QQuickItem>(window->rootObject(), "spinbox");
- QVERIFY(item);
- QVERIFY(item->hasActiveFocus());
-
- // Tab: spinbox->switch
- key = QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::NoModifier, "", false, 1);
- QGuiApplication::sendEvent(window, &key);
- QVERIFY(key.isAccepted());
-
- item = findItem<QQuickItem>(window->rootObject(), "switch");
- QVERIFY(item);
- QVERIFY(item->hasActiveFocus());
-
- // Tab: switch->tabbutton1
- key = QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::NoModifier, "", false, 1);
- QGuiApplication::sendEvent(window, &key);
- QVERIFY(key.isAccepted());
-
- item = findItem<QQuickItem>(window->rootObject(), "tabbutton1");
- QVERIFY(item);
- QVERIFY(item->hasActiveFocus());
-
- // Tab: tabbutton1->tabbutton2
- key = QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::NoModifier, "", false, 1);
- QGuiApplication::sendEvent(window, &key);
- QVERIFY(key.isAccepted());
-
- item = findItem<QQuickItem>(window->rootObject(), "tabbutton2");
- QVERIFY(item);
- QVERIFY(item->hasActiveFocus());
-
- // Tab: tabbutton2->textfield
- key = QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::NoModifier, "", false, 1);
- QGuiApplication::sendEvent(window, &key);
- QVERIFY(key.isAccepted());
-
- item = findItem<QQuickItem>(window->rootObject(), "textfield");
- QVERIFY(item);
- QVERIFY(item->hasActiveFocus());
-
- // Tab: textfield->toolbutton
- key = QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::NoModifier, "", false, 1);
- QGuiApplication::sendEvent(window, &key);
- QVERIFY(key.isAccepted());
-
- item = findItem<QQuickItem>(window->rootObject(), "toolbutton");
- QVERIFY(item);
- QVERIFY(item->hasActiveFocus());
-
- // Tab: toolbutton->textarea
- key = QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::NoModifier, "", false, 1);
- QGuiApplication::sendEvent(window, &key);
- QVERIFY(key.isAccepted());
-
- item = findItem<QQuickItem>(window->rootObject(), "textarea");
- QVERIFY(item);
- QVERIFY(item->hasActiveFocus());
-
- // BackTab: textarea->toolbutton
- key = QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::ShiftModifier, "", false, 1);
- QGuiApplication::sendEvent(window, &key);
- QVERIFY(key.isAccepted());
-
- item = findItem<QQuickItem>(window->rootObject(), "toolbutton");
- QVERIFY(item);
- QVERIFY(item->hasActiveFocus());
-
- // BackTab: toolbutton->textfield
- key = QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::ShiftModifier, "", false, 1);
- QGuiApplication::sendEvent(window, &key);
- QVERIFY(key.isAccepted());
-
- item = findItem<QQuickItem>(window->rootObject(), "textfield");
- QVERIFY(item);
- QVERIFY(item->hasActiveFocus());
+ QTest::addColumn<Qt::Key>("key");
+ QTest::addColumn<Qt::TabFocusBehavior>("behavior");
+ QTest::addColumn<QStringList>("order");
- // BackTab: textfield->tabbutton2
- key = QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::ShiftModifier, "", false, 1);
- QGuiApplication::sendEvent(window, &key);
- QVERIFY(key.isAccepted());
+ QTest::newRow("tab-all-controls") << Qt::Key_Tab << Qt::TabFocusAllControls << (QStringList() << "button2" << "checkbox" << "checkbox1" << "checkbox2" << "radiobutton" << "radiobutton1" << "radiobutton2" << "rangeslider.first" << "rangeslider.second" << "slider" << "spinbox" << "switch" << "tabbutton1" << "tabbutton2" << "textfield" << "toolbutton" << "textarea" << "button1");
+ QTest::newRow("backtab-all-controls") << Qt::Key_Backtab << Qt::TabFocusAllControls << (QStringList() << "textarea" << "toolbutton" << "textfield" << "tabbutton2" << "tabbutton1" << "switch" << "spinbox" << "slider" << "rangeslider.second" << "rangeslider.first" << "radiobutton2" << "radiobutton1" << "radiobutton" << "checkbox2" << "checkbox1" << "checkbox" << "button2" << "button1");
- item = findItem<QQuickItem>(window->rootObject(), "tabbutton2");
- QVERIFY(item);
- QVERIFY(item->hasActiveFocus());
-
- // BackTab: tabbutton2->tabbutton2
- key = QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::ShiftModifier, "", false, 1);
- QGuiApplication::sendEvent(window, &key);
- QVERIFY(key.isAccepted());
-
- item = findItem<QQuickItem>(window->rootObject(), "tabbutton1");
- QVERIFY(item);
- QVERIFY(item->hasActiveFocus());
-
- // BackTab: tabbutton1->switch
- key = QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::ShiftModifier, "", false, 1);
- QGuiApplication::sendEvent(window, &key);
- QVERIFY(key.isAccepted());
-
- item = findItem<QQuickItem>(window->rootObject(), "switch");
- QVERIFY(item);
- QVERIFY(item->hasActiveFocus());
-
- // BackTab: switch->spinbox
- key = QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::ShiftModifier, "", false, 1);
- QGuiApplication::sendEvent(window, &key);
- QVERIFY(key.isAccepted());
-
- item = findItem<QQuickItem>(window->rootObject(), "spinbox");
- QVERIFY(item);
- QVERIFY(item->hasActiveFocus());
-
- // BackTab: spinbox->slider
- key = QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::ShiftModifier, "", false, 1);
- QGuiApplication::sendEvent(window, &key);
- QVERIFY(key.isAccepted());
-
- item = findItem<QQuickItem>(window->rootObject(), "slider");
- QVERIFY(item);
- QVERIFY(item->hasActiveFocus());
-
- // BackTab: slider->rangeslider.second.handle
- key = QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::ShiftModifier, "", false, 1);
- QGuiApplication::sendEvent(window, &key);
- QVERIFY(key.isAccepted());
-
- item = findItem<QQuickItem>(window->rootObject(), "rangeslider");
- QVERIFY(item);
- item = item->property("second").value<QObject*>()->property("handle").value<QQuickItem*>();
- QVERIFY(item->hasActiveFocus());
-
- // BackTab: rangeslider.second.handle->rangeslider.first.handle
- key = QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::ShiftModifier, "", false, 1);
- QGuiApplication::sendEvent(window, &key);
- QVERIFY(key.isAccepted());
-
- item = findItem<QQuickItem>(window->rootObject(), "rangeslider");
- QVERIFY(item);
- item = item->property("first").value<QObject*>()->property("handle").value<QQuickItem*>();
- QVERIFY(item->hasActiveFocus());
-
- // BackTab: rangeslider.first.handle->radiobutton2
- key = QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::ShiftModifier, "", false, 1);
- QGuiApplication::sendEvent(window, &key);
- QVERIFY(key.isAccepted());
-
- item = findItem<QQuickItem>(window->rootObject(), "radiobutton2");
- QVERIFY(item);
- QVERIFY(item->hasActiveFocus());
-
- // BackTab: radiobutton2->radiobutton1
- key = QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::ShiftModifier, "", false, 1);
- QGuiApplication::sendEvent(window, &key);
- QVERIFY(key.isAccepted());
-
- item = findItem<QQuickItem>(window->rootObject(), "radiobutton1");
- QVERIFY(item);
- QVERIFY(item->hasActiveFocus());
-
- // BackTab: radiobutton1->radiobutton
- key = QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::ShiftModifier, "", false, 1);
- QGuiApplication::sendEvent(window, &key);
- QVERIFY(key.isAccepted());
-
- item = findItem<QQuickItem>(window->rootObject(), "radiobutton");
- QVERIFY(item);
- QVERIFY(item->hasActiveFocus());
-
- // BackTab: radiobutton->checkbox2
- key = QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::ShiftModifier, "", false, 1);
- QGuiApplication::sendEvent(window, &key);
- QVERIFY(key.isAccepted());
-
- item = findItem<QQuickItem>(window->rootObject(), "checkbox2");
- QVERIFY(item);
- QVERIFY(item->hasActiveFocus());
-
- // BackTab: checkbox2->checkbox1
- key = QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::ShiftModifier, "", false, 1);
- QGuiApplication::sendEvent(window, &key);
- QVERIFY(key.isAccepted());
-
- item = findItem<QQuickItem>(window->rootObject(), "checkbox1");
- QVERIFY(item);
- QVERIFY(item->hasActiveFocus());
-
- // BackTab: checkbox1->checkbox
- key = QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::ShiftModifier, "", false, 1);
- QGuiApplication::sendEvent(window, &key);
- QVERIFY(key.isAccepted());
-
- item = findItem<QQuickItem>(window->rootObject(), "checkbox");
- QVERIFY(item);
- QVERIFY(item->hasActiveFocus());
-
- // BackTab: checkbox->button2
- key = QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::ShiftModifier, "", false, 1);
- QGuiApplication::sendEvent(window, &key);
- QVERIFY(key.isAccepted());
-
- item = findItem<QQuickItem>(window->rootObject(), "button2");
- QVERIFY(item);
- QVERIFY(item->hasActiveFocus());
-
- // BackTab: button2->button1
- key = QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::ShiftModifier, "", false, 1);
- QGuiApplication::sendEvent(window, &key);
- QVERIFY(key.isAccepted());
-
- item = findItem<QQuickItem>(window->rootObject(), "button1");
- QVERIFY(item);
- QVERIFY(item->hasActiveFocus());
-
- // BackTab: button1->textarea
- key = QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::ShiftModifier, "", false, 1);
- QGuiApplication::sendEvent(window, &key);
- QVERIFY(key.isAccepted());
-
- item = findItem<QQuickItem>(window->rootObject(), "textarea");
- QVERIFY(item);
- QVERIFY(item->hasActiveFocus());
-
- // BackTab: textarea->toolbutton
- key = QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::ShiftModifier, "", false, 1);
- QGuiApplication::sendEvent(window, &key);
- QVERIFY(key.isAccepted());
-
- item = findItem<QQuickItem>(window->rootObject(), "toolbutton");
- QVERIFY(item);
- QVERIFY(item->hasActiveFocus());
-
- delete window;
-
- QGuiApplication::styleHints()->setTabFocusBehavior(Qt::TabFocusBehavior(-1));
+ QTest::newRow("tab-text-controls") << Qt::Key_Tab << Qt::TabFocusTextControls << (QStringList() << "spinbox" << "textfield" << "textarea");
+ QTest::newRow("backtab-text-controls") << Qt::Key_Backtab << Qt::TabFocusTextControls << (QStringList() << "textarea" << "textfield" << "spinbox");
}
-void tst_activeFocusOnTab::textControls()
+void tst_activeFocusOnTab::tabNavigation()
{
- QGuiApplication::styleHints()->setTabFocusBehavior(Qt::TabFocusTextControls);
-
- QQuickView *window = new QQuickView(0);
- window->setBaseSize(QSize(800,600));
-
- window->setSource(testFileUrl("activeFocusOnTab.qml"));
- window->show();
- window->requestActivate();
- QVERIFY(QTest::qWaitForWindowActive(window));
- QVERIFY(QGuiApplication::focusWindow() == window);
-
- // original: textfield
- QQuickItem *item = findItem<QQuickItem>(window->rootObject(), "textfield");
- QVERIFY(item);
- item->forceActiveFocus();
- QVERIFY(item->hasActiveFocus());
-
- // Tab: textfield->textarea
- QKeyEvent key(QEvent::KeyPress, Qt::Key_Tab, Qt::NoModifier, "", false, 1);
- QGuiApplication::sendEvent(window, &key);
- QVERIFY(key.isAccepted());
-
- item = findItem<QQuickItem>(window->rootObject(), "textarea");
- QVERIFY(item);
- QVERIFY(item->hasActiveFocus());
-
- // BackTab: textarea->textfield
- key = QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::ShiftModifier, "", false, 1);
- QGuiApplication::sendEvent(window, &key);
- QVERIFY(key.isAccepted());
-
- item = findItem<QQuickItem>(window->rootObject(), "textfield");
- QVERIFY(item);
- QVERIFY(item->hasActiveFocus());
-
- // BackTab: textfield->spinbox
- key = QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::ShiftModifier, "", false, 1);
- QGuiApplication::sendEvent(window, &key);
- QVERIFY(key.isAccepted());
-
- item = findItem<QQuickItem>(window->rootObject(), "spinbox");
- QVERIFY(item);
- QVERIFY(item->hasActiveFocus());
-
- // BackTab: spinbox->textarea
- key = QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::ShiftModifier, "", false, 1);
- QGuiApplication::sendEvent(window, &key);
- QVERIFY(key.isAccepted());
-
- item = findItem<QQuickItem>(window->rootObject(), "textarea");
- QVERIFY(item);
- QVERIFY(item->hasActiveFocus());
-
- delete window;
+ QFETCH(Qt::Key, key);
+ QFETCH(Qt::TabFocusBehavior, behavior);
+ QFETCH(QStringList, order);
+
+ QGuiApplication::styleHints()->setTabFocusBehavior(behavior);
+
+ QQuickView view;
+ view.contentItem()->setObjectName("contentItem");
+
+ view.setSource(testFileUrl("activeFocusOnTab.qml"));
+ view.show();
+ view.requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(&view));
+ QVERIFY(QGuiApplication::focusWindow() == &view);
+
+ foreach (const QString &name, order) {
+ QKeyEvent event(QEvent::KeyPress, key, Qt::NoModifier);
+ QGuiApplication::sendEvent(&view, &event);
+ QVERIFY(event.isAccepted());
+
+ QQuickItem *item = findItem<QQuickItem>(view.rootObject(), name);
+ QVERIFY2(item, qPrintable(name));
+ QVERIFY2(item->hasActiveFocus(), qPrintable(QString("expected: '%1', actual: '%2'").arg(name).arg(view.activeFocusItem() ? view.activeFocusItem()->objectName() : "null")));
+ }
QGuiApplication::styleHints()->setTabFocusBehavior(Qt::TabFocusBehavior(-1));
}