Warning, /frameworks/kirigami/autotests/tst_globaldrawer.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 * SPDX-FileCopyrightText: 2023 ivan tkachenko <me@ratijas.tk> 0003 * 0004 * SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 import QtQuick 0008 import QtQuick.Controls as QQC2 0009 import QtQuick.Layouts 0010 import QtQuick.Templates as T 0011 import org.kde.kirigami as Kirigami 0012 import QtTest 0013 0014 // Inline components are needed because ApplicationItem and 0015 // ApplicationWindow types expect themselves to be top-level components. 0016 TestCase { 0017 name: "GlobalDrawerHeader" 0018 visible: true 0019 when: windowShown 0020 0021 width: 500 0022 height: 500 0023 0024 component AppItemComponent : Kirigami.ApplicationItem { 0025 id: app 0026 0027 property alias headerItem: headerItem 0028 property alias topItem: topItem 0029 0030 width: 500 0031 height: 500 0032 visible: true 0033 0034 globalDrawer: Kirigami.GlobalDrawer { 0035 drawerOpen: true 0036 0037 header: Rectangle { 0038 id: headerItem 0039 implicitHeight: 50 0040 implicitWidth: 50 0041 color: "red" 0042 radius: 20 // to see its bounds 0043 } 0044 0045 // Create some item which we can use to measure actual header height 0046 Rectangle { 0047 id: topItem 0048 Layout.fillWidth: true 0049 Layout.fillHeight: true 0050 color: "green" 0051 radius: 20 // to see its bounds 0052 } 0053 } 0054 } 0055 0056 Component { 0057 id: appItemComponent 0058 AppItemComponent {} 0059 } 0060 0061 function test_headerItemVisibility() { 0062 if (Qt.platform.os === "unix") { 0063 skip("On FreeBSD Qt 6.5 fails deep inside generated MOC code for `drawerOpen: true` binding"); 0064 } 0065 const app = createTemporaryObject(appItemComponent, this); 0066 verify(app); 0067 const { headerItem, topItem } = app; 0068 0069 compare(app.globalDrawer.parent, app.T.Overlay.overlay); 0070 0071 waitForRendering(app.globalDrawer.contentItem); 0072 0073 const overlay = T.Overlay.overlay; 0074 verify(headerItem.height !== 0); 0075 0076 // Due to margins, position won't be exactly zero... 0077 const position = topItem.mapToItem(overlay, 0, 0); 0078 verify(position.y > 0); 0079 const oldY = position.y; 0080 0081 // ...but with visible header it would be greater than with invisible. 0082 headerItem.visible = false; 0083 tryVerify(() => { 0084 const position = topItem.mapToItem(overlay, 0, 0); 0085 return position.y < oldY; 0086 }); 0087 0088 // And now return it back to where we started. 0089 headerItem.visible = true; 0090 tryVerify(() => { 0091 const position = topItem.mapToItem(overlay, 0, 0); 0092 return position.y === oldY; 0093 }); 0094 } 0095 0096 component AppItemLoaderComponent : Kirigami.ApplicationItem { 0097 globalDrawer: globalDrawerLoader.item 0098 contextDrawer: contextDrawerLoader.item 0099 0100 Loader { 0101 id: globalDrawerLoader 0102 active: true 0103 sourceComponent: Kirigami.GlobalDrawer {} 0104 } 0105 Loader { 0106 id: contextDrawerLoader 0107 active: true 0108 sourceComponent: Kirigami.ContextDrawer {} 0109 } 0110 } 0111 0112 Component { 0113 id: appItemLoaderComponent 0114 AppItemLoaderComponent {} 0115 } 0116 0117 component AppWindowLoaderComponent : Kirigami.ApplicationWindow { 0118 globalDrawer: globalDrawerLoader.item 0119 contextDrawer: contextDrawerLoader.item 0120 0121 Loader { 0122 id: globalDrawerLoader 0123 active: true 0124 sourceComponent: Kirigami.GlobalDrawer {} 0125 } 0126 Loader { 0127 id: contextDrawerLoader 0128 active: true 0129 sourceComponent: Kirigami.ContextDrawer {} 0130 } 0131 } 0132 0133 Component { 0134 id: appWindowLoaderComponent 0135 AppWindowLoaderComponent {} 0136 } 0137 0138 function test_reparentingFromLoader_data() { 0139 return [ 0140 { tag: "item", component: appItemLoaderComponent }, 0141 { tag: "window", component: appWindowLoaderComponent }, 0142 ]; 0143 } 0144 0145 function test_reparentingFromLoader({ component }) { 0146 const app = createTemporaryObject(component, this); 0147 verify(app); 0148 0149 compare(app.globalDrawer.parent, app.T.Overlay.overlay); 0150 compare(app.contextDrawer.parent, app.T.Overlay.overlay); 0151 } 0152 }