/* SPDX-FileCopyrightText: 2023 Fushan Wen SPDX-License-Identifier: LGPL-2.1-or-later */ import QtQuick import QtQuick.Layouts import QtQuick.Controls as QQC import QtTest import org.kde.kirigami as Kirigami TestCase { id: testCase width: 400 height: 400 name: "ScrollablePageTest" visible: false SignalSpy { id: currentItemChangedSpy target: mainWindow.pageStack signalName: "currentItemChanged" } // Simulate KCM.ScrollViewKCM Kirigami.ApplicationWindow { id: mainWindow width: 480 height: 360 pageStack.initialPage: Kirigami.Page { id: root function clickFirst() { userList.itemAtIndex(0).clicked(); } property alias view: scroll.view view: ListView { id: userList model: 1 delegate: QQC.ItemDelegate { id: delegate width: ListView.view.width text: String(index) onClicked: { mainWindow.pageStack.pop(); mainWindow.pageStack.push(subPageComponent); console.log("clicked") } } } QQC.ScrollView { id: scroll anchors.fill: parent property Flickable view activeFocusOnTab: false contentItem: view onViewChanged: { view.parent = scroll; } Kirigami.Theme.colorSet: Kirigami.Theme.View Kirigami.Theme.inherit: false } } } Component { id: subPageComponent Kirigami.ScrollablePage { readonly property alias success: realNametextField.activeFocus focus: true ColumnLayout { QQC.TextField { id: realNametextField focus: true text: "This item should be focused by default" } QQC.TextField { id: userNameField text: "ddeeff" } } } } function initTestCase() { mainWindow.show() mainWindow.requestActivate(); tryVerify(() => mainWindow.active); } function cleanupTestCase() { mainWindow.close() } function test_defaultFocusInScrollablePage() { mainWindow.pageStack.currentItem.clickFirst(); if (!(mainWindow.pageStack.currentItem instanceof Kirigami.ScrollablePage)) { currentItemChangedSpy.wait() } verify(mainWindow.pageStack.currentItem instanceof Kirigami.ScrollablePage) // Consolidate the workaround for QTBUG-44043 // https://invent.kde.org/frameworks/kirigami/-/commit/fd253ea5d9fa3f33411e54a596c021f51b5a102a tryVerify(() => mainWindow.pageStack.currentItem.success) } }