From 9687a0e9ca693f860406c756bcc86d25c54add26 Mon Sep 17 00:00:00 2001
From: Caroline Chao <caroline.chao@digia.com>
Date: Tue, 9 Apr 2013 12:40:53 +0200
Subject: [PATCH] Tests: add more tests for activeFocusOnTab property

Qml tests.

Change-Id: I0b0f8b9de7a6e0da97a94eb9476e985f3539055a
Reviewed-by: Liang Qi <liang.qi@digia.com>
---
 tests/auto/controls/data/tst_button.qml      | 73 ++++++++++++++++++
 tests/auto/controls/data/tst_checkbox.qml    | 73 ++++++++++++++++++
 tests/auto/controls/data/tst_combobox.qml    | 75 +++++++++++++++++++
 tests/auto/controls/data/tst_groupbox.qml    | 78 ++++++++++++++++++++
 tests/auto/controls/data/tst_label.qml       | 75 +++++++++++++++++++
 tests/auto/controls/data/tst_progressbar.qml | 75 +++++++++++++++++++
 tests/auto/controls/data/tst_radiobutton.qml | 74 +++++++++++++++++++
 tests/auto/controls/data/tst_scrollview.qml  | 72 ++++++++++++++++++
 tests/auto/controls/data/tst_slider.qml      | 69 +++++++++++++++++
 tests/auto/controls/data/tst_spinbox.qml     | 72 ++++++++++++++++++
 tests/auto/controls/data/tst_statusbar.qml   | 72 ++++++++++++++++++
 tests/auto/controls/data/tst_textarea.qml    | 77 +++++++++++++++++++
 tests/auto/controls/data/tst_textfield.qml   | 77 +++++++++++++++++++
 tests/auto/controls/data/tst_toolbar.qml     | 72 ++++++++++++++++++
 tests/auto/controls/data/tst_toolbutton.qml  | 73 ++++++++++++++++++
 15 files changed, 1107 insertions(+)

diff --git a/tests/auto/controls/data/tst_button.qml b/tests/auto/controls/data/tst_button.qml
index 2ac5cea2c..f949ec6ea 100644
--- a/tests/auto/controls/data/tst_button.qml
+++ b/tests/auto/controls/data/tst_button.qml
@@ -120,5 +120,78 @@ TestCase {
         verify(control.activeFocus)
         control.destroy()
     }
