mirror of
https://github.com/status-im/status-desktop.git
synced 2025-01-09 13:56:10 +00:00
429203cd66
This is the first step in refactoring the NetworkFilter, by cleaning the base component that handles the check states. This component supports multiple configurations: 1. Single selection with or without radio button 2. Multiple selection with or without checkbox 3. Automatic handling of the check state. The component will change the check state based on user clicks 4. Manual handling of the check state. The component will not change the check state, but offers a toggled signal and expects the user to change the check state based on external flows + Fix minor bugs
260 lines
10 KiB
QML
260 lines
10 KiB
QML
import QtQuick 2.15
|
|
import QtTest 1.15
|
|
|
|
import AppLayouts.Wallet.controls 1.0
|
|
|
|
import utils 1.0
|
|
|
|
|
|
Item {
|
|
id: root
|
|
width: 600
|
|
height: 400
|
|
|
|
Component {
|
|
id: componentUnderTest
|
|
NetworkSelectItemDelegate {
|
|
anchors.centerIn: parent
|
|
title: "Ethereum"
|
|
iconUrl: Style.svg("network/Network=Ethereum")
|
|
onToggled: root.onToggledHandler()
|
|
}
|
|
}
|
|
|
|
SignalSpy {
|
|
id: toggledSpy
|
|
target: controlUnderTest
|
|
signalName: "toggled"
|
|
}
|
|
|
|
SignalSpy {
|
|
id: checkStateChangedSpy
|
|
target: controlUnderTest
|
|
signalName: "checkStateChanged"
|
|
}
|
|
|
|
property NetworkSelectItemDelegate controlUnderTest: null
|
|
property var onToggledHandler: function(){}
|
|
property int externalCheckState: Qt.Unchecked
|
|
|
|
TestCase {
|
|
name: "NetworkSelectItemDelegate"
|
|
when: windowShown
|
|
|
|
function init() {
|
|
controlUnderTest = createTemporaryObject(componentUnderTest, root)
|
|
toggledSpy.clear()
|
|
checkStateChangedSpy.clear()
|
|
onToggledHandler = function() {}
|
|
}
|
|
|
|
function test_basicGeometry() {
|
|
verify(!!controlUnderTest)
|
|
verify(controlUnderTest.width > 0)
|
|
verify(controlUnderTest.height > 0)
|
|
}
|
|
|
|
function test_title() {
|
|
verify(!!controlUnderTest)
|
|
compare(controlUnderTest.title, "Ethereum")
|
|
controlUnderTest.title = "Polygon"
|
|
compare(controlUnderTest.title, "Polygon")
|
|
controlUnderTest.title = ""
|
|
compare(controlUnderTest.title, "")
|
|
controlUnderTest.title = "Ethereum"
|
|
}
|
|
|
|
function test_icon() {
|
|
verify(!!controlUnderTest)
|
|
compare(controlUnderTest.iconUrl, Style.svg("network/Network=Ethereum"))
|
|
compare(findChild(controlUnderTest, "statusRoundImage").image.source, Style.svg("network/Network=Ethereum"))
|
|
controlUnderTest.iconUrl = Style.svg("network/Network=Polygon")
|
|
compare(controlUnderTest.iconUrl, Style.svg("network/Network=Polygon"))
|
|
compare(findChild(controlUnderTest, "statusRoundImage").image.source, Style.svg("network/Network=Polygon"))
|
|
}
|
|
|
|
function test_indicatorConfig() {
|
|
verify(!!controlUnderTest)
|
|
verify(!!findChild(controlUnderTest, "networkSelectionRadioButton_Ethereum"))
|
|
verify(!findChild(controlUnderTest, "networkSelectionCheckbox_Ethereum"))
|
|
compare(controlUnderTest.showIndicator, true)
|
|
compare(controlUnderTest.multiSelection, false)
|
|
|
|
//changing to multiselect -> indicator switches to checkbox
|
|
controlUnderTest.multiSelection = true
|
|
waitForRendering(controlUnderTest)
|
|
waitForItemPolished(controlUnderTest)
|
|
verify(!!findChild(controlUnderTest, "networkSelectionCheckbox_Ethereum"))
|
|
verify(!findChild(controlUnderTest, "networkSelectionRadioButton_Ethereum"))
|
|
|
|
//changing removing indicator
|
|
controlUnderTest.showIndicator = false
|
|
waitForRendering(controlUnderTest)
|
|
waitForItemPolished(controlUnderTest)
|
|
verify(!findChild(controlUnderTest, "networkSelectionCheckbox_Ethereum"))
|
|
verify(!findChild(controlUnderTest, "networkSelectionRadioButton_Ethereum"))
|
|
}
|
|
|
|
function test_toggleByClick() {
|
|
verify(!!controlUnderTest)
|
|
mouseClick(controlUnderTest)
|
|
tryCompare(toggledSpy, "count", 1)
|
|
|
|
const image = findChild(controlUnderTest, "statusRoundImage")
|
|
mouseClick(image)
|
|
tryCompare(toggledSpy, "count", 2)
|
|
|
|
const radioButton = findChild(controlUnderTest, "networkSelectionRadioButton_Ethereum")
|
|
mouseClick(radioButton)
|
|
tryCompare(toggledSpy, "count", 3)
|
|
|
|
controlUnderTest.multiSelection = true
|
|
waitForItemPolished(controlUnderTest)
|
|
const checkBox = findChild(controlUnderTest, "networkSelectionCheckbox_Ethereum")
|
|
mouseClick(checkBox)
|
|
tryCompare(toggledSpy, "count", 4)
|
|
}
|
|
|
|
function test_autoCheckStateChanges() {
|
|
verify(!!controlUnderTest)
|
|
compare(controlUnderTest.checkState, Qt.Unchecked)
|
|
mouseClick(controlUnderTest)
|
|
compare(controlUnderTest.checkState, Qt.Checked)
|
|
mouseClick(controlUnderTest)
|
|
compare(controlUnderTest.checkState, Qt.Unchecked)
|
|
const radioButton = findChild(controlUnderTest, "networkSelectionRadioButton_Ethereum")
|
|
mouseClick(radioButton)
|
|
compare(controlUnderTest.checkState, Qt.Checked)
|
|
mouseClick(radioButton)
|
|
compare(controlUnderTest.checkState, Qt.Unchecked)
|
|
|
|
controlUnderTest.multiSelection = true
|
|
waitForItemPolished(controlUnderTest)
|
|
compare(controlUnderTest.checkState, Qt.Unchecked)
|
|
const checkBox = findChild(controlUnderTest, "networkSelectionCheckbox_Ethereum")
|
|
mouseClick(checkBox)
|
|
waitForItemPolished(controlUnderTest)
|
|
compare(controlUnderTest.checkState, Qt.Checked)
|
|
mouseClick(checkBox)
|
|
compare(controlUnderTest.checkState, Qt.Unchecked)
|
|
mouseClick(controlUnderTest)
|
|
compare(controlUnderTest.checkState, Qt.Checked)
|
|
mouseClick(controlUnderTest)
|
|
compare(controlUnderTest.checkState, Qt.Unchecked)
|
|
}
|
|
|
|
function test_manualCheckStateChanges() {
|
|
verify(!!controlUnderTest)
|
|
// checkState is not bound to nextCheckState => no automatic check changes
|
|
controlUnderTest.nextCheckState = Qt.binding(() => controlUnderTest.checkState)
|
|
compare(controlUnderTest.checkState, Qt.Unchecked)
|
|
|
|
mouseClick(controlUnderTest)
|
|
compare(controlUnderTest.checkState, Qt.Unchecked)
|
|
let radioButton = findChild(controlUnderTest, "networkSelectionRadioButton_Ethereum")
|
|
mouseClick(radioButton)
|
|
compare(controlUnderTest.checkState, Qt.Unchecked)
|
|
|
|
controlUnderTest.multiSelection = true
|
|
waitForItemPolished(controlUnderTest)
|
|
compare(controlUnderTest.checkState, Qt.Unchecked)
|
|
let checkBox = findChild(controlUnderTest, "networkSelectionCheckbox_Ethereum")
|
|
mouseClick(checkBox)
|
|
compare(controlUnderTest.checkState, Qt.Unchecked)
|
|
|
|
controlUnderTest.multiSelection = false
|
|
waitForItemPolished(controlUnderTest)
|
|
compare(controlUnderTest.checkState, Qt.Unchecked)
|
|
|
|
root.onToggledHandler = function() {
|
|
controlUnderTest.checkState = controlUnderTest.checkState === Qt.Checked ? Qt.Unchecked : Qt.Checked
|
|
}
|
|
|
|
mouseClick(controlUnderTest)
|
|
compare(controlUnderTest.checkState, Qt.Checked)
|
|
|
|
radioButton = findChild(controlUnderTest, "networkSelectionRadioButton_Ethereum")
|
|
mouseClick(radioButton)
|
|
compare(controlUnderTest.checkState, Qt.Unchecked)
|
|
|
|
controlUnderTest.multiSelection = true
|
|
root.onToggledHandler = function() {
|
|
controlUnderTest.checkState = controlUnderTest.checkState === Qt.Unchecked ? Qt.PartiallyChecked :
|
|
controlUnderTest.checkState === Qt.Checked ? Qt.Unchecked : Qt.Checked
|
|
}
|
|
|
|
mouseClick(controlUnderTest)
|
|
compare(controlUnderTest.checkState, Qt.PartiallyChecked)
|
|
mouseClick(controlUnderTest)
|
|
compare(controlUnderTest.checkState, Qt.Checked)
|
|
mouseClick(controlUnderTest)
|
|
compare(controlUnderTest.checkState, Qt.Unchecked)
|
|
|
|
checkBox = findChild(controlUnderTest, "networkSelectionCheckbox_Ethereum")
|
|
mouseClick(checkBox)
|
|
compare(controlUnderTest.checkState, Qt.PartiallyChecked)
|
|
mouseClick(checkBox)
|
|
compare(controlUnderTest.checkState, Qt.Checked)
|
|
mouseClick(checkBox)
|
|
compare(controlUnderTest.checkState, Qt.Unchecked)
|
|
}
|
|
|
|
function test_checkStateBindings() {
|
|
verify(!!controlUnderTest)
|
|
compare(controlUnderTest.checkState, Qt.Unchecked)
|
|
compare(root.externalCheckState, Qt.Unchecked)
|
|
|
|
controlUnderTest.checkState = Qt.binding(() => root.externalCheckState)
|
|
compare(controlUnderTest.checkState, root.externalCheckState)
|
|
tryCompare(checkStateChangedSpy, "count", 0)
|
|
|
|
root.externalCheckState = Qt.Checked
|
|
compare(controlUnderTest.checkState, Qt.Checked)
|
|
tryCompare(checkStateChangedSpy, "count", 1)
|
|
|
|
root.externalCheckState = Qt.Unchecked
|
|
compare(controlUnderTest.checkState, Qt.Unchecked)
|
|
tryCompare(checkStateChangedSpy, "count", 2)
|
|
}
|
|
|
|
function test_interactiveConfig() {
|
|
verify(!!controlUnderTest)
|
|
compare(controlUnderTest.interactive, true)
|
|
controlUnderTest.interactive = false
|
|
compare(controlUnderTest.checkState, Qt.Unchecked)
|
|
|
|
mouseClick(controlUnderTest)
|
|
compare(controlUnderTest.checkState, Qt.Unchecked)
|
|
|
|
let radioButton = findChild(controlUnderTest, "networkSelectionRadioButton_Ethereum")
|
|
mouseClick(radioButton)
|
|
compare(controlUnderTest.checkState, Qt.Unchecked)
|
|
|
|
controlUnderTest.multiSelection = true
|
|
waitForItemPolished(controlUnderTest)
|
|
|
|
mouseClick(controlUnderTest)
|
|
compare(controlUnderTest.checkState, Qt.Unchecked)
|
|
|
|
let checkBox = findChild(controlUnderTest, "networkSelectionCheckbox_Ethereum")
|
|
mouseClick(checkBox)
|
|
compare(controlUnderTest.checkState, Qt.Unchecked)
|
|
|
|
controlUnderTest.showIndicator = false
|
|
|
|
mouseClick(controlUnderTest)
|
|
compare(controlUnderTest.checkState, Qt.Unchecked)
|
|
|
|
mouseMove(controlUnderTest, controlUnderTest.width / 2, controlUnderTest.height / 2)
|
|
waitForRendering(controlUnderTest)
|
|
waitForItemPolished(controlUnderTest)
|
|
compare(controlUnderTest.sensor.containsMouse, true)
|
|
|
|
// manual selection works
|
|
controlUnderTest.checkState = Qt.Checked
|
|
compare(controlUnderTest.checkState, Qt.Checked)
|
|
controlUnderTest.checkState = Qt.Unchecked
|
|
compare(controlUnderTest.checkState, Qt.Unchecked)
|
|
}
|
|
}
|
|
} |