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.
@@ -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: (el, expected) => {
25
+ compare(el, expected) {
26
26
  return assert(false, el, expected);
27
27
  },
28
- negativeCompare: (el, expected) => {
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: (el, expected) => {
53
+ compare(el, expected) {
54
54
  return assert(false, el, expected);
55
55
  },
56
- negativeCompare: (el, expected) => {
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: (el, expected) => {
78
+ compare(el, expected) {
79
79
  return assert(false, el, expected);
80
80
  },
81
- negativeCompare: (el, expected) => {
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: (el, expected) => {
117
+ compare(el, expected) {
118
118
  return assert(false, el, expected);
119
119
  },
120
- negativeCompare: (el, expected) => {
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: (el, expected) => {
148
+ compare(el, expected) {
149
149
  return assert(false, el, expected);
150
150
  },
151
- negativeCompare: (el, expected) => {
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: (el) => {
172
+ compare(el) {
173
173
  return assert(false, el);
174
174
  },
175
- negativeCompare: (el) => {
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: (el, expected) => {
197
+ compare(el, expected) {
198
198
  return assert(false, el, expected);
199
199
  },
200
- negativeCompare: (el, expected) => {
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: (el, expected) => {
222
+ compare(el, expected) {
223
223
  return assert(false, el, expected);
224
224
  },
225
- negativeCompare: (el, expected) => {
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: (el, expected) => {
247
+ compare(el, expected) {
248
248
  return assert(false, el, expected);
249
249
  },
250
- negativeCompare: (el, expected) => {
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: (el) => {
273
+ compare(el) {
274
274
  return assert(false, el);
275
275
  },
276
- negativeCompare: (el) => {
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0Y2hlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3BlY3Vsb29zL3NyYy9saWIvbWF0Y2hlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRELE1BQU0saUJBQWlCLEdBQW1DO0lBQ3hEOztPQUVHO0lBQ0gsV0FBVztRQUNULE1BQU0sTUFBTSxHQUFHLENBQUMsVUFBbUIsRUFBRSxFQUFXLEVBQUUsUUFBZ0IsRUFBRSxFQUFFO1lBQ3BFLElBQUksQ0FBQyxFQUFFLEVBQUU7Z0JBQ1AsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLDRCQUE0QixRQUFRLHFDQUFxQyxFQUFFLENBQUM7YUFDNUc7WUFDRCxJQUFJLENBQUMsQ0FBQyxFQUFFLFlBQVksV0FBVyxDQUFDLEVBQUU7Z0JBQ2hDLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSw0QkFBNEIsUUFBUSxpREFBaUQsRUFBRSxDQUFDO2FBQ3hIO1lBQ0QsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQztZQUMxQixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQzdDLE1BQU0sT0FBTyxHQUNYLHVCQUF1QixVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLFFBQVEsS0FBSztnQkFDM0Us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QUFDO1FBQ0YsT0FBTztZQUNMLE9BQU8sQ0FBQyxFQUFXO2dCQUNqQixPQUFPLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDM0IsQ0FBQztZQUNELGVBQWUsQ0FBQyxFQUFXO2dCQUN6QixPQUFPLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDMUIsQ0FBQztTQUNGLENBQUM7SUFDSixDQUFDO0NBQ0YsQ0FBQztBQUVGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVzdFRleHRBcmVhIH0gZnJvbSAnLi90ZXN0LXRleHRhcmVhJztcbmltcG9ydCB7IFRlc3RJbnB1dCB9IGZyb20gJy4vdGVzdC1pbnB1dCc7XG5pbXBvcnQgeyBUZXN0RWxlbWVudCB9IGZyb20gJy4vdGVzdC1lbGVtZW50JztcbmltcG9ydCB7IFRlc3RTZWxlY3QgfSBmcm9tICcuL3Rlc3Qtc2VsZWN0JztcbmltcG9ydCB7IFRlc3RIdG1sRWxlbWVudCB9IGZyb20gJy4vdGVzdC1odG1sLWVsZW1lbnQnO1xuXG5jb25zdCBzcGVjdWxvb3NNYXRjaGVyczogamFzbWluZS5DdXN0b21NYXRjaGVyRmFjdG9yaWVzID0ge1xuICAvKipcbiAgICogQ2hlY2tzIHRoYXQgdGhlIHJlY2VpdmVyIGlzIGEgVGVzdEVsZW1lbnQgd3JhcHBpbmcgYSBET00gZWxlbWVudCBhbmQgYXMgdGhlIGdpdmVuIENTUyBjbGFzc1xuICAgKi9cbiAgdG9IYXZlQ2xhc3MoKTogamFzbWluZS5DdXN0b21NYXRjaGVyIHtcbiAgICBjb25zdCBhc3NlcnQgPSAoaXNOZWdhdGl2ZTogYm9vbGVhbiwgZWw6IHVua25vd24sIGV4cGVjdGVkOiBzdHJpbmcpID0+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: (el, expected) => {
966
+ compare(el, expected) {
967
967
  return assert(false, el, expected);
968
968
  },
969
- negativeCompare: (el, expected) => {
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: (el, expected) => {
994
+ compare(el, expected) {
995
995
  return assert(false, el, expected);
996
996
  },
997
- negativeCompare: (el, expected) => {
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: (el, expected) => {
1019
+ compare(el, expected) {
1020
1020
  return assert(false, el, expected);
1021
1021
  },
1022
- negativeCompare: (el, expected) => {
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: (el, expected) => {
1059
+ compare(el, expected) {
1060
1060
  return assert(false, el, expected);
1061
1061
  },
1062
- negativeCompare: (el, expected) => {
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: (el, expected) => {
1090
+ compare(el, expected) {
1091
1091
  return assert(false, el, expected);
1092
1092
  },
1093
- negativeCompare: (el, expected) => {
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: (el) => {
1114
+ compare(el) {
1115
1115
  return assert(false, el);
1116
1116
  },
1117
- negativeCompare: (el) => {
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: (el, expected) => {
1139
+ compare(el, expected) {
1140
1140
  return assert(false, el, expected);
1141
1141
  },
1142
- negativeCompare: (el, expected) => {
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: (el, expected) => {
1164
+ compare(el, expected) {
1165
1165
  return assert(false, el, expected);
1166
1166
  },
1167
- negativeCompare: (el, expected) => {
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: (el, expected) => {
1189
+ compare(el, expected) {
1190
1190
  return assert(false, el, expected);
1191
1191
  },
1192
- negativeCompare: (el, expected) => {
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: (el) => {
1215
+ compare(el) {
1216
1216
  return assert(false, el);
1217
1217
  },
1218
- negativeCompare: (el) => {
1218
+ negativeCompare(el) {
1219
1219
  return assert(true, el);
1220
1220
  }
1221
1221
  };