ngx-speculoos 7.2.0 → 8.0.0
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/esm2020/lib/matchers.mjs
CHANGED
|
@@ -7,7 +7,7 @@ const speculoosMatchers = {
|
|
|
7
7
|
/**
|
|
8
8
|
* Checks that the receiver is a TestElement wrapping a DOM element and as the given CSS class
|
|
9
9
|
*/
|
|
10
|
-
toHaveClass
|
|
10
|
+
toHaveClass() {
|
|
11
11
|
const assert = (isNegative, el, expected) => {
|
|
12
12
|
if (!el) {
|
|
13
13
|
return { pass: false, message: `Expected to check class '${expected}' on element, but element was falsy` };
|
|
@@ -22,10 +22,10 @@ const speculoosMatchers = {
|
|
|
22
22
|
return { pass: isNegative ? !pass : pass, message };
|
|
23
23
|
};
|
|
24
24
|
return {
|
|
25
|
-
compare
|
|
25
|
+
compare(el, expected) {
|
|
26
26
|
return assert(false, el, expected);
|
|
27
27
|
},
|
|
28
|
-
negativeCompare
|
|
28
|
+
negativeCompare(el, expected) {
|
|
29
29
|
return assert(true, el, expected);
|
|
30
30
|
}
|
|
31
31
|
};
|
|
@@ -33,7 +33,7 @@ const speculoosMatchers = {
|
|
|
33
33
|
/**
|
|
34
34
|
* Checks that the receiver is a TestInput or a TestTextArea and has the given value
|
|
35
35
|
*/
|
|
36
|
-
toHaveValue
|
|
36
|
+
toHaveValue() {
|
|
37
37
|
const assert = (isNegative, el, expected) => {
|
|
38
38
|
if (!el) {
|
|
39
39
|
return { pass: false, message: `Expected to check value '${expected}' on element, but element was falsy` };
|
|
@@ -50,10 +50,10 @@ const speculoosMatchers = {
|
|
|
50
50
|
return { pass: isNegative ? !pass : pass, message };
|
|
51
51
|
};
|
|
52
52
|
return {
|
|
53
|
-
compare
|
|
53
|
+
compare(el, expected) {
|
|
54
54
|
return assert(false, el, expected);
|
|
55
55
|
},
|
|
56
|
-
negativeCompare
|
|
56
|
+
negativeCompare(el, expected) {
|
|
57
57
|
return assert(true, el, expected);
|
|
58
58
|
}
|
|
59
59
|
};
|
|
@@ -61,7 +61,7 @@ const speculoosMatchers = {
|
|
|
61
61
|
/**
|
|
62
62
|
* Checks that the receiver is a TestElement wrapping a DOM element and has the exact given textContent
|
|
63
63
|
*/
|
|
64
|
-
toHaveText
|
|
64
|
+
toHaveText() {
|
|
65
65
|
const assert = (isNegative, el, expected) => {
|
|
66
66
|
if (!el) {
|
|
67
67
|
return { pass: false, message: `Expected to check text '${expected}' on element, but element was falsy` };
|
|
@@ -75,10 +75,10 @@ const speculoosMatchers = {
|
|
|
75
75
|
return { pass: isNegative ? !pass : pass, message };
|
|
76
76
|
};
|
|
77
77
|
return {
|
|
78
|
-
compare
|
|
78
|
+
compare(el, expected) {
|
|
79
79
|
return assert(false, el, expected);
|
|
80
80
|
},
|
|
81
|
-
negativeCompare
|
|
81
|
+
negativeCompare(el, expected) {
|
|
82
82
|
return assert(true, el, expected);
|
|
83
83
|
}
|
|
84
84
|
};
|
|
@@ -96,7 +96,7 @@ const speculoosMatchers = {
|
|
|
96
96
|
* expect(tester.title).toHaveTrimmedText('Some title')
|
|
97
97
|
* ```
|
|
98
98
|
*/
|
|
99
|
-
toHaveTrimmedText
|
|
99
|
+
toHaveTrimmedText() {
|
|
100
100
|
const assert = (isNegative, el, expected) => {
|
|
101
101
|
const trimmedExpected = expected.trim();
|
|
102
102
|
if (!el) {
|
|
@@ -114,10 +114,10 @@ const speculoosMatchers = {
|
|
|
114
114
|
return { pass: isNegative ? !pass : pass, message };
|
|
115
115
|
};
|
|
116
116
|
return {
|
|
117
|
-
compare
|
|
117
|
+
compare(el, expected) {
|
|
118
118
|
return assert(false, el, expected);
|
|
119
119
|
},
|
|
120
|
-
negativeCompare
|
|
120
|
+
negativeCompare(el, expected) {
|
|
121
121
|
return assert(true, el, expected);
|
|
122
122
|
}
|
|
123
123
|
};
|
|
@@ -125,7 +125,7 @@ const speculoosMatchers = {
|
|
|
125
125
|
/**
|
|
126
126
|
* Checks that the receiver is a TestElement wrapping a DOM element and contains the given textContent
|
|
127
127
|
*/
|
|
128
|
-
toContainText
|
|
128
|
+
toContainText() {
|
|
129
129
|
const assert = (isNegative, el, expected) => {
|
|
130
130
|
if (!el) {
|
|
131
131
|
return { pass: false, message: `Expected to check text '${expected}' on element, but element was falsy` };
|
|
@@ -145,10 +145,10 @@ const speculoosMatchers = {
|
|
|
145
145
|
return { pass: isNegative ? !pass : pass, message };
|
|
146
146
|
};
|
|
147
147
|
return {
|
|
148
|
-
compare
|
|
148
|
+
compare(el, expected) {
|
|
149
149
|
return assert(false, el, expected);
|
|
150
150
|
},
|
|
151
|
-
negativeCompare
|
|
151
|
+
negativeCompare(el, expected) {
|
|
152
152
|
return assert(true, el, expected);
|
|
153
153
|
}
|
|
154
154
|
};
|
|
@@ -156,7 +156,7 @@ const speculoosMatchers = {
|
|
|
156
156
|
/**
|
|
157
157
|
* Checks that the receiver is a TestElement wrapping a DOM element and contains the given textContent
|
|
158
158
|
*/
|
|
159
|
-
toBeChecked
|
|
159
|
+
toBeChecked() {
|
|
160
160
|
const assert = (isNegative, el) => {
|
|
161
161
|
if (!el) {
|
|
162
162
|
return { pass: false, message: `Expected to check if element was checked, but element was falsy` };
|
|
@@ -169,10 +169,10 @@ const speculoosMatchers = {
|
|
|
169
169
|
return { pass: isNegative ? !pass : pass, message };
|
|
170
170
|
};
|
|
171
171
|
return {
|
|
172
|
-
compare
|
|
172
|
+
compare(el) {
|
|
173
173
|
return assert(false, el);
|
|
174
174
|
},
|
|
175
|
-
negativeCompare
|
|
175
|
+
negativeCompare(el) {
|
|
176
176
|
return assert(true, el);
|
|
177
177
|
}
|
|
178
178
|
};
|
|
@@ -180,7 +180,7 @@ const speculoosMatchers = {
|
|
|
180
180
|
/**
|
|
181
181
|
* Checks that the receiver is a TestSelect wrapping a DOM element and has the given selected index
|
|
182
182
|
*/
|
|
183
|
-
toHaveSelectedIndex
|
|
183
|
+
toHaveSelectedIndex() {
|
|
184
184
|
const assert = (isNegative, el, expected) => {
|
|
185
185
|
if (!el) {
|
|
186
186
|
return { pass: false, message: `Expected to check selected index ${expected} on element, but element was falsy` };
|
|
@@ -194,10 +194,10 @@ const speculoosMatchers = {
|
|
|
194
194
|
return { pass: isNegative ? !pass : pass, message };
|
|
195
195
|
};
|
|
196
196
|
return {
|
|
197
|
-
compare
|
|
197
|
+
compare(el, expected) {
|
|
198
198
|
return assert(false, el, expected);
|
|
199
199
|
},
|
|
200
|
-
negativeCompare
|
|
200
|
+
negativeCompare(el, expected) {
|
|
201
201
|
return assert(true, el, expected);
|
|
202
202
|
}
|
|
203
203
|
};
|
|
@@ -205,7 +205,7 @@ const speculoosMatchers = {
|
|
|
205
205
|
/**
|
|
206
206
|
* Checks that the receiver is a TestSelect wrapping a DOM element with the selected option's value equal to the given value
|
|
207
207
|
*/
|
|
208
|
-
toHaveSelectedValue
|
|
208
|
+
toHaveSelectedValue() {
|
|
209
209
|
const assert = (isNegative, el, expected) => {
|
|
210
210
|
if (!el) {
|
|
211
211
|
return { pass: false, message: `Expected to check selected value '${expected}' on element, but element was falsy` };
|
|
@@ -219,10 +219,10 @@ const speculoosMatchers = {
|
|
|
219
219
|
return { pass: isNegative ? !pass : pass, message };
|
|
220
220
|
};
|
|
221
221
|
return {
|
|
222
|
-
compare
|
|
222
|
+
compare(el, expected) {
|
|
223
223
|
return assert(false, el, expected);
|
|
224
224
|
},
|
|
225
|
-
negativeCompare
|
|
225
|
+
negativeCompare(el, expected) {
|
|
226
226
|
return assert(true, el, expected);
|
|
227
227
|
}
|
|
228
228
|
};
|
|
@@ -230,7 +230,7 @@ const speculoosMatchers = {
|
|
|
230
230
|
/**
|
|
231
231
|
* Checks that the receiver is a TestSelect wrapping a DOM element with the selected option's label equal to the given label
|
|
232
232
|
*/
|
|
233
|
-
toHaveSelectedLabel
|
|
233
|
+
toHaveSelectedLabel() {
|
|
234
234
|
const assert = (isNegative, el, expected) => {
|
|
235
235
|
if (!el) {
|
|
236
236
|
return { pass: false, message: `Expected to check selected label '${expected}' on element, but element was falsy` };
|
|
@@ -244,10 +244,10 @@ const speculoosMatchers = {
|
|
|
244
244
|
return { pass: isNegative ? !pass : pass, message };
|
|
245
245
|
};
|
|
246
246
|
return {
|
|
247
|
-
compare
|
|
247
|
+
compare(el, expected) {
|
|
248
248
|
return assert(false, el, expected);
|
|
249
249
|
},
|
|
250
|
-
negativeCompare
|
|
250
|
+
negativeCompare(el, expected) {
|
|
251
251
|
return assert(true, el, expected);
|
|
252
252
|
}
|
|
253
253
|
};
|
|
@@ -255,7 +255,7 @@ const speculoosMatchers = {
|
|
|
255
255
|
/**
|
|
256
256
|
* Checks that the receiver is a TestHtmlElement which is visible
|
|
257
257
|
*/
|
|
258
|
-
toBeVisible
|
|
258
|
+
toBeVisible() {
|
|
259
259
|
const assert = (isNegative, el) => {
|
|
260
260
|
const expectedState = `${isNegative ? 'in' : ''}visible`;
|
|
261
261
|
const inverseState = `${isNegative ? '' : 'in'}visible`;
|
|
@@ -270,14 +270,14 @@ const speculoosMatchers = {
|
|
|
270
270
|
return { pass: isNegative ? !pass : pass, message };
|
|
271
271
|
};
|
|
272
272
|
return {
|
|
273
|
-
compare
|
|
273
|
+
compare(el) {
|
|
274
274
|
return assert(false, el);
|
|
275
275
|
},
|
|
276
|
-
negativeCompare
|
|
276
|
+
negativeCompare(el) {
|
|
277
277
|
return assert(true, el);
|
|
278
278
|
}
|
|
279
279
|
};
|
|
280
280
|
}
|
|
281
281
|
};
|
|
282
282
|
export { speculoosMatchers };
|
|
283
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0Y2hlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3BlY3Vsb29zL3NyYy9saWIvbWF0Y2hlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRELE1BQU0saUJBQWlCLEdBQW1DO0lBQ3hEOztPQUVHO0lBQ0gsV0FBVyxFQUFFLEdBQTBCLEVBQUU7UUFDdkMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxVQUFtQixFQUFFLEVBQVcsRUFBRSxRQUFnQixFQUFFLEVBQUU7WUFDcEUsSUFBSSxDQUFDLEVBQUUsRUFBRTtnQkFDUCxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsNEJBQTRCLFFBQVEscUNBQXFDLEVBQUUsQ0FBQzthQUM1RztZQUNELElBQUksQ0FBQyxDQUFDLEVBQUUsWUFBWSxXQUFXLENBQUMsRUFBRTtnQkFDaEMsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLDRCQUE0QixRQUFRLGlEQUFpRCxFQUFFLENBQUM7YUFDeEg7WUFDRCxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDO1lBQzFCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDN0MsTUFBTSxPQUFPLEdBQ1gsdUJBQXVCLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUs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Q0FBQyxJQUFJLFNBQVMsQ0FBQztZQUN4RCxJQUFJLENBQUMsRUFBRSxFQUFFO2dCQUNQLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxvQ0FBb0MsYUFBYSx5QkFBeUIsRUFBRSxDQUFDO2FBQzdHO1lBQ0QsSUFBSSxDQUFDLENBQUMsRUFBRSxZQUFZLGVBQWUsQ0FBQyxFQUFFO2dCQUNwQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsb0NBQW9DLGFBQWEseUNBQXlDLEVBQUUsQ0FBQzthQUM3SDtZQUNELE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUM7WUFDeEIsTUFBTSxPQUFPLEdBQUcsMEJBQTBCLGFBQWEsYUFBYSxZQUFZLEVBQUUsQ0FBQztZQUNuRixPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN0RCxDQUFDLENBQUM7UUFDRixPQUFPO1lBQ0wsT0FBTyxFQUFFLENBQUMsRUFBVyxFQUErQixFQUFFO2dCQUNwRCxPQUFPLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDM0IsQ0FBQztZQUNELGVBQWUsRUFBRSxDQUFDLEVBQVcsRUFBK0IsRUFBRTtnQkFDNUQsT0FBTyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzFCLENBQUM7U0FDRixDQUFDO0lBQ0osQ0FBQztDQUNGLENBQUM7QUFFRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlc3RUZXh0QXJlYSB9IGZyb20gJy4vdGVzdC10ZXh0YXJlYSc7XG5pbXBvcnQgeyBUZXN0SW5wdXQgfSBmcm9tICcuL3Rlc3QtaW5wdXQnO1xuaW1wb3J0IHsgVGVzdEVsZW1lbnQgfSBmcm9tICcuL3Rlc3QtZWxlbWVudCc7XG5pbXBvcnQgeyBUZXN0U2VsZWN0IH0gZnJvbSAnLi90ZXN0LXNlbGVjdCc7XG5pbXBvcnQgeyBUZXN0SHRtbEVsZW1lbnQgfSBmcm9tICcuL3Rlc3QtaHRtbC1lbGVtZW50JztcblxuY29uc3Qgc3BlY3Vsb29zTWF0Y2hlcnM6IGphc21pbmUuQ3VzdG9tTWF0Y2hlckZhY3RvcmllcyA9IHtcbiAgLyoqXG4gICAqIENoZWNrcyB0aGF0IHRoZSByZWNlaXZlciBpcyBhIFRlc3RFbGVtZW50IHdyYXBwaW5nIGEgRE9NIGVsZW1lbnQgYW5kIGFzIHRoZSBnaXZlbiBDU1MgY2xhc3NcbiAgICovXG4gIHRvSGF2ZUNsYXNzOiAoKTogamFzbWluZS5DdXN0b21NYXRjaGVyID0+IHtcbiAgICBjb25zdCBhc3NlcnQgPSAoaXNOZWdhdGl2ZTogYm9vbGVhbiwgZWw6IHVua25vd24sIGV4cGVjdGVkOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmICghZWwpIHtcbiAgICAgICAgcmV0dXJuIHsgcGFzczogZmFsc2UsIG1lc3NhZ2U6IGBFeHBlY3RlZCB0byBjaGVjayBjbGFzcyAnJHtleHBlY3RlZH0nIG9uIGVsZW1lbnQsIGJ1dCBlbGVtZW50IHdhcyBmYWxzeWAgfTtcbiAgICAgIH1cbiAgICAgIGlmICghKGVsIGluc3RhbmNlb2YgVGVzdEVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiB7IHBhc3M6IGZhbHNlLCBtZXNzYWdlOiBgRXhwZWN0ZWQgdG8gY2hlY2sgY2xhc3MgJyR7ZXhwZWN0ZWR9JyBvbiBlbGVtZW50LCBidXQgZWxlbWVudCB3YXMgbm90IGEgVGVzdEVsZW1lbnRgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBhY3R1YWwgPSBlbC5jbGFzc2VzO1xuICAgICAgY29uc3QgcGFzcyA9IGFjdHVhbC5pbmRleE9mKGV4cGVjdGVkKSAhPT0gLTE7XG4gICAgICBjb25zdCBtZXNzYWdlID1cbiAgICAgICAgYEV4cGVjdGVkIGVsZW1lbnQgdG8gJHtpc05lZ2F0aXZlID8gJ25vdCAnIDogJyd9aGF2ZSBjbGFzcyAnJHtleHBlY3RlZH0nLCBgICtcbiAgICAgICAgYGJ1dCBoYWQgJHthY3R1YWwubGVuZ3RoID8gXCInXCIgKyBhY3R1YWwuam9pbignLCAnKSArIFwiJ1wiIDogJ25vbmUnfWA7XG4gICAgICByZXR1cm4geyBwYXNzOiBpc05lZ2F0aXZlID8gIXBhc3MgOiBwYXNzLCBtZXNzYWdlIH07XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgY29tcGFyZTogKGVsOiB1bmtub3duLCBleHBlY3RlZDogc3RyaW5nKTogamFzbWluZS5DdXN0b21NYXRjaGVyUmVzdWx0ID0+IHtcbiAgICAgICAgcmV0dXJuIGFzc2VydChmYWxzZSwgZWwsIGV4cGVjdGVkKTtcbiAgICAgIH0sXG4gICAgICBuZWdhdGl2ZUNvbXBhcmU6IChlbDogdW5rbm93biwgZXhwZWN0ZWQ6IHN0cmluZyk6IGphc21pbmUuQ3VzdG9tTWF0Y2hlclJlc3VsdCA9PiB7XG4gICAgICAgIHJldHVybiBhc3NlcnQodHJ1ZSwgZWwsIGV4cGVjdGVkKTtcbiAgICAgIH1cbiAgICB9O1xuICB9LFxuXG4gIC8qKlxuICAgKiBDaGVja3MgdGhhdCB0aGUgcmVjZWl2ZXIgaXMgYSBUZXN0SW5wdXQgb3IgYSBUZXN0VGV4dEFyZWEgYW5kIGhhcyB0aGUgZ2l2ZW4gdmFsdWVcbiAgICovXG4gIHRvSGF2ZVZhbHVlOiAoKTogamFzbWluZS5DdXN0b21NYXRjaGVyID0+IHtcbiAgICBjb25zdCBhc3NlcnQgPSAoaXNOZWdhdGl2ZTogYm9vbGVhbiwgZWw6IHVua25vd24sIGV4cGVjdGVkOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmICghZWwpIHtcbiAgICAgICAgcmV0dXJuIHsgcGFzczogZmFsc2UsIG1lc3NhZ2U6IGBFeHBlY3RlZCB0byBjaGVjayB2YWx1ZSAnJHtleHBlY3RlZH0nIG9uIGVsZW1lbnQsIGJ1dCBlbGVtZW50IHdhcyBmYWxzeWAgfTtcbiAgICAgIH1cbiAgICAgIGlmICghKGVsIGluc3RhbmNlb2YgVGVzdElucHV0KSAmJiAhKGVsIGluc3RhbmNlb2YgVGVzdFRleHRBcmVhKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHBhc3M6IGZhbHNlLFxuICAgICAgICAgIG1lc3NhZ2U6IGBFeHBlY3RlZCB0byBjaGVjayB2YWx1ZSAnJHtleHBlY3RlZH0nIG9uIGVsZW1lbnQsIGJ1dCBlbGVtZW50IHdhcyBuZWl0aGVyIGEgVGVzdElucHV0IG5vciBhIFRlc3RUZXh0QXJlYWBcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFjdHVhbCA9IGVsLnZhbHVlO1xuICAgICAgY29uc3QgcGFzcyA9IGFjdHVhbCA9PT0gZXhwZWN0ZWQ7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYEV4cGVjdGVkIGVsZW1lbnQgdG8gJHtpc05lZ2F0aXZlID8gJ25vdCAnIDogJyd9aGF2ZSB2YWx1ZSAnJHtleHBlY3RlZH0nLCBidXQgaGFkIHZhbHVlICcke2FjdHVhbH0nYDtcbiAgICAgIHJldHVybiB7IHBhc3M6IGlzTmVnYXRpdmUgPyAhcGFzcyA6IHBhc3MsIG1lc3NhZ2UgfTtcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBjb21wYXJlOiAoZWw6IHVua25vd24sIGV4cGVjdGVkOiBzdHJpbmcpOiBqYXNtaW5lLkN1c3RvbU1hdGNoZXJSZXN1bHQgPT4ge1xuICAgICAgICByZXR1cm4gYXNzZXJ0KGZhbHNlLCBlbCwgZXhwZWN0ZWQpO1xuICAgICAgfSxcbiAgICAgIG5lZ2F0aXZlQ29tcGFyZTogKGVsOiB1bmtub3duLCBleHBlY3RlZDogc3RyaW5nKTogamFzbWluZS5DdXN0b21NYXRjaGVyUmVzdWx0ID0+IHtcbiAgICAgICAgcmV0dXJuIGFzc2VydCh0cnVlLCBlbCwgZXhwZWN0ZWQpO1xuICAgICAgfVxuICAgIH07XG4gIH0sXG5cbiAgLyoqXG4gICAqIENoZWNrcyB0aGF0IHRoZSByZWNlaXZlciBpcyBhIFRlc3RFbGVtZW50IHdyYXBwaW5nIGEgRE9NIGVsZW1lbnQgYW5kIGhhcyB0aGUgZXhhY3QgZ2l2ZW4gdGV4dENvbnRlbnRcbiAgICovXG4gIHRvSGF2ZVRleHQ6ICgpOiBqYXNtaW5lLkN1c3RvbU1hdGNoZXIgPT4ge1xuICAgIGNvbnN0IGFzc2VydCA9IChpc05lZ2F0aXZlOiBib29sZWFuLCBlbDogdW5rbm93biwgZXhwZWN0ZWQ6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKCFlbCkge1xuICAgICAgICByZXR1cm4geyBwYXNzOiBmYWxzZSwgbWVzc2FnZTogYEV4cGVjdGVkIHRvIGNoZWNrIHRleHQgJyR7ZXhwZWN0ZWR9JyBvbiBlbGVtZW50LCBidXQgZWxlbWVudCB3YXMgZmFsc3lgIH07XG4gICAgICB9XG4gICAgICBpZiAoIShlbCBpbnN0YW5jZW9mIFRlc3RFbGVtZW50KSkge1xuICAgICAgICByZXR1cm4geyBwYXNzOiBmYWxzZSwgbWVzc2FnZTogYEV4cGVjdGVkIHRvIGNoZWNrIHRleHQgJyR7ZXhwZWN0ZWR9JyBvbiBlbGVtZW50LCBidXQgZWxlbWVudCB3YXMgbm90IGEgVGVzdEVsZW1lbnRgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBhY3R1YWwgPSBlbC50ZXh0Q29udGVudDtcbiAgICAgIGNvbnN0IHBhc3MgPSBhY3R1YWwgPT09IGV4cGVjdGVkO1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGBFeHBlY3RlZCBlbGVtZW50IHRvICR7aXNOZWdhdGl2ZSA/ICdub3QgJyA6ICcnfWhhdmUgdGV4dCAnJHtleHBlY3RlZH0nLCBidXQgaGFkICcke2FjdHVhbH0nYDtcbiAgICAgIHJldHVybiB7IHBhc3M6IGlzTmVnYXRpdmUgPyAhcGFzcyA6IHBhc3MsIG1lc3NhZ2UgfTtcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBjb21wYXJlOiAoZWw6IHVua25vd24sIGV4cGVjdGVkOiBzdHJpbmcpOiBqYXNtaW5lLkN1c3RvbU1hdGNoZXJSZXN1bHQgPT4ge1xuICAgICAgICByZXR1cm4gYXNzZXJ0KGZhbHNlLCBlbCwgZXhwZWN0ZWQpO1xuICAgICAgfSxcbiAgICAgIG5lZ2F0aXZlQ29tcGFyZTogKGVsOiB1bmtub3duLCBleHBlY3RlZDogc3RyaW5nKTogamFzbWluZS5DdXN0b21NYXRjaGVyUmVzdWx0ID0+IHtcbiAgICAgICAgcmV0dXJuIGFzc2VydCh0cnVlLCBlbCwgZXhwZWN0ZWQpO1xuICAgICAgfVxuICAgIH07XG4gIH0sXG5cbiAgLyoqXG4gICAqIENoZWNrcyB0aGF0IHRoZSByZWNlaXZlciBpcyBhIFRlc3RFbGVtZW50IHdyYXBwaW5nIGEgRE9NIGVsZW1lbnQgYW5kIGhhcyB0aGUgZ2l2ZW4gdGV4dENvbnRlbnQsIGFmdGVyIGJvdGggaGF2ZSBiZWVuIHRyaW1tZWQuXG4gICAqIFNvLCBBbiBlbGVtZW50IHN1Y2ggYXNcbiAgICogYGBgXG4gICAqIDxoMT5cbiAgICogICBTb21lIHRpdGxlXG4gICAqIDwvaDE+XG4gICAqIGBgYFxuICAgKiB3aWxsIHBhc3MgdGhlIHRlc3RcbiAgICogYGBgXG4gICAqIGV4cGVjdCh0ZXN0ZXIudGl0bGUpLnRvSGF2ZVRyaW1tZWRUZXh0KCdTb21lIHRpdGxlJylcbiAgICogYGBgXG4gICAqL1xuICB0b0hhdmVUcmltbWVkVGV4dDogKCk6IGphc21pbmUuQ3VzdG9tTWF0Y2hlciA9PiB7XG4gICAgY29uc3QgYXNzZXJ0ID0gKGlzTmVnYXRpdmU6IGJvb2xlYW4sIGVsOiB1bmtub3duLCBleHBlY3RlZDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCB0cmltbWVkRXhwZWN0ZWQgPSBleHBlY3RlZC50cmltKCk7XG4gICAgICBpZiAoIWVsKSB7XG4gICAgICAgIHJldHVybiB7IHBhc3M6IGZhbHNlLCBtZXNzYWdlOiBgRXhwZWN0ZWQgdG8gY2hlY2sgdHJpbW1lZCB0ZXh0ICcke3RyaW1tZWRFeHBlY3RlZH0nIG9uIGVsZW1lbnQsIGJ1dCBlbGVtZW50IHdhcyBmYWxzeWAgfTtcbiAgICAgIH1cbiAgICAgIGlmICghKGVsIGluc3RhbmNlb2YgVGVzdEVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcGFzczogZmFsc2UsXG4gICAgICAgICAgbWVzc2FnZTogYEV4cGVjdGVkIHRvIGNoZWNrIHRyaW1tZWQgdGV4dCAnJHt0cmltbWVkRXhwZWN0ZWR9JyBvbiBlbGVtZW50LCBidXQgZWxlbWVudCB3YXMgbm90IGEgVGVzdEVsZW1lbnRgXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBhY3R1YWwgPSBlbC50ZXh0Q29udGVudD8udHJpbSgpO1xuICAgICAgY29uc3QgcGFzcyA9IGFjdHVhbCA9PT0gdHJpbW1lZEV4cGVjdGVkO1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGBFeHBlY3RlZCBlbGVtZW50IHRvICR7aXNOZWdhdGl2ZSA/ICdub3QgJyA6ICcnfWhhdmUgdHJpbW1lZCB0ZXh0ICcke3RyaW1tZWRFeHBlY3RlZH0nLCBidXQgaGFkICcke2FjdHVhbH0nYDtcbiAgICAgIHJldHVybiB7IHBhc3M6IGlzTmVnYXRpdmUgPyAhcGFzcyA6IHBhc3MsIG1lc3NhZ2UgfTtcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBjb21wYXJlOiAoZWw6IHVua25vd24sIGV4cGVjdGVkOiBzdHJpbmcpOiBqYXNtaW5lLkN1c3RvbU1hdGNoZXJSZXN1bHQgPT4ge1xuICAgICAgICByZXR1cm4gYXNzZXJ0KGZhbHNlLCBlbCwgZXhwZWN0ZWQpO1xuICAgICAgfSxcbiAgICAgIG5lZ2F0aXZlQ29tcGFyZTogKGVsOiB1bmtub3duLCBleHBlY3RlZDogc3RyaW5nKTogamFzbWluZS5DdXN0b21NYXRjaGVyUmVzdWx0ID0+IHtcbiAgICAgICAgcmV0dXJuIGFzc2VydCh0cnVlLCBlbCwgZXhwZWN0ZWQpO1xuICAgICAgfVxuICAgIH07XG4gIH0sXG5cbiAgLyoqXG4gICAqIENoZWNrcyB0aGF0IHRoZSByZWNlaXZlciBpcyBhIFRlc3RFbGVtZW50IHdyYXBwaW5nIGEgRE9NIGVsZW1lbnQgYW5kIGNvbnRhaW5zIHRoZSBnaXZlbiB0ZXh0Q29udGVudFxuICAgKi9cbiAgdG9Db250YWluVGV4dDogKCk6IGphc21pbmUuQ3VzdG9tTWF0Y2hlciA9PiB7XG4gICAgY29uc3QgYXNzZXJ0ID0gKGlzTmVnYXRpdmU6IGJvb2xlYW4sIGVsOiB1bmtub3duLCBleHBlY3RlZDogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoIWVsKSB7XG4gICAgICAgIHJldHVybiB7IHBhc3M6IGZhbHNlLCBtZXNzYWdlOiBgRXhwZWN0ZWQgdG8gY2hlY2sgdGV4dCAnJHtleHBlY3RlZH0nIG9uIGVsZW1lbnQsIGJ1dCBlbGVtZW50IHdhcyBmYWxzeWAgfTtcbiAgICAgIH1cbiAgICAgIGlmICghKGVsIGluc3RhbmNlb2YgVGVzdEVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiB7IHBhc3M6IGZhbHNlLCBtZXNzYWdlOiBgRXhwZWN0ZWQgdG8gY2hlY2sgdGV4dCAnJHtleHBlY3RlZH0nIG9uIGVsZW1lbnQsIGJ1dCBlbGVtZW50IHdhcyBub3QgYSBUZXN0RWxlbWVudGAgfTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFjdHVhbCA9IGVsLnRleHRDb250ZW50O1xuICAgICAgaWYgKCFhY3R1YWwpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwYXNzOiBpc05lZ2F0aXZlLFxuICAgICAgICAgIG1lc3NhZ2U6IGBFeHBlY3RlZCBlbGVtZW50IHRvICR7aXNOZWdhdGl2ZSA/ICdub3QgJyA6ICcnfWNvbnRhaW4gdGV4dCAnJHtleHBlY3RlZH0nLCBidXQgaGFkIG5vIHRleHRgXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBwYXNzID0gYWN0dWFsLmluZGV4T2YoZXhwZWN0ZWQpICE9PSAtMTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgRXhwZWN0ZWQgZWxlbWVudCB0byAke2lzTmVnYXRpdmUgPyAnbm90ICcgOiAnJ31jb250YWluIHRleHQgJyR7ZXhwZWN0ZWR9JywgYnV0IGhhZCB0ZXh0ICcke2FjdHVhbH0nYDtcbiAgICAgIHJldHVybiB7IHBhc3M6IGlzTmVnYXRpdmUgPyAhcGFzcyA6IHBhc3MsIG1lc3NhZ2UgfTtcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBjb21wYXJlOiAoZWw6IHVua25vd24sIGV4cGVjdGVkOiBzdHJpbmcpOiBqYXNtaW5lLkN1c3RvbU1hdGNoZXJSZXN1bHQgPT4ge1xuICAgICAgICByZXR1cm4gYXNzZXJ0KGZhbHNlLCBlbCwgZXhwZWN0ZWQpO1xuICAgICAgfSxcbiAgICAgIG5lZ2F0aXZlQ29tcGFyZTogKGVsOiB1bmtub3duLCBleHBlY3RlZDogc3RyaW5nKTogamFzbWluZS5DdXN0b21NYXRjaGVyUmVzdWx0ID0+IHtcbiAgICAgICAgcmV0dXJuIGFzc2VydCh0cnVlLCBlbCwgZXhwZWN0ZWQpO1xuICAgICAgfVxuICAgIH07XG4gIH0sXG5cbiAgLyoqXG4gICAqIENoZWNrcyB0aGF0IHRoZSByZWNlaXZlciBpcyBhIFRlc3RFbGVtZW50IHdyYXBwaW5nIGEgRE9NIGVsZW1lbnQgYW5kIGNvbnRhaW5zIHRoZSBnaXZlbiB0ZXh0Q29udGVudFxuICAgKi9cbiAgdG9CZUNoZWNrZWQ6ICgpOiBqYXNtaW5lLkN1c3RvbU1hdGNoZXIgPT4ge1xuICAgIGNvbnN0IGFzc2VydCA9IChpc05lZ2F0aXZlOiBib29sZWFuLCBlbDogdW5rbm93bikgPT4ge1xuICAgICAgaWYgKCFlbCkge1xuICAgICAgICByZXR1cm4geyBwYXNzOiBmYWxzZSwgbWVzc2FnZTogYEV4cGVjdGVkIHRvIGNoZWNrIGlmIGVsZW1lbnQgd2FzIGNoZWNrZWQsIGJ1dCBlbGVtZW50IHdhcyBmYWxzeWAgfTtcbiAgICAgIH1cbiAgICAgIGlmICghKGVsIGluc3RhbmNlb2YgVGVzdElucHV0KSkge1xuICAgICAgICByZXR1cm4geyBwYXNzOiBmYWxzZSwgbWVzc2FnZTogYEV4cGVjdGVkIHRvIGNoZWNrIGlmIGVsZW1lbnQgd2FzIGNoZWNrZWQsIGJ1dCBlbGVtZW50IHdhcyBub3QgYSBUZXN0SW5wdXRgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBwYXNzID0gZWwuY2hlY2tlZDtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgRXhwZWN0ZWQgZWxlbWVudCB0byBiZSAke2lzTmVnYXRpdmUgPyAnbm90ICcgOiAnJ31jaGVja2VkLCBidXQgd2FzJHshaXNOZWdhdGl2ZSA/ICcgbm90JyA6ICcnfWA7XG4gICAgICByZXR1cm4geyBwYXNzOiBpc05lZ2F0aXZlID8gIXBhc3MgOiBwYXNzLCBtZXNzYWdlIH07XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgY29tcGFyZTogKGVsOiB1bmtub3duKTogamFzbWluZS5DdXN0b21NYXRjaGVyUmVzdWx0ID0+IHtcbiAgICAgICAgcmV0dXJuIGFzc2VydChmYWxzZSwgZWwpO1xuICAgICAgfSxcbiAgICAgIG5lZ2F0aXZlQ29tcGFyZTogKGVsOiB1bmtub3duKTogamFzbWluZS5DdXN0b21NYXRjaGVyUmVzdWx0ID0+IHtcbiAgICAgICAgcmV0dXJuIGFzc2VydCh0cnVlLCBlbCk7XG4gICAgICB9XG4gICAgfTtcbiAgfSxcblxuICAvKipcbiAgICogQ2hlY2tzIHRoYXQgdGhlIHJlY2VpdmVyIGlzIGEgVGVzdFNlbGVjdCB3cmFwcGluZyBhIERPTSBlbGVtZW50IGFuZCBoYXMgdGhlIGdpdmVuIHNlbGVjdGVkIGluZGV4XG4gICAqL1xuICB0b0hhdmVTZWxlY3RlZEluZGV4OiAoKTogamFzbWluZS5DdXN0b21NYXRjaGVyID0+IHtcbiAgICBjb25zdCBhc3NlcnQgPSAoaXNOZWdhdGl2ZTogYm9vbGVhbiwgZWw6IHVua25vd24sIGV4cGVjdGVkOiBudW1iZXIpID0+IHtcbiAgICAgIGlmICghZWwpIHtcbiAgICAgICAgcmV0dXJuIHsgcGFzczogZmFsc2UsIG1lc3NhZ2U6IGBFeHBlY3RlZCB0byBjaGVjayBzZWxlY3RlZCBpbmRleCAke2V4cGVjdGVkfSBvbiBlbGVtZW50LCBidXQgZWxlbWVudCB3YXMgZmFsc3lgIH07XG4gICAgICB9XG4gICAgICBpZiAoIShlbCBpbnN0YW5jZW9mIFRlc3RTZWxlY3QpKSB7XG4gICAgICAgIHJldHVybiB7IHBhc3M6IGZhbHNlLCBtZXNzYWdlOiBgRXhwZWN0ZWQgdG8gY2hlY2sgc2VsZWN0ZWQgaW5kZXggJHtleHBlY3RlZH0gb24gZWxlbWVudCwgYnV0IGVsZW1lbnQgd2FzIG5vdCBhIFRlc3RTZWxlY3RgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBhY3R1YWwgPSBlbC5zZWxlY3RlZEluZGV4O1xuICAgICAgY29uc3QgcGFzcyA9IGFjdHVhbCA9PT0gZXhwZWN0ZWQ7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYEV4cGVjdGVkIGVsZW1lbnQgdG8gJHtpc05lZ2F0aXZlID8gJ25vdCAnIDogJyd9aGF2ZSBzZWxlY3RlZCBpbmRleCAke2V4cGVjdGVkfSwgYnV0IGhhZCAke2FjdHVhbH1gO1xuICAgICAgcmV0dXJuIHsgcGFzczogaXNOZWdhdGl2ZSA/ICFwYXNzIDogcGFzcywgbWVzc2FnZSB9O1xuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbXBhcmU6IChlbDogdW5rbm93biwgZXhwZWN0ZWQ6IG51bWJlcik6IGphc21pbmUuQ3VzdG9tTWF0Y2hlclJlc3VsdCA9PiB7XG4gICAgICAgIHJldHVybiBhc3NlcnQoZmFsc2UsIGVsLCBleHBlY3RlZCk7XG4gICAgICB9LFxuICAgICAgbmVnYXRpdmVDb21wYXJlOiAoZWw6IHVua25vd24sIGV4cGVjdGVkOiBudW1iZXIpOiBqYXNtaW5lLkN1c3RvbU1hdGNoZXJSZXN1bHQgPT4ge1xuICAgICAgICByZXR1cm4gYXNzZXJ0KHRydWUsIGVsLCBleHBlY3RlZCk7XG4gICAgICB9XG4gICAgfTtcbiAgfSxcblxuICAvKipcbiAgICogQ2hlY2tzIHRoYXQgdGhlIHJlY2VpdmVyIGlzIGEgVGVzdFNlbGVjdCB3cmFwcGluZyBhIERPTSBlbGVtZW50IHdpdGggdGhlIHNlbGVjdGVkIG9wdGlvbidzIHZhbHVlIGVxdWFsIHRvIHRoZSBnaXZlbiB2YWx1ZVxuICAgKi9cbiAgdG9IYXZlU2VsZWN0ZWRWYWx1ZTogKCk6IGphc21pbmUuQ3VzdG9tTWF0Y2hlciA9PiB7XG4gICAgY29uc3QgYXNzZXJ0ID0gKGlzTmVnYXRpdmU6IGJvb2xlYW4sIGVsOiB1bmtub3duLCBleHBlY3RlZDogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoIWVsKSB7XG4gICAgICAgIHJldHVybiB7IHBhc3M6IGZhbHNlLCBtZXNzYWdlOiBgRXhwZWN0ZWQgdG8gY2hlY2sgc2VsZWN0ZWQgdmFsdWUgJyR7ZXhwZWN0ZWR9JyBvbiBlbGVtZW50LCBidXQgZWxlbWVudCB3YXMgZmFsc3lgIH07XG4gICAgICB9XG4gICAgICBpZiAoIShlbCBpbnN0YW5jZW9mIFRlc3RTZWxlY3QpKSB7XG4gICAgICAgIHJldHVybiB7IHBhc3M6IGZhbHNlLCBtZXNzYWdlOiBgRXhwZWN0ZWQgdG8gY2hlY2sgc2VsZWN0ZWQgdmFsdWUgJyR7ZXhwZWN0ZWR9JyBvbiBlbGVtZW50LCBidXQgZWxlbWVudCB3YXMgbm90IGEgVGVzdFNlbGVjdGAgfTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFjdHVhbCA9IGVsLnNlbGVjdGVkVmFsdWU7XG4gICAgICBjb25zdCBwYXNzID0gYWN0dWFsID09PSBleHBlY3RlZDtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgRXhwZWN0ZWQgZWxlbWVudCB0byAke2lzTmVnYXRpdmUgPyAnbm90ICcgOiAnJ31oYXZlIHNlbGVjdGVkIHZhbHVlICcke2V4cGVjdGVkfScsIGJ1dCBoYWQgJyR7YWN0dWFsfSdgO1xuICAgICAgcmV0dXJuIHsgcGFzczogaXNOZWdhdGl2ZSA/ICFwYXNzIDogcGFzcywgbWVzc2FnZSB9O1xuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbXBhcmU6IChlbDogdW5rbm93biwgZXhwZWN0ZWQ6IHN0cmluZyk6IGphc21pbmUuQ3VzdG9tTWF0Y2hlclJlc3VsdCA9PiB7XG4gICAgICAgIHJldHVybiBhc3NlcnQoZmFsc2UsIGVsLCBleHBlY3RlZCk7XG4gICAgICB9LFxuICAgICAgbmVnYXRpdmVDb21wYXJlOiAoZWw6IHVua25vd24sIGV4cGVjdGVkOiBzdHJpbmcpOiBqYXNtaW5lLkN1c3RvbU1hdGNoZXJSZXN1bHQgPT4ge1xuICAgICAgICByZXR1cm4gYXNzZXJ0KHRydWUsIGVsLCBleHBlY3RlZCk7XG4gICAgICB9XG4gICAgfTtcbiAgfSxcblxuICAvKipcbiAgICogQ2hlY2tzIHRoYXQgdGhlIHJlY2VpdmVyIGlzIGEgVGVzdFNlbGVjdCB3cmFwcGluZyBhIERPTSBlbGVtZW50IHdpdGggdGhlIHNlbGVjdGVkIG9wdGlvbidzIGxhYmVsIGVxdWFsIHRvIHRoZSBnaXZlbiBsYWJlbFxuICAgKi9cbiAgdG9IYXZlU2VsZWN0ZWRMYWJlbDogKCk6IGphc21pbmUuQ3VzdG9tTWF0Y2hlciA9PiB7XG4gICAgY29uc3QgYXNzZXJ0ID0gKGlzTmVnYXRpdmU6IGJvb2xlYW4sIGVsOiB1bmtub3duLCBleHBlY3RlZDogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoIWVsKSB7XG4gICAgICAgIHJldHVybiB7IHBhc3M6IGZhbHNlLCBtZXNzYWdlOiBgRXhwZWN0ZWQgdG8gY2hlY2sgc2VsZWN0ZWQgbGFiZWwgJyR7ZXhwZWN0ZWR9JyBvbiBlbGVtZW50LCBidXQgZWxlbWVudCB3YXMgZmFsc3lgIH07XG4gICAgICB9XG4gICAgICBpZiAoIShlbCBpbnN0YW5jZW9mIFRlc3RTZWxlY3QpKSB7XG4gICAgICAgIHJldHVybiB7IHBhc3M6IGZhbHNlLCBtZXNzYWdlOiBgRXhwZWN0ZWQgdG8gY2hlY2sgc2VsZWN0ZWQgbGFiZWwgJyR7ZXhwZWN0ZWR9JyBvbiBlbGVtZW50LCBidXQgZWxlbWVudCB3YXMgbm90IGEgVGVzdFNlbGVjdGAgfTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFjdHVhbCA9IGVsLnNlbGVjdGVkTGFiZWw7XG4gICAgICBjb25zdCBwYXNzID0gYWN0dWFsID09PSBleHBlY3RlZDtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgRXhwZWN0ZWQgZWxlbWVudCB0byAke2lzTmVnYXRpdmUgPyAnbm90ICcgOiAnJ31oYXZlIHNlbGVjdGVkIGxhYmVsICcke2V4cGVjdGVkfScsIGJ1dCBoYWQgJyR7YWN0dWFsfSdgO1xuICAgICAgcmV0dXJuIHsgcGFzczogaXNOZWdhdGl2ZSA/ICFwYXNzIDogcGFzcywgbWVzc2FnZSB9O1xuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbXBhcmU6IChlbDogdW5rbm93biwgZXhwZWN0ZWQ6IHN0cmluZyk6IGphc21pbmUuQ3VzdG9tTWF0Y2hlclJlc3VsdCA9PiB7XG4gICAgICAgIHJldHVybiBhc3NlcnQoZmFsc2UsIGVsLCBleHBlY3RlZCk7XG4gICAgICB9LFxuICAgICAgbmVnYXRpdmVDb21wYXJlOiAoZWw6IHVua25vd24sIGV4cGVjdGVkOiBzdHJpbmcpOiBqYXNtaW5lLkN1c3RvbU1hdGNoZXJSZXN1bHQgPT4ge1xuICAgICAgICByZXR1cm4gYXNzZXJ0KHRydWUsIGVsLCBleHBlY3RlZCk7XG4gICAgICB9XG4gICAgfTtcbiAgfSxcblxuICAvKipcbiAgICogQ2hlY2tzIHRoYXQgdGhlIHJlY2VpdmVyIGlzIGEgVGVzdEh0bWxFbGVtZW50IHdoaWNoIGlzIHZpc2libGVcbiAgICovXG4gIHRvQmVWaXNpYmxlOiAoKTogamFzbWluZS5DdXN0b21NYXRjaGVyID0+IHtcbiAgICBjb25zdCBhc3NlcnQgPSAoaXNOZWdhdGl2ZTogYm9vbGVhbiwgZWw6IHVua25vd24pID0+IHtcbiAgICAgIGNvbnN0IGV4cGVjdGVkU3RhdGUgPSBgJHtpc05lZ2F0aXZlID8gJ2luJyA6ICcnfXZpc2libGVgO1xuICAgICAgY29uc3QgaW52ZXJzZVN0YXRlID0gYCR7aXNOZWdhdGl2ZSA/ICcnIDogJ2luJ312aXNpYmxlYDtcbiAgICAgIGlmICghZWwpIHtcbiAgICAgICAgcmV0dXJuIHsgcGFzczogZmFsc2UsIG1lc3NhZ2U6IGBFeHBlY3RlZCB0byBjaGVjayBpZiBlbGVtZW50IHdhcyAke2V4cGVjdGVkU3RhdGV9LCBidXQgZWxlbWVudCB3YXMgZmFsc3lgIH07XG4gICAgICB9XG4gICAgICBpZiAoIShlbCBpbnN0YW5jZW9mIFRlc3RIdG1sRWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIHsgcGFzczogZmFsc2UsIG1lc3NhZ2U6IGBFeHBlY3RlZCB0byBjaGVjayBpZiBlbGVtZW50IHdhcyAke2V4cGVjdGVkU3RhdGV9LCBidXQgZWxlbWVudCB3YXMgbm90IGEgVGVzdEh0bWxFbGVtZW50YCB9O1xuICAgICAgfVxuICAgICAgY29uc3QgcGFzcyA9IGVsLnZpc2libGU7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYEV4cGVjdGVkIGVsZW1lbnQgdG8gYmUgJHtleHBlY3RlZFN0YXRlfSwgYnV0IHdhcyAke2ludmVyc2VTdGF0ZX1gO1xuICAgICAgcmV0dXJuIHsgcGFzczogaXNOZWdhdGl2ZSA/ICFwYXNzIDogcGFzcywgbWVzc2FnZSB9O1xuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbXBhcmU6IChlbDogdW5rbm93bik6IGphc21pbmUuQ3VzdG9tTWF0Y2hlclJlc3VsdCA9PiB7XG4gICAgICAgIHJldHVybiBhc3NlcnQoZmFsc2UsIGVsKTtcbiAgICAgIH0sXG4gICAgICBuZWdhdGl2ZUNvbXBhcmU6IChlbDogdW5rbm93bik6IGphc21pbmUuQ3VzdG9tTWF0Y2hlclJlc3VsdCA9PiB7XG4gICAgICAgIHJldHVybiBhc3NlcnQodHJ1ZSwgZWwpO1xuICAgICAgfVxuICAgIH07XG4gIH1cbn07XG5cbmV4cG9ydCB7IHNwZWN1bG9vc01hdGNoZXJzIH07XG4iXX0=
|
|
283
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0Y2hlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3BlY3Vsb29zL3NyYy9saWIvbWF0Y2hlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRELE1BQU0saUJBQWlCLEdBQW1DO0lBQ3hEOztPQUVHO0lBQ0gsV0FBVztRQUNULE1BQU0sTUFBTSxHQUFHLENBQUMsVUFBbUIsRUFBRSxFQUFXLEVBQUUsUUFBZ0IsRUFBRSxFQUFFO1lBQ3BFLElBQUksQ0FBQyxFQUFFLEVBQUU7Z0JBQ1AsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLDRCQUE0QixRQUFRLHFDQUFxQyxFQUFFLENBQUM7YUFDNUc7WUFDRCxJQUFJLENBQUMsQ0FBQyxFQUFFLFlBQVksV0FBVyxDQUFDLEVBQUU7Z0JBQ2hDLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSw0QkFBNEIsUUFBUSxpREFBaUQsRUFBRSxDQUFDO2FBQ3hIO1lBQ0QsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQztZQUMxQixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQzdDLE1BQU0sT0FBTyxHQUNYLHVCQUF1QixVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLFFBQVEsS0FBSztnQkFDM0UsV0FBVyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3RFLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ3RELENBQUMsQ0FBQztRQUNGLE9BQU87WUFDTCxPQUFPLENBQUMsRUFBVyxFQUFFLFFBQWdCO2dCQUNuQyxPQUFPLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3JDLENBQUM7WUFDRCxlQUFlLENBQUMsRUFBVyxFQUFFLFFBQWdCO2dCQUMzQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3BDLENBQUM7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsV0FBVztRQUNULE1BQU0sTUFBTSxHQUFHLENBQUMsVUFBbUIsRUFBRSxFQUFXLEVBQUUsUUFBZ0IsRUFBRSxFQUFFO1lBQ3BFLElBQUksQ0FBQyxFQUFFLEVBQUU7Z0JBQ1AsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLDRCQUE0QixRQUFRLHFDQUFxQyxFQUFFLENBQUM7YUFDNUc7WUFDRCxJQUFJLENBQUMsQ0FBQyxFQUFFLFlBQVksU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsWUFBWSxZQUFZLENBQUMsRUFBRTtnQkFDL0QsT0FBTztvQkFDTCxJQUFJLEVBQUUsS0FBSztvQkFDWCxPQUFPLEVBQUUsNEJBQTRCLFFBQVEsc0VBQXNFO2lCQUNwSCxDQUFDO2FBQ0g7WUFDRCxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ3hCLE1BQU0sSUFBSSxHQUFHLE1BQU0sS0FBSyxRQUFRLENBQUM7WUFDakMsTUFBTSxPQUFPLEdBQUcsdUJBQXVCLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsUUFBUSxxQkFBcUIsTUFBTSxHQUFHLENBQUM7WUFDckgsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDdEQsQ0FBQyxDQUFDO1FBQ0YsT0FBTztZQUNMLE9BQU8sQ0FBQyxFQUFXLEVBQUUsUUFBZ0I7Z0JBQ25DLE9BQU8sTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDckMsQ0FBQztZQUNELGVBQWUsQ0FBQyxFQUFXLEVBQUUsUUFBZ0I7Z0JBQzNDLE9BQU8sTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDcEMsQ0FBQztTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSCxVQUFVO1FBQ1IsTUFBTSxNQUFNLEdBQUcsQ0FBQyxVQUFtQixFQUFFLEVBQVcsRUFBRSxRQUFnQixFQUFFLEVBQUU7WUFDcEUsSUFBSSxDQUFDLEVBQUUsRUFBRTtnQkFDUCxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsMkJBQTJCLFFBQVEscUNBQXFDLEVBQUUsQ0FBQzthQUMzRztZQUNELElBQUksQ0FBQyxDQUFDLEVBQUUsWUFBWSxXQUFXLENBQUMsRUFBRTtnQkFDaEMsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLDJCQUEyQixRQUFRLGlEQUFpRCxFQUFFLENBQUM7YUFDdkg7WUFDRCxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDO1lBQzlCLE1BQU0sSUFBSSxHQUFHLE1BQU0sS0FBSyxRQUFRLENBQUM7WUFDakMsTUFBTSxPQUFPLEdBQUcsdUJBQXVCLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsUUFBUSxlQUFlLE1BQU0sR0FBRyxDQUFDO1lBQzlHLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ3RELENBQUMsQ0FBQztRQUNGLE9BQU87WUFDTCxPQUFPLENBQUMsRUFBVyxFQUFFLFFBQWdCO2dCQUNuQyxPQUFPLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3JDLENBQUM7WUFDRCxlQUFlLENBQUMsRUFBVyxFQUFFLFFBQWdCO2dCQUMzQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3BDLENBQUM7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNILGlCQUFpQjtRQUNmLE1BQU0sTUFBTSxHQUFHLENBQUMsVUFBbUIsRUFBRSxFQUFXLEVBQUUsUUFBZ0IsRUFBRSxFQUFFO1lBQ3BFLE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsRUFBRSxFQUFFO2dCQUNQLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxtQ0FBbUMsZUFBZSxxQ0FBcUMsRUFBRSxDQUFDO2FBQzFIO1lBQ0QsSUFBSSxDQUFDLENBQUMsRUFBRSxZQUFZLFdBQVcsQ0FBQyxFQUFFO2dCQUNoQyxPQUFPO29CQUNMLElBQUksRUFBRSxLQUFLO29CQUNYLE9BQU8sRUFBRSxtQ0FBbUMsZUFBZSxpREFBaUQ7aUJBQzdHLENBQUM7YUFDSDtZQUNELE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDdEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxLQUFLLGVBQWUsQ0FBQztZQUN4QyxNQUFNLE9BQU8sR0FBRyx1QkFBdUIsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsc0JBQXNCLGVBQWUsZUFBZSxNQUFNLEdBQUcsQ0FBQztZQUM3SCxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN0RCxDQUFDLENBQUM7UUFDRixPQUFPO1lBQ0wsT0FBTyxDQUFDLEVBQVcsRUFBRSxRQUFnQjtnQkFDbkMsT0FBTyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNyQyxDQUFDO1lBQ0QsZUFBZSxDQUFDLEVBQVcsRUFBRSxRQUFnQjtnQkFDM0MsT0FBTyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNwQyxDQUFDO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILGFBQWE7UUFDWCxNQUFNLE1BQU0sR0FBRyxDQUFDLFVBQW1CLEVBQUUsRUFBVyxFQUFFLFFBQWdCLEVBQUUsRUFBRTtZQUNwRSxJQUFJLENBQUMsRUFBRSxFQUFFO2dCQUNQLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSwyQkFBMkIsUUFBUSxxQ0FBcUMsRUFBRSxDQUFDO2FBQzNHO1lBQ0QsSUFBSSxDQUFDLENBQUMsRUFBRSxZQUFZLFdBQVcsQ0FBQyxFQUFFO2dCQUNoQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsMkJBQTJCLFFBQVEsaURBQWlELEVBQUUsQ0FBQzthQUN2SDtZQUNELE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUM7WUFDOUIsSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDWCxPQUFPO29CQUNMLElBQUksRUFBRSxVQUFVO29CQUNoQixPQUFPLEVBQUUsdUJBQXVCLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLGlCQUFpQixRQUFRLG9CQUFvQjtpQkFDdEcsQ0FBQzthQUNIO1lBQ0QsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUM3QyxNQUFNLE9BQU8sR0FBRyx1QkFBdUIsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsaUJBQWlCLFFBQVEsb0JBQW9CLE1BQU0sR0FBRyxDQUFDO1lBQ3RILE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ3RELENBQUMsQ0FBQztRQUNGLE9BQU87WUFDTCxPQUFPLENBQUMsRUFBVyxFQUFFLFFBQWdCO2dCQUNuQyxPQUFPLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3JDLENBQUM7WUFDRCxlQUFlLENBQUMsRUFBVyxFQUFFLFFBQWdCO2dCQUMzQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3BDLENBQUM7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsV0FBVztRQUNULE1BQU0sTUFBTSxHQUFHLENBQUMsVUFBbUIsRUFBRSxFQUFXLEVBQUUsRUFBRTtZQUNsRCxJQUFJLENBQUMsRUFBRSxFQUFFO2dCQUNQLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxpRUFBaUUsRUFBRSxDQUFDO2FBQ3BHO1lBQ0QsSUFBSSxDQUFDLENBQUMsRUFBRSxZQUFZLFNBQVMsQ0FBQyxFQUFFO2dCQUM5QixPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsMkVBQTJFLEVBQUUsQ0FBQzthQUM5RztZQUNELE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUM7WUFDeEIsTUFBTSxPQUFPLEdBQUcsMEJBQTBCLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNqSCxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN0RCxDQUFDLENBQUM7UUFDRixPQUFPO1lBQ0wsT0FBTyxDQUFDLEVBQVc7Z0JBQ2pCLE9BQU8sTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMzQixDQUFDO1lBQ0QsZUFBZSxDQUFDLEVBQVc7Z0JBQ3pCLE9BQU8sTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMxQixDQUFDO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILG1CQUFtQjtRQUNqQixNQUFNLE1BQU0sR0FBRyxDQUFDLFVBQW1CLEVBQUUsRUFBVyxFQUFFLFFBQWdCLEVBQUUsRUFBRTtZQUNwRSxJQUFJLENBQUMsRUFBRSxFQUFFO2dCQUNQLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxvQ0FBb0MsUUFBUSxvQ0FBb0MsRUFBRSxDQUFDO2FBQ25IO1lBQ0QsSUFBSSxDQUFDLENBQUMsRUFBRSxZQUFZLFVBQVUsQ0FBQyxFQUFFO2dCQUMvQixPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsb0NBQW9DLFFBQVEsK0NBQStDLEVBQUUsQ0FBQzthQUM5SDtZQUNELE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUM7WUFDaEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxLQUFLLFFBQVEsQ0FBQztZQUNqQyxNQUFNLE9BQU8sR0FBRyx1QkFBdUIsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsdUJBQXVCLFFBQVEsYUFBYSxNQUFNLEVBQUUsQ0FBQztZQUNwSCxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN0RCxDQUFDLENBQUM7UUFDRixPQUFPO1lBQ0wsT0FBTyxDQUFDLEVBQVcsRUFBRSxRQUFnQjtnQkFDbkMsT0FBTyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNyQyxDQUFDO1lBQ0QsZUFBZSxDQUFDLEVBQVcsRUFBRSxRQUFnQjtnQkFDM0MsT0FBTyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNwQyxDQUFDO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILG1CQUFtQjtRQUNqQixNQUFNLE1BQU0sR0FBRyxDQUFDLFVBQW1CLEVBQUUsRUFBVyxFQUFFLFFBQWdCLEVBQUUsRUFBRTtZQUNwRSxJQUFJLENBQUMsRUFBRSxFQUFFO2dCQUNQLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxxQ0FBcUMsUUFBUSxxQ0FBcUMsRUFBRSxDQUFDO2FBQ3JIO1lBQ0QsSUFBSSxDQUFDLENBQUMsRUFBRSxZQUFZLFVBQVUsQ0FBQyxFQUFFO2dCQUMvQixPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUscUNBQXFDLFFBQVEsZ0RBQWdELEVBQUUsQ0FBQzthQUNoSTtZQUNELE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUM7WUFDaEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxLQUFLLFFBQVEsQ0FBQztZQUNqQyxNQUFNLE9BQU8sR0FBRyx1QkFBdUIsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsd0JBQXdCLFFBQVEsZUFBZSxNQUFNLEdBQUcsQ0FBQztZQUN4SCxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN0RCxDQUFDLENBQUM7UUFDRixPQUFPO1lBQ0wsT0FBTyxDQUFDLEVBQVcsRUFBRSxRQUFnQjtnQkFDbkMsT0FBTyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNyQyxDQUFDO1lBQ0QsZUFBZSxDQUFDLEVBQVcsRUFBRSxRQUFnQjtnQkFDM0MsT0FBTyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNwQyxDQUFDO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILG1CQUFtQjtRQUNqQixNQUFNLE1BQU0sR0FBRyxDQUFDLFVBQW1CLEVBQUUsRUFBVyxFQUFFLFFBQWdCLEVBQUUsRUFBRTtZQUNwRSxJQUFJLENBQUMsRUFBRSxFQUFFO2dCQUNQLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxxQ0FBcUMsUUFBUSxxQ0FBcUMsRUFBRSxDQUFDO2FBQ3JIO1lBQ0QsSUFBSSxDQUFDLENBQUMsRUFBRSxZQUFZLFVBQVUsQ0FBQyxFQUFFO2dCQUMvQixPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUscUNBQXFDLFFBQVEsZ0RBQWdELEVBQUUsQ0FBQzthQUNoSTtZQUNELE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUM7WUFDaEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxLQUFLLFFBQVEsQ0FBQztZQUNqQyxNQUFNLE9BQU8sR0FBRyx1QkFBdUIsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsd0JBQXdCLFFBQVEsZUFBZSxNQUFNLEdBQUcsQ0FBQztZQUN4SCxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN0RCxDQUFDLENBQUM7UUFDRixPQUFPO1lBQ0wsT0FBTyxDQUFDLEVBQVcsRUFBRSxRQUFnQjtnQkFDbkMsT0FBTyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNyQyxDQUFDO1lBQ0QsZUFBZSxDQUFDLEVBQVcsRUFBRSxRQUFnQjtnQkFDM0MsT0FBTyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNwQyxDQUFDO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILFdBQVc7UUFDVCxNQUFNLE1BQU0sR0FBRyxDQUFDLFVBQW1CLEVBQUUsRUFBVyxFQUFFLEVBQUU7WUFDbEQsTUFBTSxhQUFhLEdBQUcsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUM7WUFDekQsTUFBTSxZQUFZLEdBQUcsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUM7WUFDeEQsSUFBSSxDQUFDLEVBQUUsRUFBRTtnQkFDUCxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsb0NBQW9DLGFBQWEseUJBQXlCLEVBQUUsQ0FBQzthQUM3RztZQUNELElBQUksQ0FBQyxDQUFDLEVBQUUsWUFBWSxlQUFlLENBQUMsRUFBRTtnQkFDcEMsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLG9DQUFvQyxhQUFhLHlDQUF5QyxFQUFFLENBQUM7YUFDN0g7WUFDRCxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDO1lBQ3hCLE1BQU0sT0FBTyxHQUFHLDBCQUEwQixhQUFhLGFBQWEsWUFBWSxFQUFFLENBQUM7WUFDbkYsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDdEQsQ0FBQyxDQUFDO1FBQ0YsT0FBTztZQUNMLE9BQU8sQ0FBQyxFQUFXO2dCQUNqQixPQUFPLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDM0IsQ0FBQztZQUNELGVBQWUsQ0FBQyxFQUFXO2dCQUN6QixPQUFPLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDMUIsQ0FBQztTQUNGLENBQUM7SUFDSixDQUFDO0NBQ0YsQ0FBQztBQUVGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVzdFRleHRBcmVhIH0gZnJvbSAnLi90ZXN0LXRleHRhcmVhJztcbmltcG9ydCB7IFRlc3RJbnB1dCB9IGZyb20gJy4vdGVzdC1pbnB1dCc7XG5pbXBvcnQgeyBUZXN0RWxlbWVudCB9IGZyb20gJy4vdGVzdC1lbGVtZW50JztcbmltcG9ydCB7IFRlc3RTZWxlY3QgfSBmcm9tICcuL3Rlc3Qtc2VsZWN0JztcbmltcG9ydCB7IFRlc3RIdG1sRWxlbWVudCB9IGZyb20gJy4vdGVzdC1odG1sLWVsZW1lbnQnO1xuXG5jb25zdCBzcGVjdWxvb3NNYXRjaGVyczogamFzbWluZS5DdXN0b21NYXRjaGVyRmFjdG9yaWVzID0ge1xuICAvKipcbiAgICogQ2hlY2tzIHRoYXQgdGhlIHJlY2VpdmVyIGlzIGEgVGVzdEVsZW1lbnQgd3JhcHBpbmcgYSBET00gZWxlbWVudCBhbmQgYXMgdGhlIGdpdmVuIENTUyBjbGFzc1xuICAgKi9cbiAgdG9IYXZlQ2xhc3MoKTogamFzbWluZS5DdXN0b21NYXRjaGVyIHtcbiAgICBjb25zdCBhc3NlcnQgPSAoaXNOZWdhdGl2ZTogYm9vbGVhbiwgZWw6IHVua25vd24sIGV4cGVjdGVkOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmICghZWwpIHtcbiAgICAgICAgcmV0dXJuIHsgcGFzczogZmFsc2UsIG1lc3NhZ2U6IGBFeHBlY3RlZCB0byBjaGVjayBjbGFzcyAnJHtleHBlY3RlZH0nIG9uIGVsZW1lbnQsIGJ1dCBlbGVtZW50IHdhcyBmYWxzeWAgfTtcbiAgICAgIH1cbiAgICAgIGlmICghKGVsIGluc3RhbmNlb2YgVGVzdEVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiB7IHBhc3M6IGZhbHNlLCBtZXNzYWdlOiBgRXhwZWN0ZWQgdG8gY2hlY2sgY2xhc3MgJyR7ZXhwZWN0ZWR9JyBvbiBlbGVtZW50LCBidXQgZWxlbWVudCB3YXMgbm90IGEgVGVzdEVsZW1lbnRgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBhY3R1YWwgPSBlbC5jbGFzc2VzO1xuICAgICAgY29uc3QgcGFzcyA9IGFjdHVhbC5pbmRleE9mKGV4cGVjdGVkKSAhPT0gLTE7XG4gICAgICBjb25zdCBtZXNzYWdlID1cbiAgICAgICAgYEV4cGVjdGVkIGVsZW1lbnQgdG8gJHtpc05lZ2F0aXZlID8gJ25vdCAnIDogJyd9aGF2ZSBjbGFzcyAnJHtleHBlY3RlZH0nLCBgICtcbiAgICAgICAgYGJ1dCBoYWQgJHthY3R1YWwubGVuZ3RoID8gXCInXCIgKyBhY3R1YWwuam9pbignLCAnKSArIFwiJ1wiIDogJ25vbmUnfWA7XG4gICAgICByZXR1cm4geyBwYXNzOiBpc05lZ2F0aXZlID8gIXBhc3MgOiBwYXNzLCBtZXNzYWdlIH07XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgY29tcGFyZShlbDogdW5rbm93biwgZXhwZWN0ZWQ6IHN0cmluZyk6IGphc21pbmUuQ3VzdG9tTWF0Y2hlclJlc3VsdCB7XG4gICAgICAgIHJldHVybiBhc3NlcnQoZmFsc2UsIGVsLCBleHBlY3RlZCk7XG4gICAgICB9LFxuICAgICAgbmVnYXRpdmVDb21wYXJlKGVsOiB1bmtub3duLCBleHBlY3RlZDogc3RyaW5nKTogamFzbWluZS5DdXN0b21NYXRjaGVyUmVzdWx0IHtcbiAgICAgICAgcmV0dXJuIGFzc2VydCh0cnVlLCBlbCwgZXhwZWN0ZWQpO1xuICAgICAgfVxuICAgIH07XG4gIH0sXG5cbiAgLyoqXG4gICAqIENoZWNrcyB0aGF0IHRoZSByZWNlaXZlciBpcyBhIFRlc3RJbnB1dCBvciBhIFRlc3RUZXh0QXJlYSBhbmQgaGFzIHRoZSBnaXZlbiB2YWx1ZVxuICAgKi9cbiAgdG9IYXZlVmFsdWUoKTogamFzbWluZS5DdXN0b21NYXRjaGVyIHtcbiAgICBjb25zdCBhc3NlcnQgPSAoaXNOZWdhdGl2ZTogYm9vbGVhbiwgZWw6IHVua25vd24sIGV4cGVjdGVkOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmICghZWwpIHtcbiAgICAgICAgcmV0dXJuIHsgcGFzczogZmFsc2UsIG1lc3NhZ2U6IGBFeHBlY3RlZCB0byBjaGVjayB2YWx1ZSAnJHtleHBlY3RlZH0nIG9uIGVsZW1lbnQsIGJ1dCBlbGVtZW50IHdhcyBmYWxzeWAgfTtcbiAgICAgIH1cbiAgICAgIGlmICghKGVsIGluc3RhbmNlb2YgVGVzdElucHV0KSAmJiAhKGVsIGluc3RhbmNlb2YgVGVzdFRleHRBcmVhKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHBhc3M6IGZhbHNlLFxuICAgICAgICAgIG1lc3NhZ2U6IGBFeHBlY3RlZCB0byBjaGVjayB2YWx1ZSAnJHtleHBlY3RlZH0nIG9uIGVsZW1lbnQsIGJ1dCBlbGVtZW50IHdhcyBuZWl0aGVyIGEgVGVzdElucHV0IG5vciBhIFRlc3RUZXh0QXJlYWBcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFjdHVhbCA9IGVsLnZhbHVlO1xuICAgICAgY29uc3QgcGFzcyA9IGFjdHVhbCA9PT0gZXhwZWN0ZWQ7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYEV4cGVjdGVkIGVsZW1lbnQgdG8gJHtpc05lZ2F0aXZlID8gJ25vdCAnIDogJyd9aGF2ZSB2YWx1ZSAnJHtleHBlY3RlZH0nLCBidXQgaGFkIHZhbHVlICcke2FjdHVhbH0nYDtcbiAgICAgIHJldHVybiB7IHBhc3M6IGlzTmVnYXRpdmUgPyAhcGFzcyA6IHBhc3MsIG1lc3NhZ2UgfTtcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBjb21wYXJlKGVsOiB1bmtub3duLCBleHBlY3RlZDogc3RyaW5nKTogamFzbWluZS5DdXN0b21NYXRjaGVyUmVzdWx0IHtcbiAgICAgICAgcmV0dXJuIGFzc2VydChmYWxzZSwgZWwsIGV4cGVjdGVkKTtcbiAgICAgIH0sXG4gICAgICBuZWdhdGl2ZUNvbXBhcmUoZWw6IHVua25vd24sIGV4cGVjdGVkOiBzdHJpbmcpOiBqYXNtaW5lLkN1c3RvbU1hdGNoZXJSZXN1bHQge1xuICAgICAgICByZXR1cm4gYXNzZXJ0KHRydWUsIGVsLCBleHBlY3RlZCk7XG4gICAgICB9XG4gICAgfTtcbiAgfSxcblxuICAvKipcbiAgICogQ2hlY2tzIHRoYXQgdGhlIHJlY2VpdmVyIGlzIGEgVGVzdEVsZW1lbnQgd3JhcHBpbmcgYSBET00gZWxlbWVudCBhbmQgaGFzIHRoZSBleGFjdCBnaXZlbiB0ZXh0Q29udGVudFxuICAgKi9cbiAgdG9IYXZlVGV4dCgpOiBqYXNtaW5lLkN1c3RvbU1hdGNoZXIge1xuICAgIGNvbnN0IGFzc2VydCA9IChpc05lZ2F0aXZlOiBib29sZWFuLCBlbDogdW5rbm93biwgZXhwZWN0ZWQ6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKCFlbCkge1xuICAgICAgICByZXR1cm4geyBwYXNzOiBmYWxzZSwgbWVzc2FnZTogYEV4cGVjdGVkIHRvIGNoZWNrIHRleHQgJyR7ZXhwZWN0ZWR9JyBvbiBlbGVtZW50LCBidXQgZWxlbWVudCB3YXMgZmFsc3lgIH07XG4gICAgICB9XG4gICAgICBpZiAoIShlbCBpbnN0YW5jZW9mIFRlc3RFbGVtZW50KSkge1xuICAgICAgICByZXR1cm4geyBwYXNzOiBmYWxzZSwgbWVzc2FnZTogYEV4cGVjdGVkIHRvIGNoZWNrIHRleHQgJyR7ZXhwZWN0ZWR9JyBvbiBlbGVtZW50LCBidXQgZWxlbWVudCB3YXMgbm90IGEgVGVzdEVsZW1lbnRgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBhY3R1YWwgPSBlbC50ZXh0Q29udGVudDtcbiAgICAgIGNvbnN0IHBhc3MgPSBhY3R1YWwgPT09IGV4cGVjdGVkO1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGBFeHBlY3RlZCBlbGVtZW50IHRvICR7aXNOZWdhdGl2ZSA/ICdub3QgJyA6ICcnfWhhdmUgdGV4dCAnJHtleHBlY3RlZH0nLCBidXQgaGFkICcke2FjdHVhbH0nYDtcbiAgICAgIHJldHVybiB7IHBhc3M6IGlzTmVnYXRpdmUgPyAhcGFzcyA6IHBhc3MsIG1lc3NhZ2UgfTtcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBjb21wYXJlKGVsOiB1bmtub3duLCBleHBlY3RlZDogc3RyaW5nKTogamFzbWluZS5DdXN0b21NYXRjaGVyUmVzdWx0IHtcbiAgICAgICAgcmV0dXJuIGFzc2VydChmYWxzZSwgZWwsIGV4cGVjdGVkKTtcbiAgICAgIH0sXG4gICAgICBuZWdhdGl2ZUNvbXBhcmUoZWw6IHVua25vd24sIGV4cGVjdGVkOiBzdHJpbmcpOiBqYXNtaW5lLkN1c3RvbU1hdGNoZXJSZXN1bHQge1xuICAgICAgICByZXR1cm4gYXNzZXJ0KHRydWUsIGVsLCBleHBlY3RlZCk7XG4gICAgICB9XG4gICAgfTtcbiAgfSxcblxuICAvKipcbiAgICogQ2hlY2tzIHRoYXQgdGhlIHJlY2VpdmVyIGlzIGEgVGVzdEVsZW1lbnQgd3JhcHBpbmcgYSBET00gZWxlbWVudCBhbmQgaGFzIHRoZSBnaXZlbiB0ZXh0Q29udGVudCwgYWZ0ZXIgYm90aCBoYXZlIGJlZW4gdHJpbW1lZC5cbiAgICogU28sIEFuIGVsZW1lbnQgc3VjaCBhc1xuICAgKiBgYGBcbiAgICogPGgxPlxuICAgKiAgIFNvbWUgdGl0bGVcbiAgICogPC9oMT5cbiAgICogYGBgXG4gICAqIHdpbGwgcGFzcyB0aGUgdGVzdFxuICAgKiBgYGBcbiAgICogZXhwZWN0KHRlc3Rlci50aXRsZSkudG9IYXZlVHJpbW1lZFRleHQoJ1NvbWUgdGl0bGUnKVxuICAgKiBgYGBcbiAgICovXG4gIHRvSGF2ZVRyaW1tZWRUZXh0KCk6IGphc21pbmUuQ3VzdG9tTWF0Y2hlciB7XG4gICAgY29uc3QgYXNzZXJ0ID0gKGlzTmVnYXRpdmU6IGJvb2xlYW4sIGVsOiB1bmtub3duLCBleHBlY3RlZDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCB0cmltbWVkRXhwZWN0ZWQgPSBleHBlY3RlZC50cmltKCk7XG4gICAgICBpZiAoIWVsKSB7XG4gICAgICAgIHJldHVybiB7IHBhc3M6IGZhbHNlLCBtZXNzYWdlOiBgRXhwZWN0ZWQgdG8gY2hlY2sgdHJpbW1lZCB0ZXh0ICcke3RyaW1tZWRFeHBlY3RlZH0nIG9uIGVsZW1lbnQsIGJ1dCBlbGVtZW50IHdhcyBmYWxzeWAgfTtcbiAgICAgIH1cbiAgICAgIGlmICghKGVsIGluc3RhbmNlb2YgVGVzdEVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcGFzczogZmFsc2UsXG4gICAgICAgICAgbWVzc2FnZTogYEV4cGVjdGVkIHRvIGNoZWNrIHRyaW1tZWQgdGV4dCAnJHt0cmltbWVkRXhwZWN0ZWR9JyBvbiBlbGVtZW50LCBidXQgZWxlbWVudCB3YXMgbm90IGEgVGVzdEVsZW1lbnRgXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBhY3R1YWwgPSBlbC50ZXh0Q29udGVudD8udHJpbSgpO1xuICAgICAgY29uc3QgcGFzcyA9IGFjdHVhbCA9PT0gdHJpbW1lZEV4cGVjdGVkO1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGBFeHBlY3RlZCBlbGVtZW50IHRvICR7aXNOZWdhdGl2ZSA/ICdub3QgJyA6ICcnfWhhdmUgdHJpbW1lZCB0ZXh0ICcke3RyaW1tZWRFeHBlY3RlZH0nLCBidXQgaGFkICcke2FjdHVhbH0nYDtcbiAgICAgIHJldHVybiB7IHBhc3M6IGlzTmVnYXRpdmUgPyAhcGFzcyA6IHBhc3MsIG1lc3NhZ2UgfTtcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBjb21wYXJlKGVsOiB1bmtub3duLCBleHBlY3RlZDogc3RyaW5nKTogamFzbWluZS5DdXN0b21NYXRjaGVyUmVzdWx0IHtcbiAgICAgICAgcmV0dXJuIGFzc2VydChmYWxzZSwgZWwsIGV4cGVjdGVkKTtcbiAgICAgIH0sXG4gICAgICBuZWdhdGl2ZUNvbXBhcmUoZWw6IHVua25vd24sIGV4cGVjdGVkOiBzdHJpbmcpOiBqYXNtaW5lLkN1c3RvbU1hdGNoZXJSZXN1bHQge1xuICAgICAgICByZXR1cm4gYXNzZXJ0KHRydWUsIGVsLCBleHBlY3RlZCk7XG4gICAgICB9XG4gICAgfTtcbiAgfSxcblxuICAvKipcbiAgICogQ2hlY2tzIHRoYXQgdGhlIHJlY2VpdmVyIGlzIGEgVGVzdEVsZW1lbnQgd3JhcHBpbmcgYSBET00gZWxlbWVudCBhbmQgY29udGFpbnMgdGhlIGdpdmVuIHRleHRDb250ZW50XG4gICAqL1xuICB0b0NvbnRhaW5UZXh0KCk6IGphc21pbmUuQ3VzdG9tTWF0Y2hlciB7XG4gICAgY29uc3QgYXNzZXJ0ID0gKGlzTmVnYXRpdmU6IGJvb2xlYW4sIGVsOiB1bmtub3duLCBleHBlY3RlZDogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoIWVsKSB7XG4gICAgICAgIHJldHVybiB7IHBhc3M6IGZhbHNlLCBtZXNzYWdlOiBgRXhwZWN0ZWQgdG8gY2hlY2sgdGV4dCAnJHtleHBlY3RlZH0nIG9uIGVsZW1lbnQsIGJ1dCBlbGVtZW50IHdhcyBmYWxzeWAgfTtcbiAgICAgIH1cbiAgICAgIGlmICghKGVsIGluc3RhbmNlb2YgVGVzdEVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiB7IHBhc3M6IGZhbHNlLCBtZXNzYWdlOiBgRXhwZWN0ZWQgdG8gY2hlY2sgdGV4dCAnJHtleHBlY3RlZH0nIG9uIGVsZW1lbnQsIGJ1dCBlbGVtZW50IHdhcyBub3QgYSBUZXN0RWxlbWVudGAgfTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFjdHVhbCA9IGVsLnRleHRDb250ZW50O1xuICAgICAgaWYgKCFhY3R1YWwpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwYXNzOiBpc05lZ2F0aXZlLFxuICAgICAgICAgIG1lc3NhZ2U6IGBFeHBlY3RlZCBlbGVtZW50IHRvICR7aXNOZWdhdGl2ZSA/ICdub3QgJyA6ICcnfWNvbnRhaW4gdGV4dCAnJHtleHBlY3RlZH0nLCBidXQgaGFkIG5vIHRleHRgXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBwYXNzID0gYWN0dWFsLmluZGV4T2YoZXhwZWN0ZWQpICE9PSAtMTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgRXhwZWN0ZWQgZWxlbWVudCB0byAke2lzTmVnYXRpdmUgPyAnbm90ICcgOiAnJ31jb250YWluIHRleHQgJyR7ZXhwZWN0ZWR9JywgYnV0IGhhZCB0ZXh0ICcke2FjdHVhbH0nYDtcbiAgICAgIHJldHVybiB7IHBhc3M6IGlzTmVnYXRpdmUgPyAhcGFzcyA6IHBhc3MsIG1lc3NhZ2UgfTtcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBjb21wYXJlKGVsOiB1bmtub3duLCBleHBlY3RlZDogc3RyaW5nKTogamFzbWluZS5DdXN0b21NYXRjaGVyUmVzdWx0IHtcbiAgICAgICAgcmV0dXJuIGFzc2VydChmYWxzZSwgZWwsIGV4cGVjdGVkKTtcbiAgICAgIH0sXG4gICAgICBuZWdhdGl2ZUNvbXBhcmUoZWw6IHVua25vd24sIGV4cGVjdGVkOiBzdHJpbmcpOiBqYXNtaW5lLkN1c3RvbU1hdGNoZXJSZXN1bHQge1xuICAgICAgICByZXR1cm4gYXNzZXJ0KHRydWUsIGVsLCBleHBlY3RlZCk7XG4gICAgICB9XG4gICAgfTtcbiAgfSxcblxuICAvKipcbiAgICogQ2hlY2tzIHRoYXQgdGhlIHJlY2VpdmVyIGlzIGEgVGVzdEVsZW1lbnQgd3JhcHBpbmcgYSBET00gZWxlbWVudCBhbmQgY29udGFpbnMgdGhlIGdpdmVuIHRleHRDb250ZW50XG4gICAqL1xuICB0b0JlQ2hlY2tlZCgpOiBqYXNtaW5lLkN1c3RvbU1hdGNoZXIge1xuICAgIGNvbnN0IGFzc2VydCA9IChpc05lZ2F0aXZlOiBib29sZWFuLCBlbDogdW5rbm93bikgPT4ge1xuICAgICAgaWYgKCFlbCkge1xuICAgICAgICByZXR1cm4geyBwYXNzOiBmYWxzZSwgbWVzc2FnZTogYEV4cGVjdGVkIHRvIGNoZWNrIGlmIGVsZW1lbnQgd2FzIGNoZWNrZWQsIGJ1dCBlbGVtZW50IHdhcyBmYWxzeWAgfTtcbiAgICAgIH1cbiAgICAgIGlmICghKGVsIGluc3RhbmNlb2YgVGVzdElucHV0KSkge1xuICAgICAgICByZXR1cm4geyBwYXNzOiBmYWxzZSwgbWVzc2FnZTogYEV4cGVjdGVkIHRvIGNoZWNrIGlmIGVsZW1lbnQgd2FzIGNoZWNrZWQsIGJ1dCBlbGVtZW50IHdhcyBub3QgYSBUZXN0SW5wdXRgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBwYXNzID0gZWwuY2hlY2tlZDtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgRXhwZWN0ZWQgZWxlbWVudCB0byBiZSAke2lzTmVnYXRpdmUgPyAnbm90ICcgOiAnJ31jaGVja2VkLCBidXQgd2FzJHshaXNOZWdhdGl2ZSA/ICcgbm90JyA6ICcnfWA7XG4gICAgICByZXR1cm4geyBwYXNzOiBpc05lZ2F0aXZlID8gIXBhc3MgOiBwYXNzLCBtZXNzYWdlIH07XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgY29tcGFyZShlbDogdW5rbm93bik6IGphc21pbmUuQ3VzdG9tTWF0Y2hlclJlc3VsdCB7XG4gICAgICAgIHJldHVybiBhc3NlcnQoZmFsc2UsIGVsKTtcbiAgICAgIH0sXG4gICAgICBuZWdhdGl2ZUNvbXBhcmUoZWw6IHVua25vd24pOiBqYXNtaW5lLkN1c3RvbU1hdGNoZXJSZXN1bHQge1xuICAgICAgICByZXR1cm4gYXNzZXJ0KHRydWUsIGVsKTtcbiAgICAgIH1cbiAgICB9O1xuICB9LFxuXG4gIC8qKlxuICAgKiBDaGVja3MgdGhhdCB0aGUgcmVjZWl2ZXIgaXMgYSBUZXN0U2VsZWN0IHdyYXBwaW5nIGEgRE9NIGVsZW1lbnQgYW5kIGhhcyB0aGUgZ2l2ZW4gc2VsZWN0ZWQgaW5kZXhcbiAgICovXG4gIHRvSGF2ZVNlbGVjdGVkSW5kZXgoKTogamFzbWluZS5DdXN0b21NYXRjaGVyIHtcbiAgICBjb25zdCBhc3NlcnQgPSAoaXNOZWdhdGl2ZTogYm9vbGVhbiwgZWw6IHVua25vd24sIGV4cGVjdGVkOiBudW1iZXIpID0+IHtcbiAgICAgIGlmICghZWwpIHtcbiAgICAgICAgcmV0dXJuIHsgcGFzczogZmFsc2UsIG1lc3NhZ2U6IGBFeHBlY3RlZCB0byBjaGVjayBzZWxlY3RlZCBpbmRleCAke2V4cGVjdGVkfSBvbiBlbGVtZW50LCBidXQgZWxlbWVudCB3YXMgZmFsc3lgIH07XG4gICAgICB9XG4gICAgICBpZiAoIShlbCBpbnN0YW5jZW9mIFRlc3RTZWxlY3QpKSB7XG4gICAgICAgIHJldHVybiB7IHBhc3M6IGZhbHNlLCBtZXNzYWdlOiBgRXhwZWN0ZWQgdG8gY2hlY2sgc2VsZWN0ZWQgaW5kZXggJHtleHBlY3RlZH0gb24gZWxlbWVudCwgYnV0IGVsZW1lbnQgd2FzIG5vdCBhIFRlc3RTZWxlY3RgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBhY3R1YWwgPSBlbC5zZWxlY3RlZEluZGV4O1xuICAgICAgY29uc3QgcGFzcyA9IGFjdHVhbCA9PT0gZXhwZWN0ZWQ7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYEV4cGVjdGVkIGVsZW1lbnQgdG8gJHtpc05lZ2F0aXZlID8gJ25vdCAnIDogJyd9aGF2ZSBzZWxlY3RlZCBpbmRleCAke2V4cGVjdGVkfSwgYnV0IGhhZCAke2FjdHVhbH1gO1xuICAgICAgcmV0dXJuIHsgcGFzczogaXNOZWdhdGl2ZSA/ICFwYXNzIDogcGFzcywgbWVzc2FnZSB9O1xuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbXBhcmUoZWw6IHVua25vd24sIGV4cGVjdGVkOiBudW1iZXIpOiBqYXNtaW5lLkN1c3RvbU1hdGNoZXJSZXN1bHQge1xuICAgICAgICByZXR1cm4gYXNzZXJ0KGZhbHNlLCBlbCwgZXhwZWN0ZWQpO1xuICAgICAgfSxcbiAgICAgIG5lZ2F0aXZlQ29tcGFyZShlbDogdW5rbm93biwgZXhwZWN0ZWQ6IG51bWJlcik6IGphc21pbmUuQ3VzdG9tTWF0Y2hlclJlc3VsdCB7XG4gICAgICAgIHJldHVybiBhc3NlcnQodHJ1ZSwgZWwsIGV4cGVjdGVkKTtcbiAgICAgIH1cbiAgICB9O1xuICB9LFxuXG4gIC8qKlxuICAgKiBDaGVja3MgdGhhdCB0aGUgcmVjZWl2ZXIgaXMgYSBUZXN0U2VsZWN0IHdyYXBwaW5nIGEgRE9NIGVsZW1lbnQgd2l0aCB0aGUgc2VsZWN0ZWQgb3B0aW9uJ3MgdmFsdWUgZXF1YWwgdG8gdGhlIGdpdmVuIHZhbHVlXG4gICAqL1xuICB0b0hhdmVTZWxlY3RlZFZhbHVlKCk6IGphc21pbmUuQ3VzdG9tTWF0Y2hlciB7XG4gICAgY29uc3QgYXNzZXJ0ID0gKGlzTmVnYXRpdmU6IGJvb2xlYW4sIGVsOiB1bmtub3duLCBleHBlY3RlZDogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoIWVsKSB7XG4gICAgICAgIHJldHVybiB7IHBhc3M6IGZhbHNlLCBtZXNzYWdlOiBgRXhwZWN0ZWQgdG8gY2hlY2sgc2VsZWN0ZWQgdmFsdWUgJyR7ZXhwZWN0ZWR9JyBvbiBlbGVtZW50LCBidXQgZWxlbWVudCB3YXMgZmFsc3lgIH07XG4gICAgICB9XG4gICAgICBpZiAoIShlbCBpbnN0YW5jZW9mIFRlc3RTZWxlY3QpKSB7XG4gICAgICAgIHJldHVybiB7IHBhc3M6IGZhbHNlLCBtZXNzYWdlOiBgRXhwZWN0ZWQgdG8gY2hlY2sgc2VsZWN0ZWQgdmFsdWUgJyR7ZXhwZWN0ZWR9JyBvbiBlbGVtZW50LCBidXQgZWxlbWVudCB3YXMgbm90IGEgVGVzdFNlbGVjdGAgfTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFjdHVhbCA9IGVsLnNlbGVjdGVkVmFsdWU7XG4gICAgICBjb25zdCBwYXNzID0gYWN0dWFsID09PSBleHBlY3RlZDtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgRXhwZWN0ZWQgZWxlbWVudCB0byAke2lzTmVnYXRpdmUgPyAnbm90ICcgOiAnJ31oYXZlIHNlbGVjdGVkIHZhbHVlICcke2V4cGVjdGVkfScsIGJ1dCBoYWQgJyR7YWN0dWFsfSdgO1xuICAgICAgcmV0dXJuIHsgcGFzczogaXNOZWdhdGl2ZSA/ICFwYXNzIDogcGFzcywgbWVzc2FnZSB9O1xuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbXBhcmUoZWw6IHVua25vd24sIGV4cGVjdGVkOiBzdHJpbmcpOiBqYXNtaW5lLkN1c3RvbU1hdGNoZXJSZXN1bHQge1xuICAgICAgICByZXR1cm4gYXNzZXJ0KGZhbHNlLCBlbCwgZXhwZWN0ZWQpO1xuICAgICAgfSxcbiAgICAgIG5lZ2F0aXZlQ29tcGFyZShlbDogdW5rbm93biwgZXhwZWN0ZWQ6IHN0cmluZyk6IGphc21pbmUuQ3VzdG9tTWF0Y2hlclJlc3VsdCB7XG4gICAgICAgIHJldHVybiBhc3NlcnQodHJ1ZSwgZWwsIGV4cGVjdGVkKTtcbiAgICAgIH1cbiAgICB9O1xuICB9LFxuXG4gIC8qKlxuICAgKiBDaGVja3MgdGhhdCB0aGUgcmVjZWl2ZXIgaXMgYSBUZXN0U2VsZWN0IHdyYXBwaW5nIGEgRE9NIGVsZW1lbnQgd2l0aCB0aGUgc2VsZWN0ZWQgb3B0aW9uJ3MgbGFiZWwgZXF1YWwgdG8gdGhlIGdpdmVuIGxhYmVsXG4gICAqL1xuICB0b0hhdmVTZWxlY3RlZExhYmVsKCk6IGphc21pbmUuQ3VzdG9tTWF0Y2hlciB7XG4gICAgY29uc3QgYXNzZXJ0ID0gKGlzTmVnYXRpdmU6IGJvb2xlYW4sIGVsOiB1bmtub3duLCBleHBlY3RlZDogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoIWVsKSB7XG4gICAgICAgIHJldHVybiB7IHBhc3M6IGZhbHNlLCBtZXNzYWdlOiBgRXhwZWN0ZWQgdG8gY2hlY2sgc2VsZWN0ZWQgbGFiZWwgJyR7ZXhwZWN0ZWR9JyBvbiBlbGVtZW50LCBidXQgZWxlbWVudCB3YXMgZmFsc3lgIH07XG4gICAgICB9XG4gICAgICBpZiAoIShlbCBpbnN0YW5jZW9mIFRlc3RTZWxlY3QpKSB7XG4gICAgICAgIHJldHVybiB7IHBhc3M6IGZhbHNlLCBtZXNzYWdlOiBgRXhwZWN0ZWQgdG8gY2hlY2sgc2VsZWN0ZWQgbGFiZWwgJyR7ZXhwZWN0ZWR9JyBvbiBlbGVtZW50LCBidXQgZWxlbWVudCB3YXMgbm90IGEgVGVzdFNlbGVjdGAgfTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFjdHVhbCA9IGVsLnNlbGVjdGVkTGFiZWw7XG4gICAgICBjb25zdCBwYXNzID0gYWN0dWFsID09PSBleHBlY3RlZDtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgRXhwZWN0ZWQgZWxlbWVudCB0byAke2lzTmVnYXRpdmUgPyAnbm90ICcgOiAnJ31oYXZlIHNlbGVjdGVkIGxhYmVsICcke2V4cGVjdGVkfScsIGJ1dCBoYWQgJyR7YWN0dWFsfSdgO1xuICAgICAgcmV0dXJuIHsgcGFzczogaXNOZWdhdGl2ZSA/ICFwYXNzIDogcGFzcywgbWVzc2FnZSB9O1xuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbXBhcmUoZWw6IHVua25vd24sIGV4cGVjdGVkOiBzdHJpbmcpOiBqYXNtaW5lLkN1c3RvbU1hdGNoZXJSZXN1bHQge1xuICAgICAgICByZXR1cm4gYXNzZXJ0KGZhbHNlLCBlbCwgZXhwZWN0ZWQpO1xuICAgICAgfSxcbiAgICAgIG5lZ2F0aXZlQ29tcGFyZShlbDogdW5rbm93biwgZXhwZWN0ZWQ6IHN0cmluZyk6IGphc21pbmUuQ3VzdG9tTWF0Y2hlclJlc3VsdCB7XG4gICAgICAgIHJldHVybiBhc3NlcnQodHJ1ZSwgZWwsIGV4cGVjdGVkKTtcbiAgICAgIH1cbiAgICB9O1xuICB9LFxuXG4gIC8qKlxuICAgKiBDaGVja3MgdGhhdCB0aGUgcmVjZWl2ZXIgaXMgYSBUZXN0SHRtbEVsZW1lbnQgd2hpY2ggaXMgdmlzaWJsZVxuICAgKi9cbiAgdG9CZVZpc2libGUoKTogamFzbWluZS5DdXN0b21NYXRjaGVyIHtcbiAgICBjb25zdCBhc3NlcnQgPSAoaXNOZWdhdGl2ZTogYm9vbGVhbiwgZWw6IHVua25vd24pID0+IHtcbiAgICAgIGNvbnN0IGV4cGVjdGVkU3RhdGUgPSBgJHtpc05lZ2F0aXZlID8gJ2luJyA6ICcnfXZpc2libGVgO1xuICAgICAgY29uc3QgaW52ZXJzZVN0YXRlID0gYCR7aXNOZWdhdGl2ZSA/ICcnIDogJ2luJ312aXNpYmxlYDtcbiAgICAgIGlmICghZWwpIHtcbiAgICAgICAgcmV0dXJuIHsgcGFzczogZmFsc2UsIG1lc3NhZ2U6IGBFeHBlY3RlZCB0byBjaGVjayBpZiBlbGVtZW50IHdhcyAke2V4cGVjdGVkU3RhdGV9LCBidXQgZWxlbWVudCB3YXMgZmFsc3lgIH07XG4gICAgICB9XG4gICAgICBpZiAoIShlbCBpbnN0YW5jZW9mIFRlc3RIdG1sRWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIHsgcGFzczogZmFsc2UsIG1lc3NhZ2U6IGBFeHBlY3RlZCB0byBjaGVjayBpZiBlbGVtZW50IHdhcyAke2V4cGVjdGVkU3RhdGV9LCBidXQgZWxlbWVudCB3YXMgbm90IGEgVGVzdEh0bWxFbGVtZW50YCB9O1xuICAgICAgfVxuICAgICAgY29uc3QgcGFzcyA9IGVsLnZpc2libGU7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYEV4cGVjdGVkIGVsZW1lbnQgdG8gYmUgJHtleHBlY3RlZFN0YXRlfSwgYnV0IHdhcyAke2ludmVyc2VTdGF0ZX1gO1xuICAgICAgcmV0dXJuIHsgcGFzczogaXNOZWdhdGl2ZSA/ICFwYXNzIDogcGFzcywgbWVzc2FnZSB9O1xuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbXBhcmUoZWw6IHVua25vd24pOiBqYXNtaW5lLkN1c3RvbU1hdGNoZXJSZXN1bHQge1xuICAgICAgICByZXR1cm4gYXNzZXJ0KGZhbHNlLCBlbCk7XG4gICAgICB9LFxuICAgICAgbmVnYXRpdmVDb21wYXJlKGVsOiB1bmtub3duKTogamFzbWluZS5DdXN0b21NYXRjaGVyUmVzdWx0IHtcbiAgICAgICAgcmV0dXJuIGFzc2VydCh0cnVlLCBlbCk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxufTtcblxuZXhwb3J0IHsgc3BlY3Vsb29zTWF0Y2hlcnMgfTtcbiJdfQ==
|
|
@@ -948,7 +948,7 @@ const speculoosMatchers = {
|
|
|
948
948
|
/**
|
|
949
949
|
* Checks that the receiver is a TestElement wrapping a DOM element and as the given CSS class
|
|
950
950
|
*/
|
|
951
|
-
toHaveClass
|
|
951
|
+
toHaveClass() {
|
|
952
952
|
const assert = (isNegative, el, expected) => {
|
|
953
953
|
if (!el) {
|
|
954
954
|
return { pass: false, message: `Expected to check class '${expected}' on element, but element was falsy` };
|
|
@@ -963,10 +963,10 @@ const speculoosMatchers = {
|
|
|
963
963
|
return { pass: isNegative ? !pass : pass, message };
|
|
964
964
|
};
|
|
965
965
|
return {
|
|
966
|
-
compare
|
|
966
|
+
compare(el, expected) {
|
|
967
967
|
return assert(false, el, expected);
|
|
968
968
|
},
|
|
969
|
-
negativeCompare
|
|
969
|
+
negativeCompare(el, expected) {
|
|
970
970
|
return assert(true, el, expected);
|
|
971
971
|
}
|
|
972
972
|
};
|
|
@@ -974,7 +974,7 @@ const speculoosMatchers = {
|
|
|
974
974
|
/**
|
|
975
975
|
* Checks that the receiver is a TestInput or a TestTextArea and has the given value
|
|
976
976
|
*/
|
|
977
|
-
toHaveValue
|
|
977
|
+
toHaveValue() {
|
|
978
978
|
const assert = (isNegative, el, expected) => {
|
|
979
979
|
if (!el) {
|
|
980
980
|
return { pass: false, message: `Expected to check value '${expected}' on element, but element was falsy` };
|
|
@@ -991,10 +991,10 @@ const speculoosMatchers = {
|
|
|
991
991
|
return { pass: isNegative ? !pass : pass, message };
|
|
992
992
|
};
|
|
993
993
|
return {
|
|
994
|
-
compare
|
|
994
|
+
compare(el, expected) {
|
|
995
995
|
return assert(false, el, expected);
|
|
996
996
|
},
|
|
997
|
-
negativeCompare
|
|
997
|
+
negativeCompare(el, expected) {
|
|
998
998
|
return assert(true, el, expected);
|
|
999
999
|
}
|
|
1000
1000
|
};
|
|
@@ -1002,7 +1002,7 @@ const speculoosMatchers = {
|
|
|
1002
1002
|
/**
|
|
1003
1003
|
* Checks that the receiver is a TestElement wrapping a DOM element and has the exact given textContent
|
|
1004
1004
|
*/
|
|
1005
|
-
toHaveText
|
|
1005
|
+
toHaveText() {
|
|
1006
1006
|
const assert = (isNegative, el, expected) => {
|
|
1007
1007
|
if (!el) {
|
|
1008
1008
|
return { pass: false, message: `Expected to check text '${expected}' on element, but element was falsy` };
|
|
@@ -1016,10 +1016,10 @@ const speculoosMatchers = {
|
|
|
1016
1016
|
return { pass: isNegative ? !pass : pass, message };
|
|
1017
1017
|
};
|
|
1018
1018
|
return {
|
|
1019
|
-
compare
|
|
1019
|
+
compare(el, expected) {
|
|
1020
1020
|
return assert(false, el, expected);
|
|
1021
1021
|
},
|
|
1022
|
-
negativeCompare
|
|
1022
|
+
negativeCompare(el, expected) {
|
|
1023
1023
|
return assert(true, el, expected);
|
|
1024
1024
|
}
|
|
1025
1025
|
};
|
|
@@ -1037,7 +1037,7 @@ const speculoosMatchers = {
|
|
|
1037
1037
|
* expect(tester.title).toHaveTrimmedText('Some title')
|
|
1038
1038
|
* ```
|
|
1039
1039
|
*/
|
|
1040
|
-
toHaveTrimmedText
|
|
1040
|
+
toHaveTrimmedText() {
|
|
1041
1041
|
const assert = (isNegative, el, expected) => {
|
|
1042
1042
|
var _a;
|
|
1043
1043
|
const trimmedExpected = expected.trim();
|
|
@@ -1056,10 +1056,10 @@ const speculoosMatchers = {
|
|
|
1056
1056
|
return { pass: isNegative ? !pass : pass, message };
|
|
1057
1057
|
};
|
|
1058
1058
|
return {
|
|
1059
|
-
compare
|
|
1059
|
+
compare(el, expected) {
|
|
1060
1060
|
return assert(false, el, expected);
|
|
1061
1061
|
},
|
|
1062
|
-
negativeCompare
|
|
1062
|
+
negativeCompare(el, expected) {
|
|
1063
1063
|
return assert(true, el, expected);
|
|
1064
1064
|
}
|
|
1065
1065
|
};
|
|
@@ -1067,7 +1067,7 @@ const speculoosMatchers = {
|
|
|
1067
1067
|
/**
|
|
1068
1068
|
* Checks that the receiver is a TestElement wrapping a DOM element and contains the given textContent
|
|
1069
1069
|
*/
|
|
1070
|
-
toContainText
|
|
1070
|
+
toContainText() {
|
|
1071
1071
|
const assert = (isNegative, el, expected) => {
|
|
1072
1072
|
if (!el) {
|
|
1073
1073
|
return { pass: false, message: `Expected to check text '${expected}' on element, but element was falsy` };
|
|
@@ -1087,10 +1087,10 @@ const speculoosMatchers = {
|
|
|
1087
1087
|
return { pass: isNegative ? !pass : pass, message };
|
|
1088
1088
|
};
|
|
1089
1089
|
return {
|
|
1090
|
-
compare
|
|
1090
|
+
compare(el, expected) {
|
|
1091
1091
|
return assert(false, el, expected);
|
|
1092
1092
|
},
|
|
1093
|
-
negativeCompare
|
|
1093
|
+
negativeCompare(el, expected) {
|
|
1094
1094
|
return assert(true, el, expected);
|
|
1095
1095
|
}
|
|
1096
1096
|
};
|
|
@@ -1098,7 +1098,7 @@ const speculoosMatchers = {
|
|
|
1098
1098
|
/**
|
|
1099
1099
|
* Checks that the receiver is a TestElement wrapping a DOM element and contains the given textContent
|
|
1100
1100
|
*/
|
|
1101
|
-
toBeChecked
|
|
1101
|
+
toBeChecked() {
|
|
1102
1102
|
const assert = (isNegative, el) => {
|
|
1103
1103
|
if (!el) {
|
|
1104
1104
|
return { pass: false, message: `Expected to check if element was checked, but element was falsy` };
|
|
@@ -1111,10 +1111,10 @@ const speculoosMatchers = {
|
|
|
1111
1111
|
return { pass: isNegative ? !pass : pass, message };
|
|
1112
1112
|
};
|
|
1113
1113
|
return {
|
|
1114
|
-
compare
|
|
1114
|
+
compare(el) {
|
|
1115
1115
|
return assert(false, el);
|
|
1116
1116
|
},
|
|
1117
|
-
negativeCompare
|
|
1117
|
+
negativeCompare(el) {
|
|
1118
1118
|
return assert(true, el);
|
|
1119
1119
|
}
|
|
1120
1120
|
};
|
|
@@ -1122,7 +1122,7 @@ const speculoosMatchers = {
|
|
|
1122
1122
|
/**
|
|
1123
1123
|
* Checks that the receiver is a TestSelect wrapping a DOM element and has the given selected index
|
|
1124
1124
|
*/
|
|
1125
|
-
toHaveSelectedIndex
|
|
1125
|
+
toHaveSelectedIndex() {
|
|
1126
1126
|
const assert = (isNegative, el, expected) => {
|
|
1127
1127
|
if (!el) {
|
|
1128
1128
|
return { pass: false, message: `Expected to check selected index ${expected} on element, but element was falsy` };
|
|
@@ -1136,10 +1136,10 @@ const speculoosMatchers = {
|
|
|
1136
1136
|
return { pass: isNegative ? !pass : pass, message };
|
|
1137
1137
|
};
|
|
1138
1138
|
return {
|
|
1139
|
-
compare
|
|
1139
|
+
compare(el, expected) {
|
|
1140
1140
|
return assert(false, el, expected);
|
|
1141
1141
|
},
|
|
1142
|
-
negativeCompare
|
|
1142
|
+
negativeCompare(el, expected) {
|
|
1143
1143
|
return assert(true, el, expected);
|
|
1144
1144
|
}
|
|
1145
1145
|
};
|
|
@@ -1147,7 +1147,7 @@ const speculoosMatchers = {
|
|
|
1147
1147
|
/**
|
|
1148
1148
|
* Checks that the receiver is a TestSelect wrapping a DOM element with the selected option's value equal to the given value
|
|
1149
1149
|
*/
|
|
1150
|
-
toHaveSelectedValue
|
|
1150
|
+
toHaveSelectedValue() {
|
|
1151
1151
|
const assert = (isNegative, el, expected) => {
|
|
1152
1152
|
if (!el) {
|
|
1153
1153
|
return { pass: false, message: `Expected to check selected value '${expected}' on element, but element was falsy` };
|
|
@@ -1161,10 +1161,10 @@ const speculoosMatchers = {
|
|
|
1161
1161
|
return { pass: isNegative ? !pass : pass, message };
|
|
1162
1162
|
};
|
|
1163
1163
|
return {
|
|
1164
|
-
compare
|
|
1164
|
+
compare(el, expected) {
|
|
1165
1165
|
return assert(false, el, expected);
|
|
1166
1166
|
},
|
|
1167
|
-
negativeCompare
|
|
1167
|
+
negativeCompare(el, expected) {
|
|
1168
1168
|
return assert(true, el, expected);
|
|
1169
1169
|
}
|
|
1170
1170
|
};
|
|
@@ -1172,7 +1172,7 @@ const speculoosMatchers = {
|
|
|
1172
1172
|
/**
|
|
1173
1173
|
* Checks that the receiver is a TestSelect wrapping a DOM element with the selected option's label equal to the given label
|
|
1174
1174
|
*/
|
|
1175
|
-
toHaveSelectedLabel
|
|
1175
|
+
toHaveSelectedLabel() {
|
|
1176
1176
|
const assert = (isNegative, el, expected) => {
|
|
1177
1177
|
if (!el) {
|
|
1178
1178
|
return { pass: false, message: `Expected to check selected label '${expected}' on element, but element was falsy` };
|
|
@@ -1186,10 +1186,10 @@ const speculoosMatchers = {
|
|
|
1186
1186
|
return { pass: isNegative ? !pass : pass, message };
|
|
1187
1187
|
};
|
|
1188
1188
|
return {
|
|
1189
|
-
compare
|
|
1189
|
+
compare(el, expected) {
|
|
1190
1190
|
return assert(false, el, expected);
|
|
1191
1191
|
},
|
|
1192
|
-
negativeCompare
|
|
1192
|
+
negativeCompare(el, expected) {
|
|
1193
1193
|
return assert(true, el, expected);
|
|
1194
1194
|
}
|
|
1195
1195
|
};
|
|
@@ -1197,7 +1197,7 @@ const speculoosMatchers = {
|
|
|
1197
1197
|
/**
|
|
1198
1198
|
* Checks that the receiver is a TestHtmlElement which is visible
|
|
1199
1199
|
*/
|
|
1200
|
-
toBeVisible
|
|
1200
|
+
toBeVisible() {
|
|
1201
1201
|
const assert = (isNegative, el) => {
|
|
1202
1202
|
const expectedState = `${isNegative ? 'in' : ''}visible`;
|
|
1203
1203
|
const inverseState = `${isNegative ? '' : 'in'}visible`;
|
|
@@ -1212,10 +1212,10 @@ const speculoosMatchers = {
|
|
|
1212
1212
|
return { pass: isNegative ? !pass : pass, message };
|
|
1213
1213
|
};
|
|
1214
1214
|
return {
|
|
1215
|
-
compare
|
|
1215
|
+
compare(el) {
|
|
1216
1216
|
return assert(false, el);
|
|
1217
1217
|
},
|
|
1218
|
-
negativeCompare
|
|
1218
|
+
negativeCompare(el) {
|
|
1219
1219
|
return assert(true, el);
|
|
1220
1220
|
}
|
|
1221
1221
|
};
|