Warning, /frameworks/kirigami/autotests/pagepool/tst_layers.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 * SPDX-FileCopyrightText: 2020 Mason McParlane <mtmcp@outlook.com> 0003 * 0004 * SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 import QtQuick 0008 import QtQuick.Controls 0009 import QtQuick.Window 0010 import org.kde.kirigami as Kirigami 0011 import QtTest 0012 0013 TestCase { 0014 id: testCase 0015 width: 400 0016 height: 400 0017 name: "PagePoolWithLayers" 0018 when: windowShown 0019 0020 function initTestCase() { 0021 mainWindow.show() 0022 } 0023 0024 function cleanupTestCase() { 0025 mainWindow.close() 0026 } 0027 0028 Kirigami.ApplicationWindow { 0029 id: mainWindow 0030 width: 480 0031 height: 360 0032 } 0033 0034 Kirigami.PagePool { 0035 id: pool 0036 } 0037 0038 SignalSpy { 0039 id: stackSpy 0040 target: mainWindow.pageStack 0041 signalName: "onCurrentItemChanged" 0042 } 0043 0044 SignalSpy { 0045 id: layerSpy 0046 target: mainWindow.pageStack.layers 0047 signalName: "onCurrentItemChanged" 0048 } 0049 0050 0051 function init() { 0052 pool.clear() 0053 mainWindow.pageStack.layers.clear() 0054 compare(mainWindow.pageStack.layers.depth, 1) 0055 mainWindow.pageStack.clear() 0056 0057 for (var spy of [stackSpy, layerSpy, checkSpy_A, checkSpy_B, checkSpy_C, checkSpy_D, checkSpy_E]) { 0058 spy.clear() 0059 } 0060 0061 // Give mainWindow a bit of room to breathe so it can process item 0062 // deletion and other delayed signals. 0063 wait(50) 0064 } 0065 0066 ActionGroup { 0067 id: group 0068 exclusive: false 0069 0070 Kirigami.PagePoolAction { 0071 id: stackPageA 0072 objectName: "stackPageA" 0073 pagePool: pool 0074 pageStack: mainWindow.pageStack 0075 page: "TestPage.qml?page=A" 0076 initialProperties: { return {title: "A", objectName: "Page A" } } 0077 } 0078 0079 Kirigami.PagePoolAction { 0080 id: stackPageB 0081 objectName: "stackPageB" 0082 pagePool: pool 0083 pageStack: mainWindow.pageStack 0084 page: "TestPage.qml?page=B" 0085 initialProperties: { return {title: "B", objectName: "Page B" } } 0086 } 0087 0088 Kirigami.PagePoolAction { 0089 id: layerPageC 0090 objectName: "layerPageC" 0091 pagePool: pool 0092 pageStack: mainWindow.pageStack 0093 useLayers: true 0094 page: "TestPage.qml?page=C" 0095 initialProperties: { return {title: "C", objectName: "Page C" } } 0096 } 0097 0098 Kirigami.PagePoolAction { 0099 id: layerPageD 0100 objectName: "layerPageD" 0101 pagePool: pool 0102 pageStack: mainWindow.pageStack 0103 useLayers: true 0104 page: "TestPage.qml?page=D" 0105 initialProperties: { return {title: "D", objectName: "Page D" } } 0106 } 0107 0108 Kirigami.PagePoolAction { 0109 id: stackPageE 0110 objectName: "stackPageE" 0111 pagePool: pool 0112 pageStack: mainWindow.pageStack 0113 page: "TestPage.qml?page=E" 0114 initialProperties: { return {title: "E", objectName: "Page E" } } 0115 } 0116 } 0117 0118 function tapBack () { 0119 mouseClick(mainWindow, 10, 10) 0120 } 0121 0122 function test_pushLayerBackButtonPushAgain() { 0123 var stack = mainWindow.pageStack 0124 var layers = stack.layers 0125 0126 function pushA() { 0127 stackPageA.trigger() 0128 compare(stack.currentItem, pool.lastLoadedItem) 0129 } 0130 0131 function pushC () { 0132 layerPageC.trigger() 0133 compare(layers.currentItem, pool.lastLoadedItem) 0134 } 0135 0136 function pushD () { 0137 layerPageD.trigger() 0138 compare(layers.currentItem, pool.lastLoadedItem) 0139 } 0140 0141 compare(stackSpy.count, 0) 0142 pushA() 0143 compare(stackSpy.count, 1) 0144 compare(layerSpy.count, 0) 0145 pushC() 0146 compare(layerSpy.count, 1) 0147 pushD() 0148 compare(layerSpy.count, 2) 0149 compare(stackSpy.count, 1) 0150 tapBack() 0151 compare(layerSpy.count, 3) 0152 pushD() 0153 compare(layerSpy.count, 4) 0154 } 0155 0156 SignalSpy { 0157 id: checkSpy_A 0158 target: stackPageA 0159 signalName: "onCheckedChanged" 0160 } 0161 0162 SignalSpy { 0163 id: checkSpy_B 0164 target: stackPageB 0165 signalName: "onCheckedChanged" 0166 } 0167 0168 SignalSpy { 0169 id: checkSpy_C 0170 target: layerPageC 0171 signalName: "onCheckedChanged" 0172 } 0173 0174 SignalSpy { 0175 id: checkSpy_D 0176 target: layerPageD 0177 signalName: "onCheckedChanged" 0178 } 0179 0180 SignalSpy { 0181 id: checkSpy_E 0182 target: stackPageE 0183 signalName: "onCheckedChanged" 0184 } 0185 0186 function dump_layers(msg = "") { 0187 for (var i = 0; i < mainWindow.pageStack.layers.depth; ++i) { 0188 console.debug(`${msg} ${i}: ${mainWindow.pageStack.layers.get(i)}`) 0189 } 0190 } 0191 0192 function test_checked() { 0193 var stack = mainWindow.pageStack 0194 var layers = stack.layers 0195 0196 function testCheck(expected = {}) { 0197 let defaults = { 0198 a: false, b: false, c: false, d: false, e: false 0199 } 0200 let actual = Object.assign({}, defaults, expected) 0201 let pages = {a: stackPageA, b: stackPageB, c: layerPageC, d: layerPageD, e: stackPageE} 0202 0203 for (const prop in actual) { 0204 compare(pages[prop].checked, actual[prop], 0205 `${pages[prop]} should ${actual[prop] ? 'be checked' : 'not be checked'}`) 0206 } 0207 } 0208 0209 testCheck() 0210 0211 compare(stackSpy.count, 0) 0212 compare(layerSpy.count, 0) 0213 compare(checkSpy_A.count, 0) 0214 compare(checkSpy_B.count, 0) 0215 compare(checkSpy_C.count, 0) 0216 compare(checkSpy_D.count, 0) 0217 compare(checkSpy_E.count, 0) 0218 0219 stackPageA.trigger() 0220 compare(checkSpy_A.count, 1) 0221 testCheck({a:true}) 0222 compare(stack.currentItem, stackPageA.pageItem()) 0223 0224 stackPageB.trigger() 0225 compare(checkSpy_A.count, 2) 0226 compare(checkSpy_B.count, 3) 0227 testCheck({b:true}) 0228 compare(stack.currentItem, stackPageB.pageItem()) 0229 0230 layerPageC.trigger() 0231 testCheck({b:true, c:true}) 0232 compare(checkSpy_C.count, 1) 0233 compare(stack.currentItem, stackPageB.pageItem()) 0234 compare(layers.currentItem, layerPageC.pageItem()) 0235 compare(layerPageC.layerContainsPage(), true) 0236 0237 layerPageD.trigger() 0238 compare(stack.currentItem, stackPageB.pageItem()) 0239 compare(layers.currentItem, layerPageD.pageItem()) 0240 testCheck({b:true, c:true, d:true}) 0241 0242 stackPageE.basePage = stack.currentItem 0243 stackPageE.trigger() 0244 testCheck({b:true, e:true}) 0245 compare(stack.currentItem, stackPageE.pageItem()) 0246 verify(!(layers.currentItem instanceof Page), 0247 `Current item ${layers.currentItem} is a page but all pages should be popped`) 0248 0249 stackPageA.trigger() 0250 testCheck({a:true}) 0251 compare(stack.currentItem, stackPageA.pageItem()) 0252 verify(!(layers.currentItem instanceof Page), 0253 `Current item ${layers.currentItem} is a page but all pages should be popped`) 0254 0255 compare(checkSpy_A.count, 5) 0256 compare(checkSpy_B.count, 4) 0257 compare(checkSpy_C.count, 2) 0258 compare(checkSpy_D.count, 2) 0259 compare(checkSpy_E.count, 2) 0260 } 0261 0262 function test_push_A_C_D_A_popsLayers() { 0263 var stack = mainWindow.pageStack 0264 var layers = stack.layers 0265 0266 stackPageA.trigger() 0267 compare(stack.currentItem, stackPageA.pageItem()) 0268 0269 layerPageC.trigger() 0270 compare(layers.currentItem, layerPageC.pageItem()) 0271 0272 layerPageD.trigger() 0273 compare(layers.currentItem, layerPageD.pageItem()) 0274 0275 stackPageA.trigger() 0276 compare(stack.currentItem, stackPageA.pageItem()) 0277 verify(!(layers.currentItem instanceof Page), 0278 `Current item ${layers.currentItem} is a page but all pages should be popped`) 0279 } 0280 0281 function test_push_A_C_D_back_back_C_back_C() { 0282 var stack = mainWindow.pageStack 0283 var layers = stack.layers 0284 0285 stackPageA.trigger() 0286 layerPageC.trigger() 0287 layerPageD.trigger() 0288 tapBack() 0289 tapBack() 0290 layerPageC.trigger() 0291 tapBack() 0292 layerPageC.trigger() 0293 compare(layers.currentItem, layerPageC.pageItem()) 0294 } 0295 0296 function test_exclusive_group() { 0297 var stack = mainWindow.pageStack 0298 var layers = stack.layers 0299 0300 group.exclusive = true 0301 stackPageA.trigger() 0302 compare(stackPageA.checked, true) 0303 compare(layerPageC.checked, false) 0304 layerPageC.trigger() 0305 compare(stackPageA.checked, false) 0306 compare(layerPageC.checked, true) 0307 tapBack() 0308 compare(stackPageA.checked, true) 0309 compare(layerPageC.checked, false) 0310 } 0311 }