@gregoriusrippenstein/erlang-red-unittest 0.12.1 → 0.12.3
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.
- package/nodes/ut-assert-debug.html +31 -9
- package/nodes/ut-assert-values.js +98 -92
- package/package.json +1 -1
|
@@ -10,10 +10,14 @@
|
|
|
10
10
|
name: {
|
|
11
11
|
value:"",
|
|
12
12
|
},
|
|
13
|
+
|
|
14
|
+
scope: { value: null, type: "*[]", required: true },
|
|
15
|
+
|
|
13
16
|
nodeid: {
|
|
14
17
|
value: "",
|
|
15
18
|
required: true
|
|
16
|
-
},
|
|
19
|
+
},
|
|
20
|
+
|
|
17
21
|
msgtype: {
|
|
18
22
|
value: "normal",
|
|
19
23
|
required: true
|
|
@@ -29,9 +33,14 @@
|
|
|
29
33
|
outputs: 1,
|
|
30
34
|
|
|
31
35
|
label: function() {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
36
|
+
|
|
37
|
+
if (this.nodeid && (!this.scope || !this.scope[0])) {
|
|
38
|
+
this.scope = [this.nodeid]
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
if (this.scope && this.scope[0] && !this.name ) {
|
|
42
|
+
let nodeLabel = `[${this.scope[0]}]`;
|
|
43
|
+
let node = RED.nodes.node(this.scope[0])
|
|
35
44
|
if (node) {
|
|
36
45
|
nodeLabel = RED.utils.getNodeLabel(node)
|
|
37
46
|
}
|
|
@@ -45,7 +54,11 @@
|
|
|
45
54
|
},
|
|
46
55
|
|
|
47
56
|
labelStyle: function() {
|
|
48
|
-
|
|
57
|
+
if (this.nodeid && (!this.scope || !this.scope[0])) {
|
|
58
|
+
this.scope = [this.nodeid]
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return (this.name || (this.scope && this.scope[0])) ? "node_label_italic" : "";
|
|
49
62
|
},
|
|
50
63
|
|
|
51
64
|
onpaletteadd: function() {
|
|
@@ -55,6 +68,10 @@
|
|
|
55
68
|
},
|
|
56
69
|
|
|
57
70
|
oneditprepare: function() {
|
|
71
|
+
if (this.nodeid && (!this.scope || !this.scope[0])) {
|
|
72
|
+
this.scope = [this.nodeid]
|
|
73
|
+
}
|
|
74
|
+
|
|
58
75
|
$('#node-input-inverse').on('change', () => {
|
|
59
76
|
if ($('#node-input-inverse').is(":checked")) {
|
|
60
77
|
$('#ut-assert-debug-opts-to-hide-on-inverse').fadeOut(300);
|
|
@@ -65,10 +82,11 @@
|
|
|
65
82
|
|
|
66
83
|
var dirList = $("#node-input-assert-debug-target-container-div").css({
|
|
67
84
|
width: "100%",
|
|
68
|
-
height: "
|
|
85
|
+
height: "100%"
|
|
69
86
|
}).treeList(
|
|
70
87
|
{
|
|
71
|
-
multi: false
|
|
88
|
+
multi: false,
|
|
89
|
+
sortable: false
|
|
72
90
|
}
|
|
73
91
|
).on('treelistselect', function (event, item) {
|
|
74
92
|
if (item && item.nodeid) {
|
|
@@ -110,7 +128,7 @@
|
|
|
110
128
|
nodeid: nde.id,
|
|
111
129
|
node: nde,
|
|
112
130
|
sublabel: nde.type,
|
|
113
|
-
selected:
|
|
131
|
+
selected: this.scope && (this.scope[0] == nde.id),
|
|
114
132
|
checkbox: false,
|
|
115
133
|
radio: true,
|
|
116
134
|
children: undefined
|
|
@@ -124,7 +142,11 @@
|
|
|
124
142
|
},
|
|
125
143
|
|
|
126
144
|
oneditsave: function() {
|
|
127
|
-
|
|
145
|
+
if ($("#node-input-assert-debug-target-container-div").treeList('selected').nodeid) {
|
|
146
|
+
this.scope = [$("#node-input-assert-debug-target-container-div").treeList('selected').nodeid]
|
|
147
|
+
} else {
|
|
148
|
+
this.scope = []
|
|
149
|
+
}
|
|
128
150
|
},
|
|
129
151
|
|
|
130
152
|
oneditresize: function(size) {
|
|
@@ -63,118 +63,124 @@ module.exports = function(RED) {
|
|
|
63
63
|
var failures = [];
|
|
64
64
|
var unsupported = [];
|
|
65
65
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
if ( rule.
|
|
72
|
-
if ( rule.
|
|
73
|
-
rule.
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
if ( rule.
|
|
78
|
-
|
|
66
|
+
try {
|
|
67
|
+
cfg.rules.forEach(rule => {
|
|
68
|
+
/*
|
|
69
|
+
* Rule is Equal
|
|
70
|
+
*/
|
|
71
|
+
if ( rule.t == "eql" && rule.pt == "msg") {
|
|
72
|
+
if ( rule.tot == "str") {
|
|
73
|
+
if ( rule.to != escapeSpecials(RED.util.getObjectProperty(msg,rule.p)) ) {
|
|
74
|
+
rule._vt = escapeSpecials(RED.util.getObjectProperty(msg, rule.p))
|
|
75
|
+
failures.push(sendToDebug(node, rule, msg, 20))
|
|
76
|
+
}
|
|
77
|
+
} else if ( rule.tot == "num") {
|
|
78
|
+
if ( rule.to != RED.util.getObjectProperty(msg,rule.p) ) {
|
|
79
|
+
failures.push(sendToDebug(node, rule, msg, 20))
|
|
80
|
+
}
|
|
81
|
+
} else if (rule.tot == "bin") {
|
|
82
|
+
let expBuffer = Buffer.from(JSON.parse(rule.to));
|
|
83
|
+
let valBuffer = RED.util.getObjectProperty(msg, rule.p);
|
|
84
|
+
if ( Buffer.compare( expBuffer, valBuffer) != 0 ) {
|
|
85
|
+
failures.push(sendToDebug(node, rule, msg, 20))
|
|
86
|
+
}
|
|
87
|
+
} else if (rule.tot == "bool") {
|
|
88
|
+
if ( rule.to == "true" && !RED.util.getObjectProperty(msg, rule.p)) {
|
|
89
|
+
failures.push(sendToDebug(node, rule, msg, 20))
|
|
90
|
+
} else if (rule.to == "false" && !!RED.util.getObjectProperty(msg, rule.p) ) {
|
|
91
|
+
failures.push(sendToDebug(node, rule, msg, 20))
|
|
92
|
+
}
|
|
93
|
+
} else if (rule.tot == "json") {
|
|
94
|
+
let expObj = JSON.parse(rule.to)
|
|
95
|
+
let oldObj = RED.util.getObjectProperty(msg, rule.p)
|
|
96
|
+
|
|
97
|
+
if ( Array.isArray(expObj)) {
|
|
98
|
+
if (JSON.stringify(oldObj) != JSON.stringify(expObj)) {
|
|
99
|
+
failures.push(sendToDebug(node, rule, msg, 20))
|
|
100
|
+
}
|
|
101
|
+
} else {
|
|
102
|
+
if ( JSON.stringify(oldObj, Object.keys(oldObj).sort()) != JSON.stringify(expObj, Object.keys(expObj).sort()) ) {
|
|
103
|
+
failures.push(sendToDebug(node, rule, msg, 20))
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
} else if (rule.tot == "msg") {
|
|
107
|
+
if ( RED.util.getObjectProperty(msg,rule.to) != RED.util.getObjectProperty(msg,rule.p) ) {
|
|
108
|
+
failures.push(sendToDebug(node, rule, msg, 20))
|
|
109
|
+
}
|
|
110
|
+
} else {
|
|
111
|
+
unsupported.push(postUnsupported(rule,msg))
|
|
79
112
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
113
|
+
/*
|
|
114
|
+
* Rule is not set on message object
|
|
115
|
+
*/
|
|
116
|
+
} else if (rule.t == "notset" && rule.pt == "msg") {
|
|
117
|
+
if (RED.util.getObjectProperty(msg, rule.p) !== undefined) {
|
|
84
118
|
failures.push(sendToDebug(node, rule, msg, 20))
|
|
85
119
|
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
120
|
+
/*
|
|
121
|
+
* Rule is not set on message object
|
|
122
|
+
*/
|
|
123
|
+
} else if (rule.t == "set" && rule.pt == "msg") {
|
|
124
|
+
if (RED.util.getObjectProperty(msg, rule.p) === undefined) {
|
|
90
125
|
failures.push(sendToDebug(node, rule, msg, 20))
|
|
91
126
|
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
if (
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
}
|
|
100
|
-
} else {
|
|
101
|
-
if ( JSON.stringify(oldObj, Object.keys(oldObj).sort()) != JSON.stringify(expObj, Object.keys(expObj).sort()) ) {
|
|
127
|
+
/*
|
|
128
|
+
* Rule is match
|
|
129
|
+
*/
|
|
130
|
+
} else if ( rule.t == "mth" && rule.pt == "msg") {
|
|
131
|
+
if (rule.tot == "str") {
|
|
132
|
+
let reExp = new RegExp(rule.to)
|
|
133
|
+
if ( !reExp.test(RED.util.getObjectProperty(msg, rule.p)) ) {
|
|
102
134
|
failures.push(sendToDebug(node, rule, msg, 20))
|
|
103
135
|
}
|
|
136
|
+
} else {
|
|
137
|
+
unsupported.push(postUnsupported(rule,msg))
|
|
104
138
|
}
|
|
105
|
-
|
|
106
|
-
|
|
139
|
+
/*
|
|
140
|
+
* Rule is not equal
|
|
141
|
+
*/
|
|
142
|
+
} else if (rule.t == "noteql" && rule.pt == "msg" && rule.tot == "msg") {
|
|
143
|
+
/* comparing two values on the message object */
|
|
144
|
+
let expObj = RED.util.getObjectProperty(msg, rule.to)
|
|
145
|
+
let oldObj = RED.util.getObjectProperty(msg, rule.p)
|
|
146
|
+
if (expObj == oldObj) {
|
|
107
147
|
failures.push(sendToDebug(node, rule, msg, 20))
|
|
108
148
|
}
|
|
149
|
+
/*
|
|
150
|
+
* Other rule types are not supported
|
|
151
|
+
*/
|
|
109
152
|
} else {
|
|
110
153
|
unsupported.push(postUnsupported(rule,msg))
|
|
111
154
|
}
|
|
112
|
-
|
|
113
|
-
* Rule is not set on message object
|
|
114
|
-
*/
|
|
115
|
-
} else if (rule.t == "notset" && rule.pt == "msg") {
|
|
116
|
-
if (RED.util.getObjectProperty(msg, rule.p) !== undefined) {
|
|
117
|
-
failures.push(sendToDebug(node, rule, msg, 20))
|
|
118
|
-
}
|
|
119
|
-
/*
|
|
120
|
-
* Rule is not set on message object
|
|
121
|
-
*/
|
|
122
|
-
} else if (rule.t == "set" && rule.pt == "msg") {
|
|
123
|
-
if (RED.util.getObjectProperty(msg, rule.p) === undefined) {
|
|
124
|
-
failures.push(sendToDebug(node, rule, msg, 20))
|
|
125
|
-
}
|
|
126
|
-
/*
|
|
127
|
-
* Rule is match
|
|
128
|
-
*/
|
|
129
|
-
} else if ( rule.t == "mth" && rule.pt == "msg") {
|
|
130
|
-
if (rule.tot == "str") {
|
|
131
|
-
let reExp = new RegExp(rule.to)
|
|
132
|
-
if ( !reExp.test(RED.util.getObjectProperty(msg, rule.p)) ) {
|
|
133
|
-
failures.push(sendToDebug(node, rule, msg, 20))
|
|
134
|
-
}
|
|
135
|
-
} else {
|
|
136
|
-
unsupported.push(postUnsupported(rule,msg))
|
|
137
|
-
}
|
|
138
|
-
/*
|
|
139
|
-
* Rule is not equal
|
|
140
|
-
*/
|
|
141
|
-
} else if (rule.t == "noteql" && rule.pt == "msg" && rule.tot == "msg") {
|
|
142
|
-
/* comparing two values on the message object */
|
|
143
|
-
let expObj = RED.util.getObjectProperty(msg, rule.to)
|
|
144
|
-
let oldObj = RED.util.getObjectProperty(msg, rule.p)
|
|
145
|
-
if (expObj == oldObj) {
|
|
146
|
-
failures.push(sendToDebug(node, rule, msg, 20))
|
|
147
|
-
}
|
|
148
|
-
/*
|
|
149
|
-
* Other rule types are not supported
|
|
150
|
-
*/
|
|
151
|
-
} else {
|
|
152
|
-
unsupported.push(postUnsupported(rule,msg))
|
|
153
|
-
}
|
|
154
|
-
})
|
|
155
|
+
})
|
|
155
156
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
} else {
|
|
159
|
-
if (failures.length > 0 ) {
|
|
160
|
-
node.status({fill: "red", shape: "dot", text: "assert failed"})
|
|
161
|
-
msg.assert_succeed = false
|
|
162
|
-
msg.assert_failures = failures.concat(unsupported)
|
|
157
|
+
if (node.context().get("succeed") && cfg.ignore_failure_if_succeed) {
|
|
158
|
+
node.status({ fill: "green", shape: "ring", text: "assert succeed" })
|
|
163
159
|
} else {
|
|
164
|
-
if (
|
|
165
|
-
node.status({
|
|
160
|
+
if (failures.length > 0 ) {
|
|
161
|
+
node.status({fill: "red", shape: "dot", text: "assert failed"})
|
|
166
162
|
msg.assert_succeed = false
|
|
167
|
-
msg.assert_failures = failures.concat(
|
|
163
|
+
msg.assert_failures = failures.concat(unsupported)
|
|
168
164
|
} else {
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
165
|
+
if ( unsupported.length > 0) {
|
|
166
|
+
node.status({ fill: "yellow", shape: "ring", text: "unsupported errors - check debug" })
|
|
167
|
+
msg.assert_succeed = false
|
|
168
|
+
msg.assert_failures = failures.concat( unsupported )
|
|
169
|
+
} else {
|
|
170
|
+
node.context().set("succeed",true)
|
|
171
|
+
node.status({ fill: "green", shape: "ring", text: "assert succeed" })
|
|
172
|
+
msg.assert_succeed = true
|
|
173
|
+
delete msg.assert_failures
|
|
174
|
+
}
|
|
173
175
|
}
|
|
174
176
|
}
|
|
177
|
+
send(msg);
|
|
178
|
+
done();
|
|
179
|
+
} catch ( e ) {
|
|
180
|
+
node.status({ fill: "red", shape: "ring", text: "exception see log" })
|
|
181
|
+
done()
|
|
182
|
+
throw(e) // re-raise so that exception appears in the debug log
|
|
175
183
|
}
|
|
176
|
-
send(msg);
|
|
177
|
-
done();
|
|
178
184
|
});
|
|
179
185
|
}
|
|
180
186
|
|