@lingxia/test 0.17.0 → 0.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/dist/clock.d.ts +30 -0
  2. package/dist/clock.d.ts.map +1 -0
  3. package/dist/clock.js +99 -0
  4. package/dist/clock.js.map +1 -0
  5. package/dist/coverage.d.ts +25 -0
  6. package/dist/coverage.d.ts.map +1 -0
  7. package/dist/coverage.js +92 -0
  8. package/dist/coverage.js.map +1 -0
  9. package/dist/deadline.d.ts +82 -0
  10. package/dist/deadline.d.ts.map +1 -0
  11. package/dist/deadline.js +184 -0
  12. package/dist/deadline.js.map +1 -0
  13. package/dist/dialogs.d.ts +28 -0
  14. package/dist/dialogs.d.ts.map +1 -0
  15. package/dist/dialogs.js +74 -0
  16. package/dist/dialogs.js.map +1 -0
  17. package/dist/equal.d.ts +28 -0
  18. package/dist/equal.d.ts.map +1 -0
  19. package/dist/equal.js +149 -0
  20. package/dist/equal.js.map +1 -0
  21. package/dist/errors.d.ts +8 -0
  22. package/dist/errors.d.ts.map +1 -0
  23. package/dist/errors.js +37 -0
  24. package/dist/errors.js.map +1 -0
  25. package/dist/expect.d.ts +35 -7
  26. package/dist/expect.d.ts.map +1 -1
  27. package/dist/expect.js +216 -68
  28. package/dist/expect.js.map +1 -1
  29. package/dist/fixture.d.ts +205 -40
  30. package/dist/fixture.d.ts.map +1 -1
  31. package/dist/fixture.js +1178 -156
  32. package/dist/fixture.js.map +1 -1
  33. package/dist/format.d.ts +2 -0
  34. package/dist/format.d.ts.map +1 -1
  35. package/dist/format.js +78 -0
  36. package/dist/format.js.map +1 -1
  37. package/dist/host-types.d.ts +65 -0
  38. package/dist/host-types.d.ts.map +1 -0
  39. package/dist/host-types.js +2 -0
  40. package/dist/host-types.js.map +1 -0
  41. package/dist/host.d.ts +20 -0
  42. package/dist/host.d.ts.map +1 -1
  43. package/dist/host.js +34 -2
  44. package/dist/host.js.map +1 -1
  45. package/dist/ids.d.ts +16 -0
  46. package/dist/ids.d.ts.map +1 -1
  47. package/dist/ids.js +38 -3
  48. package/dist/ids.js.map +1 -1
  49. package/dist/index.d.ts +5 -7
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/index.js +3 -5
  52. package/dist/index.js.map +1 -1
  53. package/dist/json-result.d.ts +3 -0
  54. package/dist/json-result.d.ts.map +1 -0
  55. package/dist/json-result.js +62 -0
  56. package/dist/json-result.js.map +1 -0
  57. package/dist/junit.d.ts +1 -1
  58. package/dist/junit.d.ts.map +1 -1
  59. package/dist/junit.js +40 -5
  60. package/dist/junit.js.map +1 -1
  61. package/dist/locator.d.ts +116 -7
  62. package/dist/locator.d.ts.map +1 -1
  63. package/dist/locator.js +444 -58
  64. package/dist/locator.js.map +1 -1
  65. package/dist/mock.d.ts +43 -0
  66. package/dist/mock.d.ts.map +1 -0
  67. package/dist/mock.js +162 -0
  68. package/dist/mock.js.map +1 -0
  69. package/dist/network.d.ts +68 -0
  70. package/dist/network.d.ts.map +1 -0
  71. package/dist/network.js +287 -0
  72. package/dist/network.js.map +1 -0
  73. package/dist/openapi.d.ts +127 -0
  74. package/dist/openapi.d.ts.map +1 -0
  75. package/dist/openapi.js +414 -0
  76. package/dist/openapi.js.map +1 -0
  77. package/dist/pending.d.ts +84 -0
  78. package/dist/pending.d.ts.map +1 -0
  79. package/dist/pending.js +311 -0
  80. package/dist/pending.js.map +1 -0
  81. package/dist/redact.d.ts +41 -0
  82. package/dist/redact.d.ts.map +1 -0
  83. package/dist/redact.js +168 -0
  84. package/dist/redact.js.map +1 -0
  85. package/dist/remote.d.ts +32 -0
  86. package/dist/remote.d.ts.map +1 -0
  87. package/dist/remote.js +117 -0
  88. package/dist/remote.js.map +1 -0
  89. package/dist/report-extras.d.ts +16 -0
  90. package/dist/report-extras.d.ts.map +1 -0
  91. package/dist/report-extras.js +125 -0
  92. package/dist/report-extras.js.map +1 -0
  93. package/dist/report-types.d.ts +428 -0
  94. package/dist/report-types.d.ts.map +1 -0
  95. package/dist/report-types.js +6 -0
  96. package/dist/report-types.js.map +1 -0
  97. package/dist/report.d.ts +15 -1
  98. package/dist/report.d.ts.map +1 -1
  99. package/dist/report.js +196 -19
  100. package/dist/report.js.map +1 -1
  101. package/dist/runner.d.ts +13 -0
  102. package/dist/runner.d.ts.map +1 -0
  103. package/dist/runner.js +11 -0
  104. package/dist/runner.js.map +1 -0
  105. package/dist/runtime.d.ts +55 -4
  106. package/dist/runtime.d.ts.map +1 -1
  107. package/dist/runtime.js +1500 -139
  108. package/dist/runtime.js.map +1 -1
  109. package/dist/schema.d.ts +29 -0
  110. package/dist/schema.d.ts.map +1 -0
  111. package/dist/schema.js +463 -0
  112. package/dist/schema.js.map +1 -0
  113. package/dist/spec-api.d.ts +10 -2
  114. package/dist/spec-api.d.ts.map +1 -1
  115. package/dist/tags.d.ts +26 -0
  116. package/dist/tags.d.ts.map +1 -0
  117. package/dist/tags.js +78 -0
  118. package/dist/tags.js.map +1 -0
  119. package/dist/types.d.ts +863 -168
  120. package/dist/types.d.ts.map +1 -1
  121. package/dist/version.d.ts +1 -1
  122. package/dist/version.js +1 -1
  123. package/package.json +18 -5
  124. package/schemas/lxdev.schema.json +50 -0
  125. package/schemas/mock-config.schema.json +21 -0
  126. package/schemas/scenario.schema.json +180 -0
