vest 3.3.0-dev-549cb1 → 4.0.0-dev-deabb8

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/CHANGELOG.md CHANGED
@@ -4,47 +4,60 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
6
6
 
7
- ## 3.3.0 - 2021-09-15
7
+ ## 4.0.0 - 2021-10-02
8
+ ### Changed or removed
9
+ - 0e3af10 major(context): used named export in context (ealush)
10
+ - 1897164 major(vest, enforce): setup next major version (ealush)
11
+ - bf9265e breaking(vest, enforce): prepare next major (ealush)
12
+
8
13
  ### Added
9
- - fe6af86 feat(vest): Add a parser export (ealush)
10
- - 7501303 feat(vest): isValid with field name (ealush)
11
- - 160071e feat(vest): handle execution order state refill with memoized tests (ealush)
12
- - 4122ceb feat(vest): Make the state rely on execution order. Add skipWhen. (undefined)
13
- - f38d86d added(n4s): partial rule modifier (undefined)
14
- - 362410c feat(n4s): context propagation within enforce (undefined)
14
+ - b0cbb32 feat(vest): Add a parser export (ealush)
15
+ - fc75f1d feat(vest): isValid with field name (ealush)
16
+ - c427e4e feat(vest): handle execution order state refill with memoized tests (ealush)
17
+ - 443c275 feat(vest): Make the state rely on execution order. Add skipWhen. (undefined)
18
+ - 2988655 added(n4s): partial rule modifier (undefined)
19
+ - f41a444 feat(n4s): context propagation within enforce (undefined)
15
20
 
16
21
  ### Fixed and improved
17
- - .github/workflows/integration.yml
18
- - 59779fc patch(vest): remove pending and lagging state (ealush)
19
- - 1d024b2 patch(vest): convert boolean flags to a single status key (ealush)
20
- - ba3990c patch: simplify fieldname comparison (ealush)
21
- - e37d7f2 patch(vest): add useAllIncomplete hook (ealush)
22
- - 14ae130 patch(vest): invalid accounts for warning tests as well (ealush)
23
- - 8054ee9 patch(vest): isValid counts all required tests per field (ealush)
24
- - 5b25f55 chore: cleanups (ealush)
22
+ - deabb8e patch(vest): add cache invalidation for canceled tests (ealush)
23
+ - fd1e31e types(vest): add safeguard around shouldUseErrorAsMessage (ealush)
24
+ - 8321a36 patch(vest): some cleanups (ealush)
25
+ - 8320956 patch(vest): remove duplicate code handling perv test registration (ealush)
26
+ - 7e3fffb vx: use context directly from published package (ealush)
27
+ - ac45a64 patch: run done callbacks via event (ealush)
28
+ - e0f05d6 patch(vest): removed state subscription (ealush)
29
+ - package.json
30
+ - packages/anyone/package.json
31
+ - packages/anyone/package.json
32
+ - packages/vast/types/vast.d.ts
33
+ - 2515275 patch(vest): remove pending and lagging state (ealush)
34
+ - 4c38835 patch(vest): convert boolean flags to a single status key (ealush)
35
+ - e24f0bd patch: simplify fieldname comparison (ealush)
36
+ - b927b5c patch(vest): add useAllIncomplete hook (ealush)
37
+ - a88dd38 patch(vest): invalid accounts for warning tests as well (ealush)
38
+ - eaf9bef patch(vest): isValid counts all required tests per field (ealush)
39
+ - 7a4ba03 chore: cleanups (ealush)
25
40
  - .eslintrc.js
26
- - 85fa7e8 add(n4s): enforce.condition (ealush)
41
+ - 1878ffc add(n4s): enforce.condition (ealush)
27
42
  - package.json
28
43
  - packages/anyone/package.json
29
- - d792787 chore: cleanup residue (undefined)
30
- - 7c3eaf3 chore: remove duplicate types (undefined)
44
+ - a89af46 chore: cleanup residue (undefined)
45
+ - be86496 chore: remove duplicate types (undefined)
31
46
  - packages/anyone/package.json
32
- - bad36ae patch: add nodejs exports (undefined)
33
- - bfbe922 patch: remove unused exports (undefined)
47
+ - 44de93f patch: add nodejs exports (undefined)
48
+ - abb0efe patch: remove unused exports (undefined)
34
49
  - packages/anyone/package.json
35
- - 32ce807 chore: reduce complexity, remove all lint errors (undefined)
50
+ - a8540de chore: reduce complexity, remove all lint errors (undefined)
36
51
  - packages/anyone/.npmignore
37
52
  - .github/PULL_REQUEST_TEMPLATE.md
38
- - 8171561 chore: cleanup unused code (ealush)
39
- - 681021b lint: handling lint of all packages (ealush)
53
+ - f58327f chore: cleanup unused code (ealush)
54
+ - 853cee6 lint: handling lint of all packages (ealush)
40
55
  - .gitignore
41
- - 527e3e1 patch(n4s): add ruleReturn default values (ealush)
42
- - 6c89f6c fix(n4s): make enforce compound runners fall back to correct response (ealush)
43
- - 9f2caca fix(n4s): make enforce chaining work (ealush)
44
- - 0ff7a9b chore: some lint fixes (ealush)
45
- - dbd7d13 add cli options support (ealush)
46
- - 3d0393c Vest 4 Infra Setup (ealush)
47
- - 6ee296e Vest 4 Infra Setup (ealush)
56
+ - d148f6d patch(n4s): add ruleReturn default values (ealush)
57
+ - c722fbd fix(n4s): make enforce compound runners fall back to correct response (ealush)
58
+ - fa65911 fix(n4s): make enforce chaining work (ealush)
59
+ - a2437a3 chore: some lint fixes (ealush)
60
+ - aabb5f4 add cli options support (ealush)
48
61
 
49
62
  ## 3.2.7 - 2021-07-17
50
63
 
@@ -198,7 +198,7 @@ function compounds() {
198
198
  return { allOf: allOf, anyOf: anyOf, noneOf: noneOf, oneOf: oneOf, optional: optional$1 };
199
199
  }
200
200
 
201
- function isStringValue (v) {
201
+ function isStringValue(v) {
202
202
  return String(v) === v;
203
203
  }
204
204
 
@@ -609,7 +609,7 @@ function transformResult(result, ruleName, value) {
609
609
  return ruleReturn(result);
610
610
  }
611
611
  else {
612
- return ruleReturn(result.pass, optionalFunctionValue.apply(void 0, __spreadArray([result.message, ruleName, value], args)));
612
+ return ruleReturn(result.pass, optionalFunctionValue.apply(void 0, __spreadArray([result.message, ruleName, value], args, false)));
613
613
  }
614
614
  }
