Warning, /frameworks/kirigami/autotests/tst_dialogs.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.Templates as T
0009 import org.kde.kirigami as Kirigami
0010 import QtTest
0011 
0012 TestCase {
0013     name: "KirigamiDialogsTest"
0014     visible: true
0015     when: windowShown
0016 
0017     width: 500
0018     height: 500
0019 
0020     Component {
0021         id: dialogComponent
0022         Kirigami.Dialog {
0023             id: dialog
0024 
0025             readonly property SignalSpy acceptedSpy: SignalSpy {
0026                 target: dialog
0027                 signalName: "accepted"
0028             }
0029             readonly property SignalSpy rejectedSpy: SignalSpy {
0030                 target: dialog
0031                 signalName: "rejected"
0032             }
0033             readonly property Kirigami.Action kActionA: Kirigami.Action {
0034                 text: "Kirigami Action A"
0035                 property int count: 0
0036                 onTriggered: count += 1;
0037             }
0038             readonly property Kirigami.Action kActionB: Kirigami.Action {
0039                 text: "Kirigami Action B"
0040                 visible: false
0041                 property int count: 0
0042                 onTriggered: count += 1;
0043             }
0044             readonly property Kirigami.Action kActionC: Kirigami.Action {
0045                 text: "Kirigami Action C"
0046                 property int count: 0
0047                 onTriggered: count += 1;
0048             }
0049 
0050             title: "Dialog"
0051             preferredWidth: 400
0052             customFooterActions: [kActionA, kActionB, kActionC]
0053         }
0054     }
0055 
0056     function test_footer_buttons() {
0057         const dialog = createTemporaryObject(dialogComponent, this, {
0058             standardButtons: T.Dialog.Ok | T.Dialog.Cancel,
0059         });
0060         verify(dialog);
0061         const { kActionA, kActionB, kActionC, acceptedSpy, rejectedSpy } = dialog;
0062         verify(acceptedSpy.valid);
0063         verify(rejectedSpy.valid);
0064 
0065         dialog.open();
0066         tryCompare(dialog, "opened", true, Kirigami.Units.longDuration * 2);
0067 
0068         const buttonOk = dialog.standardButton(T.Dialog.Ok);
0069         verify(buttonOk);
0070         mouseClick(buttonOk);
0071         compare(acceptedSpy.count, 1);
0072 
0073         dialog.open();
0074         tryCompare(dialog, "opened", true, Kirigami.Units.longDuration * 2);
0075 
0076         const buttonCancel = dialog.standardButton(T.Dialog.Cancel);
0077         verify(buttonCancel);
0078         mouseClick(buttonCancel);
0079         compare(rejectedSpy.count, 1);
0080 
0081         dialog.open();
0082         tryCompare(dialog, "opened", true, Kirigami.Units.longDuration * 2);
0083 
0084         const buttonA = dialog.customFooterButton(kActionA);
0085         verify(buttonA);
0086         mouseClick(buttonA);
0087         compare(kActionA.count, 1);
0088 
0089         const buttonB = dialog.customFooterButton(kActionB);
0090         verify(!buttonB);
0091 
0092         const buttonC = dialog.customFooterButton(kActionC);
0093         verify(buttonC);
0094         mouseClick(buttonC);
0095         compare(kActionC.count, 1);
0096     }
0097 
0098     Component {
0099         id: nullActionDialogComponent
0100         Kirigami.Dialog {
0101             id: dialog
0102 
0103             readonly property SignalSpy acceptedSpy: SignalSpy {
0104                 target: dialog
0105                 signalName: "accepted"
0106             }
0107             readonly property SignalSpy rejectedSpy: SignalSpy {
0108                 target: dialog
0109                 signalName: "rejected"
0110             }
0111 
0112             title: "Dialog"
0113             preferredWidth: 400
0114             visible: true
0115         }
0116     }
0117 
0118     function test_null_footer_action() {
0119         const dialog = createTemporaryObject(nullActionDialogComponent, this);
0120         verify(dialog);
0121 
0122         compare(dialog.customFooterActions.length, 0);
0123 
0124         let button;
0125 
0126         button = dialog.customFooterButton(null);
0127         verify(!button);
0128 
0129         dialog.customFooterActions = [null];
0130 
0131         button = dialog.customFooterButton(null);
0132         verify(!button);
0133     }
0134 }