Warning, /frameworks/kirigami/autotests/tst_inlinemessage.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 QtTest
0009 import org.kde.kirigami as Kirigami
0010 
0011 TestCase {
0012     id: testCase
0013 
0014     name: "InlineMessageTests"
0015     when: windowShown
0016 
0017     width: 300
0018     height: 300
0019     visible: true
0020 
0021     Component {
0022         id: inlineMessageComponent
0023         Kirigami.InlineMessage {
0024             id: message
0025 
0026             readonly property SignalSpy linkHoveredSpy: SignalSpy {
0027                 target: message
0028                 signalName: "linkHovered"
0029             }
0030             readonly property SignalSpy linkActivatedSpy: SignalSpy {
0031                 target: message
0032                 signalName: "linkActivated"
0033             }
0034 
0035             anchors {
0036                 top: parent.top
0037                 left: parent.left
0038                 right: parent.right
0039             }
0040             visible: true
0041         }
0042     }
0043 
0044     function hoverAll(item: Item, /*predicate*/ until) {
0045         for (let x = 0; x < item.width; x += 10) {
0046             for (let y = 0; y < item.height; y += 10) {
0047                 mouseMove(item, x, y);
0048                 if (until()) {
0049                     return Qt.point(x, y);
0050                 }
0051             }
0052         }
0053         return null;
0054     }
0055 
0056     function test_link() {
0057         skip("finding links by sweeping with the mouse cursor all over the place seems very unreliable, especially on FreeBSD and Windows TODO: find a better way to find links")
0058         const href = "some";
0059         const message = createTemporaryObject(inlineMessageComponent, this, {
0060             text: `<a href="${href}">link</a>`,
0061         });
0062         verify(message);
0063         verify(message.linkHoveredSpy.valid);
0064         verify(message.linkActivatedSpy.valid);
0065 
0066         const point = hoverAll(message, () => message.hoveredLink === href);
0067         verify(point !== null);
0068         compare(message.linkHoveredSpy.count, 1);
0069         const hoveredLink = message.linkHoveredSpy.signalArguments[0][0];
0070         compare(hoveredLink, href);
0071 
0072         mouseClick(message, point.x, point.y);
0073         compare(message.linkActivatedSpy.count, 1);
0074         const activatedLink = message.linkActivatedSpy.signalArguments[0][0];
0075         compare(activatedLink, href);
0076     }
0077 
0078     function test_hoveredLink_is_readonly() {
0079         const message = createTemporaryObject(inlineMessageComponent, this);
0080         verify(message);
0081         compare(message.hoveredLink, "");
0082         let failed = false;
0083         try {
0084             message.hoveredLink = "something";
0085         } catch (e) {
0086             failed = true;
0087         }
0088         verify(failed);
0089     }
0090 }