import QtQuick 2.15 import QtTest 1.15 import StatusQ.Components 0.1 Item { id: root width: 600 height: 400 Component { id: componentUnderTest StatusMessage { anchors.fill: parent messageDetails { messageText: "" contentType: StatusMessage.ContentType.Text amISender: false sender.id: "zq123456790" sender.displayName: "Alice" sender.isContact: true sender.trustIndicator: StatusContactVerificationIcons.TrustedType.None sender.isEnsVerified: false sender.profileImage { name: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAiElEQVR4nOzXUQpAQBRGYWQvLNAyLJDV8C5qpiGnv/M9al5Ot27X0IUwhMYQGkNoDKGJCRlLH67bftx9X+ap/+P9VcxEDKExhKZ4a9Uq3TZviZmIITSG0DRvlqcbqVbrlouZiCE0htD4h0hjCI0hNN5aNIbQGKKPxEzEEBpDaAyhMYTmDAAA//+gYCErzmCpCQAAAABJRU5ErkJggg=" colorId: 1 colorHash: "#51D0F0" } } linkAddressAndEnsName: true outgoingStatus: StatusMessage.OutgoingStatus.Sending } } property StatusMessage controlUnderTest: null TestCase { name: "StatusMessage" when: windowShown function init() { controlUnderTest = createTemporaryObject(componentUnderTest, root) } function test_different_address_formats_data() { return [ {messageText: "0x1234567890abcdef1234567890abcdef12345678", validAddressEnsCount: 1}, // Valid ETH address {messageText: "0x1234567890abcdef1234567890abcdef12345678, 0x16437e05858c1a34f0ae63c9ca960d61a5583d5e, 0x75d5673fc25bb4993ea1218d9d415487c3656853", validAddressEnsCount: 3}, // Valid ETH address {messageText: "0xAbCdEf1234567890abcdef1234567890AbCdEf12", validAddressEnsCount: 1}, // Valid ETH address {messageText: "0x123", validAddressEnsCount: 0}, // Invalid ETH address (too short) {messageText: "1234567890abcdef1234567890abcdef12345678", validAddressEnsCount: 0}, // Invalid ETH address (no 0x) {messageText: "qwerty.stateofus.eth", validAddressEnsCount: 1}, // Valid ETH address {messageText: "alice.eth", validAddressEnsCount: 1}, // Valid ENS name {messageText: "bob.eth", validAddressEnsCount: 1}, // Valid ENS name {messageText: "sub.alice.eth", validAddressEnsCount: 1}, // Valid ENS name with subdomain {messageText: "bob.stateofus.eth", validAddressEnsCount: 1}, // Valid ENS name with subdomain {messageText: "ens.sub.sub.eth", validAddressEnsCount: 1}, // Valid ENS name with multiple subdomains {messageText: "example.com", validAddressEnsCount: 0}, // Invalid DNS-based ENS name {messageText: "another.example.xyz", validAddressEnsCount: 0}, // Invalid DNS-based ENS name {messageText: "my-site.io", validAddressEnsCount: 0}, // Invalid DNS-based ENS name {messageText: "invalid.ethaddress", validAddressEnsCount: 0}, // Invalid ENS-like name {messageText: "bob.eth.invalid", validAddressEnsCount: 0}, // Invalid ENS-like name (invalid TLD) {messageText: "My wallet is 0x1234567890abcdef1234567890abcdef12345678, and my ENS is alice.eth.", validAddressEnsCount: 2}, // Valid ETH and ENS in sentence {messageText: "You can find me at bob.eth or contact me via 0xAbCdEf1234567890abcdef1234567890AbCdEf12.", validAddressEnsCount: 2}, // Valid ETH and ENS in sentence {messageText: "Invalid address: 0x12345 and valid ENS: sub.alice.eth.", validAddressEnsCount: 1}, // Mixed case with valid and invalid {messageText: "Check 0x123GHIJKLMNOPQRSTUVWXYZ and visit example.com.", validAddressEnsCount: 0}, // Mixed case with valid DNS and invalid ETH {messageText: "0x1234567890abcdef1234567890abcdef12345678, qwerty.stateofus.eth, 0x16437e05858c1a34f0ae63c9ca960d61a5583d5e, 0x75d5673fc25bb4993ea1218d9d415487c3656853", validAddressEnsCount: 4}, // Valid ETH address ] } function test_different_address_formats(data) { verify(!!controlUnderTest) controlUnderTest.messageDetails.messageText = data.messageText waitForRendering(controlUnderTest) const statusTextMessage = findChild(controlUnderTest, "StatusMessage_textMessage") verify(!!statusTextMessage) // Use regular expression to match all tags in the text var linkMatches = statusTextMessage.textField.text.match(/]*>(.*?)<\/a>/gi) var actualLinkCount = linkMatches ? linkMatches.length : 0 compare(actualLinkCount, data.validAddressEnsCount, "TextEdit should contain a link %1".arg(data.messageText)) } } }