@@ -0,0 +1,74 @@
1
+ function describeSheetAnswer(answer) {
2
+ return "cancel" in answer ? "cancel" : `index ${String(answer.index)}`;
3
+ }
4
+ /**
5
+ * `resolve` reads the raw driver lazily, inside each traced call: a host
6
+ * without dialog watching fails that call, never the `t.app.dialogs` read.
7
+ */
8
+ export function wrapDialogs(resolve, host, ensure) {
9
+ const setMode = (mode) => host.act("dialogs.setAnswerMode", JSON.stringify(mode), async () => {
10
+ await ensure();
11
+ return resolve().setAnswerMode(mode);
12
+ });
13
+ return {
14
+ toasts: () => host.act("dialogs.toasts", "", async () => { await ensure(); return resolve().toasts(); }),
15
+ modals: () => host.act("dialogs.modals", "", async () => { await ensure(); return resolve().modals(); }),
16
+ actionSheets: () => host.act("dialogs.actionSheets", "", async () => { await ensure(); return resolve().actionSheets(); }),
17
+ answerNextModal: (answer) => host.act("dialogs.answerNextModal", answer?.confirm === true ? "confirm" : "cancel", async () => {
18
+ await ensure();
19
+ resolve().answerNextModal(answer);
20
+ }),
21
+ answerNextActionSheet: (answer) => host.act("dialogs.answerNextActionSheet", answer && typeof answer === "object" ? describeSheetAnswer(answer) : "", async () => {
22
+ await ensure();
23
+ resolve().answerNextActionSheet(answer);
24
+ }),
25
+ setAnswerMode: setMode,
26
+ withAnswerMode: async (mode, body) => {
27
+ const previous = await setMode(mode);
28
+ try {
29
+ return await body();
30
+ }
31
+ finally {
32
+ await setMode(previous);
33
+ }
34
+ },
35
+ };
36
+ }
37
+ /**
38
+ * Watch the app's dialogs for the spec that starts now. `undefined` on a
39
+ * host without dialog watching. A refused watch fails spec setup.
40
+ */
41
+ export function watchDialogs(driver) {
42
+ const dialogs = driver.dialogs;
43
+ if (!dialogs || typeof dialogs.watch !== "function")
44
+ return undefined;
45
+ dialogs.watch();
46
+ const watched = dialogs;
47
+ let observationError;
48
+ const unanswered = new Promise((resolve) => {
49
+ Promise.resolve()
50
+ .then(() => watched.unanswered())
51
+ .then((message) => { if (typeof message === "string")
52
+ resolve(message); }, (error) => {
53
+ observationError = error ?? new Error("dialog observation failed without an error value");
54
+ resolve(`dialog observation failed: ${String(error)}`);
55
+ });
56
+ });
57
+ return {
58
+ unanswered,
59
+ async end(driver) {
60
+ const left = await driver.dialogs.unwatch();
61
+ if (observationError !== undefined)
62
+ throw observationError;
63
+ const parts = [];
64
+ if (left.modalAnswers > 0) {
65
+ parts.push(`${left.modalAnswers} modal answer${left.modalAnswers === 1 ? "" : "s"} (t.app.dialogs.answerNextModal)`);
66
+ }
67
+ if (left.actionSheetAnswers > 0) {
68
+ parts.push(`${left.actionSheetAnswers} action sheet answer${left.actionSheetAnswers === 1 ? "" : "s"} (t.app.dialogs.answerNextActionSheet)`);
69
+ }
70
+ return parts.length === 0 ? undefined : `${parts.join(" and ")} queued but no dialog appeared to use ${left.modalAnswers + left.actionSheetAnswers === 1 ? "it" : "them"}`;
71
+ },
72
+ };
73
+ }
74
+ //# sourceMappingURL=dialogs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dialogs.js","sourceRoot":"","sources":["../src/dialogs.ts"],"names":[],"mappings":"AAcA,SAAS,mBAAmB,CAAC,MAAyB;IACpD,OAAO,QAAQ,IAAI,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AACzE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,OAA2B,EAAE,IAAiB,EAAE,MAA2B;IACrG,MAAM,OAAO,GAAiC,CAAC,IAAI,EAAE,EAAE,CACrD,IAAI,CAAC,GAAG,CAAC,uBAAuB,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,EAAE;QACjE,MAAM,MAAM,EAAE,CAAC;QACf,OAAO,OAAO,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IACL,OAAO;QACL,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,EAAE,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,MAAM,EAAE,CAAC,CAAC,OAAO,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;QACxG,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,EAAE,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,MAAM,EAAE,CAAC,CAAC,OAAO,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;QACxG,YAAY,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,sBAAsB,EAAE,EAAE,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,MAAM,EAAE,CAAC,CAAC,OAAO,OAAO,EAAE,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1H,eAAe,EAAE,CAAC,MAAmB,EAAE,EAAE,CACvC,IAAI,CAAC,GAAG,CAAC,yBAAyB,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;YAC9F,MAAM,MAAM,EAAE,CAAC;YACf,OAAO,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC,CAAC;QACJ,qBAAqB,EAAE,CAAC,MAAyB,EAAE,EAAE,CACnD,IAAI,CAAC,GAAG,CAAC,+BAA+B,EAAE,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE;YAC5H,MAAM,MAAM,EAAE,CAAC;YACf,OAAO,EAAE,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAC1C,CAAC,CAAC;QACJ,aAAa,EAAE,OAAO;QACtB,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;YACnC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,CAAC;gBACH,OAAO,MAAM,IAAI,EAAE,CAAC;YACtB,CAAC;oBAAS,CAAC;gBACT,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAcD;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,MAAmB;IAC9C,MAAM,OAAO,GAAI,MAA+B,CAAC,OAAO,CAAC;IACzD,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,UAAU;QAAE,OAAO,SAAS,CAAC;IACtE,OAAO,CAAC,KAAK,EAAE,CAAC;IAChB,MAAM,OAAO,GAAG,OAAO,CAAC;IACxB,IAAI,gBAAyB,CAAC;IAC9B,MAAM,UAAU,GAAG,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;QACjD,OAAO,CAAC,OAAO,EAAE;aACd,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;aAChC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,GAAG,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAc,EAAE,EAAE;YAC5F,gBAAgB,GAAG,KAAK,IAAI,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;YAC1F,OAAO,CAAC,8BAA8B,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,OAAO;QACL,UAAU;QACV,KAAK,CAAC,GAAG,CAAC,MAAM;YACd,MAAM,IAAI,GAAwB,MAAM,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACjE,IAAI,gBAAgB,KAAK,SAAS;gBAAE,MAAM,gBAAgB,CAAC;YAC3D,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;gBAC1B,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,YAAY,gBAAgB,IAAI,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,kCAAkC,CAAC,CAAC;YACvH,CAAC;YACD,IAAI,IAAI,CAAC,kBAAkB,GAAG,CAAC,EAAE,CAAC;gBAChC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,kBAAkB,uBAAuB,IAAI,CAAC,kBAAkB,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,wCAAwC,CAAC,CAAC;YAChJ,CAAC;YACD,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,yCAAyC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,kBAAkB,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC7K,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Pairs assumed equal while their contents are compared, so cycles
3
+ * terminate, and the order they were assumed in.
4
+ */
5
+ interface Assumed {
6
+ pairs: Map<object, Set<object>>;
7
+ trail: [object, object][];
8
+ }
9
+ /** Deep equality for `toEqual` and schema `enum`/`const`/`uniqueItems`:
10
+ * Dates by time, RegExps by source, Maps and Sets by contents (each element
11
+ * or entry matched once), cycles safe. */
12
+ export declare function isEqual(a: unknown, b: unknown): boolean;
13
+ /** Marks an asymmetric matcher (`expect.objectContaining`); `format.ts` reads it by key. */
14
+ export declare const ASYMMETRIC: unique symbol;
15
+ /**
16
+ * `expect.objectContaining(sample)`: equal to any object that has every key
17
+ * of `sample` with an equal value; other keys are ignored. Values compare
18
+ * like `toEqual`, so a nested `objectContaining` works too.
19
+ */
20
+ export declare class ObjectContaining {
21
+ readonly sample: Record<string, unknown>;
22
+ readonly [ASYMMETRIC]: () => string;
23
+ constructor(sample: Record<string, unknown>);
24
+ matches(other: unknown, assumed: Assumed): boolean;
25
+ }
26
+ export declare function objectContaining(sample: Record<string, unknown>): ObjectContaining;
27
+ export {};
28
+ //# sourceMappingURL=equal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"equal.d.ts","sourceRoot":"","sources":["../src/equal.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,UAAU,OAAO;IACf,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IAChC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;CAC3B;AAED;;0CAE0C;AAC1C,wBAAgB,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CAEvD;AAED,4FAA4F;AAC5F,eAAO,MAAM,UAAU,eAAwC,CAAC;AAEhE;;;;GAIG;AACH,qBAAa,gBAAgB;IAEf,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IADpD,QAAQ,CAAC,CAAC,UAAU,CAAC,QAAO,MAAM,CAAuB;gBACpC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAEpD,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO;CAMnD;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,gBAAgB,CAKlF"}
package/dist/equal.js ADDED
@@ -0,0 +1,149 @@
1
+ var _a;
2
+ /** Deep equality for `toEqual` and schema `enum`/`const`/`uniqueItems`:
3
+ * Dates by time, RegExps by source, Maps and Sets by contents (each element
4
+ * or entry matched once), cycles safe. */
5
+ export function isEqual(a, b) {
6
+ return equal(a, b, { pairs: new Map(), trail: [] });
7
+ }
8
+ /** Marks an asymmetric matcher (`expect.objectContaining`); `format.ts` reads it by key. */
9
+ export const ASYMMETRIC = Symbol.for("lingxia.test.asymmetric");
10
+ /**
11
+ * `expect.objectContaining(sample)`: equal to any object that has every key
12
+ * of `sample` with an equal value; other keys are ignored. Values compare
13
+ * like `toEqual`, so a nested `objectContaining` works too.
14
+ */
15
+ export class ObjectContaining {
16
+ constructor(sample) {
17
+ this.sample = sample;
18
+ this[_a] = () => `ObjectContaining`;
19
+ }
20
+ matches(other, assumed) {
21
+ if (typeof other !== "object" || other === null || Array.isArray(other))
22
+ return false;
23
+ return Object.keys(this.sample).every((key) => Object.prototype.hasOwnProperty.call(other, key) &&
24
+ equal(other[key], this.sample[key], assumed));
25
+ }
26
+ }
27
+ _a = ASYMMETRIC;
28
+ export function objectContaining(sample) {
29
+ if (typeof sample !== "object" || sample === null || Array.isArray(sample)) {
30
+ throw new TypeError("expect.objectContaining(sample) takes a plain object");
31
+ }
32
+ return new ObjectContaining(sample);
33
+ }
34
+ function equal(a, b, assumed) {
35
+ if (Object.is(a, b))
36
+ return true;
37
+ if (b instanceof ObjectContaining)
38
+ return b.matches(a, assumed);
39
+ if (a instanceof ObjectContaining)
40
+ return a.matches(b, assumed);
41
+ if (typeof a !== typeof b)
42
+ return false;
43
+ if (a === null || b === null)
44
+ return a === b;
45
+ if (typeof a !== "object" || typeof b !== "object")
46
+ return false;
47
+ if (a instanceof Date || b instanceof Date) {
48
+ return a instanceof Date && b instanceof Date && a.getTime() === b.getTime();
49
+ }
50
+ if (a instanceof RegExp || b instanceof RegExp) {
51
+ return a instanceof RegExp && b instanceof RegExp && String(a) === String(b);
52
+ }
53
+ if ((a instanceof Map) !== (b instanceof Map))
54
+ return false;
55
+ if ((a instanceof Set) !== (b instanceof Set))
56
+ return false;
57
+ if (Array.isArray(a) !== Array.isArray(b))
58
+ return false;
59
+ // Coinductive: a pair already under comparison counts as equal. When the
60
+ // comparison fails, it and every pair concluded under it are withdrawn,
61
+ // so a Set match that backtracks leaves no false pair behind.
62
+ let pairs = assumed.pairs.get(a);
63
+ if (pairs?.has(b))
64
+ return true;
65
+ if (!pairs)
66
+ assumed.pairs.set(a, pairs = new Set());
67
+ pairs.add(b);
68
+ const mark = assumed.trail.length;
69
+ assumed.trail.push([a, b]);
70
+ if (contentsEqual(a, b, assumed))
71
+ return true;
72
+ for (const [x, y] of assumed.trail.splice(mark))
73
+ assumed.pairs.get(x)?.delete(y);
74
+ return false;
75
+ }
76
+ function contentsEqual(a, b, assumed) {
77
+ if (a instanceof Map && b instanceof Map) {
78
+ if (a.size !== b.size)
79
+ return false;
80
+ const left = [];
81
+ const right = [];
82
+ for (const [key, value] of a) {
83
+ if (isObject(key))
84
+ left.push([key, value]);
85
+ else if (!b.has(key) || !equal(value, b.get(key), assumed))
86
+ return false;
87
+ }
88
+ for (const entry of b)
89
+ if (isObject(entry[0]))
90
+ right.push(entry);
91
+ return matchAll(left, right, ([ka, va], [kb, vb]) => equal(ka, kb, assumed) && equal(va, vb, assumed));
92
+ }
93
+ if (a instanceof Set && b instanceof Set) {
94
+ if (a.size !== b.size)
95
+ return false;
96
+ const left = [];
97
+ const right = [];
98
+ for (const value of a) {
99
+ if (isObject(value))
100
+ left.push(value);
101
+ else if (!b.has(value))
102
+ return false;
103
+ }
104
+ for (const value of b)
105
+ if (isObject(value))
106
+ right.push(value);
107
+ return matchAll(left, right, (x, y) => equal(x, y, assumed));
108
+ }
109
+ if (Array.isArray(a) && Array.isArray(b)) {
110
+ if (a.length !== b.length)
111
+ return false;
112
+ return a.every((item, index) => equal(item, b[index], assumed));
113
+ }
114
+ const aKeys = Object.keys(a);
115
+ const bKeys = Object.keys(b);
116
+ if (aKeys.length !== bKeys.length)
117
+ return false;
118
+ return aKeys.every((key) => Object.prototype.hasOwnProperty.call(b, key) &&
119
+ equal(a[key], b[key], assumed));
120
+ }
121
+ function isObject(value) {
122
+ return typeof value === "object" && value !== null;
123
+ }
124
+ /**
125
+ * A one-to-one pairing of `left` with `right` under `same` (bipartite
126
+ * matching by augmenting paths): each right element answers for at most
127
+ * one left element, and an early greedy choice is revisited when a later
128
+ * element needs it.
129
+ */
130
+ function matchAll(left, right, same) {
131
+ if (left.length !== right.length)
132
+ return false;
133
+ const candidates = left.map((x) => right.flatMap((y, index) => (same(x, y) ? [index] : [])));
134
+ const owner = new Array(right.length).fill(-1);
135
+ const assign = (i, visited) => {
136
+ for (const j of candidates[i]) {
137
+ if (visited[j])
138
+ continue;
139
+ visited[j] = true;
140
+ if (owner[j] === -1 || assign(owner[j], visited)) {
141
+ owner[j] = i;
142
+ return true;
143
+ }
144
+ }
145
+ return false;
146
+ };
147
+ return left.every((_, i) => candidates[i].length > 0 && assign(i, new Array(right.length).fill(false)));
148
+ }
149
+ //# sourceMappingURL=equal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"equal.js","sourceRoot":"","sources":["../src/equal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Every `TestErrorCode`, for code that lists or checks them at run time. The
3
+ * driver codes mirror `AUTOMATION_ERROR_CODES` in `@lingxia/types/automation`,
4
+ * less its driver timeout codes: a fixture call that times out rejects with
5
+ * `E_TIMEOUT`.
6
+ */
7
+ export declare const TEST_ERROR_CODES: readonly ["E_AUTOMATION", "E_SCENARIO_STATE_UNKNOWN", "E_AUTOMATION_PRIVILEGE", "E_PAGE_NOT_ACTIVE", "E_PAGE_NOT_READY", "E_PAGE_ACTION", "E_ELEMENT_NOT_FOUND", "E_ELEMENT_NOT_INTERACTABLE", "E_EVAL_SCRIPT", "E_PROFILE_NOT_ISOLATED", "E_CLOCK_NOT_INSTALLED", "E_CLOCK_INSTALLED", "E_DESKTOP_USAGE", "E_DESKTOP_NOT_FOUND", "E_DESKTOP_AMBIGUOUS", "E_DESKTOP_PERMISSION", "E_DESKTOP_UNSUPPORTED", "E_DESKTOP_UNAVAILABLE", "E_DESKTOP_STALE", "E_DESKTOP_FAILED", "E_OPENAPI_CONTRACT", "E_TIMEOUT", "E_SKIPPED"];
8
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,2fA2BgB,CAAC"}
package/dist/errors.js ADDED
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Every `TestErrorCode`, for code that lists or checks them at run time. The
3
+ * driver codes mirror `AUTOMATION_ERROR_CODES` in `@lingxia/types/automation`,
4
+ * less its driver timeout codes: a fixture call that times out rejects with
5
+ * `E_TIMEOUT`.
6
+ */
7
+ export const TEST_ERROR_CODES = [
8
+ "E_AUTOMATION",
9
+ "E_SCENARIO_STATE_UNKNOWN",
10
+ "E_AUTOMATION_PRIVILEGE",
11
+ "E_PAGE_NOT_ACTIVE",
12
+ "E_PAGE_NOT_READY",
13
+ "E_PAGE_ACTION",
14
+ "E_ELEMENT_NOT_FOUND",
15
+ "E_ELEMENT_NOT_INTERACTABLE",
16
+ "E_EVAL_SCRIPT",
17
+ "E_PROFILE_NOT_ISOLATED",
18
+ "E_CLOCK_NOT_INSTALLED",
19
+ "E_CLOCK_INSTALLED",
20
+ "E_DESKTOP_USAGE",
21
+ "E_DESKTOP_NOT_FOUND",
22
+ "E_DESKTOP_AMBIGUOUS",
23
+ "E_DESKTOP_PERMISSION",
24
+ "E_DESKTOP_UNSUPPORTED",
25
+ "E_DESKTOP_UNAVAILABLE",
26
+ "E_DESKTOP_STALE",
27
+ "E_DESKTOP_FAILED",
28
+ /** A routed response broke the run's OpenAPI contract (`lxdev test --openapi`). */
29
+ "E_OPENAPI_CONTRACT",
30
+ /** A fixture call ran out of time (a wait, an action budget, an eval, a nav), or the spec did. */
31
+ "E_TIMEOUT",
32
+ /** `t.skip()` stopped the spec. */
33
+ "E_SKIPPED",
34
+ ];
35
+ const listsEveryCode = true;
36
+ void listsEveryCode;
37
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,cAAc;IACd,0BAA0B;IAC1B,wBAAwB;IACxB,mBAAmB;IACnB,kBAAkB;IAClB,eAAe;IACf,qBAAqB;IACrB,4BAA4B;IAC5B,eAAe;IACf,wBAAwB;IACxB,uBAAuB;IACvB,mBAAmB;IACnB,iBAAiB;IACjB,qBAAqB;IACrB,qBAAqB;IACrB,sBAAsB;IACtB,uBAAuB;IACvB,uBAAuB;IACvB,iBAAiB;IACjB,kBAAkB;IAClB,mFAAmF;IACnF,oBAAoB;IACpB,kGAAkG;IAClG,WAAW;IACX,mCAAmC;IACnC,WAAW;CACgC,CAAC;AAI9C,MAAM,cAAc,GAAiD,IAAI,CAAC;AAC1E,KAAK,cAAc,CAAC"}
package/dist/expect.d.ts CHANGED
@@ -1,26 +1,54 @@
1
- import type { Matchers } from "./types.js";
1
+ import { isEqual } from "./equal.js";
2
+ import type { Expect, ExpectOptions, Locator, LocatorMatchers, Matchers, RetryMatchers } from "./types.js";
2
3
  export interface LoggedAssertion {
3
4
  matcher: string;
4
5
  expected: string;
5
6
  actual: string;
6
7
  passed: boolean;
8
+ target?: string;
9
+ message?: string;
10
+ location?: string;
11
+ duration_ms?: number;
12
+ difference?: string;
7
13
  }
