status-desktop/storybook/qmlTests/tests/tst_SlippageSelector.qml

209 lines
7.5 KiB
QML

import QtQuick 2.15
import QtTest 1.15
import StatusQ.Controls 0.1
import shared.controls 1.0
Item {
id: root
width: 600
height: 400
Component {
id: componentUnderTest
SlippageSelector {
anchors.centerIn: parent
}
}
property SlippageSelector controlUnderTest: null
TestCase {
name: "SlippageSelector"
when: windowShown
function init() {
controlUnderTest = createTemporaryObject(componentUnderTest, root)
}
function test_basicSetup() {
verify(!!controlUnderTest)
verify(controlUnderTest.width > 0)
verify(controlUnderTest.height > 0)
verify(controlUnderTest.valid)
}
function test_selectPresetValues() {
verify(!!controlUnderTest)
const buttonsRepeater = findChild(controlUnderTest, "buttonsRepeater")
verify(!!buttonsRepeater)
waitForRendering(buttonsRepeater)
for (let i = 0; i < buttonsRepeater.count; i++) {
const button = buttonsRepeater.itemAt(i)
verify(!!button)
mouseClick(button)
tryCompare(button, "checked", true)
tryCompare(button, "type", StatusBaseButton.Type.Primary)
tryCompare(controlUnderTest, "value", button.value)
verify(controlUnderTest.valid)
}
}
function test_setAndTypeCustomValue() {
verify(!!controlUnderTest)
const customButton = findChild(controlUnderTest, "customButton")
verify(!!customButton)
mouseClick(customButton)
const customInput = findChild(controlUnderTest, "customInput")
verify(!!customInput)
tryCompare(customInput, "cursorVisible", true)
// input "1.42"
keyClick(Qt.Key_1)
keyClick(Qt.Key_Period)
keyClick(Qt.Key_4)
keyClick(Qt.Key_2)
tryCompare(controlUnderTest, "value", 1.42)
verify(controlUnderTest.valid)
// delete contents (4x)
keyClick(Qt.Key_Backspace)
keyClick(Qt.Key_Backspace)
keyClick(Qt.Key_Backspace)
keyClick(Qt.Key_Backspace)
tryCompare(customInput, "text", "")
tryCompare(customInput, "valid", false)
tryCompare(controlUnderTest, "valid", false)
// click again the first button
const buttonsRepeater = findChild(controlUnderTest, "buttonsRepeater")
verify(!!buttonsRepeater)
waitForRendering(buttonsRepeater)
const firstButton = buttonsRepeater.itemAt(0)
verify(!!firstButton)
mouseClick(firstButton)
tryCompare(controlUnderTest, "value", firstButton.value)
verify(controlUnderTest.valid)
tryCompare(customButton, "visible", true)
tryCompare(customInput, "visible", false)
}
function test_setCustomValue_data() {
return [
{tag: "valid", value: 1.42, valid: true},
{tag: "invalid", value: 111.42, valid: false},
]
}
function test_setCustomValue(data) {
const theValue = data.value
verify(!!controlUnderTest)
verify(controlUnderTest.valid)
controlUnderTest.value = theValue
const customInput = findChild(controlUnderTest, "customInput")
verify(!!customInput)
tryCompare(customInput, "cursorVisible", true)
tryCompare(customInput, "value", theValue)
tryCompare(customInput, "text", customInput.asString)
verify(controlUnderTest.value, theValue)
compare(controlUnderTest.valid, data.valid)
}
function test_setCustomValueAndReset_data() {
return [
{tag: "valid", value: 1.42, valid: true, isDefault: false},
{tag: "default", value: 0.5, valid: true, isDefault: true},
{tag: "invalid", value: 111.42, valid: false, isDefault: false},
]
}
function test_setCustomValueAndReset(data) {
verify(!!controlUnderTest)
let defaultValue = NaN
let defaultButton = null
const isDefault = data.isDefault
// get the default (checked/selected) button and value
const buttonsRepeater = findChild(controlUnderTest, "buttonsRepeater")
verify(!!buttonsRepeater)
for (let i = 0; i < buttonsRepeater.count; i++) {
const button = buttonsRepeater.itemAt(i)
if (button && button.checked) {
defaultButton = button
defaultValue = button.value
break
}
}
verify(!!defaultButton)
verify(defaultValue !== NaN)
// verify that by default, the custom button is visible, and custom input not
const customButton = findChild(controlUnderTest, "customButton")
verify(!!customButton)
tryCompare(customButton, "visible", true)
const customInput = findChild(controlUnderTest, "customInput")
verify(!!customInput)
tryCompare(customInput, "visible", false)
tryCompare(controlUnderTest, "valid", true)
// assign a new (custom) value
const theValue = data.value
controlUnderTest.value = theValue
tryCompare(controlUnderTest, "valid", data.valid)
// verify the custom input has the new value (and text), and Custom button is not visible
tryCompare(customInput, "visible", !isDefault)
tryCompare(customInput, "activeFocus", !isDefault)
tryCompare(customButton, "visible", isDefault)
if (!isDefault) {
tryCompare(customInput, "value", theValue)
tryCompare(customInput, "text", customInput.asString)
}
// call reset()
controlUnderTest.reset()
// verify that after reset, the Custom button is back
tryCompare(customInput, "visible", false)
tryCompare(customInput, "activeFocus", false)
tryCompare(customButton, "visible", true)
// verify that the button with default value is selected again
tryCompare(defaultButton, "checked", true)
tryCompare(controlUnderTest, "value", defaultValue)
tryCompare(controlUnderTest, "valid", true)
}
function test_resetDefaults() {
verify(!!controlUnderTest)
const initialValue = controlUnderTest.value
const buttonsRepeater = findChild(controlUnderTest, "buttonsRepeater")
verify(!!buttonsRepeater)
waitForRendering(buttonsRepeater)
const firstButton = buttonsRepeater.itemAt(0)
waitForRendering(firstButton)
tryCompare(firstButton, "visible", true)
mouseClick(firstButton)
tryCompare(controlUnderTest, "value", firstButton.value)
controlUnderTest.reset()
tryCompare(controlUnderTest, "value", initialValue)
verify(controlUnderTest.valid)
const customButton = findChild(controlUnderTest, "customButton")
tryCompare(customButton, "visible", true)
const customInput = findChild(controlUnderTest, "customInput")
tryCompare(customInput, "visible", false)
}
}
}