testexecutor-ui 0.6.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- testexecutor/VERSION +1 -0
- testexecutor/__init__.py +6 -0
- testexecutor/control/TestListenerApi.py +56 -0
- testexecutor/control/TestSuiteListener.py +249 -0
- testexecutor/control/__init__.py +0 -0
- testexecutor/model/GenericListModel.py +63 -0
- testexecutor/model/InstructionsModel.py +351 -0
- testexecutor/model/KeyValueModel.py +177 -0
- testexecutor/model/MultiTestWindowModel.py +184 -0
- testexecutor/model/ResultModel.py +314 -0
- testexecutor/model/TestSuiteControlModel.py +139 -0
- testexecutor/model/TestSuiteGroup.py +105 -0
- testexecutor/model/TestSuiteModel.py +301 -0
- testexecutor/model/__init__.py +0 -0
- testexecutor/model/selector/FilterGroupModel.py +90 -0
- testexecutor/model/selector/FilterModel.py +251 -0
- testexecutor/model/selector/MultiSelectDetails.py +106 -0
- testexecutor/model/selector/MultiSelectListModel.py +48 -0
- testexecutor/model/selector/__init__.py +0 -0
- testexecutor/ui/IdentificationWidget.qml +40 -0
- testexecutor/ui/InputWidget.qml +74 -0
- testexecutor/ui/InstructionWidget.qml +185 -0
- testexecutor/ui/KeyValueItem.qml +194 -0
- testexecutor/ui/KeyValueItemConfig.qml +41 -0
- testexecutor/ui/KeyValueList.qml +49 -0
- testexecutor/ui/MultiTestWidget.qml +48 -0
- testexecutor/ui/MultiTestWindow.qml +88 -0
- testexecutor/ui/ResultItem.qml +199 -0
- testexecutor/ui/ResultItemConfig.qml +46 -0
- testexecutor/ui/ResultList.qml +58 -0
- testexecutor/ui/TestSuiteConfig.qml +95 -0
- testexecutor/ui/TestSuiteController.qml +54 -0
- testexecutor/ui/TestSuiteWidget.qml +350 -0
- testexecutor/ui/selector/FilterItem.qml +75 -0
- testexecutor/ui/selector/FilterItemConfig.qml +24 -0
- testexecutor/ui/selector/FilterMultiSelectorItem.qml +169 -0
- testexecutor/ui/selector/FilterMultiSelectorItemConfig.qml +22 -0
- testexecutor/ui/selector/FilterMultiSelectorList.qml +50 -0
- testexecutor/ui/selector/HeaderConfig.qml +24 -0
- testexecutor/ui/selector/SectionConfig.qml +24 -0
- testexecutor/ui/selector/SectionDelegate.qml +85 -0
- testexecutor/ui/selector/SelectorHeader.qml +43 -0
- testexecutor/ui/selector/SuiteList.qml +150 -0
- testexecutor/ui/selector/SuiteSelector.qml +71 -0
- testexecutor/ui/selector/SuiteSelectorConfig.qml +38 -0
- testexecutor/ui/selector/TestConfig.qml +22 -0
- testexecutor/ui/selector/TestDelegate.qml +75 -0
- testexecutor/ui/te-64x64.ico +0 -0
- testexecutor_ui-0.6.1.dist-info/LICENSE +204 -0
- testexecutor_ui-0.6.1.dist-info/METADATA +27 -0
- testexecutor_ui-0.6.1.dist-info/NOTICE +3 -0
- testexecutor_ui-0.6.1.dist-info/RECORD +54 -0
- testexecutor_ui-0.6.1.dist-info/WHEEL +5 -0
- testexecutor_ui-0.6.1.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2020 Direkt, Australia
|
|
3
|
+
* Copyright 2021 Direkt Embedded Pty Ltd
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import QtQuick
|
|
19
|
+
import QtQuick.Controls
|
|
20
|
+
import QtQuick.Layouts
|
|
21
|
+
|
|
22
|
+
Item {
|
|
23
|
+
id: instructionWidget
|
|
24
|
+
width: parent.width
|
|
25
|
+
height: parent.height
|
|
26
|
+
property var color: "yellow"
|
|
27
|
+
property var proportion: {"header": 0.1, "textHeight": 0.05, "control": 0.1}
|
|
28
|
+
property var model
|
|
29
|
+
property var control_enabled: controlEnabled()
|
|
30
|
+
|
|
31
|
+
Binding {
|
|
32
|
+
target: model
|
|
33
|
+
property: "enabled"
|
|
34
|
+
value: instructionWidget.enabled
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
Rectangle {
|
|
38
|
+
id: rectangleBase
|
|
39
|
+
width: parent.width
|
|
40
|
+
height: parent.height
|
|
41
|
+
color: "#f4f2f2"
|
|
42
|
+
Layout.fillHeight: true
|
|
43
|
+
Layout.fillWidth: true
|
|
44
|
+
Layout.alignment: Qt.AlignLeft | Qt.AlignTop
|
|
45
|
+
|
|
46
|
+
GridLayout {
|
|
47
|
+
id: userInput
|
|
48
|
+
anchors.fill: parent
|
|
49
|
+
transformOrigin: Item.Center
|
|
50
|
+
Layout.fillWidth: true
|
|
51
|
+
flow: Grid.LeftToRight
|
|
52
|
+
rows: 2
|
|
53
|
+
columns: 2
|
|
54
|
+
|
|
55
|
+
Item {
|
|
56
|
+
Layout.fillHeight: true
|
|
57
|
+
Layout.fillWidth: true
|
|
58
|
+
Layout.columnSpan: 2
|
|
59
|
+
Rectangle {
|
|
60
|
+
id: rectangleText
|
|
61
|
+
anchors.fill: parent
|
|
62
|
+
color: backColour(model)
|
|
63
|
+
ColumnLayout {
|
|
64
|
+
id: instructionBox
|
|
65
|
+
anchors.fill: parent
|
|
66
|
+
spacing: 4
|
|
67
|
+
TextEdit {
|
|
68
|
+
id: instructionTitle
|
|
69
|
+
visible: (Boolean(model) && model.instructionTitle) ? true : false
|
|
70
|
+
Layout.preferredHeight: parent.height * proportion.header
|
|
71
|
+
Layout.minimumHeight: 0
|
|
72
|
+
Layout.maximumHeight: parent.height * proportion.header * 2
|
|
73
|
+
Layout.fillWidth: true
|
|
74
|
+
clip: true
|
|
75
|
+
text: model ? model.instructionTitle : ""
|
|
76
|
+
textFormat: Text.AutoText
|
|
77
|
+
font.pixelSize: parent.height * proportion.header * 0.9
|
|
78
|
+
wrapMode: TextEdit.Wrap
|
|
79
|
+
readOnly: true
|
|
80
|
+
selectByMouse: true
|
|
81
|
+
}
|
|
82
|
+
ScrollView {
|
|
83
|
+
Layout.fillHeight: true
|
|
84
|
+
Layout.fillWidth: true
|
|
85
|
+
TextArea {
|
|
86
|
+
id: userInstruct
|
|
87
|
+
text: model ? model.instructionText : ""
|
|
88
|
+
textFormat: Text.AutoText
|
|
89
|
+
font.pixelSize: instructionBox.height * proportion.textHeight
|
|
90
|
+
color: instructionTitle.color
|
|
91
|
+
leftPadding: instructionPadding(model)
|
|
92
|
+
rightPadding: instructionPadding(model)
|
|
93
|
+
topPadding: instructionPadding(model)
|
|
94
|
+
bottomPadding: instructionPadding(model)
|
|
95
|
+
wrapMode: TextArea.WordWrap
|
|
96
|
+
readOnly: true
|
|
97
|
+
selectByMouse: true
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
Item {
|
|
105
|
+
Layout.fillWidth: true
|
|
106
|
+
Layout.preferredHeight: parent.height * proportion.control
|
|
107
|
+
Layout.minimumHeight: 30
|
|
108
|
+
Layout.maximumHeight: 100
|
|
109
|
+
Button {
|
|
110
|
+
anchors.fill: parent
|
|
111
|
+
id: leftButton
|
|
112
|
+
text: model ? model.control.leftButton.text : ""
|
|
113
|
+
enabled: model ? model.control.leftButton.enabled : false
|
|
114
|
+
font.pixelSize: parent.height * 0.7
|
|
115
|
+
onClicked: {
|
|
116
|
+
onControlClick(model.control.leftButton.text)
|
|
117
|
+
}
|
|
118
|
+
contentItem: Text {
|
|
119
|
+
text: leftButton.text
|
|
120
|
+
font: leftButton.font
|
|
121
|
+
opacity: enabled ? 1.0 : 0.3
|
|
122
|
+
horizontalAlignment: Text.AlignHCenter
|
|
123
|
+
verticalAlignment: Text.AlignVCenter
|
|
124
|
+
elide: Text.ElideNone
|
|
125
|
+
clip: true
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
Item {
|
|
131
|
+
Layout.fillWidth: true
|
|
132
|
+
Layout.preferredHeight: parent.height * proportion.control
|
|
133
|
+
Layout.minimumHeight: 30
|
|
134
|
+
Layout.maximumHeight: 100
|
|
135
|
+
Button {
|
|
136
|
+
id: rightButton
|
|
137
|
+
anchors.fill: parent
|
|
138
|
+
text: model ? model.control.rightButton.text : ""
|
|
139
|
+
enabled: model ? model.control.rightButton.enabled : false
|
|
140
|
+
antialiasing: true
|
|
141
|
+
transformOrigin: Item.Right
|
|
142
|
+
checkable: false
|
|
143
|
+
checked: false
|
|
144
|
+
highlighted: true
|
|
145
|
+
font.pixelSize: parent.height * 0.7
|
|
146
|
+
onClicked: onControlClick(model.control.rightButton.text)
|
|
147
|
+
contentItem: Text {
|
|
148
|
+
text: rightButton.text
|
|
149
|
+
font: rightButton.font
|
|
150
|
+
opacity: enabled ? 1.0 : 0.3
|
|
151
|
+
horizontalAlignment: Text.AlignHCenter
|
|
152
|
+
verticalAlignment: Text.AlignVCenter
|
|
153
|
+
elide: Text.ElideNone
|
|
154
|
+
clip: true
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
function onControlClick(control) {
|
|
161
|
+
model.control.onControl(control)
|
|
162
|
+
}
|
|
163
|
+
function backColour(model) {
|
|
164
|
+
var colour = rectangleBase.color
|
|
165
|
+
if (Boolean(model) && model.instructionTitle === "ERROR" ) {
|
|
166
|
+
colour = instructionWidget.color
|
|
167
|
+
} else if (Boolean(model) && model.enabled && model.instructionText) {
|
|
168
|
+
colour = instructionWidget.color
|
|
169
|
+
}
|
|
170
|
+
return (colour)
|
|
171
|
+
}
|
|
172
|
+
function instructionPadding(model) {
|
|
173
|
+
var padding = 4
|
|
174
|
+
if (Boolean(model) && model.enabled && model.instructionText) {
|
|
175
|
+
var instruction = model.instructionText.toLowerCase()
|
|
176
|
+
if (instruction.includes("html")) {
|
|
177
|
+
padding = 0
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return (padding)
|
|
181
|
+
}
|
|
182
|
+
function controlEnabled() {
|
|
183
|
+
return (model && (model.control.rightButton.enabled || model.control.leftButton.enabled))
|
|
184
|
+
}
|
|
185
|
+
}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2020 Direkt, Australia
|
|
3
|
+
* Copyright 2021 Direkt Embedded Pty Ltd
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import QtQuick
|
|
19
|
+
import QtQuick.Layouts
|
|
20
|
+
import QtQuick.Controls
|
|
21
|
+
|
|
22
|
+
Item {
|
|
23
|
+
id: keyValueItem
|
|
24
|
+
width:parent.width
|
|
25
|
+
height: 40
|
|
26
|
+
clip: true
|
|
27
|
+
property var config: KeyValueItemConfig {}
|
|
28
|
+
|
|
29
|
+
Binding {
|
|
30
|
+
target: model.value
|
|
31
|
+
property: "value"
|
|
32
|
+
value: valueIsArray() ? comboControl.currentText : identifier.text
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
Rectangle {
|
|
36
|
+
id: rectangle
|
|
37
|
+
width: parent.width
|
|
38
|
+
color: config.color
|
|
39
|
+
border.width: 1
|
|
40
|
+
border.color: config.border.color
|
|
41
|
+
anchors.fill: parent
|
|
42
|
+
|
|
43
|
+
RowLayout {
|
|
44
|
+
id: row
|
|
45
|
+
height: parent.height
|
|
46
|
+
spacing: 1.5
|
|
47
|
+
anchors.fill: parent
|
|
48
|
+
|
|
49
|
+
Rectangle {
|
|
50
|
+
id: keyLabelRectangle
|
|
51
|
+
Layout.preferredWidth: parent.width * config.proportion.name
|
|
52
|
+
color: config.name.color
|
|
53
|
+
Layout.alignment: Qt.AlignLeft | Qt.AlignTop
|
|
54
|
+
border.color: config.name.border.color
|
|
55
|
+
border.width: 1
|
|
56
|
+
Layout.fillHeight: true
|
|
57
|
+
|
|
58
|
+
Text {
|
|
59
|
+
id: identifierName
|
|
60
|
+
color: config.name.text.color
|
|
61
|
+
text: value.label
|
|
62
|
+
verticalAlignment: Text.AlignVCenter
|
|
63
|
+
anchors.rightMargin: 2
|
|
64
|
+
anchors.fill: parent
|
|
65
|
+
font.pixelSize: parent.height * 0.7
|
|
66
|
+
minimumPixelSize: 10
|
|
67
|
+
elide: Text.ElideLeft
|
|
68
|
+
horizontalAlignment: Text.AlignRight
|
|
69
|
+
ToolTip {
|
|
70
|
+
visible: identifierName.truncated ? mouseArea.containsMouse : false
|
|
71
|
+
timeout: 3000
|
|
72
|
+
delay: 500
|
|
73
|
+
contentItem:
|
|
74
|
+
Column {
|
|
75
|
+
Text {
|
|
76
|
+
text: identifierName.text
|
|
77
|
+
font.pixelSize: identifier.height
|
|
78
|
+
font.weight: Font.ExtraBold
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
MouseArea {
|
|
83
|
+
id: mouseArea
|
|
84
|
+
anchors.fill: parent
|
|
85
|
+
hoverEnabled: true
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
Rectangle {
|
|
91
|
+
id: valueRectangle
|
|
92
|
+
Layout.fillHeight: true
|
|
93
|
+
color: config.value.color
|
|
94
|
+
Layout.fillWidth: true
|
|
95
|
+
border.width: 1
|
|
96
|
+
border.color: config.value.border.color
|
|
97
|
+
ComboBox {
|
|
98
|
+
id: comboControl
|
|
99
|
+
implicitHeight: parent.height
|
|
100
|
+
height: parent.height * 1.2
|
|
101
|
+
width: parent.width
|
|
102
|
+
font.pixelSize: parent.height * 0.85
|
|
103
|
+
model: possibles
|
|
104
|
+
visible: valueIsArray()
|
|
105
|
+
bottomPadding: height * 0.3
|
|
106
|
+
leftPadding: 2
|
|
107
|
+
rightPadding: 0
|
|
108
|
+
contentItem: Text {
|
|
109
|
+
leftPadding: 0
|
|
110
|
+
rightPadding: comboControl.indicator ? comboControl.indicator.width + comboControl.spacing : 0
|
|
111
|
+
text: comboControl.displayText
|
|
112
|
+
font: comboControl.font
|
|
113
|
+
verticalAlignment: Text.AlignVCenter
|
|
114
|
+
elide: Text.ElideRight
|
|
115
|
+
}
|
|
116
|
+
ToolTip {
|
|
117
|
+
visible: comboControl.currentText ? comboControl.hovered : false
|
|
118
|
+
timeout: 3000
|
|
119
|
+
delay: 500
|
|
120
|
+
contentItem:
|
|
121
|
+
Column {
|
|
122
|
+
Text {
|
|
123
|
+
text: comboControl.currentText
|
|
124
|
+
font.pixelSize: identifier.height
|
|
125
|
+
font.weight: Font.ExtraBold
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
delegate: ItemDelegate {
|
|
131
|
+
width: comboControl.width
|
|
132
|
+
contentItem: Text {
|
|
133
|
+
text: modelData
|
|
134
|
+
font: comboControl.font
|
|
135
|
+
elide: Text.ElideRight
|
|
136
|
+
verticalAlignment: Text.AlignVCenter
|
|
137
|
+
padding: 0
|
|
138
|
+
}
|
|
139
|
+
highlighted: comboControl.highlightedIndex === index
|
|
140
|
+
}
|
|
141
|
+
background: Rectangle {
|
|
142
|
+
border.width: 1
|
|
143
|
+
border.color: config.value.border.color
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
TextInput {
|
|
148
|
+
id: identifier
|
|
149
|
+
text: value.value
|
|
150
|
+
color: config.value.text.color
|
|
151
|
+
visible: !valueIsArray()
|
|
152
|
+
activeFocusOnPress: false
|
|
153
|
+
autoScroll: true
|
|
154
|
+
clip: true
|
|
155
|
+
font.pixelSize: parent.height / 1.2
|
|
156
|
+
anchors.rightMargin: 0
|
|
157
|
+
anchors.leftMargin: 3
|
|
158
|
+
anchors.fill: parent
|
|
159
|
+
ToolTip {
|
|
160
|
+
visible: parent.text ? identifierMouseArea.containsMouse : false
|
|
161
|
+
timeout: 3000
|
|
162
|
+
delay: 500
|
|
163
|
+
contentItem:
|
|
164
|
+
Column {
|
|
165
|
+
Text {
|
|
166
|
+
text: identifier.text
|
|
167
|
+
font.pixelSize: identifier.height
|
|
168
|
+
font.weight: Font.ExtraBold
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
MouseArea {
|
|
173
|
+
id: identifierMouseArea
|
|
174
|
+
anchors.fill: parent
|
|
175
|
+
hoverEnabled: true
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
Component.onCompleted: parseConfigStr()
|
|
183
|
+
|
|
184
|
+
function valueIsArray() {
|
|
185
|
+
return (possibles.length > 1) ? true : false;
|
|
186
|
+
}
|
|
187
|
+
function parseConfigStr() {
|
|
188
|
+
if (typeof contextKeyValueItemConfig !== "undefined") {
|
|
189
|
+
var json = JSON.parse(contextKeyValueItemConfig)
|
|
190
|
+
keyValueItem.config = json
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2020 Direkt, Australia
|
|
3
|
+
* Copyright 2021 Direkt Embedded Pty Ltd
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import QtQuick
|
|
19
|
+
|
|
20
|
+
Item {
|
|
21
|
+
/*
|
|
22
|
+
* Define the proportions for the widths of the test result items.
|
|
23
|
+
* The feedback area is not defined and will fill any remaining area.
|
|
24
|
+
*/
|
|
25
|
+
property var proportion: {
|
|
26
|
+
"name": 0.3
|
|
27
|
+
// value fill remaining space
|
|
28
|
+
}
|
|
29
|
+
property var color: "#605b5b"
|
|
30
|
+
property var border: {"color": "#00000000"}
|
|
31
|
+
property var name: {
|
|
32
|
+
"color": "#00000000",
|
|
33
|
+
"text": {"color": "#e5e2e2"},
|
|
34
|
+
"border": {"color": "#00000000"},
|
|
35
|
+
}
|
|
36
|
+
property var value: {
|
|
37
|
+
"color": "#ffffff",
|
|
38
|
+
"border": {"color": "#b9e5e2e2"},
|
|
39
|
+
"text": {"color": "black"}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2020 Direkt, Australia
|
|
3
|
+
* Copyright 2021 Direkt Embedded Pty Ltd
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import QtQuick
|
|
19
|
+
|
|
20
|
+
Item {
|
|
21
|
+
id: keyValueList
|
|
22
|
+
width: 400
|
|
23
|
+
clip: true
|
|
24
|
+
property var keyvalues
|
|
25
|
+
property int viewableCount: -1
|
|
26
|
+
property var itemConfig
|
|
27
|
+
|
|
28
|
+
Rectangle {
|
|
29
|
+
id: keyValueRectangle
|
|
30
|
+
anchors.fill: parent
|
|
31
|
+
|
|
32
|
+
ListView {
|
|
33
|
+
id: keyValueListView
|
|
34
|
+
clip: true
|
|
35
|
+
snapMode: ListView.NoSnap
|
|
36
|
+
boundsBehavior: Flickable.StopAtBounds
|
|
37
|
+
anchors.fill: parent
|
|
38
|
+
delegate: KeyValueItem {
|
|
39
|
+
height: (viewableCount <= 0) ? (keyValueListView.height / keyValueListView.count) : (keyValueListView.height / viewableCount)
|
|
40
|
+
Component.onCompleted: {
|
|
41
|
+
if (keyValueList.itemConfig) {
|
|
42
|
+
config = keyValueList.itemConfig
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
model: keyvalues
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2020 Direkt, Australia
|
|
3
|
+
* Copyright 2021 Direkt Embedded Pty Ltd
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import QtQuick
|
|
19
|
+
|
|
20
|
+
Item {
|
|
21
|
+
property var test_suites
|
|
22
|
+
anchors.fill: parent
|
|
23
|
+
Row {
|
|
24
|
+
id: suiteRows
|
|
25
|
+
spacing: 2
|
|
26
|
+
clip: false
|
|
27
|
+
anchors.fill: parent
|
|
28
|
+
Repeater {
|
|
29
|
+
id: testSuiteRepeater
|
|
30
|
+
anchors.fill: parent
|
|
31
|
+
model: test_suites
|
|
32
|
+
delegate: TestSuiteController {
|
|
33
|
+
tswModel: model
|
|
34
|
+
cntrlModel: model.testsuite.controller
|
|
35
|
+
width: parent.width / testSuiteRepeater.count - 1
|
|
36
|
+
height: parent.height
|
|
37
|
+
Component.onCompleted: {
|
|
38
|
+
if (app_model.config) {
|
|
39
|
+
var json = JSON.parse(app_model.config)
|
|
40
|
+
config = json
|
|
41
|
+
controllerConfig = json.controller
|
|
42
|
+
}
|
|
43
|
+
about = app_model.about
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2020 Direkt, Australia
|
|
3
|
+
* Copyright 2021 Direkt Embedded Pty Ltd
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import QtQuick
|
|
19
|
+
import QtQuick.Controls
|
|
20
|
+
import QtQuick.Dialogs
|
|
21
|
+
|
|
22
|
+
ApplicationWindow {
|
|
23
|
+
id: application
|
|
24
|
+
title: (app_model) ? app_model.title : "Test Executor"
|
|
25
|
+
visible: true
|
|
26
|
+
width: 1200
|
|
27
|
+
height: 800
|
|
28
|
+
visibility: (app_model && app_model.visibility) ? app_model.visibility : "Maximized"
|
|
29
|
+
MultiTestWidget {
|
|
30
|
+
test_suites: model_list
|
|
31
|
+
}
|
|
32
|
+
onClosing: function(close) {
|
|
33
|
+
if (model_list.active_suites) {
|
|
34
|
+
close.accepted = false
|
|
35
|
+
if (Boolean(app_model) && app_model.allowAbort) {
|
|
36
|
+
activeSuitesDialog.open()
|
|
37
|
+
} else {
|
|
38
|
+
closeToolTip.open()
|
|
39
|
+
}
|
|
40
|
+
} else {
|
|
41
|
+
app_model.abortAll(true)
|
|
42
|
+
close.accepted = true
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
ToolTip {
|
|
47
|
+
id: closeToolTip
|
|
48
|
+
timeout: 2000
|
|
49
|
+
background: Rectangle {
|
|
50
|
+
border.color: "red"
|
|
51
|
+
color: "yellow"
|
|
52
|
+
}
|
|
53
|
+
contentItem:
|
|
54
|
+
Column {
|
|
55
|
+
Text {
|
|
56
|
+
text: (app_model) ? app_model.closeHeading : "There Are Still Tests Running"
|
|
57
|
+
font.pixelSize: application.height * 0.03
|
|
58
|
+
font.weight: Font.ExtraBold
|
|
59
|
+
}
|
|
60
|
+
Text {
|
|
61
|
+
text: (app_model) ? app_model.closeText : "Stop all suites if you want to quit"
|
|
62
|
+
font.pixelSize: application.height * 0.03
|
|
63
|
+
font.weight: Font.ExtraBold
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
Dialog {
|
|
69
|
+
id: activeSuitesDialog
|
|
70
|
+
title: (app_model) ? app_model.closeHeading : "There Are Still Tests Running"
|
|
71
|
+
Label {
|
|
72
|
+
id: label
|
|
73
|
+
text: (app_model) ? app_model.closeText : "Do you want to abort all tests?"
|
|
74
|
+
font.pixelSize: application.width * 0.02 > 11 ? application.width * 0.02:11
|
|
75
|
+
}
|
|
76
|
+
font.pixelSize: application.width * 0.02 > 11 ? application.width * 0.02:11
|
|
77
|
+
standardButtons: Dialog.Yes | Dialog.No
|
|
78
|
+
onAccepted: {
|
|
79
|
+
app_model.abortAll(false)
|
|
80
|
+
app_model.abortAll(false)
|
|
81
|
+
}
|
|
82
|
+
width: label.width * 1.05
|
|
83
|
+
x: (parent.width - width) / 2
|
|
84
|
+
y: (parent.height - height) / 2
|
|
85
|
+
implicitWidth: width
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|