1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
|
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
import QtTest
import QtQuick.Controls
TestCase {
id: testCase
width: 200
height: 200
visible: true
when: windowShown
name: "CheckDelegate"
Component {
id: checkDelegate
CheckDelegate {}
}
// TODO: data-fy tst_checkbox (rename to tst_check?) so we don't duplicate its tests here?
function test_defaults() {
var control = createTemporaryObject(checkDelegate, testCase);
verify(control);
verify(!control.checked);
}
function test_checked() {
var control = createTemporaryObject(checkDelegate, testCase);
verify(control);
mouseClick(control);
verify(control.checked);
mouseClick(control);
verify(!control.checked);
}
function test_baseline() {
var control = createTemporaryObject(checkDelegate, testCase);
verify(control);
compare(control.baselineOffset, control.contentItem.y + control.contentItem.baselineOffset);
}
function test_spacing() {
var control = createTemporaryObject(checkDelegate, testCase, { text: "Some long, long, long text" })
verify(control)
verify(control.contentItem.implicitWidth + control.leftPadding + control.rightPadding > control.background.implicitWidth)
var textLabel = findChild(control.contentItem, "label")
verify(textLabel)
// The implicitWidth of the IconLabel that all buttons use as their contentItem should be
// equal to the implicitWidth of the Text and the check indicator + spacing while no icon is set.
compare(control.contentItem.implicitWidth, textLabel.implicitWidth + control.indicator.width + control.spacing)
control.spacing += 100
compare(control.contentItem.implicitWidth, textLabel.implicitWidth + control.indicator.width + control.spacing)
compare(control.implicitWidth, textLabel.implicitWidth + control.indicator.width + control.spacing + control.leftPadding + control.rightPadding)
}
function test_display_data() {
return [
{ "tag": "IconOnly", display: CheckDelegate.IconOnly },
{ "tag": "TextOnly", display: CheckDelegate.TextOnly },
{ "tag": "TextUnderIcon", display: CheckDelegate.TextUnderIcon },
{ "tag": "TextBesideIcon", display: CheckDelegate.TextBesideIcon },
{ "tag": "IconOnly, mirrored", display: CheckDelegate.IconOnly, mirrored: true },
{ "tag": "TextOnly, mirrored", display: CheckDelegate.TextOnly, mirrored: true },
{ "tag": "TextUnderIcon, mirrored", display: CheckDelegate.TextUnderIcon, mirrored: true },
{ "tag": "TextBesideIcon, mirrored", display: CheckDelegate.TextBesideIcon, mirrored: true }
]
}
function test_display(data) {
var control = createTemporaryObject(checkDelegate, testCase, {
text: "CheckDelegate",
display: data.display,
width: 400,
"icon.source": "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/check.png",
"LayoutMirroring.enabled": !!data.mirrored
})
verify(control)
compare(control.icon.source, "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/check.png")
var iconImage = findChild(control.contentItem, "image")
var textLabel = findChild(control.contentItem, "label")
var availableWidth = control.availableWidth - control.indicator.width - control.spacing
var indicatorOffset = control.mirrored ? control.indicator.width + control.spacing : 0
switch (control.display) {
case CheckDelegate.IconOnly:
verify(iconImage)
verify(!textLabel)
compare(iconImage.x, indicatorOffset + (availableWidth - iconImage.width) / 2)
compare(iconImage.y, (control.availableHeight - iconImage.height) / 2)
break;
case CheckDelegate.TextOnly:
verify(!iconImage)
verify(textLabel)
compare(textLabel.x, control.mirrored ? control.availableWidth - textLabel.width : 0)
compare(textLabel.y, (control.availableHeight - textLabel.height) / 2)
break;
case CheckDelegate.TextUnderIcon:
verify(iconImage)
verify(textLabel)
compare(iconImage.x, indicatorOffset + (availableWidth - iconImage.width) / 2)
compare(textLabel.x, indicatorOffset + (availableWidth - textLabel.width) / 2)
verify(iconImage.y < textLabel.y)
break;
case CheckDelegate.TextBesideIcon:
verify(iconImage)
verify(textLabel)
if (control.mirrored)
verify(textLabel.x < iconImage.x)
else
verify(iconImage.x < textLabel.x)
compare(iconImage.y, (control.availableHeight - iconImage.height) / 2)
compare(textLabel.y, (control.availableHeight - textLabel.height) / 2)
break;
}
}
Component {
id: nextCheckStateDelegate
CheckDelegate {
tristate: true
nextCheckState: function() {
if (checkState === Qt.Checked)
return Qt.Unchecked
else
return Qt.Checked
}
}
}
function test_nextCheckState_data() {
return [
{ tag: "unchecked", checkState: Qt.Unchecked, expectedState: Qt.Checked },
{ tag: "partially-checked", checkState: Qt.PartiallyChecked, expectedState: Qt.Checked },
{ tag: "checked", checkState: Qt.Checked, expectedState: Qt.Unchecked }
]
}
function test_nextCheckState(data) {
var control = createTemporaryObject(nextCheckStateDelegate, testCase)
verify(control)
// mouse
control.checkState = data.checkState
compare(control.checkState, data.checkState)
mouseClick(control)
compare(control.checkState, data.expectedState)
// touch
control.checkState = data.checkState
compare(control.checkState, data.checkState)
var touch = touchEvent(control)
touch.press(0, control).commit().release(0, control).commit()
compare(control.checkState, data.expectedState)
// keyboard
control.forceActiveFocus()
tryCompare(control, "activeFocus", true)
control.checkState = data.checkState
compare(control.checkState, data.checkState)
keyClick(Qt.Key_Space)
compare(control.checkState, data.expectedState)
}
}
|