import QtQuick 2.15
import QtTest 1.15
import StatusQ 0.1
import StatusQ.Core.Utils 0.1 as StatusQUtils
import shared.popups.send.controls 1.0
Item {
id: root
width: 600
height: 400
Component {
id: componentUnderTest
SendRecipientInput {
anchors.centerIn: parent
focus: true
}
}
SignalSpy {
id: signalSpyClearClicked
target: controlUnderTest
signalName: "clearClicked"
}
SignalSpy {
id: signalSpyValidateInputRequested
target: controlUnderTest
signalName: "validateInputRequested"
}
property SendRecipientInput controlUnderTest: null
TestCase {
name: "SendRecipientInput"
when: windowShown
function init() {
controlUnderTest = createTemporaryObject(componentUnderTest, root)
signalSpyClearClicked.clear()
signalSpyValidateInputRequested.clear()
ClipboardUtils.clear()
}
function test_basicGeometry() {
verify(!!controlUnderTest)
verify(controlUnderTest.width > 0)
verify(controlUnderTest.height > 0)
}
function test_textInput() {
verify(!!controlUnderTest)
verify(controlUnderTest.input.edit.focus)
verify(controlUnderTest.interactive)
compare(controlUnderTest.placeholderText, qsTr("Enter an ENS name or address"))
keyClick(Qt.Key_0)
keyClick(Qt.Key_X)
keyClick(Qt.Key_D)
keyClick(Qt.Key_E)
keyClick(Qt.Key_A)
keyClick(Qt.Key_D)
keyClick(Qt.Key_B)
keyClick(Qt.Key_E)
keyClick(Qt.Key_E)
keyClick(Qt.Key_F)
const plainText = StatusQUtils.StringUtils.plainText(controlUnderTest.text)
// input's text should be what we typed,
compare(plainText, "0xdeadbeef")
// ... and for each letter pressed the signal `validateInputRequested` should be emitted
compare(signalSpyValidateInputRequested.count, plainText.length)
}
function test_interactive() {
verify(!!controlUnderTest)
verify(controlUnderTest.input.edit.focus)
verify(controlUnderTest.interactive)
controlUnderTest.interactive = false
keyClick(Qt.Key_A)
keyClick(Qt.Key_B)
keyClick(Qt.Key_C)
const plainText = StatusQUtils.StringUtils.plainText(controlUnderTest.text)
// when non-interactive, any text input should be ignored
compare(plainText, "")
}
function test_pasteButton() {
verify(!!controlUnderTest)
const pasteButton = findChild(controlUnderTest, "pasteButton")
verify(!!pasteButton)
compare(pasteButton.visible, false)
// copy sth to clipboard
controlUnderTest.text = "0xdeadbeef"
controlUnderTest.input.edit.selectAll()
controlUnderTest.input.edit.copy()
// paste button should be visible if input is empty and clipboard is not
compare(pasteButton.visible, false)
controlUnderTest.input.edit.clear()
compare(pasteButton.visible, true)
}
function test_pasteUsingButton() {
verify(!!controlUnderTest)
const pasteButton = findChild(controlUnderTest, "pasteButton")
verify(!!pasteButton)
tryCompare(pasteButton, "visible", false)
const richTextToTest = "this is bold text"
// copy rich text to clipboard
controlUnderTest.text = richTextToTest
controlUnderTest.input.edit.selectAll()
controlUnderTest.input.edit.copy()
controlUnderTest.input.edit.clear()
compare(controlUnderTest.input.edit.length , 0)
compare(pasteButton.visible, true)
mouseClick(pasteButton)
verify(!controlUnderTest.text.includes("this is bold text"))
}
function test_pasteUsingKbdShortcut() {
verify(!!controlUnderTest)
const pasteButton = findChild(controlUnderTest, "pasteButton")
verify(!!pasteButton)
tryCompare(pasteButton, "visible", false)
const richTextToTest = "this is bold text"
// copy rich text to clipboard
controlUnderTest.text = richTextToTest
controlUnderTest.input.edit.selectAll()
controlUnderTest.input.edit.copy()
controlUnderTest.input.edit.clear()
compare(controlUnderTest.input.edit.length , 0)
compare(pasteButton.visible, true)
keySequence(StandardKey.Paste)
verify(!controlUnderTest.text.includes("this is bold text"))
}
function test_clearButton() {
verify(!!controlUnderTest)
verify(controlUnderTest.input.edit.focus)
verify(controlUnderTest.interactive)
const clearButton = findChild(controlUnderTest, "clearButton")
compare(clearButton.visible, false)
controlUnderTest.text = "0xdeadbeef"
// clear button should be visible with some text
verify(clearButton.visible)
mouseClick(clearButton)
compare(StatusQUtils.StringUtils.plainText(controlUnderTest.text), "")
compare(signalSpyClearClicked.count, 1)
// and when interactive
controlUnderTest.interactive = false
compare(clearButton.visible, false)
}
function test_checkmark() {
verify(!!controlUnderTest)
compare(controlUnderTest.checkMarkVisible, false)
controlUnderTest.checkMarkVisible = true
const checkmarkIcon = findChild(controlUnderTest, "checkmarkIcon")
verify(!!checkmarkIcon)
verify(checkmarkIcon.visible)
}
function test_loading() {
verify(!!controlUnderTest)
compare(controlUnderTest.loading, false)
controlUnderTest.loading = true
controlUnderTest.text = "replicator.eth" // loadingIndicator visible only with some text
const loadingIndicator = findChild(controlUnderTest, "loadingIndicator")
verify(!!loadingIndicator)
verify(loadingIndicator.visible)
}
}
}