@webex/test-helper-mocha 3.0.0-beta.15 → 3.0.0-beta.151
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/dist/index.js +20 -59
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,85 +1,76 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
|
|
6
|
-
|
|
7
5
|
var _isNan = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/number/is-nan"));
|
|
8
|
-
|
|
9
6
|
/*!
|
|
10
7
|
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
11
8
|
*/
|
|
9
|
+
|
|
12
10
|
var bowser = require('bowser');
|
|
11
|
+
|
|
13
12
|
/**
|
|
14
13
|
* Indicates if we're running in node
|
|
15
14
|
* @returns {boolean}
|
|
16
15
|
* @private
|
|
17
16
|
*/
|
|
18
|
-
|
|
19
|
-
|
|
20
17
|
function inNode() {
|
|
21
18
|
return typeof window === 'undefined';
|
|
22
19
|
}
|
|
20
|
+
|
|
23
21
|
/**
|
|
24
22
|
* Indicates if we're running in a web browser
|
|
25
23
|
* @returns {boolean}
|
|
26
24
|
* @private
|
|
27
25
|
*/
|
|
28
|
-
|
|
29
|
-
|
|
30
26
|
function inBrowser() {
|
|
31
27
|
return !inNode();
|
|
32
28
|
}
|
|
29
|
+
|
|
33
30
|
/**
|
|
34
31
|
* Indicates if we are running in the named browser
|
|
35
32
|
* @param {string} name name of the browser
|
|
36
33
|
* @returns {boolean}
|
|
37
34
|
*/
|
|
38
|
-
|
|
39
|
-
|
|
40
35
|
function inSpecificBrowser(name) {
|
|
41
36
|
return window && bowser.getParser(window.navigator.userAgent).isBrowser(name);
|
|
42
37
|
}
|
|
38
|
+
|
|
43
39
|
/**
|
|
44
40
|
* Indicates if we're running in firefox
|
|
45
41
|
* @returns {boolean}
|
|
46
42
|
* @private
|
|
47
43
|
*/
|
|
48
|
-
|
|
49
|
-
|
|
50
44
|
function inFirefox() {
|
|
51
45
|
return inSpecificBrowser('firefox');
|
|
52
46
|
}
|
|
47
|
+
|
|
53
48
|
/**
|
|
54
49
|
* Indicates if we're running in safari
|
|
55
50
|
* @returns {boolean}
|
|
56
51
|
* @private
|
|
57
52
|
*/
|
|
58
|
-
|
|
59
|
-
|
|
60
53
|
function inSafari() {
|
|
61
54
|
return inSpecificBrowser('safari');
|
|
62
55
|
}
|
|
56
|
+
|
|
63
57
|
/**
|
|
64
58
|
* Indicates if we're running on Jenkins
|
|
65
59
|
* @returns {boolean}
|
|
66
60
|
* @private
|
|
67
61
|
*/
|
|
68
|
-
|
|
69
|
-
|
|
70
62
|
function inJenkins() {
|
|
71
63
|
return process.env.JENKINS;
|
|
72
64
|
}
|
|
65
|
+
|
|
73
66
|
/**
|
|
74
67
|
* noop
|
|
75
68
|
* @returns {undefined}
|
|
76
69
|
* @private
|
|
77
70
|
*/
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
function noop() {// intentionally empty
|
|
71
|
+
function noop() {
|
|
72
|
+
// intentionally empty
|
|
81
73
|
}
|
|
82
|
-
|
|
83
74
|
module.exports = {
|
|
84
75
|
/**
|
|
85
76
|
* Wrap the desired mochaMethod with `flaky` to indicate it's a flaky test
|
|
@@ -96,11 +87,9 @@ module.exports = {
|
|
|
96
87
|
if (!mochaMethod.skip) {
|
|
97
88
|
return mochaMethod;
|
|
98
89
|
}
|
|
99
|
-
|
|
100
90
|
var shouldSkip = envVar && envVar !== 'false' && !!envVar;
|
|
101
91
|
return shouldSkip ? mochaMethod.skip : mochaMethod;
|
|
102
92
|
},
|
|
103
|
-
|
|
104
93
|
/**
|
|
105
94
|
* A lot of failures get produced by EventEmitters, which makes them difficult to
|
|
106
95
|
* detect in tests (they just look like timeouts). This is a test helper that
|
|
@@ -115,34 +104,32 @@ module.exports = {
|
|
|
115
104
|
r = reject;
|
|
116
105
|
emitter.once('error', reject);
|
|
117
106
|
});
|
|
118
|
-
|
|
119
107
|
var handler = _promise.default.race([p, fn(emitter)]).then(unbind).catch(function (reason) {
|
|
120
108
|
unbind();
|
|
121
109
|
throw reason;
|
|
122
|
-
});
|
|
123
|
-
|
|
110
|
+
});
|
|
124
111
|
|
|
112
|
+
// Make it possible to add additional emitters
|
|
125
113
|
handler.add = function (e) {
|
|
126
114
|
return e.once('error', r);
|
|
127
115
|
};
|
|
128
|
-
|
|
129
116
|
return handler;
|
|
117
|
+
|
|
130
118
|
/**
|
|
131
119
|
* unbinder
|
|
132
120
|
* @private
|
|
133
121
|
* @returns {undefined}
|
|
134
122
|
*/
|
|
135
|
-
|
|
136
123
|
function unbind() {
|
|
137
124
|
try {
|
|
138
125
|
emitter.off('error', r);
|
|
139
|
-
} catch (err) {
|
|
126
|
+
} catch (err) {
|
|
127
|
+
// ignore
|
|
140
128
|
}
|
|
141
129
|
}
|
|
142
130
|
},
|
|
143
131
|
inBrowser: inBrowser,
|
|
144
132
|
inNode: inNode,
|
|
145
|
-
|
|
146
133
|
/**
|
|
147
134
|
* Wrap the desired mochaMethod with `skipInBrowser` to prevent the
|
|
148
135
|
* corresponding test or group of tests from running in a web browser
|
|
@@ -157,10 +144,8 @@ module.exports = {
|
|
|
157
144
|
if (!mochaMethod.skip) {
|
|
158
145
|
return mochaMethod;
|
|
159
146
|
}
|
|
160
|
-
|
|
161
147
|
return inBrowser() ? mochaMethod.skip : mochaMethod;
|
|
162
148
|
},
|
|
163
|
-
|
|
164
149
|
/**
|
|
165
150
|
* Wrap the desired mochaMethod with `skipInNode` to prevent the
|
|
166
151
|
* corresponding test or group of tests from running in node.
|
|
@@ -175,10 +160,8 @@ module.exports = {
|
|
|
175
160
|
if (!mochaMethod.skip) {
|
|
176
161
|
return mochaMethod;
|
|
177
162
|
}
|
|
178
|
-
|
|
179
163
|
return inNode() ? mochaMethod.skip : mochaMethod;
|
|
180
164
|
},
|
|
181
|
-
|
|
182
165
|
/**
|
|
183
166
|
* Wrap the desired mochaMethod with `skipInFirefox` to prevent the
|
|
184
167
|
* corresponding test or group of tests from running in Firefox.
|
|
@@ -193,10 +176,8 @@ module.exports = {
|
|
|
193
176
|
if (!mochaMethod.skip) {
|
|
194
177
|
return mochaMethod;
|
|
195
178
|
}
|
|
196
|
-
|
|
197
179
|
return inFirefox() ? mochaMethod.skip : mochaMethod;
|
|
198
180
|
},
|
|
199
|
-
|
|
200
181
|
/**
|
|
201
182
|
* Wrap the desired mochaMethod with `skipInSafari` to prevent the
|
|
202
183
|
* corresponding test or group of tests from running in Safari.
|
|
@@ -211,10 +192,8 @@ module.exports = {
|
|
|
211
192
|
if (!mochaMethod.skip) {
|
|
212
193
|
return mochaMethod;
|
|
213
194
|
}
|
|
214
|
-
|
|
215
195
|
return inSafari() ? mochaMethod.skip : mochaMethod;
|
|
216
196
|
},
|
|
217
|
-
|
|
218
197
|
/**
|
|
219
198
|
* Similar to skipInNode in that it prevents the test from running, but goes a
|
|
220
199
|
* step further to hide it from the list of skipped tests. Should be used when
|
|
@@ -225,7 +204,6 @@ module.exports = {
|
|
|
225
204
|
browserOnly: function browserOnly(mochaMethod) {
|
|
226
205
|
return inBrowser() ? mochaMethod : noop;
|
|
227
206
|
},
|
|
228
|
-
|
|
229
207
|
/**
|
|
230
208
|
* Similar to skipInBrowser in that it prevents the test from running, but
|
|
231
209
|
* goes a step further to hide it from the list of skipped tests. Should be
|
|
@@ -236,7 +214,6 @@ module.exports = {
|
|
|
236
214
|
nodeOnly: function nodeOnly(mochaMethod) {
|
|
237
215
|
return inNode() ? mochaMethod : noop;
|
|
238
216
|
},
|
|
239
|
-
|
|
240
217
|
/**
|
|
241
218
|
* Similar to skipInBrowser in that it prevents the test from running, but
|
|
242
219
|
* goes a step further to hide it from the list of skipped tests. Should be
|
|
@@ -247,7 +224,6 @@ module.exports = {
|
|
|
247
224
|
jenkinsOnly: function jenkinsOnly(mochaMethod) {
|
|
248
225
|
return inJenkins() ? mochaMethod : noop;
|
|
249
226
|
},
|
|
250
|
-
|
|
251
227
|
/**
|
|
252
228
|
* @param {number} max
|
|
253
229
|
* @param {string} event
|
|
@@ -258,20 +234,20 @@ module.exports = {
|
|
|
258
234
|
*/
|
|
259
235
|
expectActivity: function expectActivity(max, event, emitter, activityChecker, msg) {
|
|
260
236
|
var timer;
|
|
237
|
+
|
|
261
238
|
/**
|
|
262
239
|
* helper
|
|
263
240
|
* @private
|
|
264
241
|
* @returns {undefined}
|
|
265
242
|
*/
|
|
266
|
-
|
|
267
243
|
function unbind() {
|
|
268
244
|
try {
|
|
269
245
|
clearTimeout(timer);
|
|
270
246
|
emitter.off(event);
|
|
271
|
-
} catch (err) {
|
|
247
|
+
} catch (err) {
|
|
248
|
+
// ignore
|
|
272
249
|
}
|
|
273
250
|
}
|
|
274
|
-
|
|
275
251
|
return _promise.default.race([new _promise.default(function (resolve, reject) {
|
|
276
252
|
timer = setTimeout(function () {
|
|
277
253
|
reject(new Error("".concat(event, " did not fire within ").concat(max, "ms").concat(msg ? ": ".concat(msg) : '')));
|
|
@@ -279,7 +255,6 @@ module.exports = {
|
|
|
279
255
|
}), new _promise.default(function (resolve) {
|
|
280
256
|
emitter.on(event, function (result) {
|
|
281
257
|
var activity = result.data.activity;
|
|
282
|
-
|
|
283
258
|
if (activityChecker(activity)) {
|
|
284
259
|
unbind();
|
|
285
260
|
resolve(activity);
|
|
@@ -290,7 +265,6 @@ module.exports = {
|
|
|
290
265
|
throw reason;
|
|
291
266
|
});
|
|
292
267
|
},
|
|
293
|
-
|
|
294
268
|
/**
|
|
295
269
|
* Returns a promise that resolves after timeout or rejects
|
|
296
270
|
* when count has been exceeded. Will also reject if count
|
|
@@ -315,17 +289,16 @@ module.exports = {
|
|
|
315
289
|
}, max);
|
|
316
290
|
}), new _promise.default(function (resolve, reject) {
|
|
317
291
|
emitter.on(event, fn);
|
|
292
|
+
|
|
318
293
|
/**
|
|
319
294
|
* helper
|
|
320
295
|
* @private
|
|
321
296
|
* @param {object} result
|
|
322
297
|
* @returns {undefined}
|
|
323
298
|
*/
|
|
324
|
-
|
|
325
299
|
function fn(result) {
|
|
326
300
|
lastResult = result;
|
|
327
301
|
currentCount += 1;
|
|
328
|
-
|
|
329
302
|
if (currentCount > count) {
|
|
330
303
|
emitter.off(event, fn);
|
|
331
304
|
clearTimeout(timer);
|
|
@@ -334,7 +307,6 @@ module.exports = {
|
|
|
334
307
|
}
|
|
335
308
|
})]);
|
|
336
309
|
},
|
|
337
|
-
|
|
338
310
|
/**
|
|
339
311
|
* Returns a promise that resolves when event is fired count times or rejects
|
|
340
312
|
* when max expires
|
|
@@ -353,15 +325,14 @@ module.exports = {
|
|
|
353
325
|
}, max);
|
|
354
326
|
}), new _promise.default(function (resolve) {
|
|
355
327
|
emitter.on(event, fn);
|
|
328
|
+
|
|
356
329
|
/**
|
|
357
330
|
* helper
|
|
358
331
|
* @private
|
|
359
332
|
* @returns {undefined}
|
|
360
333
|
*/
|
|
361
|
-
|
|
362
334
|
function fn() {
|
|
363
335
|
currentCount += 1;
|
|
364
|
-
|
|
365
336
|
if (currentCount === count) {
|
|
366
337
|
emitter.off(event, fn);
|
|
367
338
|
clearTimeout(timer);
|
|
@@ -370,7 +341,6 @@ module.exports = {
|
|
|
370
341
|
}
|
|
371
342
|
})]);
|
|
372
343
|
},
|
|
373
|
-
|
|
374
344
|
/**
|
|
375
345
|
* @param {number} max
|
|
376
346
|
* @param {string} event
|
|
@@ -391,7 +361,6 @@ module.exports = {
|
|
|
391
361
|
});
|
|
392
362
|
})]);
|
|
393
363
|
},
|
|
394
|
-
|
|
395
364
|
/**
|
|
396
365
|
* Only run the specified test in firefox
|
|
397
366
|
* @param {Function} mochaMethod
|
|
@@ -400,7 +369,6 @@ module.exports = {
|
|
|
400
369
|
firefoxOnly: function firefoxOnly(mochaMethod) {
|
|
401
370
|
return inFirefox() ? mochaMethod : noop;
|
|
402
371
|
},
|
|
403
|
-
|
|
404
372
|
/**
|
|
405
373
|
* Waits max ms or until emitter fires event, then resolves
|
|
406
374
|
* @param {number} max
|
|
@@ -415,7 +383,6 @@ module.exports = {
|
|
|
415
383
|
emitter.once(event, resolve);
|
|
416
384
|
})]);
|
|
417
385
|
},
|
|
418
|
-
|
|
419
386
|
/**
|
|
420
387
|
* Waits timeout ms or until the promise resolves. Rejects if the timeout is
|
|
421
388
|
* hit, otherwise resolves
|
|
@@ -430,7 +397,6 @@ module.exports = {
|
|
|
430
397
|
}, timeout);
|
|
431
398
|
})]);
|
|
432
399
|
},
|
|
433
|
-
|
|
434
400
|
/**
|
|
435
401
|
* Do not execute the specified mochaMethod until we pass the specified date
|
|
436
402
|
* @param {Date|string} until
|
|
@@ -440,23 +406,18 @@ module.exports = {
|
|
|
440
406
|
*/
|
|
441
407
|
snoozeUntil: function snoozeUntil(until, explanation) {
|
|
442
408
|
var now = new Date();
|
|
443
|
-
|
|
444
409
|
if (!explanation) {
|
|
445
410
|
throw new Error('You must defend your decision to snooze this test');
|
|
446
411
|
}
|
|
447
|
-
|
|
448
412
|
var d = new Date(until);
|
|
449
|
-
|
|
450
413
|
if ((0, _isNan.default)(d.getTime())) {
|
|
451
414
|
throw new Error("\"".concat(until, "\" does not appear to a valid date"));
|
|
452
415
|
}
|
|
453
|
-
|
|
454
416
|
var skip = now < d;
|
|
455
417
|
return function (mochaMethod) {
|
|
456
418
|
if (skip) {
|
|
457
419
|
return mochaMethod.skip;
|
|
458
420
|
}
|
|
459
|
-
|
|
460
421
|
return mochaMethod;
|
|
461
422
|
};
|
|
462
423
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["bowser","require","inNode","window","inBrowser","inSpecificBrowser","name","getParser","navigator","userAgent","isBrowser","inFirefox","inSafari","inJenkins","process","env","JENKINS","noop","module","exports","flaky","mochaMethod","envVar","skip","shouldSkip","handleErrorEvent","emitter","fn","r","p","resolve","reject","once","handler","race","then","unbind","catch","reason","add","e","off","err","skipInBrowser","skipInNode","skipInFirefox","skipInSafari","browserOnly","nodeOnly","jenkinsOnly","expectActivity","max","event","activityChecker","msg","timer","clearTimeout","setTimeout","Error","on","result","activity","data","expectExactlyNEvents","count","lastResult","currentCount","expectNEvents","expectEvent","firefoxOnly","maxWaitForEvent","maxWaitForPromise","timeout","promise","snoozeUntil","until","explanation","now","Date","d","getTime"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nconst bowser = require('bowser');\n\n/**\n * Indicates if we're running in node\n * @returns {boolean}\n * @private\n */\nfunction inNode() {\n return typeof window === 'undefined';\n}\n\n/**\n * Indicates if we're running in a web browser\n * @returns {boolean}\n * @private\n */\nfunction inBrowser() {\n return !inNode();\n}\n\n/**\n * Indicates if we are running in the named browser\n * @param {string} name name of the browser\n * @returns {boolean}\n */\nfunction inSpecificBrowser(name) {\n return window && bowser.getParser(window.navigator.userAgent).isBrowser(name);\n}\n\n/**\n * Indicates if we're running in firefox\n * @returns {boolean}\n * @private\n */\nfunction inFirefox() {\n return inSpecificBrowser('firefox');\n}\n\n/**\n * Indicates if we're running in safari\n * @returns {boolean}\n * @private\n */\nfunction inSafari() {\n return inSpecificBrowser('safari');\n}\n\n/**\n * Indicates if we're running on Jenkins\n * @returns {boolean}\n * @private\n */\nfunction inJenkins() {\n return process.env.JENKINS;\n}\n\n/**\n * noop\n * @returns {undefined}\n * @private\n */\nfunction noop() {\n // intentionally empty\n}\n\nmodule.exports = {\n /**\n * Wrap the desired mochaMethod with `flaky` to indicate it's a flaky test\n * and exclude it from the test suite.\n * example:\n * `flaky(it)('sometimes passes and sometimes failes')`\n * @param {Function} mochaMethod `it` or `describe`\n * @param {string} envVar process.env.SKIP_FLAKY_TESTS\n * @returns {Function} mochaMethod or mochaMethod.skip\n */\n flaky: function flaky(mochaMethod, envVar) {\n // If mochaMethod doesn't have a skip method,\n // assume the mochaMethod is either a .skip or .only\n if (!mochaMethod.skip) {\n return mochaMethod;\n }\n\n const shouldSkip = envVar && envVar !== 'false' && !!envVar;\n\n return shouldSkip ? mochaMethod.skip : mochaMethod;\n },\n\n /**\n * A lot of failures get produced by EventEmitters, which makes them difficult to\n * detect in tests (they just look like timeouts). This is a test helper that\n * captures that error and turns it into a rejected promise\n * @param {EventEmitter} emitter\n * @param {Function} fn\n * @returns {Promise}\n */\n handleErrorEvent: function handleErrorEvent(emitter, fn) {\n let r;\n const p = new Promise((resolve, reject) => {\n r = reject;\n emitter.once('error', reject);\n });\n\n const handler = Promise.race([p, fn(emitter)])\n .then(unbind)\n .catch((reason) => {\n unbind();\n throw reason;\n });\n\n // Make it possible to add additional emitters\n handler.add = (e) => e.once('error', r);\n\n return handler;\n\n /**\n * unbinder\n * @private\n * @returns {undefined}\n */\n function unbind() {\n try {\n emitter.off('error', r);\n } catch (err) {\n // ignore\n }\n }\n },\n\n inBrowser,\n\n inNode,\n\n /**\n * Wrap the desired mochaMethod with `skipInBrowser` to prevent the\n * corresponding test or group of tests from running in a web browser\n * example:\n * `skipInBrowser(it)('does a thing that only works in node')`\n * @param {Function} mochaMethod `it` or `describe`\n * @returns {Function} mochaMethod or mochaMethod.skip\n */\n skipInBrowser: function skipInBrowser(mochaMethod) {\n // If mochaMethod doesn't have a skip method, assume that mochaMethod is\n // already either a .skip or a .only\n if (!mochaMethod.skip) {\n return mochaMethod;\n }\n\n return inBrowser() ? mochaMethod.skip : mochaMethod;\n },\n\n /**\n * Wrap the desired mochaMethod with `skipInNode` to prevent the\n * corresponding test or group of tests from running in node.\n * example:\n * `skipInNode(it)('does a thing that only works in a web browser')`\n * @param {Function} mochaMethod `it` or `describe`\n * @returns {Function} mochaMethod or mochaMethod.skip\n */\n skipInNode: function skipInNode(mochaMethod) {\n // If mochaMethod doesn't have a skip method, assume that mochaMethod is\n // already either a .skip or a .only\n if (!mochaMethod.skip) {\n return mochaMethod;\n }\n\n return inNode() ? mochaMethod.skip : mochaMethod;\n },\n\n /**\n * Wrap the desired mochaMethod with `skipInFirefox` to prevent the\n * corresponding test or group of tests from running in Firefox.\n * example:\n * `skipInFirefox(it)('does a thing that does not work in Firefox')`\n * @param {Function} mochaMethod `it` or `describe`\n * @returns {Function} mochaMethod or mochaMethod.skip\n */\n skipInFirefox: function skipInFirefox(mochaMethod) {\n // If mochaMethod doesn't have a skip method, assume that mochaMethod is\n // already either a .skip or a .only\n if (!mochaMethod.skip) {\n return mochaMethod;\n }\n\n return inFirefox() ? mochaMethod.skip : mochaMethod;\n },\n\n /**\n * Wrap the desired mochaMethod with `skipInSafari` to prevent the\n * corresponding test or group of tests from running in Safari.\n * example:\n * `skipInSafari(it)('does a thing that does not work in Safari')`\n * @param {Function} mochaMethod `it` or `describe`\n * @returns {Function} mochaMethod or mochaMethod.skip\n */\n skipInSafari: function skipInSafari(mochaMethod) {\n // If mochaMethod doesn't have a skip method, assume that mochaMethod is\n // already either a .skip or a .only\n if (!mochaMethod.skip) {\n return mochaMethod;\n }\n\n return inSafari() ? mochaMethod.skip : mochaMethod;\n },\n\n /**\n * Similar to skipInNode in that it prevents the test from running, but goes a\n * step further to hide it from the list of skipped tests. Should be used when\n * the test will never be valid in NodeJS\n * @param {Function} mochaMethod\n * @returns {Function}\n */\n browserOnly: function browserOnly(mochaMethod) {\n return inBrowser() ? mochaMethod : noop;\n },\n\n /**\n * Similar to skipInBrowser in that it prevents the test from running, but\n * goes a step further to hide it from the list of skipped tests. Should be\n * used when the test will never be valid in a Browser\n * @param {Function} mochaMethod\n * @returns {Function}\n */\n nodeOnly: function nodeOnly(mochaMethod) {\n return inNode() ? mochaMethod : noop;\n },\n\n /**\n * Similar to skipInBrowser in that it prevents the test from running, but\n * goes a step further to hide it from the list of skipped tests. Should be\n * used when the test should be run on Jenkins only\n * @param {*} mochaMethod\n * @returns {Functions}\n */\n jenkinsOnly: function jenkinsOnly(mochaMethod) {\n return inJenkins() ? mochaMethod : noop;\n },\n\n /**\n * @param {number} max\n * @param {string} event\n * @param {EventEmitter} emitter\n * @param {function} activityChecker // callback to check if activity matches\n * @param {string} msg\n * @returns {Promise<mixed>} Resolves with the activity\n */\n expectActivity: function expectActivity(max, event, emitter, activityChecker, msg) {\n let timer;\n\n /**\n * helper\n * @private\n * @returns {undefined}\n */\n function unbind() {\n try {\n clearTimeout(timer);\n emitter.off(event);\n } catch (err) {\n // ignore\n }\n }\n\n return Promise.race([\n new Promise((resolve, reject) => {\n timer = setTimeout(() => {\n reject(new Error(`${event} did not fire within ${max}ms${msg ? `: ${msg}` : ''}`));\n }, max);\n }),\n new Promise((resolve) => {\n emitter.on(event, (result) => {\n const {\n data: {activity},\n } = result;\n\n if (activityChecker(activity)) {\n unbind();\n resolve(activity);\n }\n });\n }),\n ]).catch((reason) => {\n unbind();\n throw reason;\n });\n },\n\n /**\n * Returns a promise that resolves after timeout or rejects\n * when count has been exceeded. Will also reject if count\n * hasn't been met after timeout\n * @param {number} max amount of time to wait for events in ms\n * @param {number} count number of events to expect in timeframe\n * @param {string} event\n * @param {EventEmitter} emitter\n * @returns {Promise}\n */\n expectExactlyNEvents: function expectExactlyNEvents(max, count, event, emitter) {\n let lastResult;\n let timer;\n\n let currentCount = 0;\n\n return Promise.race([\n new Promise((resolve, reject) => {\n timer = setTimeout(() => {\n if (currentCount === count) {\n resolve(lastResult);\n } else {\n reject(\n new Error(\n `${event} fired only ${currentCount} times within ${max}ms. expected ${count} times`\n )\n );\n }\n }, max);\n }),\n new Promise((resolve, reject) => {\n emitter.on(event, fn);\n\n /**\n * helper\n * @private\n * @param {object} result\n * @returns {undefined}\n */\n function fn(result) {\n lastResult = result;\n currentCount += 1;\n if (currentCount > count) {\n emitter.off(event, fn);\n clearTimeout(timer);\n reject(\n new Error(\n `${event} fired ${currentCount} times within ${max}ms. expected ${count} times`\n )\n );\n }\n }\n }),\n ]);\n },\n\n /**\n * Returns a promise that resolves when event is fired count times or rejects\n * when max expires\n * @param {number} max\n * @param {number} count\n * @param {string} event\n * @param {EventEmitter} emitter\n * @returns {Promise}\n */\n expectNEvents: function expectNEvents(max, count, event, emitter) {\n let timer;\n\n let currentCount = 0;\n\n return Promise.race([\n new Promise((resolve, reject) => {\n timer = setTimeout(() => {\n reject(\n new Error(\n `${event} fired only ${currentCount} times within ${max}ms. expected ${count} times`\n )\n );\n }, max);\n }),\n new Promise((resolve) => {\n emitter.on(event, fn);\n\n /**\n * helper\n * @private\n * @returns {undefined}\n */\n function fn() {\n currentCount += 1;\n if (currentCount === count) {\n emitter.off(event, fn);\n clearTimeout(timer);\n resolve();\n }\n }\n }),\n ]);\n },\n\n /**\n * @param {number} max\n * @param {string} event\n * @param {EventEmitter} emitter\n * @param {string} msg\n * @returns {Promise<mixed>} Resolves with the results of the event\n */\n expectEvent: function expectEvent(max, event, emitter, msg) {\n let timer;\n\n return Promise.race([\n new Promise((resolve, reject) => {\n timer = setTimeout(() => {\n reject(new Error(`${event} did not fire within ${max}ms${msg ? `: ${msg}` : ''}`));\n }, max);\n }),\n new Promise((resolve) => {\n emitter.once(event, (result) => {\n clearTimeout(timer);\n resolve(result);\n });\n }),\n ]);\n },\n\n /**\n * Only run the specified test in firefox\n * @param {Function} mochaMethod\n * @returns {Function}\n */\n firefoxOnly: function firefoxOnly(mochaMethod) {\n return inFirefox() ? mochaMethod : noop;\n },\n\n /**\n * Waits max ms or until emitter fires event, then resolves\n * @param {number} max\n * @param {string} event\n * @param {EventEmitter} emitter\n * @returns {Promise<mixed>}\n */\n maxWaitForEvent: function maxWaitForEvent(max, event, emitter) {\n return Promise.race([\n new Promise((resolve) => {\n setTimeout(resolve, max);\n }),\n new Promise((resolve) => {\n emitter.once(event, resolve);\n }),\n ]);\n },\n\n /**\n * Waits timeout ms or until the promise resolves. Rejects if the timeout is\n * hit, otherwise resolves\n * @param {number} timeout\n * @param {Promise} promise\n * @returns {Promise<mixed>}\n */\n maxWaitForPromise: function maxWaitForPromise(timeout, promise) {\n return Promise.race([\n promise,\n new Promise((resolve, reject) => {\n setTimeout(() => {\n reject(new Error(`Timeout of ${timeout} expired before promise completed`));\n }, timeout);\n }),\n ]);\n },\n\n /**\n * Do not execute the specified mochaMethod until we pass the specified date\n * @param {Date|string} until\n * @param {string} explanation - Doesn't do anything, but forces you to defend\n * your decision to snooze a test\n * @returns {Function}\n */\n snoozeUntil: function snoozeUntil(until, explanation) {\n const now = new Date();\n\n if (!explanation) {\n throw new Error('You must defend your decision to snooze this test');\n }\n\n const d = new Date(until);\n\n if (Number.isNaN(d.getTime())) {\n throw new Error(`\"${until}\" does not appear to a valid date`);\n }\n\n const skip = now < d;\n\n return (mochaMethod) => {\n if (skip) {\n return mochaMethod.skip;\n }\n\n return mochaMethod;\n };\n },\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["bowser","require","inNode","window","inBrowser","inSpecificBrowser","name","getParser","navigator","userAgent","isBrowser","inFirefox","inSafari","inJenkins","process","env","JENKINS","noop","module","exports","flaky","mochaMethod","envVar","skip","shouldSkip","handleErrorEvent","emitter","fn","r","p","resolve","reject","once","handler","race","then","unbind","catch","reason","add","e","off","err","skipInBrowser","skipInNode","skipInFirefox","skipInSafari","browserOnly","nodeOnly","jenkinsOnly","expectActivity","max","event","activityChecker","msg","timer","clearTimeout","setTimeout","Error","on","result","activity","data","expectExactlyNEvents","count","lastResult","currentCount","expectNEvents","expectEvent","firefoxOnly","maxWaitForEvent","maxWaitForPromise","timeout","promise","snoozeUntil","until","explanation","now","Date","d","getTime"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nconst bowser = require('bowser');\n\n/**\n * Indicates if we're running in node\n * @returns {boolean}\n * @private\n */\nfunction inNode() {\n return typeof window === 'undefined';\n}\n\n/**\n * Indicates if we're running in a web browser\n * @returns {boolean}\n * @private\n */\nfunction inBrowser() {\n return !inNode();\n}\n\n/**\n * Indicates if we are running in the named browser\n * @param {string} name name of the browser\n * @returns {boolean}\n */\nfunction inSpecificBrowser(name) {\n return window && bowser.getParser(window.navigator.userAgent).isBrowser(name);\n}\n\n/**\n * Indicates if we're running in firefox\n * @returns {boolean}\n * @private\n */\nfunction inFirefox() {\n return inSpecificBrowser('firefox');\n}\n\n/**\n * Indicates if we're running in safari\n * @returns {boolean}\n * @private\n */\nfunction inSafari() {\n return inSpecificBrowser('safari');\n}\n\n/**\n * Indicates if we're running on Jenkins\n * @returns {boolean}\n * @private\n */\nfunction inJenkins() {\n return process.env.JENKINS;\n}\n\n/**\n * noop\n * @returns {undefined}\n * @private\n */\nfunction noop() {\n // intentionally empty\n}\n\nmodule.exports = {\n /**\n * Wrap the desired mochaMethod with `flaky` to indicate it's a flaky test\n * and exclude it from the test suite.\n * example:\n * `flaky(it)('sometimes passes and sometimes failes')`\n * @param {Function} mochaMethod `it` or `describe`\n * @param {string} envVar process.env.SKIP_FLAKY_TESTS\n * @returns {Function} mochaMethod or mochaMethod.skip\n */\n flaky: function flaky(mochaMethod, envVar) {\n // If mochaMethod doesn't have a skip method,\n // assume the mochaMethod is either a .skip or .only\n if (!mochaMethod.skip) {\n return mochaMethod;\n }\n\n const shouldSkip = envVar && envVar !== 'false' && !!envVar;\n\n return shouldSkip ? mochaMethod.skip : mochaMethod;\n },\n\n /**\n * A lot of failures get produced by EventEmitters, which makes them difficult to\n * detect in tests (they just look like timeouts). This is a test helper that\n * captures that error and turns it into a rejected promise\n * @param {EventEmitter} emitter\n * @param {Function} fn\n * @returns {Promise}\n */\n handleErrorEvent: function handleErrorEvent(emitter, fn) {\n let r;\n const p = new Promise((resolve, reject) => {\n r = reject;\n emitter.once('error', reject);\n });\n\n const handler = Promise.race([p, fn(emitter)])\n .then(unbind)\n .catch((reason) => {\n unbind();\n throw reason;\n });\n\n // Make it possible to add additional emitters\n handler.add = (e) => e.once('error', r);\n\n return handler;\n\n /**\n * unbinder\n * @private\n * @returns {undefined}\n */\n function unbind() {\n try {\n emitter.off('error', r);\n } catch (err) {\n // ignore\n }\n }\n },\n\n inBrowser,\n\n inNode,\n\n /**\n * Wrap the desired mochaMethod with `skipInBrowser` to prevent the\n * corresponding test or group of tests from running in a web browser\n * example:\n * `skipInBrowser(it)('does a thing that only works in node')`\n * @param {Function} mochaMethod `it` or `describe`\n * @returns {Function} mochaMethod or mochaMethod.skip\n */\n skipInBrowser: function skipInBrowser(mochaMethod) {\n // If mochaMethod doesn't have a skip method, assume that mochaMethod is\n // already either a .skip or a .only\n if (!mochaMethod.skip) {\n return mochaMethod;\n }\n\n return inBrowser() ? mochaMethod.skip : mochaMethod;\n },\n\n /**\n * Wrap the desired mochaMethod with `skipInNode` to prevent the\n * corresponding test or group of tests from running in node.\n * example:\n * `skipInNode(it)('does a thing that only works in a web browser')`\n * @param {Function} mochaMethod `it` or `describe`\n * @returns {Function} mochaMethod or mochaMethod.skip\n */\n skipInNode: function skipInNode(mochaMethod) {\n // If mochaMethod doesn't have a skip method, assume that mochaMethod is\n // already either a .skip or a .only\n if (!mochaMethod.skip) {\n return mochaMethod;\n }\n\n return inNode() ? mochaMethod.skip : mochaMethod;\n },\n\n /**\n * Wrap the desired mochaMethod with `skipInFirefox` to prevent the\n * corresponding test or group of tests from running in Firefox.\n * example:\n * `skipInFirefox(it)('does a thing that does not work in Firefox')`\n * @param {Function} mochaMethod `it` or `describe`\n * @returns {Function} mochaMethod or mochaMethod.skip\n */\n skipInFirefox: function skipInFirefox(mochaMethod) {\n // If mochaMethod doesn't have a skip method, assume that mochaMethod is\n // already either a .skip or a .only\n if (!mochaMethod.skip) {\n return mochaMethod;\n }\n\n return inFirefox() ? mochaMethod.skip : mochaMethod;\n },\n\n /**\n * Wrap the desired mochaMethod with `skipInSafari` to prevent the\n * corresponding test or group of tests from running in Safari.\n * example:\n * `skipInSafari(it)('does a thing that does not work in Safari')`\n * @param {Function} mochaMethod `it` or `describe`\n * @returns {Function} mochaMethod or mochaMethod.skip\n */\n skipInSafari: function skipInSafari(mochaMethod) {\n // If mochaMethod doesn't have a skip method, assume that mochaMethod is\n // already either a .skip or a .only\n if (!mochaMethod.skip) {\n return mochaMethod;\n }\n\n return inSafari() ? mochaMethod.skip : mochaMethod;\n },\n\n /**\n * Similar to skipInNode in that it prevents the test from running, but goes a\n * step further to hide it from the list of skipped tests. Should be used when\n * the test will never be valid in NodeJS\n * @param {Function} mochaMethod\n * @returns {Function}\n */\n browserOnly: function browserOnly(mochaMethod) {\n return inBrowser() ? mochaMethod : noop;\n },\n\n /**\n * Similar to skipInBrowser in that it prevents the test from running, but\n * goes a step further to hide it from the list of skipped tests. Should be\n * used when the test will never be valid in a Browser\n * @param {Function} mochaMethod\n * @returns {Function}\n */\n nodeOnly: function nodeOnly(mochaMethod) {\n return inNode() ? mochaMethod : noop;\n },\n\n /**\n * Similar to skipInBrowser in that it prevents the test from running, but\n * goes a step further to hide it from the list of skipped tests. Should be\n * used when the test should be run on Jenkins only\n * @param {*} mochaMethod\n * @returns {Functions}\n */\n jenkinsOnly: function jenkinsOnly(mochaMethod) {\n return inJenkins() ? mochaMethod : noop;\n },\n\n /**\n * @param {number} max\n * @param {string} event\n * @param {EventEmitter} emitter\n * @param {function} activityChecker // callback to check if activity matches\n * @param {string} msg\n * @returns {Promise<mixed>} Resolves with the activity\n */\n expectActivity: function expectActivity(max, event, emitter, activityChecker, msg) {\n let timer;\n\n /**\n * helper\n * @private\n * @returns {undefined}\n */\n function unbind() {\n try {\n clearTimeout(timer);\n emitter.off(event);\n } catch (err) {\n // ignore\n }\n }\n\n return Promise.race([\n new Promise((resolve, reject) => {\n timer = setTimeout(() => {\n reject(new Error(`${event} did not fire within ${max}ms${msg ? `: ${msg}` : ''}`));\n }, max);\n }),\n new Promise((resolve) => {\n emitter.on(event, (result) => {\n const {\n data: {activity},\n } = result;\n\n if (activityChecker(activity)) {\n unbind();\n resolve(activity);\n }\n });\n }),\n ]).catch((reason) => {\n unbind();\n throw reason;\n });\n },\n\n /**\n * Returns a promise that resolves after timeout or rejects\n * when count has been exceeded. Will also reject if count\n * hasn't been met after timeout\n * @param {number} max amount of time to wait for events in ms\n * @param {number} count number of events to expect in timeframe\n * @param {string} event\n * @param {EventEmitter} emitter\n * @returns {Promise}\n */\n expectExactlyNEvents: function expectExactlyNEvents(max, count, event, emitter) {\n let lastResult;\n let timer;\n\n let currentCount = 0;\n\n return Promise.race([\n new Promise((resolve, reject) => {\n timer = setTimeout(() => {\n if (currentCount === count) {\n resolve(lastResult);\n } else {\n reject(\n new Error(\n `${event} fired only ${currentCount} times within ${max}ms. expected ${count} times`\n )\n );\n }\n }, max);\n }),\n new Promise((resolve, reject) => {\n emitter.on(event, fn);\n\n /**\n * helper\n * @private\n * @param {object} result\n * @returns {undefined}\n */\n function fn(result) {\n lastResult = result;\n currentCount += 1;\n if (currentCount > count) {\n emitter.off(event, fn);\n clearTimeout(timer);\n reject(\n new Error(\n `${event} fired ${currentCount} times within ${max}ms. expected ${count} times`\n )\n );\n }\n }\n }),\n ]);\n },\n\n /**\n * Returns a promise that resolves when event is fired count times or rejects\n * when max expires\n * @param {number} max\n * @param {number} count\n * @param {string} event\n * @param {EventEmitter} emitter\n * @returns {Promise}\n */\n expectNEvents: function expectNEvents(max, count, event, emitter) {\n let timer;\n\n let currentCount = 0;\n\n return Promise.race([\n new Promise((resolve, reject) => {\n timer = setTimeout(() => {\n reject(\n new Error(\n `${event} fired only ${currentCount} times within ${max}ms. expected ${count} times`\n )\n );\n }, max);\n }),\n new Promise((resolve) => {\n emitter.on(event, fn);\n\n /**\n * helper\n * @private\n * @returns {undefined}\n */\n function fn() {\n currentCount += 1;\n if (currentCount === count) {\n emitter.off(event, fn);\n clearTimeout(timer);\n resolve();\n }\n }\n }),\n ]);\n },\n\n /**\n * @param {number} max\n * @param {string} event\n * @param {EventEmitter} emitter\n * @param {string} msg\n * @returns {Promise<mixed>} Resolves with the results of the event\n */\n expectEvent: function expectEvent(max, event, emitter, msg) {\n let timer;\n\n return Promise.race([\n new Promise((resolve, reject) => {\n timer = setTimeout(() => {\n reject(new Error(`${event} did not fire within ${max}ms${msg ? `: ${msg}` : ''}`));\n }, max);\n }),\n new Promise((resolve) => {\n emitter.once(event, (result) => {\n clearTimeout(timer);\n resolve(result);\n });\n }),\n ]);\n },\n\n /**\n * Only run the specified test in firefox\n * @param {Function} mochaMethod\n * @returns {Function}\n */\n firefoxOnly: function firefoxOnly(mochaMethod) {\n return inFirefox() ? mochaMethod : noop;\n },\n\n /**\n * Waits max ms or until emitter fires event, then resolves\n * @param {number} max\n * @param {string} event\n * @param {EventEmitter} emitter\n * @returns {Promise<mixed>}\n */\n maxWaitForEvent: function maxWaitForEvent(max, event, emitter) {\n return Promise.race([\n new Promise((resolve) => {\n setTimeout(resolve, max);\n }),\n new Promise((resolve) => {\n emitter.once(event, resolve);\n }),\n ]);\n },\n\n /**\n * Waits timeout ms or until the promise resolves. Rejects if the timeout is\n * hit, otherwise resolves\n * @param {number} timeout\n * @param {Promise} promise\n * @returns {Promise<mixed>}\n */\n maxWaitForPromise: function maxWaitForPromise(timeout, promise) {\n return Promise.race([\n promise,\n new Promise((resolve, reject) => {\n setTimeout(() => {\n reject(new Error(`Timeout of ${timeout} expired before promise completed`));\n }, timeout);\n }),\n ]);\n },\n\n /**\n * Do not execute the specified mochaMethod until we pass the specified date\n * @param {Date|string} until\n * @param {string} explanation - Doesn't do anything, but forces you to defend\n * your decision to snooze a test\n * @returns {Function}\n */\n snoozeUntil: function snoozeUntil(until, explanation) {\n const now = new Date();\n\n if (!explanation) {\n throw new Error('You must defend your decision to snooze this test');\n }\n\n const d = new Date(until);\n\n if (Number.isNaN(d.getTime())) {\n throw new Error(`\"${until}\" does not appear to a valid date`);\n }\n\n const skip = now < d;\n\n return (mochaMethod) => {\n if (skip) {\n return mochaMethod.skip;\n }\n\n return mochaMethod;\n };\n },\n};\n"],"mappings":"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"}
|