8
- type AssertionSink = (entry: LoggedAssertion) => void;
9
- export declare function setAssertionSink(sink?: AssertionSink): void;
14
+ /**
15
+ * The running spec, as `expect` needs it: to record assertions, and to run
16
+ * the retrying forms (`expect(locator)`, `expect.poll`) inside its budget.
17
+ */
18
+ export interface ExpectScope {
19
+ note(entry: LoggedAssertion): void;
20
+ locator(locator: Locator, message?: string): LocatorMatchers;
21
+ poll(read: () => unknown, options: ExpectOptions | undefined): RetryMatchers<unknown>;
22
+ }
23
+ /** The spec `expect` reports to; `undefined` between specs. */
24
+ export declare function setExpectScope(scope?: ExpectScope): void;
25
+ /**
26
+ * During a run, assertions made while no spec runs — a continuation of a
27
+ * spec the run already finished — are handed here instead of to whichever
28
+ * spec runs next.
29
+ */
30
+ export declare function setStrayAssertionSink(sink?: (entry: LoggedAssertion) => void): void;
10
31
  export declare function pushAssertionSilence(): void;
11
32
  export declare function popAssertionSilence(): void;
12
- export declare function logAssertion(entry: LoggedAssertion): void;
13
33
  export declare class AssertionError extends Error {
14
34
  readonly name = "AssertionError";
15
35
  readonly matcher: string;
16
36
  readonly actual: unknown;
17
37
  readonly expected: unknown;
18
- constructor(matcher: string, actual: unknown, expected: unknown, message: string);
38
+ /** `E_TIMEOUT` when a retrying assertion ran out of time. */
39
+ readonly code?: "E_TIMEOUT";
40
+ constructor(matcher: string, actual: unknown, expected: unknown, message: string, code?: "E_TIMEOUT");
19
41
  }
