Warning, /frameworks/kirigami/autotests/tst_headerfooterlayout.qml is written in an unsupported language. File is not indexed.
0001 /*
0002 * SPDX-FileCopyrightText: 2023 Marco Martin <mart@kde.org>
0003 * SPDX-FileCopyrightText: 2023 ivan tkachenko <me@ratijas.tk>
0004 *
0005 * SPDX-License-Identifier: LGPL-2.0-or-later
0006 */
0007
0008 import QtQuick
0009 import QtQuick.Controls as QQC2
0010 import QtQuick.Layouts
0011 import QtTest
0012 import org.kde.kirigami as Kirigami
0013
0014 TestCase {
0015 id: testCase
0016
0017 name: "HeaderFooterLayoutTests"
0018 when: windowShown
0019
0020 width: 300
0021 height: 300
0022 visible: true
0023
0024 Component {
0025 id: implicitSizeComponent
0026 Kirigami.HeaderFooterLayout {
0027 header: Rectangle {
0028 color: "red"
0029 implicitHeight: 30
0030 implicitWidth: 100
0031 }
0032 contentItem: Rectangle {
0033 color: "green"
0034 implicitHeight: 40
0035 implicitWidth: 110
0036 }
0037 footer: Rectangle {
0038 color: "blue"
0039 implicitHeight: 25
0040 implicitWidth: 120
0041 }
0042 }
0043 }
0044
0045 Component {
0046 id: nestedLayoutComponent
0047 ColumnLayout {
0048 Rectangle {
0049 color: "red"
0050 Layout.fillWidth: true
0051 Layout.minimumHeight: 50
0052 }
0053 Kirigami.HeaderFooterLayout {
0054 Layout.fillWidth: true
0055 Layout.fillHeight: true
0056 header: Rectangle {
0057 color: "red"
0058 implicitHeight: 30
0059 implicitWidth: 100
0060 }
0061 contentItem: Rectangle {
0062 color: "green"
0063 implicitHeight: 40
0064 implicitWidth: 110
0065 }
0066 footer: Rectangle {
0067 color: "blue"
0068 implicitHeight: 25
0069 implicitWidth: 120
0070 }
0071 }
0072 }
0073 }
0074
0075 function test_implicit_sizes_standalone_layout() {
0076 const layout = createTemporaryObject(implicitSizeComponent, this);
0077 verify(layout);
0078
0079 compare(layout.implicitHeight, 95);
0080 compare(layout.implicitWidth, 120);
0081 compare(layout.height, 95);
0082 compare(layout.width, 120);
0083
0084 compare(layout.header.width, 120);
0085 compare(layout.header.height, 30);
0086
0087 compare(layout.footer.width, 120);
0088 compare(layout.footer.height, 25);
0089
0090 compare(layout.contentItem.width, 120);
0091 compare(layout.contentItem.height, 40);
0092
0093 layout.height = 130;
0094 verify(waitForItemPolished(layout));
0095
0096 // Header and footer don't change
0097 compare(layout.header.width, 120);
0098 compare(layout.header.height, 30);
0099
0100 compare(layout.footer.width, 120);
0101 compare(layout.footer.height, 25);
0102
0103 // ContentItem stretchesvertically
0104 compare(layout.contentItem.width, 120);
0105 compare(layout.contentItem.height, 75);
0106
0107 layout.width = 200;
0108 verify(waitForItemPolished(layout));
0109 // Everything stretched only horizontally
0110 compare(layout.header.width, 200);
0111 compare(layout.header.height, 30);
0112
0113 compare(layout.footer.width, 200);
0114 compare(layout.footer.height, 25);
0115
0116 compare(layout.contentItem.width, 200);
0117 compare(layout.contentItem.height, 75);
0118
0119 // change header implicit size
0120 layout.header.implicitHeight = 40;
0121 verify(waitForItemPolished(layout));
0122 compare(layout.implicitHeight, 105);
0123 compare(layout.implicitWidth, 120);
0124 compare(layout.height, 130);
0125 compare(layout.width, 200);
0126
0127 compare(layout.header.width, 200);
0128 compare(layout.header.height, 40);
0129
0130 compare(layout.footer.width, 200);
0131 compare(layout.footer.height, 25);
0132
0133 compare(layout.contentItem.width, 200);
0134 compare(layout.contentItem.height, 65);
0135
0136 // hide header
0137 layout.header.visible = false;
0138 verify(waitForItemPolished(layout));
0139 compare(layout.implicitHeight, 65);
0140 compare(layout.implicitWidth, 120);
0141 compare(layout.height, 130);
0142 compare(layout.width, 200);
0143
0144 compare(layout.header.width, 200);
0145 compare(layout.header.height, 40);
0146
0147 compare(layout.footer.width, 200);
0148 compare(layout.footer.height, 25);
0149
0150 compare(layout.contentItem.width, 200);
0151 compare(layout.contentItem.height, 105);
0152
0153 // force polish right now
0154 verify(!isPolishScheduled(layout));
0155 layout.header.visible = true;
0156 verify(isPolishScheduled(layout));
0157 compare(layout.implicitHeight, 65);
0158 layout.forceLayout();
0159 compare(layout.implicitHeight, 105);
0160 verify(waitForItemPolished(layout));
0161 compare(layout.implicitHeight, 105);
0162 }
0163
0164 function test_implicit_sizes_nested_layout() {
0165 const columnLayout = createTemporaryObject(nestedLayoutComponent, this);
0166 verify(columnLayout);
0167 const headerFooterLayout = columnLayout.children[1];
0168 verify(waitForRendering(columnLayout));
0169 verify(headerFooterLayout instanceof Kirigami.HeaderFooterLayout);
0170
0171 compare(columnLayout.implicitHeight, 95 + 50 + columnLayout.spacing);
0172 compare(columnLayout.implicitHeight, columnLayout.height);
0173
0174 compare(headerFooterLayout.implicitHeight, 95);
0175 compare(headerFooterLayout.implicitWidth, 120);
0176 compare(headerFooterLayout.height, 95);
0177 compare(headerFooterLayout.width, 120);
0178
0179 compare(headerFooterLayout.header.width, 120);
0180 compare(headerFooterLayout.header.height, 30);
0181
0182 compare(headerFooterLayout.footer.width, 120);
0183 compare(headerFooterLayout.footer.height, 25);
0184
0185 compare(headerFooterLayout.contentItem.width, 120);
0186 compare(headerFooterLayout.contentItem.height, 40);
0187
0188 columnLayout.height = 200;
0189 verify(waitForItemPolished(columnLayout));
0190 verify(waitForItemPolished(headerFooterLayout));
0191
0192 // headerFooterLayout should have stretched
0193 compare(headerFooterLayout.implicitHeight, 95);
0194 compare(headerFooterLayout.implicitWidth, 120);
0195 compare(headerFooterLayout.height, 145);
0196 compare(headerFooterLayout.width, 120);
0197
0198 compare(headerFooterLayout.header.width, 120);
0199 compare(headerFooterLayout.header.height, 30);
0200
0201 compare(headerFooterLayout.footer.width, 120);
0202 compare(headerFooterLayout.footer.height, 25);
0203
0204 compare(headerFooterLayout.contentItem.width, 120);
0205 compare(headerFooterLayout.contentItem.height, 90);
0206
0207 // change header implicit size
0208 headerFooterLayout.header.implicitHeight = 40;
0209 verify(waitForItemPolished(columnLayout));
0210 verify(waitForItemPolished(headerFooterLayout));
0211
0212 compare(headerFooterLayout.implicitHeight, 105);
0213 compare(headerFooterLayout.implicitWidth, 120);
0214 compare(headerFooterLayout.height, 145);
0215 compare(headerFooterLayout.width, 120);
0216
0217 compare(headerFooterLayout.header.width, 120);
0218 compare(headerFooterLayout.header.height, 40);
0219
0220 compare(headerFooterLayout.footer.width, 120);
0221 compare(headerFooterLayout.footer.height, 25);
0222
0223 compare(headerFooterLayout.contentItem.width, 120);
0224 compare(headerFooterLayout.contentItem.height, 80);
0225
0226 // hide header
0227 headerFooterLayout.header.visible = false;
0228 verify(waitForItemPolished(columnLayout));
0229 verify(waitForItemPolished(headerFooterLayout));
0230
0231 compare(headerFooterLayout.implicitHeight, 65);
0232 compare(headerFooterLayout.implicitWidth, 120);
0233 compare(headerFooterLayout.height, 145);
0234 compare(headerFooterLayout.width, 120);
0235
0236 compare(headerFooterLayout.header.width, 120);
0237 compare(headerFooterLayout.header.height, 40);
0238
0239 compare(headerFooterLayout.footer.width, 120);
0240 compare(headerFooterLayout.footer.height, 25);
0241
0242 compare(headerFooterLayout.contentItem.width, 120);
0243 compare(headerFooterLayout.contentItem.height, 120);
0244 }
0245
0246 function test_disconnect_old_items() {
0247 const layout = createTemporaryObject(implicitSizeComponent, this);
0248 verify(layout);
0249
0250 verify(isPolishScheduled(layout));
0251 verify(waitForItemPolished(layout));
0252
0253 for (const partName of ["header", "contentItem", "footer"]) {
0254 const part = layout[partName];
0255
0256 part.implicitHeight = 10;
0257
0258 verify(isPolishScheduled(layout));
0259 verify(waitForItemPolished(layout));
0260
0261 layout[partName] = null;
0262
0263 verify(isPolishScheduled(layout));
0264 verify(waitForItemPolished(layout));
0265
0266 part.implicitHeight = 20;
0267
0268 verify(!isPolishScheduled(layout));
0269 }
0270
0271 }
0272 }