615
615
  function validateResult(result) {
@@ -643,9 +643,9 @@ function enforceEager(value) {
643
643
  for (var _i = 0; _i < arguments.length; _i++) {
644
644
  args[_i] = arguments[_i];
645
645
  }
646
- var transformedResult = transformResult.apply(void 0, __spreadArray([ctx$1.run({ value: value }, function () { return rule.apply(void 0, __spreadArray([value], args)); }),
646
+ var transformedResult = transformResult.apply(void 0, __spreadArray([ctx$1.run({ value: value }, function () { return rule.apply(void 0, __spreadArray([value], args, false)); }),
647
647
  ruleName,
648
- value], args));
648
+ value], args, false));
649
649
  if (!transformedResult.pass) {
650
650
  if (isEmpty(transformedResult.message)) {
651
651
  throwError("enforce/" + ruleName + " failed with " + JSON.stringify(value));
@@ -675,7 +675,7 @@ function genEnforceLazy(key) {
675
675
  }
676
676
  var rule = getRule(ruleName);
677
677
  registeredRules.push(function (value) {
678
- return transformResult.apply(void 0, __spreadArray([rule.apply(void 0, __spreadArray([value], args)), ruleName, value], args));
678
+ return transformResult.apply(void 0, __spreadArray([rule.apply(void 0, __spreadArray([value], args, false)), ruleName, value], args, false));
679
679
  });
680
680
  var proxy = {
681
681
  run: function (value) {
@@ -895,10 +895,6 @@ function matchingFieldName(testObject, fieldName) {
895
895
  function createCache(maxSize) {
896
896
  if (maxSize === void 0) { maxSize = 10; }
897
897
  var cacheStorage = [];
898
- /**
899
- * @param {any[]} deps dependency array.
900
- * @param {Function} cache action function.
901
- */
902
898
  var cache = function (deps, cacheAction) {
903
899
  var cacheHit = cache.get(deps);
904
900
  // cache hit is not null
@@ -911,10 +907,17 @@ function createCache(maxSize) {
911
907
  }
912
908
  return result;
913
909
  };
914
- /**
915
- * Retrieves an item from the cache.
916
- * @param {deps} deps Dependency array
917
- */
910
+ // invalidate an item in the cache by its dependencies
911
+ cache.invalidate = function (deps) {
912
+ var index = cacheStorage.findIndex(function (_a) {
913
+ var cachedDeps = _a[0];
914
+ return lengthEquals(deps, cachedDeps.length) &&
915
+ deps.every(function (dep, i) { return dep === cachedDeps[i]; });
916
+ });
917
+ if (index > -1)
918
+ cacheStorage.splice(index, 1);
919
+ };
920
+ // Retrieves an item from the cache.
918
921
  cache.get = function (deps) {
919
922
  return cacheStorage[cacheStorage.findIndex(function (_a) {
920
923
  var cachedDeps = _a[0];
@@ -1107,6 +1110,13 @@ function noMatch(testObject, severity, group, fieldName) {
1107
1110
  return false;
1108
1111
  }
1109
1112
 
1113
+ function getFailuresArrayOrObject(group, fieldName) {
1114
+ if (fieldName) {
1115
+ return group[fieldName];
1116
+ }
1117
+ return group;
1118
+ }
1119
+
1110
1120
  function getErrors(fieldName) {
1111
1121
  return getFailures('errors', fieldName);
1112
1122
  }
@@ -1121,25 +1131,16 @@ function getFailures(severityKey, fieldName) {
1121
1131
  var failureMessages = collectFailureMessages(severityKey, testObjects, {
1122
1132
  fieldName: fieldName
1123
1133
  });
1124
- if (fieldName) {
1125
- return failureMessages[fieldName];
1126
- }
1127
- return failureMessages;
1134
+ return getFailuresArrayOrObject(failureMessages, fieldName);
1128
1135
  }
1129
1136
 
1130
1137
  function getErrorsByGroup(groupName, fieldName) {
1131
1138
  var errors = getByGroup('errors', groupName, fieldName);
1132
- if (fieldName) {
1133
- return errors[fieldName];
1134
- }
1135
- return errors;
1139
+ return getFailuresArrayOrObject(errors, fieldName);
1136
1140
  }
1137
1141
  function getWarningsByGroup(groupName, fieldName) {
1138
- var errors = getByGroup('warnings', groupName, fieldName);
1139
- if (fieldName) {
1140
- return errors[fieldName];
1141
- }
1142
- return errors;
1142
+ var warnings = getByGroup('warnings', groupName, fieldName);
1143
+ return getFailuresArrayOrObject(warnings, fieldName);
1143
1144
  }
1144
1145
  /**
1145
1146
  * Gets failure messages by group.
@@ -1321,22 +1322,90 @@ function deferDoneCallback(doneCallback, fieldName) {
1321
1322
  });
1322
1323
  }
1323
1324
 
1325
+ function createBus() {
1326
+ var listeners = {};
1327
+ return {
1328
+ emit: function (event, data) {
1329
+ if (!listeners[event]) {
1330
+ return;
1331
+ }
1332
+ listeners[event].forEach(function (listener) {
1333
+ listener(data);
1334
+ });
1335
+ },
1336
+ on: function (event, handler) {
1337
+ if (!listeners[event]) {
1338
+ listeners[event] = [];
1339
+ }
1340
+ listeners[event].push(handler);
1341
+ return {
1342
+ off: function () {
1343
+ listeners[event] = listeners[event].filter(function (h) { return h !== handler; });
1344
+ }
1345
+ };
1346
+ }
1347
+ };
1348
+ }
1349
+
1350
+ function callEach(arr) {
1351
+ return arr.forEach(function (fn) { return fn(); });
1352
+ }
1353
+
1354
+ /**
1355
+ * Runs done callback per field when async tests are finished running.
1356
+ */
1357
+ function runFieldCallbacks(fieldName) {
1358
+ var fieldCallbacks = useTestCallbacks()[0].fieldCallbacks;
1359
+ if (fieldName) {
1360
+ if (!hasRemainingTests(fieldName) &&
1361
+ Array.isArray(fieldCallbacks[fieldName])) {
1362
+ callEach(fieldCallbacks[fieldName]);
1363
+ }
1364
+ }
1365
+ }
1366
+ /**
1367
+ * Runs unlabelled done callback when async tests are finished running.
1368
+ */
1369
+ function runDoneCallbacks() {
1370
+ var doneCallbacks = useTestCallbacks()[0].doneCallbacks;
1371
+ if (!hasRemainingTests()) {
1372
+ callEach(doneCallbacks);
1373
+ }
1374
+ }
1375
+
1376
+ function initBus() {
1377
+ var bus = createBus();
1378
+ bus.on(Events.TEST_COMPLETED, function (testObject) {
1379
+ if (testObject.isCanceled()) {
1380
+ return;
1381
+ }
1382
+ testObject.done();
1383
+ runFieldCallbacks(testObject.fieldName);
1384
+ runDoneCallbacks();
1385
+ });
1386
+ return bus;
1387
+ }
1388
+ function useBus() {
1389
+ var context = ctx.useX();
1390
+ if (!context.bus) {
1391
+ throwError();
1392
+ }
1393
+ return context.bus;
1394
+ }
1395
+ var Events;
1396
+ (function (Events) {
1397
+ Events["TEST_COMPLETED"] = "test_completed";
1398
+ })(Events || (Events = {}));
1399
+
1324
1400
  // eslint-disable-next-line max-lines-per-function
1325
1401
  function create(suiteCallback) {
1326
1402
  if (!isFunction(suiteCallback)) {
1327
1403
  throwError('Suite initialization error. Expected `tests` to be a function.');
1328
1404
  }
1329
- var handlers = [];
1330
- var state = createState(function () {
1331
- handlers.forEach(function (fn) {
1332
- return fn({
1333
- suiteState: stateRef,
1334
- type: 'suiteStateUpdate'
1335
- });
1336
- });
1337
- });
1405
+ var bus = initBus();
1406
+ var state = createState();
1338
1407
  var stateRef = createStateRef(state, { suiteId: genId() });
1339
- var suite = assign(ctx.bind({ stateRef: stateRef }, function () {
1408
+ var suite = assign(ctx.bind({ stateRef: stateRef, bus: bus }, function () {
1340
1409
  var args = [];
1341
1410
  for (var _i = 0; _i < arguments.length; _i++) {
1342
1411
  args[_i] = arguments[_i];
@@ -1360,16 +1429,7 @@ function create(suiteCallback) {
1360
1429
  }
1361
1430
  });
1362
1431
  }),
1363
- reset: state.reset,
1364
- subscribe: function (handler) {
1365
- if (!isFunction(handler))
1366
- return;
1367
- handlers.push(handler);
1368
- handler({
1369
- type: 'suiteSubscribeInit',
1370
- suiteState: stateRef
1371
- });
1372
- }
1432
+ reset: state.reset
1373
1433
  });
1374
1434
  return suite;
1375
1435
  }
@@ -1501,16 +1561,16 @@ function skipWhen(conditional, callback) {
1501
1561
  */
1502
1562
  function group(groupName, tests) {
1503
1563
  if (!isStringValue(groupName)) {
1504
- throwGroupError(groupName);
1564
+ throwGroupError('name must be a string');
1505
1565
  }
1506
1566
  if (!isFunction(tests)) {
1507
- throwGroupError(tests);
1567
+ throwGroupError('callback must be a function');
1508
1568
  }
1509
1569
  // Running with the context applied
1510
- ctx.bind({ groupName: groupName }, tests)();
1570
+ ctx.run({ groupName: groupName }, tests);
1511
1571
  }
1512
- function throwGroupError(value) {
1513
- throwError("group initialization error. Expected \"" + value + "\" to be a string.");
1572
+ function throwGroupError(error) {
1573
+ throwError("Wrong arguments passed to group. Group " + error + ".");
1514
1574
  }
1515
1575
 
1516
1576
  function optional(optionals) {
@@ -1547,6 +1607,7 @@ function removeTestFromState (testObject) {
1547
1607
  }
1548
1608
 
1549
1609
  function shouldUseErrorAsMessage(message, error) {
1610
+ // kind of cheating with this safe guard, but it does the job
1550
1611
  return isUndefined(message) && isStringValue(error);
1551
1612
  }
1552
1613
 
@@ -1621,6 +1682,9 @@ var VestTest = /** @class */ (function () {
1621
1682
  VestTest.prototype.isTested = function () {
1622
1683
  return this.hasFailures() || this.isPassing();
1623
1684
  };
1685
+ VestTest.prototype.isUntested = function () {
1686
+ return this.status === STATUS_UNTESTED;
1687
+ };
1624
1688
  VestTest.prototype.isFailing = function () {
1625
1689
  return this.status === STATUS_FAILED;
1626
1690
  };
@@ -1646,27 +1710,23 @@ var STATUS_PASSING = 'PASSING';
1646
1710
  var STATUS_PENDING = 'PENDING';
1647
1711
  var STATUS_CANCELED = 'CANCELED';
1648
1712
 
1713
+ function isPromise(value) {
1714
+ return value && isFunction(value.then);
1715
+ }
1716
+
1649
1717
  function isSameProfileTest(testObject1, testObject2) {
1650
1718
  return (testObject1.fieldName === testObject2.fieldName &&
1651
1719
  testObject1.groupName === testObject2.groupName);
1652
1720
  }
1653
1721
 
1654
1722
  function cancelOverriddenPendingTest(prevRunTestObject, currentRunTestObject) {
1655
- if (isSameProfileTest(prevRunTestObject, currentRunTestObject) &&
1656
- prevRunTestObject.isPending() &&
1657
- currentRunTestObject !== prevRunTestObject) {
1723
+ if (currentRunTestObject !== prevRunTestObject &&
1724
+ isSameProfileTest(prevRunTestObject, currentRunTestObject) &&
1725
+ prevRunTestObject.isPending()) {
1658
1726
  prevRunTestObject.cancel();
1659
1727
  }
1660
1728
  }
1661
1729
 
1662
- function isPromise(value) {
1663
- return value && isFunction(value.then);
1664
- }
1665
-
1666
- function callEach(arr) {
1667
- return arr.forEach(function (fn) { return fn(); });
1668
- }
1669
-
1670
1730
  /**
1671
1731
  * Runs async test.
1672
1732
  */
@@ -1674,16 +1734,10 @@ function runAsyncTest(testObject) {
1674
1734
  var asyncTest = testObject.asyncTest, message = testObject.message;
1675
1735
  if (!isPromise(asyncTest))
1676
1736
  return;
1737
+ var emit = useBus().emit;
1677
1738
  var stateRef = useStateRef();
1678
1739
  var done = ctx.bind({ stateRef: stateRef }, function () {
1679
- testObject.done();
1680
- // This is for cases in which the suite state was already reset
1681
- if (testObject.isCanceled()) {
1682
- return;
1683
- }
1684
- // Perform required done callback calls and cleanups after the test is finished
1685
- runFieldCallbacks(testObject.fieldName);
1686
- runDoneCallbacks();
1740
+ emit(Events.TEST_COMPLETED, testObject);
1687
1741
  });
1688
1742
  var fail = ctx.bind({ stateRef: stateRef }, function (rejectionMessage) {
1689
1743
  if (testObject.isCanceled()) {
@@ -1704,27 +1758,6 @@ function runAsyncTest(testObject) {
1704
1758
  fail();
1705
1759
  }
1706
1760
  }
1707
- /**
1708
- * Runs done callback per field when async tests are finished running.
1709
- */
1710
- function runFieldCallbacks(fieldName) {
1711
- var fieldCallbacks = useTestCallbacks()[0].fieldCallbacks;
1712
- if (fieldName) {
1713
- if (!hasRemainingTests(fieldName) &&
1714
- Array.isArray(fieldCallbacks[fieldName])) {
1715
- callEach(fieldCallbacks[fieldName]);
1716
- }
1717
- }
1718
- }
1719
- /**
1720
- * Runs unlabelled done callback when async tests are finished running.
1721
- */
1722
- function runDoneCallbacks() {
1723
- var doneCallbacks = useTestCallbacks()[0].doneCallbacks;
1724
- if (!hasRemainingTests()) {
1725
- callEach(doneCallbacks);
1726
- }
1727
- }
1728
1761
 
1729
1762
  /**
1730
1763
  * Runs sync tests - or extracts promise.
@@ -1752,6 +1785,7 @@ function runSyncTest(testObject) {
1752
1785
  * Registers test, if async - adds to pending array
1753
1786
  */
1754
1787
  function registerTest(testObject) {
1788
+ var emit = useBus().emit;
1755
1789
  // Run test callback.
1756
1790
  // If a promise is returned, set as async and
1757
1791
  // Move to pending list.
@@ -1765,7 +1799,7 @@ function registerTest(testObject) {
1765
1799
  runAsyncTest(testObject);
1766
1800
  }
1767
1801
  else {
1768
- testObject.done();
1802
+ emit(Events.TEST_COMPLETED, testObject);
1769
1803
  }
1770
1804
  }
1771
1805
  catch (_a) {
@@ -1773,6 +1807,29 @@ function registerTest(testObject) {
1773
1807
  }
1774
1808
  }
1775
1809
 
1810
+ function registerPrevRunTest(testObject) {
1811
+ var prevRunTest = useTestAtCursor(testObject);
1812
+ if (isExcluded(testObject)) {
1813
+ testObject.skip();
1814
+ useSetNextCursorAt();
1815
+ return prevRunTest;
1816
+ }
1817
+ cancelOverriddenPendingTest(prevRunTest, testObject);
1818
+ useSetTestAtCursor(testObject);
1819
+ useSetNextCursorAt();
1820
+ registerTestObjectByTier(testObject);
1821
+ return testObject;
1822
+ }
1823
+ function registerTestObjectByTier(testObject) {
1824
+ if (testObject.isUntested()) {
1825
+ registerTest(testObject);
1826
+ }
1827
+ else if (isPromise(testObject.asyncTest)) {
1828
+ testObject.setPending();
1829
+ runAsyncTest(testObject);
1830
+ }
1831
+ }
1832
+
1776
1833
  function bindTestEach(test) {
1777
1834
  /**
1778
1835
  * Run multiple tests using a parameter table
@@ -1789,7 +1846,7 @@ function bindTestEach(test) {
1789
1846
  var _a = args.reverse(), testFn = _a[0], message = _a[1];
1790
1847
  return table.map(function (item) {
1791
1848
  item = asArray(item);
1792
- return test(optionalFunctionValue.apply(void 0, __spreadArray([fieldName], item)), optionalFunctionValue.apply(void 0, __spreadArray([message], item)), function () { return testFn.apply(void 0, item); });
1849
+ return test(optionalFunctionValue.apply(void 0, __spreadArray([fieldName], item, false)), optionalFunctionValue.apply(void 0, __spreadArray([message], item, false)), function () { return testFn.apply(void 0, item); });
1793
1850
  });
1794
1851
  }
1795
1852
  return eachReturn;
@@ -1812,32 +1869,20 @@ function bindTestMemo(test) {
1812
1869
  // Implicit dependency for more specificity
1813
1870
  var dependencies = [suiteId, fieldName, cursorAt].concat(deps);
1814
1871
  var cached = cache.get(dependencies);
1815
- // Cache miss. Start fresh
1816
1872
  if (isNull(cached)) {
1873
+ // cache miss
1817
1874
  return cache(dependencies, function () { return test(fieldName, msg, testFn); });
1818
1875
  }
1819
- var testObject = cached[1];
1820
- var prevRunTest = useTestAtCursor(testObject);
1821
- if (isExcluded(testObject)) {
1822
- useSetNextCursorAt();
1823
- return prevRunTest;
1876
+ if (cached[1].isCanceled()) {
1877
+ // cache hit, but test is canceled
1878
+ cache.invalidate(dependencies);
1879
+ return cache(dependencies, function () { return test(fieldName, msg, testFn); });
1824
1880
  }
1825
- cancelOverriddenPendingTest(prevRunTest, testObject);
1826
- useSetTestAtCursor(testObject);
1827
- useSetNextCursorAt();
1828
- handleAsyncTest(testObject);
1829
- return testObject;
1881
+ return registerPrevRunTest(cached[1]);
1830
1882
  }
1831
1883
  return memo;
1832
1884
  }
1833
- function handleAsyncTest(testObject) {
1834
- if (testObject && isPromise(testObject.asyncTest)) {
1835
- testObject.setPending();
1836
- runAsyncTest(testObject);
1837
- }
1838
- }
1839
1885
 
1840
- // eslint-disable-next-line max-statements
1841
1886
  function testBase(fieldName) {
1842
1887
  var args = [];
1843
1888
  for (var _i = 1; _i < arguments.length; _i++) {
@@ -1849,26 +1894,14 @@ function testBase(fieldName) {
1849
1894
  message: message,
1850
1895
  groupName: context === null || context === void 0 ? void 0 : context.groupName
1851
1896
  });
1852
- var prevRunTest = useTestAtCursor(testObject);
1853
- if (isExcluded(testObject)) {
1854
- testObject.skip();
1855
- useSetNextCursorAt();
1856
- return prevRunTest;
1857
- }
1858
- cancelOverriddenPendingTest(prevRunTest, testObject);
1859
- useSetTestAtCursor(testObject);
1860
- useSetNextCursorAt(); // maybe somehow do this only in one place?
1861
- if (!isFunction(testFn))
1862
- return testObject;
1863
- registerTest(testObject);
1864
- return testObject;
1897
+ return registerPrevRunTest(testObject);
1865
1898
  }
1866
1899
  var test = assign(testBase, {
1867
1900
  each: bindTestEach(testBase),
1868
1901
  memo: bindTestMemo(testBase)
1869
1902
  });
1870
1903
 
1871
- var VERSION = "3.3.0-dev-549cb1";
1904
+ var VERSION = "4.0.0-dev-deabb8";
1872
1905
 
1873
1906
  exports.VERSION = VERSION;
1874
1907
  exports.create = create;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var n=function(){return(n=Object.assign||function(n){for(var t,r=1,e=arguments.length;r<e;r++)for(var u in t=arguments[r])Object.prototype.hasOwnProperty.call(t,u)&&(n[u]=t[u]);return n}).apply(this,arguments)};function t(n,t,r){if(r||2===arguments.length)for(var e,u=0,i=t.length;u<i;u++)!e&&u in t||(e||(e=Array.prototype.slice.call(t,0,u)),e[u]=t[u]);return n.concat(e||t)}var r=Object.assign;function e(n){return"function"==typeof n}function u(n,t){function r(n){e=!0,u=n}for(var e=!1,u=null,i=0;i<n.length;i++)if(t(n[i],r,i),e)return u}function i(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return e(n)?n.apply(void 0,t):n}function o(n,t){var r;return null!==(r=i(n))&&void 0!==r?r:t}function s(n,t){return n={pass:n},t&&(n.message=t),n}function a(){return s(!1)}function f(){return s(!0)}function c(n){return o(n,a())}function l(n){return o(n,f())}function p(n,t){try{return n.run(t)}catch(n){return a()}}function v(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return l(u(t,(function(t,r){(t=p(t,n)).pass||r(t)})))}function g(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return c(u(t,(function(t,r){(t=p(t,n)).pass&&r(t)})))}function d(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return l(u(t,(function(t,r){p(t,n).pass&&r(a())})))}function h(n){return function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];return!n.apply(void 0,t)}}function y(n,t){return n.length===Number(t)}var m=h(y);function N(n,t){return n.length>Number(t)}function b(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];var e=[];return t.some((function(t){if(N(e,1))return!1;(t=p(t,n)).pass&&e.push(t)})),s(y(e,1))}function E(n){return null===n}var x=h(E);function C(n){return void 0===n}var w=h(C);function O(n,t){return C(n)||E(n)?f():p(t,n)}function S(n){return String(n)===n}function k(n,t){return S(n)&&S(t)&&n.endsWith(t)}var P=h(k);function T(n,t){return n===t}var F=h(T);function A(n){var t=Number(n);return!(isNaN(parseFloat(String(n)))||isNaN(Number(n))||!isFinite(t))}var W=h(A);function j(n,t){return A(n)&&A(t)&&Number(n)>Number(t)}function I(n,t){return A(n)&&A(t)&&Number(n)>=Number(t)}function R(n,t){return!!(Array.isArray(t)||S(t)&&S(n))&&-1!==t.indexOf(n)}var q=h(R);function B(n){return!!Array.isArray(n)}var G=h(B);function K(n,t){return A(n)&&A(t)&&Number(n)<=Number(t)}function X(n,t,r){return I(n,t)&&K(n,r)}var D=h(X);function U(n){return!!n===n}var z=h(U);function J(n,t){return Object.prototype.hasOwnProperty.call(n,t)}function L(n){return"number"==typeof n}var M=h(L);function V(n){if(n){if(L(n))return 0===n;if(J(n,"length"))return y(n,0);if("object"==typeof n)return y(Object.keys(n),0)}return!0}var _=h(V),Y=function(n){return!!A(n)&&0==n%2};function H(n){return Number.isNaN(n)}var Q=h(H);function Z(n){return!!A(n)&&0>Number(n)}var $=h(Z),nn=function(n){return!!A(n)&&0!=n%2},tn=h(S);function rn(n){return!!n}var en=h(rn);function un(n,t){return A(n)&&A(t)&&Number(n)<Number(t)}function on(n,t){return n.length>=Number(t)}function sn(n,t){return t instanceof RegExp?t.test(n):!!S(t)&&new RegExp(t).test(n)}var an=h(sn);function fn(n,t){return A(n)&&A(t)&&Number(n)===Number(t)}var cn=h(fn);function ln(n,t){try{return t(n)}catch(n){return!1}}function pn(n,t){return n.length<Number(t)}function vn(n,t){return n.length<=Number(t)}function gn(n,t){return S(n)&&S(t)&&n.startsWith(t)}var dn=h(gn);function hn(n,t){throw Error(o(t,n))}function yn(n){function t(t,i){var o,s,a=e();return t=r({},a||{},null!==(o=null==n?void 0:n(t,a))&&void 0!==o?o:t),o=u.ctx=Object.freeze(t),u.ancestry.unshift(o),i=i(o),u.ancestry.shift(),u.ctx=null!==(s=u.ancestry[0])&&void 0!==s?s:null,i}function e(){return u.ctx}var u={ancestry:[]};return{bind:function(n,r){return function(){for(var e=[],u=0;u<arguments.length;u++)e[u]=arguments[u];return t(n,(function(){return r.apply(void 0,e)}))}},run:t,use:e,useX:function(n){var t;return null!==(t=u.ctx)&&void 0!==t?t:hn(o(n,"Context was used after it was closed"))}}}var mn=yn((function(n,t){var e={value:n.value,meta:n.meta||{}};return t?n.set?r(e,{parent:function(){return function(n){return n?{value:n.value,meta:n.meta,parent:n.parent}:n}(t)}}):t:r(e,{parent:Nn})}));function Nn(){return null}function bn(n,t){return l(u(n,(function(n,r,e){(e=mn.run({value:n,set:!0,meta:{index:e}},(function(){return p(t,n)}))).pass||r(e)})))}function En(n,t){var r,e=function(r){var e=n[r],u=t[r];if(!(r=mn.run({value:e,set:!0,meta:{key:r}},(function(){return p(u,e)}))).pass)return{value:r}};for(r in t){var u=e(r);if("object"==typeof u)return u.value}return f()}function xn(n,t){var r=En(n,t);if(!r.pass)return r;for(var e in n)if(!J(t,e))return a();return f()}var Cn=r({condition:ln,doesNotEndWith:P,doesNotStartWith:dn,endsWith:k,equals:T,greaterThan:j,greaterThanOrEquals:I,gt:j,gte:I,inside:R,isArray:B,isBetween:X,isBoolean:U,isEmpty:V,isEven:Y,isFalsy:en,isNaN:H,isNegative:Z,isNotArray:G,isNotBetween:D,isNotBoolean:z,isNotEmpty:_,isNotNaN:Q,isNotNull:x,isNotNumber:M,isNotNumeric:W,isNotString:tn,isNotUndefined:w,isNull:E,isNumber:L,isNumeric:A,isOdd:nn,isPositive:$,isString:S,isTruthy:rn,isUndefined:C,lengthEquals:y,lengthNotEquals:m,lessThan:un,lessThanOrEquals:K,longerThan:N,longerThanOrEquals:on,lt:un,lte:K,matches:sn,notEquals:F,notInside:q,notMatches:an,numberEquals:fn,numberNotEquals:cn,shorterThan:pn,shorterThanOrEquals:vn,startsWith:gn},{allOf:v,anyOf:g,noneOf:d,oneOf:b,optional:O},{shape:xn,loose:En,isArrayOf:bn});function wn(n){return Cn[n]}function On(n){for(var t in Cn){var r=wn(t);e(r)&&n(t,r)}}function Sn(){return"function"==typeof Proxy}function kn(n,r,e){for(var u=[],o=3;o<arguments.length;o++)u[o-3]=arguments[o];return Pn(n),U(n)?s(n):s(n.pass,i.apply(void 0,t([n.message,r,e],u)))}function Pn(n){U(n)||n&&U(n.pass)||hn("Incorrect return value for rule: "+JSON.stringify(n))}function Tn(n){function r(r,e,u){return function(){for(var i=[],o=0;o<arguments.length;o++)i[o]=arguments[o];if(!(o=kn.apply(void 0,t([mn.run({value:n},(function(){return e.apply(void 0,t([n],i))})),u,n],i))).pass){if(!V(o.message))throw o.message;hn("enforce/"+u+" failed with "+JSON.stringify(n))}return r}}var e={};if(!Sn())return On((function(n,t){e[n]=r(e,t,n)})),e;var u=new Proxy(e,{get:function(n,t){if(n=wn(t))return r(u,n,t)}});return u}function Fn(n){var r,e=[];return function n(o){return function(){for(var a=[],f=0;f<arguments.length;f++)a[f]=arguments[f];var c=wn(o);e.push((function(n){return kn.apply(void 0,t([c.apply(void 0,t([n],a)),o,n],a))}));var p={run:function(n){return l(u(e,(function(t,e){var u,o=mn.run({value:n},(function(){return t(n)}));o.pass||e(s(!!o.pass,null!==(u=i(r,n,o.message))&&void 0!==u?u:o.message))})))},test:function(n){return p.run(n).pass},message:function(n){return n&&(r=n),p}};return Sn()?p=new Proxy(p,{get:function(t,r){return wn(r)?n(r):t[r]}}):(On((function(t){p[t]=n(t)})),p)}}(n)}function An(n){var t,r={};for(t in n)r[t]=jn.optional(n[t]);return r}var Wn,jn=(Wn=n({context:function(){return mn.useX()},extend:function(n){r(Cn,n)}},{partial:An}),Sn()?new Proxy(r(Tn,Wn),{get:function(n,t){return t in n?n[t]:wn(t)?Fn(t):void 0}}):(On((function(n){Wn[n]=Fn(n)})),Wn));function In(n){return[].concat(n)}var Rn=function(n){return function(){return""+n++}}(0);var qn=yn((function(n,t){return t?null:r({},{exclusion:{tests:{},groups:{}}},n)}));function Bn(n,t){return!!t&&!Gn(n,t)}function Gn(n,t){return!(!t||n.fieldName!==t)}function Kn(n){void 0===n&&(n=10);var t=[],r=function(e,u){var i=r.get(e);return i?i[1]:(u=u(),t.unshift([e.concat(),u]),t.length>n&&(t.length=n),u)};return r.get=function(n){return t[t.findIndex((function(t){var r=t[0];return y(n,r.length)&&n.every((function(n,t){return n===r[t]}))}))]||null},r}function Xn(){return zn().suiteId()}function Dn(){return zn().testCallbacks()}function Un(){return zn().optionalFields()}function zn(){return qn.useX().stateRef}function Jn(){return zn().testObjects()}function Ln(){return zn().prevTestObjects()}function Mn(n){var t=Yn()[0];return Vn(n=o(Ln()[0][t],n)),n}function Vn(n){var t=Yn()[0],r=Jn();n!==r[0][t]&&(0,r[1])((function(r){return(r=r.slice(0))[t]=n,r}))}function _n(){(0,Yn()[1])((function(n){return n+1}))}function Yn(){return zn().testObjectsCursor()}function Hn(n){return!!Un()[0][n]}function Qn(){return Jn()[0].filter((function(n){return n.isPending()}))}function Zn(n){var t=Qn();return!V(t)&&(n?t.some((function(t){return Gn(t,n)})):_(t))}function $n(n,t){function r(n,t){i[n]++,u&&(i[t]=(i[t]||[]).concat(u))}var e=t.fieldName,u=t.message;n[e]=n[e]||{errorCount:0,warnCount:0,testCount:0};var i=n[e];return t.isSkipped()||(n[e].testCount++,t.isFailing()?r("errorCount","errors"):t.isWarning()&&r("warnCount","warnings")),i}function nt(n,t){return function(n,t){return!!n!=!!t}("warnings"===n,t.warns)}function tt(t,r,e){var u;void 0===e&&(e={});var i=(e=e||{}).group,o=e.fieldName;return r.reduce((function(n,r){return function(n,t,r,e){return!!(function(n,t){return!(!t||n.groupName===t)}(n,r)||Bn(n,e)||nt(t,n))}(r,t,i,o)||!r.hasFailures()||(n[r.fieldName]=(n[r.fieldName]||[]).concat(r.message||[])),n}),n({},o&&((u={})[o]=[],u)))}function rt(n){return ut("errors",n)}function et(n){return ut("warnings",n)}function ut(n,t){return n=tt(n,Jn()[0],{fieldName:t}),t?n[t]:n}function it(n,t){return n=st("errors",n,t),t?n[t]:n}function ot(n,t){return n=st("warnings",n,t),t?n[t]:n}function st(n,t,r){return t||hn("get"+n[0].toUpperCase()+n.slice(1)+"ByGroup requires a group name. Received `"+t+"` instead."),tt(n,Jn()[0],{group:t,fieldName:r})}function at(n,t,r){return!(!n.hasFailures()||Bn(n,r)||nt(t,n))}function ft(n){return lt("errors",n)}function ct(n){return lt("warnings",n)}function lt(n,t){return Jn()[0].some((function(r){return at(r,n,t)}))}function pt(n,t){return gt("errors",n,t)}function vt(n,t){return gt("warnings",n,t)}function gt(n,t,r){return Jn()[0].some((function(e){return t===e.groupName&&at(e,n,r)}))}function dt(n,t){return!n.hasErrors(t)&&(!(V(Jn()[0])||function(n,t){return!!t&&V(n.tests[t])}(n,t)||_(Qn().filter((function(n){return!Bn(n,t)&&!Hn(n.fieldName)}))))&&function(n){return Jn()[0].every((function(t){return!(!Bn(t,n)&&!Hn(t.fieldName))||t.isTested()}))}(t))}var ht=Kn(20);function yt(){var n=Jn()[0],t={stateRef:zn()};return ht([n],qn.bind(t,(function(){return r(function(){var n={errorCount:0,groups:{},testCount:0,tests:{},warnCount:0};return Jn()[0].forEach((function(t){var r=t.fieldName,e=t.groupName;n.tests[r]=$n(n.tests,t),e&&(n.groups[e]=n.groups[e]||{},n.groups[e][r]=$n(n.groups[e],t))})),function(n){for(var t in n.tests)n.errorCount+=n.tests[t].errorCount,n.warnCount+=n.tests[t].warnCount,n.testCount+=n.tests[t].testCount;return n}(n)}(),{getErrors:qn.bind(t,rt),getErrorsByGroup:qn.bind(t,it),getWarnings:qn.bind(t,et),getWarningsByGroup:qn.bind(t,ot),hasErrors:qn.bind(t,ft),hasErrorsByGroup:qn.bind(t,pt),hasWarnings:qn.bind(t,ct),hasWarningsByGroup:qn.bind(t,vt),isValid:qn.bind(t,(function(n){return dt(yt(),n)}))})})))}var mt=Kn(20);function Nt(){var n=Jn()[0],t={stateRef:zn()};return mt([n],qn.bind(t,(function(){return r({},yt(),{done:qn.bind(t,xt)})})))}function bt(n,t,r){return!(e(n)&&(!t||r.tests[t]&&0!==r.tests[t].testCount))}function Et(n){return!(Zn()&&(!n||Zn(n)))}var xt=function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];var r=(n=n.reverse())[0];if(n=n[1],t=Nt(),bt(r,n,t))return t;var e=function(){return r(yt())};return Et(n)?(e(),t):(Ct(e,n),t)};function Ct(n,t){var r=qn.bind({},n);(0,Dn()[1])((function(n){return t?n.fieldCallbacks[t]=(n.fieldCallbacks[t]||[]).concat(r):n.doneCallbacks.push(r),n}))}function wt(n){return kt("only","tests",n)}function Ot(n){return kt("skip","tests",n)}function St(n){var t=n.fieldName;n=n.groupName;var r=qn.useX();if(r.skipped)return!0;var e=(r=r.exclusion).tests,u=e[t];if(!1===u)return!0;if(u=!0===u,n){if(function(n){var t=qn.useX().exclusion.groups;if(J(t,n))return!1===t[n];for(var r in t)if(!0===t[r])return!0;return!1}(n))return!0;if(!0===r.groups[n])return!u&&(!!Pt(e)||!1===e[t])}return!u&&Pt(e)}function kt(n,t,r){var e=qn.useX("hook called outside of a running suite.");r&&In(r).forEach((function(r){S(r)&&(e.exclusion[t][r]="only"===n)}))}function Pt(n){for(var t in n)if(!0===n[t])return!0;return!1}wt.group=function(n){return kt("only","groups",n)},Ot.group=function(n){return kt("skip","groups",n)};function Tt(n){hn('group initialization error. Expected "'+n+'" to be a string.',"group name must be a string")}function Ft(n,t){return C(n)&&S(t)}var At=function(){function n(n,t,r){var e=void 0===r?{}:r;r=e.message,e=e.groupName,this.id=Rn(),this.warns=!1,this.status=Wt,this.fieldName=n,this.testFn=t,e&&(this.groupName=e),r&&(this.message=r)}return n.prototype.run=function(){try{var n=this.testFn()}catch(t){Ft(this.message,t)&&(this.message=t),n=!1}return!1===n&&this.fail(),n},n.prototype.setStatus=function(n){this.isCanceled()||(this.status=n)},n.prototype.setPending=function(){this.setStatus(Bt)},n.prototype.fail=function(){this.setStatus(this.warns?Rt:It)},n.prototype.done=function(){this.isWarning()||this.isCanceled()||this.isFailing()||this.setStatus(qt)},n.prototype.warn=function(){this.warns=!0},n.prototype.skip=function(){this.setStatus(jt)},n.prototype.cancel=function(){this.setStatus(Gt),function(n){(0,Jn()[1])((function(t){return In(function(n,t){return-1!==(t=n.indexOf(t))&&n.splice(t,1),n}(t,n))}))}(this)},n.prototype.valueOf=function(){return!this.isFailing()},n.prototype.hasFailures=function(){return this.isFailing()||this.isWarning()},n.prototype.isPending=function(){return this.status===Bt},n.prototype.isTested=function(){return this.hasFailures()||this.isPassing()},n.prototype.isFailing=function(){return this.status===It},n.prototype.isCanceled=function(){return this.status===Gt},n.prototype.isSkipped=function(){return this.status===jt},n.prototype.isPassing=function(){return this.status===qt},n.prototype.isWarning=function(){return this.status===Rt},n}(),Wt="UNTESTED",jt="SKIPPED",It="FAILED",Rt="WARNING",qt="PASSING",Bt="PENDING",Gt="CANCELED";function Kt(n,t){(function(n,t){return n.fieldName===t.fieldName&&n.groupName===t.groupName})(n,t)&&n.isPending()&&t!==n&&n.cancel()}function Xt(n){return n&&e(n.then)}function Dt(n){return n.forEach((function(n){return n()}))}function Ut(n){var t=n.asyncTest,r=n.message;if(Xt(t)){var e=zn(),u=qn.bind({stateRef:e},(function(){n.done(),n.isCanceled()||(function(n){var t=Dn()[0].fieldCallbacks;n&&!Zn(n)&&Array.isArray(t[n])&&Dt(t[n])}(n.fieldName),function(){var n=Dn()[0].doneCallbacks;Zn()||Dt(n)}())}));e=qn.bind({stateRef:e},(function(t){n.isCanceled()||(n.message=S(t)?t:r,n.fail(),(0,Jn()[1])((function(n){return n.slice(0)})),u())}));try{t.then(u,e)}catch(n){e()}}}function zt(n){var t=function(n){return qn.run({currentTest:n},(function(){try{var t=n.testFn()}catch(r){Ft(n.message,r)&&(n.message=r),t=!1}return!1===t&&n.fail(),t}))}(n);try{Xt(t)?(n.asyncTest=t,n.setPending(),Ut(n)):n.done()}catch(r){hn("Your test function "+n.fieldName+" returned "+JSON.stringify(t)+'. Only "false" or a Promise are supported. Return values may cause unexpected behavior.')}}function Jt(n){n&&Xt(n.asyncTest)&&(n.setPending(),Ut(n))}function Lt(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];r=t.reverse(),t=r[0],r=r[1];var u=qn.useX();return u=Mn(r=new At(n,t,{message:r,groupName:null==u?void 0:u.groupName})),St(r)?(r.skip(),_n(),u):(Kt(u,r),Vn(r),_n(),e(t)?(zt(r),r):r)}var Mt=r(Lt,{each:function(n){return function(r){return Array.isArray(r)||hn("test.each: Expected table to be an array."),function(e){for(var u=[],o=1;o<arguments.length;o++)u[o-1]=arguments[o];var s=(u=u.reverse())[0],a=u[1];return r.map((function(r){return r=In(r),n(i.apply(void 0,t([e],r)),i.apply(void 0,t([a],r)),(function(){return s.apply(void 0,r)}))}))}}}(Lt),memo:function(n){var t=Kn(100);return function(r){for(var e=[],u=1;u<arguments.length;u++)e[u-1]=arguments[u];u=Xn()[0];var i=Yn()[0],o=(e=e.reverse())[1],s=e[2];return e=[u,r,i].concat(e[0]),E(u=t.get(e))?t(e,(function(){return n(r,s,o)})):(u=Mn(e=u[1]),St(e)?(_n(),u):(Kt(u,e),Vn(e),_n(),Jt(e),e))}}(Lt)});exports.VERSION="3.3.0-dev-549cb1",exports.create=function(n){e(n)||hn("Suite initialization error. Expected `tests` to be a function.");var t=[],u=function(n){function t(n,t){return u.references.push(),r(n,i(t)),function(){return[u.references[n],function(t){return r(n,i(t,u.references[n]))}]}}function r(t,r){var i=u.references[t];u.references[t]=r,e(t=o[t][1])&&t(r,i),e(n)&&n()}var u={references:[]},o=[];return{registerStateKey:function(n,r){var e=o.length;return o.push([n,r]),t(e,n)},reset:function(){u.references=[],o.forEach((function(n,r){return t(r,n[0])}))}}}((function(){t.forEach((function(n){return n({suiteState:o,type:"suiteStateUpdate"})}))})),o=function(n,t){var r=t.suiteId;return{optionalFields:n.registerStateKey((function(){return{}})),prevTestObjects:n.registerStateKey((function(){return[]})),suiteId:n.registerStateKey((function(){return r})),testCallbacks:n.registerStateKey((function(){return{fieldCallbacks:{},doneCallbacks:[]}})),testObjects:n.registerStateKey((function(){return[]})),testObjectsCursor:n.registerStateKey((function(){return 0}))}}(u,{suiteId:Rn()});return r(qn.bind({stateRef:o},(function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];var e=Jn()[0];return r=Ln()[1],u.reset(),r((function(){return e})),n.apply(void 0,t),Nt()})),{get:qn.bind({stateRef:o},yt),remove:qn.bind({stateRef:o},(function(n){In(Jn()[0]).forEach((function(t){Gn(t,n)&&t.cancel()}))})),reset:u.reset,subscribe:function(n){e(n)&&(t.push(n),n({type:"suiteSubscribeInit",suiteState:o}))}})},exports.enforce=jn,exports.group=function(n,t){S(n)||Tt(n),e(t)||Tt(t),qn.bind({groupName:n},t)()},exports.only=wt,exports.optional=function(n){(0,Un()[1])((function(t){return In(n).forEach((function(n){t[n]=!0})),t}))},exports.skip=Ot,exports.skipWhen=function(n,t){qn.run({skipped:i(n)},(function(){return t()}))},exports.test=Mt,exports.warn=function(){var n=qn.useX("warn hook called outside of a running suite.");n.currentTest||hn("warn called outside of a test."),n.currentTest.warn()};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var n=function(){return n=Object.assign||function(n){for(var t,r=1,e=arguments.length;r<e;r++)for(var u in t=arguments[r])Object.prototype.hasOwnProperty.call(t,u)&&(n[u]=t[u]);return n},n.apply(this,arguments)};function t(n,t,r){if(r||2===arguments.length)for(var e,u=0,i=t.length;u<i;u++)!e&&u in t||(e||(e=Array.prototype.slice.call(t,0,u)),e[u]=t[u]);return n.concat(e||t)}var r=Object.assign;function e(n){return"function"==typeof n}function u(n,t){function r(n){e=!0,u=n}for(var e=!1,u=null,i=0;i<n.length;i++)if(t(n[i],r,i),e)return u}function i(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return e(n)?n.apply(void 0,t):n}function o(n,t){var r;return null!==(r=i(n))&&void 0!==r?r:t}function s(n,t){return n={pass:n},t&&(n.message=t),n}function a(){return s(!1)}function f(){return s(!0)}function c(n){return o(n,a())}function l(n){return o(n,f())}function p(n,t){try{return n.run(t)}catch(n){return a()}}function v(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return l(u(t,(function(t,r){(t=p(t,n)).pass||r(t)})))}function g(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return c(u(t,(function(t,r){(t=p(t,n)).pass&&r(t)})))}function d(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return l(u(t,(function(t,r){p(t,n).pass&&r(a())})))}function h(n){return function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];return!n.apply(void 0,t)}}function y(n,t){return n.length===Number(t)}var m=h(y);function N(n,t){return n.length>Number(t)}function b(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];var e=[];return t.some((function(t){if(N(e,1))return!1;(t=p(t,n)).pass&&e.push(t)})),s(y(e,1))}function E(n){return null===n}var C=h(E);function O(n){return void 0===n}var x=h(O);function w(n,t){return O(n)||E(n)?f():p(t,n)}function S(n){return String(n)===n}function T(n,t){return S(n)&&S(t)&&n.endsWith(t)}var P=h(T);function k(n,t){return n===t}var F=h(k);function W(n){var t=Number(n);return!(isNaN(parseFloat(String(n)))||isNaN(Number(n))||!isFinite(t))}var A=h(W);function j(n,t){return W(n)&&W(t)&&Number(n)>Number(t)}function I(n,t){return W(n)&&W(t)&&Number(n)>=Number(t)}function R(n,t){return!!(Array.isArray(t)||S(t)&&S(n))&&-1!==t.indexOf(n)}var q=h(R);function B(n){return!!Array.isArray(n)}var D=h(B);function G(n,t){return W(n)&&W(t)&&Number(n)<=Number(t)}function X(n,t,r){return I(n,t)&&G(n,r)}var K=h(X);function _(n){return!!n===n}var L=h(_);function M(n,t){return Object.prototype.hasOwnProperty.call(n,t)}function U(n){return"number"==typeof n}var J=h(U);function z(n){if(n){if(U(n))return 0===n;if(M(n,"length"))return y(n,0);if("object"==typeof n)return y(Object.keys(n),0)}return!0}var V=h(z),Y=function(n){return!!W(n)&&0==n%2};function H(n){return Number.isNaN(n)}var Q=h(H);function Z(n){return!!W(n)&&0>Number(n)}var $=h(Z),nn=function(n){return!!W(n)&&0!=n%2},tn=h(S);function rn(n){return!!n}var en=h(rn);function un(n,t){return W(n)&&W(t)&&Number(n)<Number(t)}function on(n,t){return n.length>=Number(t)}function sn(n,t){return t instanceof RegExp?t.test(n):!!S(t)&&new RegExp(t).test(n)}var an=h(sn);function fn(n,t){return W(n)&&W(t)&&Number(n)===Number(t)}var cn=h(fn);function ln(n,t){try{return t(n)}catch(n){return!1}}function pn(n,t){return n.length<Number(t)}function vn(n,t){return n.length<=Number(t)}function gn(n,t){return S(n)&&S(t)&&n.startsWith(t)}var dn=h(gn);function hn(n,t){throw Error(o(t,n))}function yn(n){function t(t,i){var o,s,a=e();return t=r({},a||{},null!==(o=null==n?void 0:n(t,a))&&void 0!==o?o:t),o=u.ctx=Object.freeze(t),u.ancestry.unshift(o),i=i(o),u.ancestry.shift(),u.ctx=null!==(s=u.ancestry[0])&&void 0!==s?s:null,i}function e(){return u.ctx}var u={ancestry:[]};return{bind:function(n,r){return function(){for(var e=[],u=0;u<arguments.length;u++)e[u]=arguments[u];return t(n,(function(){return r.apply(void 0,e)}))}},run:t,use:e,useX:function(n){var t;return null!==(t=u.ctx)&&void 0!==t?t:hn(o(n,"Context was used after it was closed"))}}}var mn=yn((function(n,t){var e={value:n.value,meta:n.meta||{}};return t?n.set?r(e,{parent:function(){return function(n){return n?{value:n.value,meta:n.meta,parent:n.parent}:n}(t)}}):t:r(e,{parent:Nn})}));function Nn(){return null}function bn(n,t){return l(u(n,(function(n,r,e){(e=mn.run({value:n,set:!0,meta:{index:e}},(function(){return p(t,n)}))).pass||r(e)})))}function En(n,t){var r,e=function(r){var e=n[r],u=t[r];if(!(r=mn.run({value:e,set:!0,meta:{key:r}},(function(){return p(u,e)}))).pass)return{value:r}};for(r in t){var u=e(r);if("object"==typeof u)return u.value}return f()}function Cn(n,t){var r=En(n,t);if(!r.pass)return r;for(var e in n)if(!M(t,e))return a();return f()}var On=r({condition:ln,doesNotEndWith:P,doesNotStartWith:dn,endsWith:T,equals:k,greaterThan:j,greaterThanOrEquals:I,gt:j,gte:I,inside:R,isArray:B,isBetween:X,isBoolean:_,isEmpty:z,isEven:Y,isFalsy:en,isNaN:H,isNegative:Z,isNotArray:D,isNotBetween:K,isNotBoolean:L,isNotEmpty:V,isNotNaN:Q,isNotNull:C,isNotNumber:J,isNotNumeric:A,isNotString:tn,isNotUndefined:x,isNull:E,isNumber:U,isNumeric:W,isOdd:nn,isPositive:$,isString:S,isTruthy:rn,isUndefined:O,lengthEquals:y,lengthNotEquals:m,lessThan:un,lessThanOrEquals:G,longerThan:N,longerThanOrEquals:on,lt:un,lte:G,matches:sn,notEquals:F,notInside:q,notMatches:an,numberEquals:fn,numberNotEquals:cn,shorterThan:pn,shorterThanOrEquals:vn,startsWith:gn},{allOf:v,anyOf:g,noneOf:d,oneOf:b,optional:w},{shape:Cn,loose:En,isArrayOf:bn});function xn(n){return On[n]}function wn(n){for(var t in On){var r=xn(t);e(r)&&n(t,r)}}function Sn(){return"function"==typeof Proxy}function Tn(n,r,e){for(var u=[],o=3;o<arguments.length;o++)u[o-3]=arguments[o];return Pn(n),_(n)?s(n):s(n.pass,i.apply(void 0,t([n.message,r,e],u,!1)))}function Pn(n){_(n)||n&&_(n.pass)||hn("Incorrect return value for rule: "+JSON.stringify(n))}function kn(n){function r(r,e,u){return function(){for(var i=[],o=0;o<arguments.length;o++)i[o]=arguments[o];if(!(o=Tn.apply(void 0,t([mn.run({value:n},(function(){return e.apply(void 0,t([n],i,!1))})),u,n],i,!1))).pass){if(!z(o.message))throw o.message;hn("enforce/"+u+" failed with "+JSON.stringify(n))}return r}}var e={};if(!Sn())return wn((function(n,t){e[n]=r(e,t,n)})),e;var u=new Proxy(e,{get:function(n,t){if(n=xn(t))return r(u,n,t)}});return u}function Fn(n){var r,e=[];return function n(o){return function(){for(var a=[],f=0;f<arguments.length;f++)a[f]=arguments[f];var c=xn(o);e.push((function(n){return Tn.apply(void 0,t([c.apply(void 0,t([n],a,!1)),o,n],a,!1))}));var p={run:function(n){return l(u(e,(function(t,e){var u,o=mn.run({value:n},(function(){return t(n)}));o.pass||e(s(!!o.pass,null!==(u=i(r,n,o.message))&&void 0!==u?u:o.message))})))},test:function(n){return p.run(n).pass},message:function(n){return n&&(r=n),p}};return Sn()?p=new Proxy(p,{get:function(t,r){return xn(r)?n(r):t[r]}}):(wn((function(t){p[t]=n(t)})),p)}}(n)}function Wn(n){var t,r={};for(t in n)r[t]=jn.optional(n[t]);return r}var An,jn=(An=n({context:function(){return mn.useX()},extend:function(n){r(On,n)}},{partial:Wn}),Sn()?new Proxy(r(kn,An),{get:function(n,t){return t in n?n[t]:xn(t)?Fn(t):void 0}}):(wn((function(n){An[n]=Fn(n)})),An));function In(n){return[].concat(n)}var Rn=function(n){return function(){return""+n++}}(0);var qn=yn((function(n,t){return t?null:r({},{exclusion:{tests:{},groups:{}}},n)}));function Bn(n,t){return!!t&&!Dn(n,t)}function Dn(n,t){return!(!t||n.fieldName!==t)}function Gn(n){void 0===n&&(n=10);var t=[],r=function(e,u){var i=r.get(e);return i?i[1]:(u=u(),t.unshift([e.concat(),u]),t.length>n&&(t.length=n),u)};return r.invalidate=function(n){var r=t.findIndex((function(t){var r=t[0];return y(n,r.length)&&n.every((function(n,t){return n===r[t]}))}));-1<r&&t.splice(r,1)},r.get=function(n){return t[t.findIndex((function(t){var r=t[0];return y(n,r.length)&&n.every((function(n,t){return n===r[t]}))}))]||null},r}function Xn(){return Ln().suiteId()}function Kn(){return Ln().testCallbacks()}function _n(){return Ln().optionalFields()}function Ln(){return qn.useX().stateRef}function Mn(){return Ln().testObjects()}function Un(){return Ln().prevTestObjects()}function Jn(n){var t=Vn()[0],r=Mn();n!==r[0][t]&&(0,r[1])((function(r){return(r=r.slice(0))[t]=n,r}))}function zn(){(0,Vn()[1])((function(n){return n+1}))}function Vn(){return Ln().testObjectsCursor()}function Yn(n){return!!_n()[0][n]}function Hn(){return Mn()[0].filter((function(n){return n.isPending()}))}function Qn(n){var t=Hn();return!z(t)&&(n?t.some((function(t){return Dn(t,n)})):V(t))}function Zn(n,t){function r(n,t){i[n]++,u&&(i[t]=(i[t]||[]).concat(u))}var e=t.fieldName,u=t.message;n[e]=n[e]||{errorCount:0,warnCount:0,testCount:0};var i=n[e];return t.isSkipped()||(n[e].testCount++,t.isFailing()?r("errorCount","errors"):t.isWarning()&&r("warnCount","warnings")),i}function $n(n,t){return function(n,t){return!!n!=!!t}("warnings"===n,t.warns)}function nt(t,r,e){var u;void 0===e&&(e={});var i=(e=e||{}).group,o=e.fieldName;return r.reduce((function(n,r){return function(n,t,r,e){return!!(function(n,t){return!(!t||n.groupName===t)}(n,r)||Bn(n,e)||$n(t,n))}(r,t,i,o)||!r.hasFailures()||(n[r.fieldName]=(n[r.fieldName]||[]).concat(r.message||[])),n}),n({},o&&((u={})[o]=[],u)))}function tt(n,t){return t?n[t]:n}function rt(n){return ut("errors",n)}function et(n){return ut("warnings",n)}function ut(n,t){return tt(n=nt(n,Mn()[0],{fieldName:t}),t)}function it(n,t){return tt(n=st("errors",n,t),t)}function ot(n,t){return tt(n=st("warnings",n,t),t)}function st(n,t,r){return t||hn("get"+n[0].toUpperCase()+n.slice(1)+"ByGroup requires a group name. Received `"+t+"` instead."),nt(n,Mn()[0],{group:t,fieldName:r})}function at(n,t,r){return!(!n.hasFailures()||Bn(n,r)||$n(t,n))}function ft(n){return lt("errors",n)}function ct(n){return lt("warnings",n)}function lt(n,t){return Mn()[0].some((function(r){return at(r,n,t)}))}function pt(n,t){return gt("errors",n,t)}function vt(n,t){return gt("warnings",n,t)}function gt(n,t,r){return Mn()[0].some((function(e){return t===e.groupName&&at(e,n,r)}))}function dt(n,t){return!n.hasErrors(t)&&(!(z(Mn()[0])||function(n,t){return!!t&&z(n.tests[t])}(n,t)||V(Hn().filter((function(n){return!Bn(n,t)&&!Yn(n.fieldName)}))))&&function(n){return Mn()[0].every((function(t){return!(!Bn(t,n)&&!Yn(t.fieldName))||t.isTested()}))}(t))}var ht=Gn(20);function yt(){var n=Mn()[0],t={stateRef:Ln()};return ht([n],qn.bind(t,(function(){return r(function(){var n={errorCount:0,groups:{},testCount:0,tests:{},warnCount:0};return Mn()[0].forEach((function(t){var r=t.fieldName,e=t.groupName;n.tests[r]=Zn(n.tests,t),e&&(n.groups[e]=n.groups[e]||{},n.groups[e][r]=Zn(n.groups[e],t))})),function(n){for(var t in n.tests)n.errorCount+=n.tests[t].errorCount,n.warnCount+=n.tests[t].warnCount,n.testCount+=n.tests[t].testCount;return n}(n)}(),{getErrors:qn.bind(t,rt),getErrorsByGroup:qn.bind(t,it),getWarnings:qn.bind(t,et),getWarningsByGroup:qn.bind(t,ot),hasErrors:qn.bind(t,ft),hasErrorsByGroup:qn.bind(t,pt),hasWarnings:qn.bind(t,ct),hasWarningsByGroup:qn.bind(t,vt),isValid:qn.bind(t,(function(n){return dt(yt(),n)}))})})))}var mt=Gn(20);function Nt(){var n=Mn()[0],t={stateRef:Ln()};return mt([n],qn.bind(t,(function(){return r({},yt(),{done:qn.bind(t,Ot)})})))}function bt(n,t,r){return!(e(n)&&(!t||r.tests[t]&&0!==r.tests[t].testCount))}function Et(n){return!(Qn()&&(!n||Qn(n)))}var Ct,Ot=function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];var r=(n=n.reverse())[0];if(n=n[1],t=Nt(),bt(r,n,t))return t;var e=function(){return r(yt())};return Et(n)?(e(),t):(xt(e,n),t)};function xt(n,t){var r=qn.bind({},n);(0,Kn()[1])((function(n){return t?n.fieldCallbacks[t]=(n.fieldCallbacks[t]||[]).concat(r):n.doneCallbacks.push(r),n}))}function wt(n){return n.forEach((function(n){return n()}))}function St(){var n=function(){var n={};return{emit:function(t,r){n[t]&&n[t].forEach((function(n){n(r)}))},on:function(t,r){return n[t]||(n[t]=[]),n[t].push(r),{off:function(){n[t]=n[t].filter((function(n){return n!==r}))}}}}}();return n.on(Ct.TEST_COMPLETED,(function(n){n.isCanceled()||(n.done(),function(n){var t=Kn()[0].fieldCallbacks;n&&!Qn(n)&&Array.isArray(t[n])&&wt(t[n])}(n.fieldName),function(){var n=Kn()[0].doneCallbacks;Qn()||wt(n)}())})),n}function Tt(){var n=qn.useX();return n.bus||hn(),n.bus}(Ct||(Ct={})).TEST_COMPLETED="test_completed";function Pt(n){return Wt("only","tests",n)}function kt(n){return Wt("skip","tests",n)}function Ft(n){var t=n.fieldName;n=n.groupName;var r=qn.useX();if(r.skipped)return!0;var e=(r=r.exclusion).tests,u=e[t];if(!1===u)return!0;if(u=!0===u,n){if(function(n){var t=qn.useX().exclusion.groups;if(M(t,n))return!1===t[n];for(var r in t)if(!0===t[r])return!0;return!1}(n))return!0;if(!0===r.groups[n])return!u&&(!!At(e)||!1===e[t])}return!u&&At(e)}function Wt(n,t,r){var e=qn.useX("hook called outside of a running suite.");r&&In(r).forEach((function(r){S(r)&&(e.exclusion[t][r]="only"===n)}))}function At(n){for(var t in n)if(!0===n[t])return!0;return!1}Pt.group=function(n){return Wt("only","groups",n)},kt.group=function(n){return Wt("skip","groups",n)};function jt(n){hn("Wrong arguments passed to group. Group "+n+".")}function It(n,t){return O(n)&&S(t)}var Rt=function(){function n(n,t,r){var e=void 0===r?{}:r;r=e.message,e=e.groupName,this.id=Rn(),this.warns=!1,this.status=qt,this.fieldName=n,this.testFn=t,e&&(this.groupName=e),r&&(this.message=r)}return n.prototype.run=function(){try{var n=this.testFn()}catch(t){It(this.message,t)&&(this.message=t),n=!1}return!1===n&&this.fail(),n},n.prototype.setStatus=function(n){this.isCanceled()||(this.status=n)},n.prototype.setPending=function(){this.setStatus(Kt)},n.prototype.fail=function(){this.setStatus(this.warns?Gt:Dt)},n.prototype.done=function(){this.isWarning()||this.isCanceled()||this.isFailing()||this.setStatus(Xt)},n.prototype.warn=function(){this.warns=!0},n.prototype.skip=function(){this.setStatus(Bt)},n.prototype.cancel=function(){this.setStatus(_t),function(n){(0,Mn()[1])((function(t){return In(function(n,t){return-1!==(t=n.indexOf(t))&&n.splice(t,1),n}(t,n))}))}(this)},n.prototype.valueOf=function(){return!this.isFailing()},n.prototype.hasFailures=function(){return this.isFailing()||this.isWarning()},n.prototype.isPending=function(){return this.status===Kt},n.prototype.isTested=function(){return this.hasFailures()||this.isPassing()},n.prototype.isUntested=function(){return this.status===qt},n.prototype.isFailing=function(){return this.status===Dt},n.prototype.isCanceled=function(){return this.status===_t},n.prototype.isSkipped=function(){return this.status===Bt},n.prototype.isPassing=function(){return this.status===Xt},n.prototype.isWarning=function(){return this.status===Gt},n}(),qt="UNTESTED",Bt="SKIPPED",Dt="FAILED",Gt="WARNING",Xt="PASSING",Kt="PENDING",_t="CANCELED";function Lt(n){return n&&e(n.then)}function Mt(n){var t=n.asyncTest,r=n.message;if(Lt(t)){var e=Tt().emit,u=Ln(),i=qn.bind({stateRef:u},(function(){e(Ct.TEST_COMPLETED,n)}));u=qn.bind({stateRef:u},(function(t){n.isCanceled()||(n.message=S(t)?t:r,n.fail(),(0,Mn()[1])((function(n){return n.slice(0)})),i())}));try{t.then(i,u)}catch(n){u()}}}function Ut(n){var t=Tt().emit,r=function(n){return qn.run({currentTest:n},(function(){try{var t=n.testFn()}catch(r){It(n.message,r)&&(n.message=r),t=!1}return!1===t&&n.fail(),t}))}(n);try{Lt(r)?(n.asyncTest=r,n.setPending(),Mt(n)):t(Ct.TEST_COMPLETED,n)}catch(t){hn("Your test function "+n.fieldName+" returned "+JSON.stringify(r)+'. Only "false" or a Promise are supported. Return values may cause unexpected behavior.')}}function Jt(n){var t=function(n){var t=Vn()[0];return Jn(n=o(Un()[0][t],n)),n}(n);return Ft(n)?(n.skip(),zn(),t):(function(n,t){t!==n&&function(n,t){return n.fieldName===t.fieldName&&n.groupName===t.groupName}(n,t)&&n.isPending()&&n.cancel()}(t,n),Jn(n),zn(),function(n){n.isUntested()?Ut(n):Lt(n.asyncTest)&&(n.setPending(),Mt(n))}(n),n)}function zt(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];r=t.reverse(),t=r[0],r=r[1];var e=qn.useX();return Jt(t=new Rt(n,t,{message:r,groupName:null==e?void 0:e.groupName}))}var Vt=r(zt,{each:function(n){return function(r){return Array.isArray(r)||hn("test.each: Expected table to be an array."),function(e){for(var u=[],o=1;o<arguments.length;o++)u[o-1]=arguments[o];var s=(u=u.reverse())[0],a=u[1];return r.map((function(r){return r=In(r),n(i.apply(void 0,t([e],r,!1)),i.apply(void 0,t([a],r,!1)),(function(){return s.apply(void 0,r)}))}))}}}(zt),memo:function(n){var t=Gn(100);return function(r){for(var e=[],u=1;u<arguments.length;u++)e[u-1]=arguments[u];u=Xn()[0];var i=Vn()[0],o=(e=e.reverse())[1],s=e[2];return e=[u,r,i].concat(e[0]),E(u=t.get(e))?t(e,(function(){return n(r,s,o)})):u[1].isCanceled()?(t.invalidate(e),t(e,(function(){return n(r,s,o)}))):Jt(u[1])}}(zt)});exports.VERSION="4.0.0-dev-deabb8",exports.create=function(n){e(n)||hn("Suite initialization error. Expected `tests` to be a function.");var t=St(),u=function(n){function t(n,t){return u.references.push(),r(n,i(t)),function(){return[u.references[n],function(t){return r(n,i(t,u.references[n]))}]}}function r(t,r){var i=u.references[t];u.references[t]=r,e(t=o[t][1])&&t(r,i),e(n)&&n()}var u={references:[]},o=[];return{registerStateKey:function(n,r){var e=o.length;return o.push([n,r]),t(e,n)},reset:function(){u.references=[],o.forEach((function(n,r){return t(r,n[0])}))}}}(),o=function(n,t){var r=t.suiteId;return{optionalFields:n.registerStateKey((function(){return{}})),prevTestObjects:n.registerStateKey((function(){return[]})),suiteId:n.registerStateKey((function(){return r})),testCallbacks:n.registerStateKey((function(){return{fieldCallbacks:{},doneCallbacks:[]}})),testObjects:n.registerStateKey((function(){return[]})),testObjectsCursor:n.registerStateKey((function(){return 0}))}}(u,{suiteId:Rn()});return r(qn.bind({stateRef:o,bus:t},(function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];var e=Mn()[0];return r=Un()[1],u.reset(),r((function(){return e})),n.apply(void 0,t),Nt()})),{get:qn.bind({stateRef:o},yt),remove:qn.bind({stateRef:o},(function(n){In(Mn()[0]).forEach((function(t){Dn(t,n)&&t.cancel()}))})),reset:u.reset})},exports.enforce=jn,exports.group=function(n,t){S(n)||jt("name must be a string"),e(t)||jt("callback must be a function"),qn.run({groupName:n},t)},exports.only=Pt,exports.optional=function(n){(0,_n()[1])((function(t){return In(n).forEach((function(n){t[n]=!0})),t}))},exports.skip=kt,exports.skipWhen=function(n,t){qn.run({skipped:i(n)},(function(){return t()}))},exports.test=Vt,exports.warn=function(){var n=qn.useX("warn hook called outside of a running suite.");n.currentTest||hn("warn called outside of a test."),n.currentTest.warn()};