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 }