20
- declare function isEqual(a: unknown, b: unknown, seen?: WeakMap<object, unknown>): boolean;
21
42
  declare function contains(actual: unknown, expected: unknown): boolean;
22
43
  declare function matches(actual: unknown, expected: string | RegExp): boolean;
23
- export declare function expect<T>(actual: T): Matchers<T>;
44
+ /**
45
+ * The one assertion entry point: a locator retries its matcher until the
46
+ * element passes, any other value is checked once, and `expect.poll(read)`
47
+ * calls `read` until the matcher passes.
48
+ */
49
+ export declare const expect: Expect;
50
+ /** Check `actual` once; the fixture's own checks use it. */
51
+ export declare function check<T>(actual: T): Matchers<T>;
24
52
  export declare function applyMatcher(matcher: string, actual: unknown, expected: unknown, inverted: boolean): void;
25
53
  export { isEqual, contains, matches };
26
54
  //# sourceMappingURL=expect.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"expect.d.ts","sourceRoot":"","sources":["../src/expect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,KAAK,aAAa,GAAG,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;AAKtD,wBAAgB,gBAAgB,CAAC,IAAI,CAAC,EAAE,aAAa,GAAG,IAAI,CAE3D;AAED,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C;AAED,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAGzD;AAED,qBAAa,cAAe,SAAQ,KAAK;IACvC,SAAkB,IAAI,oBAAoB;IAC1C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;gBAEf,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM;CAMjF;AAED,iBAAS,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,2BAAiC,GAAG,OAAO,CA8CvF;AAED,iBAAS,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAI7D;AAED,iBAAS,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAGpE;AAoJD,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAEhD;AAED,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,OAAO,EACjB,QAAQ,EAAE,OAAO,GAChB,IAAI,CA6CN;AAED,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"expect.d.ts","sourceRoot":"","sources":["../src/expect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAoB,MAAM,YAAY,CAAC;AAKvD,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAoB,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE7H,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAAC;IACnC,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,eAAe,CAAC;IAC7D,IAAI,CAAC,IAAI,EAAE,MAAM,OAAO,EAAE,OAAO,EAAE,aAAa,GAAG,SAAS,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;CACvF;AAQD,+DAA+D;AAC/D,wBAAgB,cAAc,CAAC,KAAK,CAAC,EAAE,WAAW,GAAG,IAAI,CAExD;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,GAAG,IAAI,CAEnF;AAED,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C;AAED,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAgCD,qBAAa,cAAe,SAAQ,KAAK;IACvC,SAAkB,IAAI,oBAAoB;IAC1C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,6DAA6D;IAC7D,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC;gBAEhB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW;CAOrG;AAGD,iBAAS,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAI7D;AAED,iBAAS,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAGpE;AA4QD;;;;GAIG;AACH,eAAO,MAAM,MAAM,EAAE,MA8BV,CAAC;AAEZ,4DAA4D;AAC5D,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAE/C;AAED,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,OAAO,EACjB,QAAQ,EAAE,OAAO,GAChB,IAAI,CAmDN;AAED,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC"}