+
+    function test_activeFocusOnTab() {
+        var test_control = 'import QtQuick 2.1; \
+        import QtQuick.Controls 1.0;            \
+        Item {                                  \
+            width: 200;                         \
+            height: 200;                        \
+            property alias control1: _control1; \
+            property alias control2: _control2; \
+            property alias control3: _control3; \
+            Button  {                           \
+                y: 20;                          \
+                id: _control1;                  \
+                activeFocusOnTab: true;         \
+                text: "control1"                \
+            }                                   \
+            Button  {                           \
+                y: 70;                          \
+                id: _control2;                  \
+                activeFocusOnTab: false;        \
+                text: "control2"                \
+            }                                   \
+            Button  {                           \
+                y: 120;                         \
+                id: _control3;                  \
+                activeFocusOnTab: true;         \
+                text: "control3"                \
+            }                                   \
+        }                                       '
+
+        var control = Qt.createQmlObject(test_control, container, '')
+
+        control.control1.forceActiveFocus()
+        verify(control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        keyPress(Qt.Key_Tab)
+        verify(!control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(control.control3.activeFocus)
+        keyPress(Qt.Key_Tab)
+        verify(control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+        verify(!control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(control.control3.activeFocus)
+        keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+        verify(control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+
+        control.control2.activeFocusOnTab = true
+        control.control3.activeFocusOnTab = false
+        keyPress(Qt.Key_Tab)
+        verify(!control.control1.activeFocus)
+        verify(control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        keyPress(Qt.Key_Tab)
+        verify(control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+        verify(!control.control1.activeFocus)
+        verify(control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+        verify(control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        control.destroy()
+    }
 }
 }
diff --git a/tests/auto/controls/data/tst_checkbox.qml b/tests/auto/controls/data/tst_checkbox.qml
index 1c9162a88..1c74e34d8 100644
--- a/tests/auto/controls/data/tst_checkbox.qml
+++ b/tests/auto/controls/data/tst_checkbox.qml
@@ -233,5 +233,78 @@ Item {
             mouseClick(checkBox, checkBox.x + 1, checkBox.y + 1)
             verify(checkBox.activeFocus)
         }
+
+        function test_activeFocusOnTab() {
+            checkBox.destroy()
+            wait(0) //QTBUG-30523 so processEvents is called
+            var test_control = 'import QtQuick 2.1; \
+            import QtQuick.Controls 1.0;            \
+            Item {                                  \
+                width: 200;                         \
+                height: 200;                        \
+                property alias control1: _control1; \
+                property alias control2: _control2; \
+                property alias control3: _control3; \
+                CheckBox  {                         \
+                    y: 20;                          \
+                    id: _control1;                  \
+                    activeFocusOnTab: true;         \
+                    text: "control1"                \
+                }                                   \
+                CheckBox  {                         \
+                    y: 70;                          \
+                    id: _control2;                  \
+                    activeFocusOnTab: false;        \
+                    text: "control2"                \
+                }                                   \
+                CheckBox  {                         \
+                    y: 120;                         \
+                    id: _control3;                  \
+                    activeFocusOnTab: true;         \
+                    text: "control3"                \
+                }                                   \
+            }                                       '
+
+            var control = Qt.createQmlObject(test_control, container, '')
+            control.control1.forceActiveFocus()
+            verify(control.control1.activeFocus)
+            verify(!control.control2.activeFocus)
+            verify(!control.control3.activeFocus)
+            keyPress(Qt.Key_Tab)
+            verify(!control.control1.activeFocus)
+            verify(!control.control2.activeFocus)
+            verify(control.control3.activeFocus)
+            keyPress(Qt.Key_Tab)
+            verify(control.control1.activeFocus)
+            verify(!control.control2.activeFocus)
+            verify(!control.control3.activeFocus)
+            keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+            verify(!control.control1.activeFocus)
+            verify(!control.control2.activeFocus)
+            verify(control.control3.activeFocus)
+            keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+            verify(control.control1.activeFocus)
+            verify(!control.control2.activeFocus)
+            verify(!control.control3.activeFocus)
+            control.control2.activeFocusOnTab = true
+            control.control3.activeFocusOnTab = false
+            keyPress(Qt.Key_Tab)
+            verify(!control.control1.activeFocus)
+            verify(control.control2.activeFocus)
+            verify(!control.control3.activeFocus)
+            keyPress(Qt.Key_Tab)
+            verify(control.control1.activeFocus)
+            verify(!control.control2.activeFocus)
+            verify(!control.control3.activeFocus)
+            keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+            verify(!control.control1.activeFocus)
+            verify(control.control2.activeFocus)
+            verify(!control.control3.activeFocus)
+            keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+            verify(control.control1.activeFocus)
+            verify(!control.control2.activeFocus)
+            verify(!control.control3.activeFocus)
+            control.destroy()
+        }
     }
 }
diff --git a/tests/auto/controls/data/tst_combobox.qml b/tests/auto/controls/data/tst_combobox.qml
index 7609c51d7..d6b5f540f 100644
--- a/tests/auto/controls/data/tst_combobox.qml
+++ b/tests/auto/controls/data/tst_combobox.qml
@@ -41,6 +41,11 @@
 import QtQuick 2.1
 import QtTest 1.0
 
+Item {
+    id: container
+    width: 400
+    height: 400
+
 TestCase {
     id: testCase
     name: "Tests_ComboBox"
@@ -118,4 +123,74 @@ TestCase {
         compare(comboBox.currentText, "Yellow")
         comboBox.destroy()
     }
+
+    function test_activeFocusOnTab() {
+        var test_control = 'import QtQuick 2.1; \
+        import QtQuick.Controls 1.0;            \
+        Item {                                  \
+            width: 200;                         \
+            height: 200;                        \
+            property alias control1: _control1; \
+            property alias control2: _control2; \
+            property alias control3: _control3; \
+            ComboBox  {                         \
+                y: 20;                          \
+                id: _control1;                  \
+                activeFocusOnTab: true;         \
+            }                                   \
+            ComboBox  {                         \
+                y: 70;                          \
+                id: _control2;                  \
+                activeFocusOnTab: false;        \
+            }                                   \
+            ComboBox  {                         \
+                y: 120;                         \
+                id: _control3;                  \
+                activeFocusOnTab: true;         \
+            }                                   \
+        }                                       '
+
+        var control = Qt.createQmlObject(test_control, container, '')
+        control.control1.forceActiveFocus()
+        verify(control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        keyPress(Qt.Key_Tab)
+        verify(!control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(control.control3.activeFocus)
+        keyPress(Qt.Key_Tab)
+        verify(control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+        verify(!control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(control.control3.activeFocus)
+        keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+        verify(control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+
+        control.control2.activeFocusOnTab = true
+        control.control3.activeFocusOnTab = false
+        keyPress(Qt.Key_Tab)
+        verify(!control.control1.activeFocus)
+        verify(control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        keyPress(Qt.Key_Tab)
+        verify(control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+        verify(!control.control1.activeFocus)
+        verify(control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+        verify(control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        control.destroy()
+    }
+}
 }
diff --git a/tests/auto/controls/data/tst_groupbox.qml b/tests/auto/controls/data/tst_groupbox.qml
index 81a8580e8..12784b48e 100644
--- a/tests/auto/controls/data/tst_groupbox.qml
+++ b/tests/auto/controls/data/tst_groupbox.qml
@@ -42,6 +42,11 @@ import QtQuick 2.1
 import QtTest 1.0
 import QtQuick.Controls 1.0
 
+Item {
+    id: container
+    width: 400
+    height: 400
+
 TestCase {
     id: testCase
     name: "Tests_GroupBox"
@@ -106,4 +111,77 @@ TestCase {
         compare(groupBox.child1.enabled, true)
         compare(groupBox.child2.enabled, true)
     }
+
+    function test_activeFocusOnTab() {
+        var test_control = 'import QtQuick 2.1; \
+        import QtQuick.Controls 1.0;            \
+        Item {                                  \
+            width: 200;                         \
+            height: 200;                        \
+            property alias control1: _control1; \
+            property alias control2: _control2; \
+            property alias control3: _control3; \
+            GroupBox  {                         \
+                y: 20;                          \
+                id: _control1;                  \
+                activeFocusOnTab: true;         \
+                title: "control1"               \
+            }                                   \
+            GroupBox  {                         \
+                y: 70;                          \
+                id: _control2;                  \
+                activeFocusOnTab: false;        \
+                title: "control2"               \
+            }                                   \
+            GroupBox  {                         \
+                y: 120;                         \
+                id: _control3;                  \
+                activeFocusOnTab: true;         \
+                title: "control3"               \
+            }                                   \
+        }                                       '
+
+        var control = Qt.createQmlObject(test_control, container, '')
+        control.control1.forceActiveFocus()
+        verify(control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        keyPress(Qt.Key_Tab)
+        verify(!control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(control.control3.activeFocus)
+        keyPress(Qt.Key_Tab)
+        verify(control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+        verify(!control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(control.control3.activeFocus)
+        keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+        verify(control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+
+        control.control2.activeFocusOnTab = true
+        control.control3.activeFocusOnTab = false
+        keyPress(Qt.Key_Tab)
+        verify(!control.control1.activeFocus)
+        verify(control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        keyPress(Qt.Key_Tab)
+        verify(control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+        verify(!control.control1.activeFocus)
+        verify(control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+        verify(control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        control.destroy()
+    }
+}
 }
diff --git a/tests/auto/controls/data/tst_label.qml b/tests/auto/controls/data/tst_label.qml
index c904d8bed..a50786913 100644
--- a/tests/auto/controls/data/tst_label.qml
+++ b/tests/auto/controls/data/tst_label.qml
@@ -41,6 +41,11 @@
 import QtQuick 2.1
 import QtTest 1.0
 
+Item {
+    id: container
+    width: 400
+    height: 400
+
 TestCase {
     id: testCase
     name: "Tests_Label"
@@ -52,4 +57,74 @@ TestCase {
         var label = Qt.createQmlObject('import QtQuick.Controls 1.0; Label {}', testCase, '');
         label.destroy()
     }
+
+    function test_activeFocusOnTab() {
+        var test_control = 'import QtQuick 2.1; \
+        import QtQuick.Controls 1.0;            \
+        Item {                                  \
+            width: 200;                         \
+            height: 200;                        \
+            property alias control1: _control1; \
+            property alias control2: _control2; \
+            property alias control3: _control3; \
+            Label {                             \
+                id: _control1;                  \
+                activeFocusOnTab: true;         \
+                text: "control1"                \
+            }                                   \
+            Label {                             \
+                id: _control2;                  \
+                activeFocusOnTab: false;        \
+                text: "control2"                \
+            }                                   \
+            Label {                             \
+                id: _control3;                  \
+                activeFocusOnTab: true;         \
+                text: "control3"                \
+            }                                   \
+        }                                       '
+
+        var control = Qt.createQmlObject(test_control, container, '')
+        control.control1.forceActiveFocus()
+        verify(control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        keyPress(Qt.Key_Tab)
+        verify(!control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(control.control3.activeFocus)
+        keyPress(Qt.Key_Tab)
+        verify(control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+        verify(!control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(control.control3.activeFocus)
+        keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+        verify(control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+
+        control.control2.activeFocusOnTab = true
+        control.control3.activeFocusOnTab = false
+        keyPress(Qt.Key_Tab)
+        verify(!control.control1.activeFocus)
+        verify(control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        keyPress(Qt.Key_Tab)
+        verify(control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+        verify(!control.control1.activeFocus)
+        verify(control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+        verify(control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        control.destroy()
+    }
+}
 }
diff --git a/tests/auto/controls/data/tst_progressbar.qml b/tests/auto/controls/data/tst_progressbar.qml
index 02b96ac36..3dc7a29ab 100644
--- a/tests/auto/controls/data/tst_progressbar.qml
+++ b/tests/auto/controls/data/tst_progressbar.qml
@@ -41,6 +41,11 @@
 import QtQuick 2.1
 import QtTest 1.0
 
+Item {
+    id: container
+    width: 400
+    height: 400
+
 TestCase {
     id: testCase
     name: "Tests_ProgressBar"
@@ -123,4 +128,74 @@ TestCase {
         progressBar3.destroy()
         progressBar4.destroy()
     }
+
+    function test_activeFocusOnTab() {
+        var test_control = 'import QtQuick 2.1; \
+        import QtQuick.Controls 1.0;            \
+        Item {                                  \
+            width: 200;                         \
+            height: 200;                        \
+            property alias control1: _control1; \
+            property alias control2: _control2; \
+            property alias control3: _control3; \
+            ProgressBar  {                      \
+                y: 20;                          \
+                id: _control1;                  \
+                activeFocusOnTab: true;         \
+            }                                   \
+            ProgressBar  {                      \
+                y: 70;                          \
+                id: _control2;                  \
+                activeFocusOnTab: false;        \
+            }                                   \
+            ProgressBar  {                      \
+                y: 120;                         \
+                id: _control3;                  \
+                activeFocusOnTab: true;         \
+            }                                   \
+        }                                       '
+
+        var control = Qt.createQmlObject(test_control, container, '')
+        control.control1.forceActiveFocus()
+        verify(control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        keyPress(Qt.Key_Tab)
+        verify(!control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(control.control3.activeFocus)
+        keyPress(Qt.Key_Tab)
+        verify(control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+        verify(!control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(control.control3.activeFocus)
+        keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+        verify(control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+
+        control.control2.activeFocusOnTab = true
+        control.control3.activeFocusOnTab = false
+        keyPress(Qt.Key_Tab)
+        verify(!control.control1.activeFocus)
+        verify(control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        keyPress(Qt.Key_Tab)
+        verify(control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+        verify(!control.control1.activeFocus)
+        verify(control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+        verify(control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        control.destroy()
+    }
+}
 }
diff --git a/tests/auto/controls/data/tst_radiobutton.qml b/tests/auto/controls/data/tst_radiobutton.qml
index 1bdb1c937..855f8c7a6 100644
--- a/tests/auto/controls/data/tst_radiobutton.qml
+++ b/tests/auto/controls/data/tst_radiobutton.qml
@@ -186,5 +186,79 @@ Item {
             mouseClick(radioButton, radioButton.x + 1, radioButton.y + 1)
             verify(radioButton.activeFocus)
         }
+
+        function test_activeFocusOnTab() {
+            radioButton.destroy()
+            wait(0) //QTBUG-30523 so processEvents is called
+            var test_control = 'import QtQuick 2.1; \
+            import QtQuick.Controls 1.0;            \
+            Item {                                  \
+                width: 200;                         \
+                height: 200;                        \
+                property alias control1: _control1; \
+                property alias control2: _control2; \
+                property alias control3: _control3; \
+                RadioButton  {                      \
+                    y: 20;                          \
+                    id: _control1;                  \
+                    activeFocusOnTab: true;         \
+                    text: "control1"                \
+                }                                   \
+                RadioButton  {                      \
+                    y: 70;                          \
+                    id: _control2;                  \
+                    activeFocusOnTab: false;        \
+                    text: "control2"                \
+                }                                   \
+                RadioButton  {                      \
+                    y: 120;                         \
+                    id: _control3;                  \
+                    activeFocusOnTab: true;         \
+                    text: "control3"                \
+                }                                   \
+            }                                       '
+
+            var control = Qt.createQmlObject(test_control, container, '')
+            control.control1.forceActiveFocus()
+            verify(control.control1.activeFocus)
+            verify(!control.control2.activeFocus)
+            verify(!control.control3.activeFocus)
+            keyPress(Qt.Key_Tab)
+            verify(!control.control1.activeFocus)
+            verify(!control.control2.activeFocus)
+            verify(control.control3.activeFocus)
+            keyPress(Qt.Key_Tab)
+            verify(control.control1.activeFocus)
+            verify(!control.control2.activeFocus)
+            verify(!control.control3.activeFocus)
+            keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+            verify(!control.control1.activeFocus)
+            verify(!control.control2.activeFocus)
+            verify(control.control3.activeFocus)
+            keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+            verify(control.control1.activeFocus)
+            verify(!control.control2.activeFocus)
+            verify(!control.control3.activeFocus)
+
+            control.control2.activeFocusOnTab = true
+            control.control3.activeFocusOnTab = false
+            keyPress(Qt.Key_Tab)
+            verify(!control.control1.activeFocus)
+            verify(control.control2.activeFocus)
+            verify(!control.control3.activeFocus)
+            keyPress(Qt.Key_Tab)
+            verify(control.control1.activeFocus)
+            verify(!control.control2.activeFocus)
+            verify(!control.control3.activeFocus)
+            keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+            verify(!control.control1.activeFocus)
+            verify(control.control2.activeFocus)
+            verify(!control.control3.activeFocus)
+            keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+            verify(control.control1.activeFocus)
+            verify(!control.control2.activeFocus)
+            verify(!control.control3.activeFocus)
+            control.destroy()
+        }
     }
 }
diff --git a/tests/auto/controls/data/tst_scrollview.qml b/tests/auto/controls/data/tst_scrollview.qml
index a9e73d1ef..c273c16b7 100644
--- a/tests/auto/controls/data/tst_scrollview.qml
+++ b/tests/auto/controls/data/tst_scrollview.qml
@@ -42,6 +42,11 @@ import QtQuick 2.1
 import QtTest 1.0
 import QtQuick.Controls 1.0
 
+Item {
+    id: container
+    width: 400
+    height: 400
+
 TestCase {
     id: testCase
     name: "Tests_ScrollView"
@@ -107,4 +112,71 @@ TestCase {
         verify(scrollView.viewport.width < prevViewportWidth, "Viewport should be smaller with frame")
         scrollView.destroy()
     }
+
+    function test_activeFocusOnTab() {
+        var test_control = 'import QtQuick 2.1; \
+    import QtQuick.Controls 1.0;            \
+    Item {                                  \
+        width: 200;                         \
+        height: 200;                        \
+        property alias control1: _control1; \
+        property alias control2: _control2; \
+        property alias control3: _control3; \
+        ScrollView {                        \
+            id: _control1;                  \
+            activeFocusOnTab: true;         \
+        }                                   \
+        ScrollView {                        \
+            id: _control2;                  \
+            activeFocusOnTab: false;        \
+        }                                   \
+        ScrollView {                        \
+            id: _control3;                  \
+            activeFocusOnTab: true;         \
+        }                                   \
+    }                                       '
+
+        var control = Qt.createQmlObject(test_control, container, '')
+        control.control1.forceActiveFocus()
+        verify(control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        keyPress(Qt.Key_Tab)
+        verify(!control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(control.control3.activeFocus)
+        keyPress(Qt.Key_Tab)
+        verify(control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+        verify(!control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(control.control3.activeFocus)
+        keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+        verify(control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+
+        control.control2.activeFocusOnTab = true
+        control.control3.activeFocusOnTab = false
+        keyPress(Qt.Key_Tab)
+        verify(!control.control1.activeFocus)
+        verify(control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        keyPress(Qt.Key_Tab)
+        verify(control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+        verify(!control.control1.activeFocus)
+        verify(control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+        verify(control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        control.destroy()
+    }
+}
 }
diff --git a/tests/auto/controls/data/tst_slider.qml b/tests/auto/controls/data/tst_slider.qml
index 88171da5a..6d846fdba 100644
--- a/tests/auto/controls/data/tst_slider.qml
+++ b/tests/auto/controls/data/tst_slider.qml
@@ -155,5 +155,74 @@ Item {
             verify(control.activeFocus)
             control.destroy()
         }
+
+        function test_activeFocusOnTab() {
+            var test_control = 'import QtQuick 2.1; \
+            import QtQuick.Controls 1.0;            \
+            Item {                                  \
+                width: 200;                         \
+                height: 200;                        \
+                property alias control1: _control1; \
+                property alias control2: _control2; \
+                property alias control3: _control3; \
+                Slider  {                           \
+                    y: 20;                          \
+                    id: _control1;                  \
+                    activeFocusOnTab: true;         \
+                }                                   \
+                Slider  {                           \
+                    y: 70;                          \
+                    id: _control2;                  \
+                    activeFocusOnTab: false;        \
+                }                                   \
+                Slider  {                           \
+                    y: 120;                         \
+                    id: _control3;                  \
+                    activeFocusOnTab: true;         \
+                }                                   \
+            }                                       '
+
+            var control = Qt.createQmlObject(test_control, container, '')
+            control.control1.forceActiveFocus()
+            verify(control.control1.activeFocus)
+            verify(!control.control2.activeFocus)
+            verify(!control.control3.activeFocus)
+            keyPress(Qt.Key_Tab)
+            verify(!control.control1.activeFocus)
+            verify(!control.control2.activeFocus)
+            verify(control.control3.activeFocus)
+            keyPress(Qt.Key_Tab)
+            verify(control.control1.activeFocus)
+            verify(!control.control2.activeFocus)
+            verify(!control.control3.activeFocus)
+            keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+            verify(!control.control1.activeFocus)
+            verify(!control.control2.activeFocus)
+            verify(control.control3.activeFocus)
+            keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+            verify(control.control1.activeFocus)
+            verify(!control.control2.activeFocus)
+            verify(!control.control3.activeFocus)
+
+            control.control2.activeFocusOnTab = true
+            control.control3.activeFocusOnTab = false
+            keyPress(Qt.Key_Tab)
+            verify(!control.control1.activeFocus)
+            verify(control.control2.activeFocus)
+            verify(!control.control3.activeFocus)
+            keyPress(Qt.Key_Tab)
+            verify(control.control1.activeFocus)
+            verify(!control.control2.activeFocus)
+            verify(!control.control3.activeFocus)
+            keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+            verify(!control.control1.activeFocus)
+            verify(control.control2.activeFocus)
+            verify(!control.control3.activeFocus)
+            keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+            verify(control.control1.activeFocus)
+            verify(!control.control2.activeFocus)
+            verify(!control.control3.activeFocus)
+            control.destroy()
+        }
     }
 }
diff --git a/tests/auto/controls/data/tst_spinbox.qml b/tests/auto/controls/data/tst_spinbox.qml
index e8b0b5b96..a43dce41d 100644
--- a/tests/auto/controls/data/tst_spinbox.qml
+++ b/tests/auto/controls/data/tst_spinbox.qml
@@ -293,6 +293,76 @@ Item {
             spinbox.destroy()
         }
 
+        function test_activeFocusOnTab() {
+            var test_control = 'import QtQuick 2.1; \
+            import QtQuick.Controls 1.0;            \
+            Item {                                  \
+                width: 200;                         \
+                height: 200;                        \
+                property alias control1: _control1; \
+                property alias control2: _control2; \
+                property alias control3: _control3; \
+                SpinBox  {                          \
+                    y: 20;                          \
+                    id: _control1;                  \
+                    activeFocusOnTab: true;         \
+                }                                   \
+                SpinBox  {                          \
+                    y: 70;                          \
+                    id: _control2;                  \
+                    activeFocusOnTab: false;        \
+                }                                   \
+                SpinBox  {                          \
+                    y: 120;                         \
+                    id: _control3;                  \
+                    activeFocusOnTab: true;         \
+                }                                   \
+            }                                       '
+
+            var control = Qt.createQmlObject(test_control, container, '')
+            control.control1.forceActiveFocus()
+            verify(control.control1.activeFocus)
+            verify(!control.control2.activeFocus)
+            verify(!control.control3.activeFocus)
+            keyPress(Qt.Key_Tab)
+            verify(!control.control1.activeFocus)
+            verify(!control.control2.activeFocus)
+            verify(control.control3.activeFocus)
+            keyPress(Qt.Key_Tab)
+            sleep(4000)
+            verify(control.control1.activeFocus)
+            verify(!control.control2.activeFocus)
+            verify(!control.control3.activeFocus)
+            keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+            verify(!control.control1.activeFocus)
+            verify(!control.control2.activeFocus)
+            verify(control.control3.activeFocus)
+            keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+            verify(control.control1.activeFocus)
+            verify(!control.control2.activeFocus)
+            verify(!control.control3.activeFocus)
+
+            control.control2.activeFocusOnTab = true
+            control.control3.activeFocusOnTab = false
+            keyPress(Qt.Key_Tab)
+            verify(!control.control1.activeFocus)
+            verify(control.control2.activeFocus)
+            verify(!control.control3.activeFocus)
+            keyPress(Qt.Key_Tab)
+            verify(control.control1.activeFocus)
+            verify(!control.control2.activeFocus)
+            verify(!control.control3.activeFocus)
+            keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+            verify(!control.control1.activeFocus)
+            verify(control.control2.activeFocus)
+            verify(!control.control3.activeFocus)
+            keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+            verify(control.control1.activeFocus)
+            verify(!control.control2.activeFocus)
+            verify(!control.control3.activeFocus)
+            control.destroy()
+        }
+
         function test_ImplicitSize() // Verify if we correctly grow and shrink depending on contents
         {
             var spinbox = Qt.createQmlObject('import QtQuick.Controls 1.0; SpinBox {}', container, '')
@@ -338,6 +408,8 @@ Item {
             downCoord.x = upCoord.x
             downCoord.y = item.y + item.height - arrowMargin
         }
+
+
     }
 }
 
diff --git a/tests/auto/controls/data/tst_statusbar.qml b/tests/auto/controls/data/tst_statusbar.qml
index df0a768c5..aa8a7d54d 100644
--- a/tests/auto/controls/data/tst_statusbar.qml
+++ b/tests/auto/controls/data/tst_statusbar.qml
@@ -41,6 +41,11 @@
 import QtQuick 2.1
 import QtTest 1.0
 
+Item {
+    id: container
+    width: 400
+    height: 400
+
 TestCase {
     id: testCase
     name: "Tests_StatusBar"
@@ -52,5 +57,72 @@ TestCase {
         var statusBar = Qt.createQmlObject('import QtQuick.Controls 1.0; StatusBar {}', testCase, '');
         statusBar.destroy()
     }
+
+    function test_activeFocusOnTab() {
+            var test_control = 'import QtQuick 2.1; \
+        import QtQuick.Controls 1.0;            \
+        Item {                                  \
+            width: 200;                         \
+            height: 200;                        \
+            property alias control1: _control1; \
+            property alias control2: _control2; \
+            property alias control3: _control3; \
+            StatusBar {                         \
+                id: _control1;                  \
+                activeFocusOnTab: true;         \
+            }                                   \
+            StatusBar {                         \
+                id: _control2;                  \
+                activeFocusOnTab: false;        \
+            }                                   \
+            StatusBar {                         \
+                id: _control3;                  \
+                activeFocusOnTab: true;         \
+            }                                   \
+        }                                       '
+
+            var control = Qt.createQmlObject(test_control, container, '')
+            control.control1.forceActiveFocus()
+            verify(control.control1.activeFocus)
+            verify(!control.control2.activeFocus)
+            verify(!control.control3.activeFocus)
+            keyPress(Qt.Key_Tab)
+            verify(!control.control1.activeFocus)
+            verify(!control.control2.activeFocus)
+            verify(control.control3.activeFocus)
+            keyPress(Qt.Key_Tab)
+            verify(control.control1.activeFocus)
+            verify(!control.control2.activeFocus)
+            verify(!control.control3.activeFocus)
+            keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+            verify(!control.control1.activeFocus)
+            verify(!control.control2.activeFocus)
+            verify(control.control3.activeFocus)
+            keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+            verify(control.control1.activeFocus)
+            verify(!control.control2.activeFocus)
+            verify(!control.control3.activeFocus)
+
+            control.control2.activeFocusOnTab = true
+            control.control3.activeFocusOnTab = false
+            keyPress(Qt.Key_Tab)
+            verify(!control.control1.activeFocus)
+            verify(control.control2.activeFocus)
+            verify(!control.control3.activeFocus)
+            keyPress(Qt.Key_Tab)
+            verify(control.control1.activeFocus)
+            verify(!control.control2.activeFocus)
+            verify(!control.control3.activeFocus)
+            keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+            verify(!control.control1.activeFocus)
+            verify(control.control2.activeFocus)
+            verify(!control.control3.activeFocus)
+            keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+            verify(control.control1.activeFocus)
+            verify(!control.control2.activeFocus)
+            verify(!control.control3.activeFocus)
+            control.destroy()
+    }
+}
 }
 
diff --git a/tests/auto/controls/data/tst_textarea.qml b/tests/auto/controls/data/tst_textarea.qml
index 0756e4c24..7391daea1 100644
--- a/tests/auto/controls/data/tst_textarea.qml
+++ b/tests/auto/controls/data/tst_textarea.qml
@@ -78,5 +78,82 @@ TestCase {
         verify(control.activeFocus)
         control.destroy()
     }
+
+    function test_activeFocusOnTab() {
+        // Set TextArea readonly so the tab/backtab can be tested toward the navigation
+        var test_control = 'import QtQuick 2.1; \
+        import QtQuick.Controls 1.0;            \
+        Item {                                  \
+            width: 200;                         \
+            height: 200;                        \
+            property alias control1: _control1; \
+            property alias control2: _control2; \
+            property alias control3: _control3; \
+            TextArea  {                         \
+                y: 20;                          \
+                id: _control1;                  \
+                activeFocusOnTab: true;         \
+                text: "control1";               \
+                readOnly: true                  \
+            }                                   \
+            TextArea  {                         \
+                y: 70;                          \
+                id: _control2;                  \
+                activeFocusOnTab: false;        \
+                text: "control2";               \
+                readOnly: true                  \
+            }                                   \
+            TextArea  {                         \
+                y: 120;                         \
+                id: _control3;                  \
+                activeFocusOnTab: true;         \
+                text: "control3";               \
+                readOnly: true                  \
+            }                                   \
+        }                                       '
+
+        var control = Qt.createQmlObject(test_control, container, '')
+
+        control.control1.forceActiveFocus()
+        verify(control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        keyPress(Qt.Key_Tab)
+        verify(!control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(control.control3.activeFocus)
+        keyPress(Qt.Key_Tab)
+        verify(control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+        verify(!control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(control.control3.activeFocus)
+        keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+        verify(control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+
+        control.control2.activeFocusOnTab = true
+        control.control3.activeFocusOnTab = false
+        keyPress(Qt.Key_Tab)
+        verify(!control.control1.activeFocus)
+        verify(control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        keyPress(Qt.Key_Tab)
+        verify(control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+        verify(!control.control1.activeFocus)
+        verify(control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+        verify(control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        control.destroy()
+    }
 }
 }
diff --git a/tests/auto/controls/data/tst_textfield.qml b/tests/auto/controls/data/tst_textfield.qml
index 14a18b0e5..6c5ce6b58 100644
--- a/tests/auto/controls/data/tst_textfield.qml
+++ b/tests/auto/controls/data/tst_textfield.qml
@@ -276,5 +276,82 @@ TestCase {
         verify(control.activeFocus)
         control.destroy()
     }
+
+    function test_activeFocusOnTab() {
+        // Set TextField readonly so the tab/backtab can be tested toward the navigation
+        var test_control = 'import QtQuick 2.1; \
+        import QtQuick.Controls 1.0;            \
+        Item {                                  \
+            width: 200;                         \
+            height: 200;                        \
+            property alias control1: _control1; \
+            property alias control2: _control2; \
+            property alias control3: _control3; \
+            TextField  {                         \
+                y: 20;                          \
+                id: _control1;                  \
+                activeFocusOnTab: true;         \
+                text: "control1";               \
+                readOnly: true                  \
+            }                                   \
+            TextField  {                         \
+                y: 70;                          \
+                id: _control2;                  \
+                activeFocusOnTab: false;        \
+                text: "control2";               \
+                readOnly: true                  \
+            }                                   \
+            TextField  {                         \
+                y: 120;                         \
+                id: _control3;                  \
+                activeFocusOnTab: true;         \
+                text: "control3";               \
+                readOnly: true                  \
+            }                                   \
+        }                                       '
+
+        var control = Qt.createQmlObject(test_control, container, '')
+
+        control.control1.forceActiveFocus()
+        verify(control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        keyPress(Qt.Key_Tab)
+        verify(!control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(control.control3.activeFocus)
+        keyPress(Qt.Key_Tab)
+        verify(control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+        verify(!control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(control.control3.activeFocus)
+        keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+        verify(control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+
+        control.control2.activeFocusOnTab = true
+        control.control3.activeFocusOnTab = false
+        keyPress(Qt.Key_Tab)
+        verify(!control.control1.activeFocus)
+        verify(control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        keyPress(Qt.Key_Tab)
+        verify(control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+        verify(!control.control1.activeFocus)
+        verify(control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+        verify(control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        control.destroy()
+    }
 }
 }
diff --git a/tests/auto/controls/data/tst_toolbar.qml b/tests/auto/controls/data/tst_toolbar.qml
index 75cacf93b..fc545bd5e 100644
--- a/tests/auto/controls/data/tst_toolbar.qml
+++ b/tests/auto/controls/data/tst_toolbar.qml
@@ -41,6 +41,11 @@
 import QtQuick 2.1
 import QtTest 1.0
 
+Item {
+    id: container
+    width: 400
+    height: 400
+
 TestCase {
     id: testCase
     name: "Tests_ToolBar"
@@ -52,5 +57,72 @@ TestCase {
         var toolBar = Qt.createQmlObject('import QtQuick.Controls 1.0; ToolBar {}', testCase, '');
         toolBar.destroy()
     }
+
+    function test_activeFocusOnTab() {
+        var test_control = 'import QtQuick 2.1; \
+    import QtQuick.Controls 1.0;            \
+    Item {                                  \
+        width: 200;                         \
+        height: 200;                        \
+        property alias control1: _control1; \
+        property alias control2: _control2; \
+        property alias control3: _control3; \
+        ToolBar {                           \
+            id: _control1;                  \
+            activeFocusOnTab: true;         \
+        }                                   \
+        ToolBar {                           \
+            id: _control2;                  \
+            activeFocusOnTab: false;        \
+        }                                   \
+        ToolBar {                           \
+            id: _control3;                  \
+            activeFocusOnTab: true;         \
+        }                                   \
+    }                                       '
+
+        var control = Qt.createQmlObject(test_control, container, '')
+        control.control1.forceActiveFocus()
+        verify(control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        keyPress(Qt.Key_Tab)
+        verify(!control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(control.control3.activeFocus)
+        keyPress(Qt.Key_Tab)
+        verify(control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+        verify(!control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(control.control3.activeFocus)
+        keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+        verify(control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+
+        control.control2.activeFocusOnTab = true
+        control.control3.activeFocusOnTab = false
+        keyPress(Qt.Key_Tab)
+        verify(!control.control1.activeFocus)
+        verify(control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        keyPress(Qt.Key_Tab)
+        verify(control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+        verify(!control.control1.activeFocus)
+        verify(control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+        verify(control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        control.destroy()
+    }
+}
 }
 
diff --git a/tests/auto/controls/data/tst_toolbutton.qml b/tests/auto/controls/data/tst_toolbutton.qml
index af33cd5a6..9ce7b1434 100644
--- a/tests/auto/controls/data/tst_toolbutton.qml
+++ b/tests/auto/controls/data/tst_toolbutton.qml
@@ -70,6 +70,79 @@ TestCase {
         verify(control.activeFocus)
         control.destroy()
     }
+
+    function test_activeFocusOnTab() {
+        var test_control = 'import QtQuick 2.1; \
+        import QtQuick.Controls 1.0;            \
+        Item {                                  \
+            width: 200;                         \
+            height: 200;                        \
+            property alias control1: _control1; \
+            property alias control2: _control2; \
+            property alias control3: _control3; \
+            ToolButton  {                       \
+                y: 20;                          \
+                id: _control1;                  \
+                activeFocusOnTab: true;         \
+                text: "control1"                \
+            }                                   \
+            ToolButton  {                       \
+                y: 70;                          \
+                id: _control2;                  \
+                activeFocusOnTab: false;        \
+                text: "control2"                \
+            }                                   \
+            ToolButton  {                       \
+                y: 120;                         \
+                id: _control3;                  \
+                activeFocusOnTab: true;         \
+                text: "control3"                \
+            }                                   \
+        }                                       '
+
+        var control = Qt.createQmlObject(test_control, container, '')
+
+        control.control1.forceActiveFocus()
+        verify(control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        keyPress(Qt.Key_Tab)
+        verify(!control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(control.control3.activeFocus)
+        keyPress(Qt.Key_Tab)
+        verify(control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+        verify(!control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(control.control3.activeFocus)
+        keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+        verify(control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+
+        control.control2.activeFocusOnTab = true
+        control.control3.activeFocusOnTab = false
+        keyPress(Qt.Key_Tab)
+        verify(!control.control1.activeFocus)
+        verify(control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        keyPress(Qt.Key_Tab)
+        verify(control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+        verify(!control.control1.activeFocus)
+        verify(control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        keyPress(Qt.Key_Tab, Qt.ShiftModifier)
+        verify(control.control1.activeFocus)
+        verify(!control.control2.activeFocus)
+        verify(!control.control3.activeFocus)
+        control.destroy()
+    }
 }
 }
 
-- 
GitLab