nole 2.2.2 → 3.1.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 (107) hide show
  1. package/.github/workflows/ci.yaml +34 -0
  2. package/LICENSE.md +21 -0
  3. package/README.md +474 -388
  4. package/bin/nole.js +145 -111
  5. package/dist/const.d.ts +8 -0
  6. package/dist/const.d.ts.map +1 -0
  7. package/dist/const.js +9 -0
  8. package/dist/core.d.ts +22 -0
  9. package/dist/core.d.ts.map +1 -0
  10. package/dist/core.js +56 -0
  11. package/dist/dynamic.d.ts +5 -1
  12. package/dist/dynamic.d.ts.map +1 -1
  13. package/dist/dynamic.js +35 -1
  14. package/dist/handle/after-each-hooks.d.ts +3 -0
  15. package/dist/handle/after-each-hooks.d.ts.map +1 -0
  16. package/dist/handle/after-each-hooks.js +26 -0
  17. package/dist/handle/after-hooks.d.ts +3 -0
  18. package/dist/handle/after-hooks.d.ts.map +1 -0
  19. package/dist/handle/after-hooks.js +24 -0
  20. package/dist/handle/before-each-hooks.d.ts +3 -0
  21. package/dist/handle/before-each-hooks.d.ts.map +1 -0
  22. package/dist/handle/before-each-hooks.js +26 -0
  23. package/dist/handle/before-hooks.d.ts +3 -0
  24. package/dist/handle/before-hooks.d.ts.map +1 -0
  25. package/dist/handle/before-hooks.js +34 -0
  26. package/dist/handle/cleanup-hooks.d.ts +3 -0
  27. package/dist/handle/cleanup-hooks.d.ts.map +1 -0
  28. package/dist/handle/cleanup-hooks.js +34 -0
  29. package/dist/handle/specs.d.ts +3 -0
  30. package/dist/handle/specs.d.ts.map +1 -0
  31. package/dist/handle/specs.js +50 -0
  32. package/dist/index.d.ts +3 -3
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +4 -4
  35. package/dist/pipeline.test.d.ts +7 -0
  36. package/dist/pipeline.test.d.ts.map +1 -0
  37. package/dist/pipeline.test.js +124 -0
  38. package/dist/run.d.ts +7 -6
  39. package/dist/run.d.ts.map +1 -1
  40. package/dist/run.js +166 -196
  41. package/dist/symbol.d.ts +2 -0
  42. package/dist/symbol.d.ts.map +1 -0
  43. package/dist/symbol.js +2 -0
  44. package/dist/test-wrap.d.ts +38 -0
  45. package/dist/test-wrap.d.ts.map +1 -0
  46. package/dist/test-wrap.js +30 -0
  47. package/dist/utils/executor.js +1 -1
  48. package/dist/utils/executor.test.d.ts +3 -1
  49. package/dist/utils/executor.test.d.ts.map +1 -1
  50. package/dist/utils/executor.test.js +3 -30
  51. package/dist/utils/time_difference.d.ts +9 -0
  52. package/dist/utils/time_difference.d.ts.map +1 -1
  53. package/dist/utils/time_difference.js +10 -1
  54. package/dist/utils/time_difference.test.d.ts +3 -1
  55. package/dist/utils/time_difference.test.d.ts.map +1 -1
  56. package/dist/utils/time_difference.test.js +5 -18
  57. package/dist/utils/time_factor.d.ts.map +1 -1
  58. package/dist/utils/time_factor.js +2 -3
  59. package/dist/utils/time_factor.test.d.ts +3 -1
  60. package/dist/utils/time_factor.test.d.ts.map +1 -1
  61. package/dist/utils/time_factor.test.js +3 -18
  62. package/package.json +58 -58
  63. package/tsconfig.json +18 -18
  64. package/dist/data.d.ts +0 -3
  65. package/dist/data.d.ts.map +0 -1
  66. package/dist/data.js +0 -9
  67. package/dist/data.js.map +0 -1
  68. package/dist/decorators.d.ts +0 -9
  69. package/dist/decorators.d.ts.map +0 -1
  70. package/dist/decorators.js +0 -118
  71. package/dist/decorators.js.map +0 -1
  72. package/dist/dynamic.js.map +0 -1
  73. package/dist/index.js.map +0 -1
  74. package/dist/run.js.map +0 -1
  75. package/dist/test.d.ts +0 -39
  76. package/dist/test.d.ts.map +0 -1
  77. package/dist/test.js +0 -25
  78. package/dist/test.js.map +0 -1
  79. package/dist/utils/executor.js.map +0 -1
  80. package/dist/utils/executor.test.js.map +0 -1
  81. package/dist/utils/time_difference.js.map +0 -1
  82. package/dist/utils/time_difference.test.js.map +0 -1
  83. package/dist/utils/time_factor.js.map +0 -1
  84. package/dist/utils/time_factor.test.js.map +0 -1
  85. package/src/data.ts +0 -13
  86. package/src/decorators.ts +0 -208
  87. package/src/dynamic.ts +0 -11
  88. package/src/index.ts +0 -13
  89. package/src/run.ts +0 -331
  90. package/src/test.ts +0 -47
  91. package/src/utils/executor.test.ts +0 -27
  92. package/src/utils/executor.ts +0 -22
  93. package/src/utils/time_difference.test.ts +0 -12
  94. package/src/utils/time_difference.ts +0 -26
  95. package/src/utils/time_factor.test.ts +0 -29
  96. package/src/utils/time_factor.ts +0 -35
  97. package/test/basic.test.ts +0 -24
  98. package/test/before.test.ts +0 -54
  99. package/test/clean-up.test.ts +0 -52
  100. package/test/dynamic-skip.test.ts +0 -8
  101. package/test/dynamic.test.ts +0 -13
  102. package/test/hook.test.ts +0 -27
  103. package/test/multi-dependency.test.ts +0 -45
  104. package/test/multiple-uppercased-chars.test.ts +0 -19
  105. package/test/skip-all.test.ts +0 -19
  106. package/test/tsconfig.json +0 -24
  107. package/test/turkish-chars.test.ts +0 -19
@@ -0,0 +1,34 @@
1
+ import { HookType, TestWrap } from "../test-wrap.js";
2
+ import { Executor } from "../utils/executor.js";
3
+ import { TimeDifference } from "../utils/time_difference.js";
4
+ import { TimeFactor } from "../utils/time_factor.js";
5
+ import { colors, DEFAULT_TIMEOUT, HOOK_FAILED_TEXT, OK_TEXT, } from "../const.js";
6
+ export async function handleCleanUp(test) {
7
+ const timeout = test.config.timeout ?? DEFAULT_TIMEOUT;
8
+ if (test.cleanUpCalled)
9
+ return;
10
+ if (!test.dependents.every((dependent) => dependent.isFinished && dependent.cleanUpCalled))
11
+ return;
12
+ test.cleanUpCalled = true;
13
+ for (let [propertyKey, hook] of test.hooks.entries()) {
14
+ if (hook.type != HookType.CleanUp)
15
+ continue;
16
+ let hookName = colors.bold(colors.yellow(test.name +
17
+ (propertyKey != "cleanUp" ? `.${propertyKey}:cleanUp` : ":cleanUp")));
18
+ let start = TimeDifference.begin();
19
+ try {
20
+ await Executor(test.testInstance[propertyKey].bind(test.testInstance), timeout);
21
+ let timeText = TimeFactor(start.end(), timeout);
22
+ console.log(`${OK_TEXT} ${timeText} ${hookName}()`);
23
+ }
24
+ catch (e) {
25
+ console.error(`${HOOK_FAILED_TEXT} ${hookName}()`);
26
+ console.error(e?.stack ?? e);
27
+ throw e;
28
+ }
29
+ }
30
+ for (let tree of test.dependencies) {
31
+ await handleCleanUp(tree.dependency);
32
+ }
33
+ }
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xlYW51cC1ob29rcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9oYW5kbGUvY2xlYW51cC1ob29rcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JELE9BQU8sRUFDTCxNQUFNLEVBQ04sZUFBZSxFQUNmLGdCQUFnQixFQUNoQixPQUFPLEdBQ1IsTUFBTSxhQUFhLENBQUM7QUFFckIsTUFBTSxDQUFDLEtBQUssVUFBVSxhQUFhLENBQUMsSUFBYztJQUNoRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxlQUFlLENBQUM7SUFFdkQsSUFBSSxJQUFJLENBQUMsYUFBYTtRQUFFLE9BQU87SUFDL0IsSUFDRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUNwQixDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLFVBQVUsSUFBSSxTQUFTLENBQUMsYUFBYSxDQUMvRDtRQUVELE9BQU87SUFFVCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztJQUUxQixLQUFLLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQ3JELElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxRQUFRLENBQUMsT0FBTztZQUFFLFNBQVM7UUFFNUMsSUFBSSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FDeEIsTUFBTSxDQUFDLE1BQU0sQ0FDWCxJQUFJLENBQUMsSUFBSTtZQUNQLENBQUMsV0FBVyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxXQUFXLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQ3RFLENBQ0YsQ0FBQztRQUNGLElBQUksS0FBSyxHQUFHLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUVuQyxJQUFJLENBQUM7WUFDSCxNQUFNLFFBQVEsQ0FDWixJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQ3RELE9BQU8sQ0FDUixDQUFDO1lBRUYsSUFBSSxRQUFRLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUVoRCxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxJQUFJLFFBQVEsSUFBSSxRQUFRLElBQUksQ0FBQyxDQUFDO1FBQ3RELENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLGdCQUFnQixJQUFJLFFBQVEsSUFBSSxDQUFDLENBQUM7WUFDbkQsT0FBTyxDQUFDLEtBQUssQ0FBRSxDQUFTLEVBQUUsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3RDLE1BQU0sQ0FBQyxDQUFDO1FBQ1YsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNuQyxNQUFNLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDdkMsQ0FBQztBQUNILENBQUMifQ==
@@ -0,0 +1,3 @@
1
+ import { TestWrap } from "../test-wrap.js";
2
+ export declare function handleSpecs(test: TestWrap): Promise<void>;
3
+ //# sourceMappingURL=specs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"specs.d.ts","sourceRoot":"","sources":["../../src/handle/specs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAerD,wBAAsB,WAAW,CAAC,IAAI,EAAE,QAAQ,iBAiE/C"}
@@ -0,0 +1,50 @@
1
+ import { HookType, TestWrap } from "../test-wrap.js";
2
+ import { Executor } from "../utils/executor.js";
3
+ import { TimeDifference } from "../utils/time_difference.js";
4
+ import { TimeFactor } from "../utils/time_factor.js";
5
+ import { handleAfterEachHooks } from "./after-each-hooks.js";
6
+ import { handleBeforeEachHooks } from "./before-each-hooks.js";
7
+ import { colors, DEFAULT_TIMEOUT, DYNAMIC_SKIP_TEXT, FAILED_TEXT, OK_TEXT, SKIP_TEXT, } from "../const.js";
8
+ export async function handleSpecs(test) {
9
+ const timeout = test.config.timeout ?? DEFAULT_TIMEOUT;
10
+ for (let [propertyKey, spec] of test.specs.entries()) {
11
+ let testName = colors.bold(colors.yellow(test.name + "." + propertyKey));
12
+ const shouldPropertySkip = test.skip.has(propertyKey);
13
+ if (shouldPropertySkip || test.skipClass) {
14
+ let reason = shouldPropertySkip
15
+ ? test.skip.get(propertyKey).reason
16
+ : test.skipClass.reason;
17
+ const hasOrigin = !!test.skipClass?.origin;
18
+ const TEXT = hasOrigin ? DYNAMIC_SKIP_TEXT : SKIP_TEXT;
19
+ console.log(`${TEXT} ${" ".repeat(hasOrigin ? 8 : 9)} ${testName}() ${reason ? "{" + reason + "}" : ""}${hasOrigin ? `\n${" ".repeat(22)}↳ skip came from ${test.skipClass?.origin}` : ``}`);
20
+ continue;
21
+ }
22
+ await handleBeforeEachHooks(test);
23
+ let start = TimeDifference.begin();
24
+ try {
25
+ await Executor(test.testInstance[propertyKey].bind(test.testInstance), timeout);
26
+ let timeText = TimeFactor(start.end(), timeout);
27
+ console.log(`${OK_TEXT} ${timeText} ${testName}()`);
28
+ }
29
+ catch (e) {
30
+ const anchor = e?._nole_anchor;
31
+ if (anchor === 1) {
32
+ let reason = e.reason;
33
+ console.log(`${DYNAMIC_SKIP_TEXT} ${" ".repeat(8)} ${testName}() ${reason ? "{" + reason + "}" : ""}`);
34
+ continue;
35
+ }
36
+ else if (anchor === 2) {
37
+ let reason = e.reason;
38
+ test.skipClass = { reason, origin: "." + propertyKey };
39
+ console.log(`${DYNAMIC_SKIP_TEXT} ${" ".repeat(8)} ${testName}() ${reason ? "{" + reason + "}" : ""}`);
40
+ continue;
41
+ }
42
+ let timeText = TimeFactor(start.end(), timeout);
43
+ console.error(`${FAILED_TEXT} ${timeText} ${testName}()`);
44
+ console.error(e?.stack ?? e);
45
+ throw e;
46
+ }
47
+ await handleAfterEachHooks(test);
48
+ }
49
+ }
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlY3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaGFuZGxlL3NwZWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDckQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDL0QsT0FBTyxFQUNMLE1BQU0sRUFDTixlQUFlLEVBQ2YsaUJBQWlCLEVBQ2pCLFdBQVcsRUFDWCxPQUFPLEVBQ1AsU0FBUyxHQUNWLE1BQU0sYUFBYSxDQUFDO0FBRXJCLE1BQU0sQ0FBQyxLQUFLLFVBQVUsV0FBVyxDQUFDLElBQWM7SUFDOUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksZUFBZSxDQUFDO0lBRXZELEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7UUFDckQsSUFBSSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFFekUsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN0RCxJQUFJLGtCQUFrQixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN6QyxJQUFJ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
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { Dependency, Spec, Hook, Skip, SkipClass, Dependencies, Dependencies as After, Dependents as Before, Dependents, } from "./decorators.js";
2
- export { HookType } from "./test.js";
3
- export { skipTest } from "./dynamic.js";
1
+ export { HookType } from "./test-wrap.js";
2
+ export { Test } from "./core.js";
3
+ export { skipTest, skipClass, getTest, addTest } from "./dynamic.js";
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,SAAS,EACT,YAAY,EACZ,YAAY,IAAI,KAAK,EACrB,UAAU,IAAI,MAAM,EACpB,UAAU,GACX,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC"}
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- export { Dependency, Spec, Hook, Skip, SkipClass, Dependencies, Dependencies as After, Dependents as Before, Dependents, } from "./decorators.js";
2
- export { HookType } from "./test.js";
3
- export { skipTest } from "./dynamic.js";
4
- //# sourceMappingURL=index.js.map
1
+ export { HookType } from "./test-wrap.js";
2
+ export { Test } from "./core.js";
3
+ export { skipTest, skipClass, getTest, addTest } from "./dynamic.js";
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGNBQWMsQ0FBQyJ9
@@ -0,0 +1,7 @@
1
+ declare const PipelineTest_base: new () => {} & import("./core.js").BaseTest;
2
+ export declare class PipelineTest extends PipelineTest_base {
3
+ dynamicApi(): Promise<void>;
4
+ drivesTheWholePipeline(): Promise<void>;
5
+ }
6
+ export {};
7
+ //# sourceMappingURL=pipeline.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.test.d.ts","sourceRoot":"","sources":["../src/pipeline.test.ts"],"names":[],"mappings":";AAgHA,qBAAa,YAAa,SAAQ,iBAAM;IAChC,UAAU,kBAsBf;IAEK,sBAAsB,kBAoB3B;CACF"}
@@ -0,0 +1,124 @@
1
+ import * as assert from "assert";
2
+ import { Test } from "./index.js";
3
+ import { addTest, getTest, skipClass, skipTest } from "./dynamic.js";
4
+ import { ManualRun } from "./run.js";
5
+ // These classes are not exported, so the outer runner ignores them. They are
6
+ // driven directly through the src ManualRun pipeline below, which is what lets
7
+ // coverage reach run.ts, the hook handlers and specs.ts.
8
+ class Dependency extends Test() {
9
+ constructor() {
10
+ super(...arguments);
11
+ this.ready = false;
12
+ }
13
+ init() {
14
+ this.ready = true;
15
+ }
16
+ cleanUp() { }
17
+ }
18
+ class Main extends Test({
19
+ dependencies: {
20
+ dep: () => Dependency,
21
+ depDirect: Dependency, // covers the direct-class dependency branch
22
+ },
23
+ }) {
24
+ _internal() {
25
+ assert.fail("internal methods should never run as specs");
26
+ }
27
+ skip_thisOne() {
28
+ assert.fail("skip_ methods should never run");
29
+ }
30
+ hookInit() { }
31
+ async before() { }
32
+ async after() { }
33
+ async beforeEach() { }
34
+ async afterEach() { }
35
+ usesDependency() {
36
+ assert.equal(this.dep.ready, true);
37
+ assert.equal(this.depDirect.ready, true);
38
+ }
39
+ cleanUp() { }
40
+ }
41
+ class OrderFirst extends Test() {
42
+ step() { }
43
+ }
44
+ class OrderLast extends Test({ before: () => [OrderFirst] }) {
45
+ step() { }
46
+ }
47
+ class AfterAnchor extends Test() {
48
+ step() { }
49
+ }
50
+ class AfterDependent extends Test({ after: () => [AfterAnchor] }) {
51
+ step() { }
52
+ }
53
+ class DynamicSkipClassFromSpec extends Test() {
54
+ first() {
55
+ skipClass("skipped from a spec");
56
+ }
57
+ second() {
58
+ assert.fail("should have been class-skipped");
59
+ }
60
+ }
61
+ class DynamicSkipClassFromBefore extends Test() {
62
+ before() {
63
+ skipClass("skipped from before");
64
+ }
65
+ spec() {
66
+ assert.fail("should have been class-skipped");
67
+ }
68
+ }
69
+ class DynamicSkipSingleSpec extends Test() {
70
+ skipped() {
71
+ skipTest("just this one");
72
+ }
73
+ kept() { }
74
+ }
75
+ class StaticallySkipped extends Test({ skip: "static skip" }) {
76
+ spec() {
77
+ assert.fail("should have been skipped");
78
+ }
79
+ }
80
+ class Failing extends Test() {
81
+ boom() {
82
+ throw new Error("intentional failure");
83
+ }
84
+ }
85
+ class SkipTestInBefore extends Test() {
86
+ before() {
87
+ skipTest("wrong helper");
88
+ }
89
+ spec() { }
90
+ }
91
+ export class PipelineTest extends Test() {
92
+ async dynamicApi() {
93
+ class NeverRegistered extends Test() {
94
+ spec() { }
95
+ }
96
+ assert.equal(addTest(() => NeverRegistered), true);
97
+ assert.equal(addTest(() => NeverRegistered), false); // duplicate
98
+ const instance = getTest(() => NeverRegistered);
99
+ assert.ok(instance);
100
+ class Unknown extends Test() {
101
+ }
102
+ assert.equal(getTest(() => Unknown), null);
103
+ assert.throws(() => skipTest("x"), (e) => e._nole_anchor === 1 && e.reason === "x");
104
+ assert.throws(() => skipClass("y"), (e) => e._nole_anchor === 2 && e.reason === "y");
105
+ }
106
+ async drivesTheWholePipeline() {
107
+ await ManualRun(new Set([
108
+ Main,
109
+ OrderFirst,
110
+ OrderLast,
111
+ AfterAnchor,
112
+ AfterDependent,
113
+ DynamicSkipClassFromSpec,
114
+ DynamicSkipClassFromBefore,
115
+ DynamicSkipSingleSpec,
116
+ StaticallySkipped,
117
+ ]));
118
+ // a throwing spec propagates out of the pipeline
119
+ await assert.rejects(() => ManualRun(new Set([Failing])));
120
+ // skipTest inside a before hook is a usage error
121
+ await assert.rejects(() => ManualRun(new Set([SkipTestInBefore])));
122
+ }
123
+ }
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9waXBlbGluZS50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDbEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRXJDLDZFQUE2RTtBQUM3RSwrRUFBK0U7QUFDL0UseURBQXlEO0FBRXpELE1BQU0sVUFBVyxTQUFRLElBQUksRUFBRTtJQUEvQjs7UUFDRSxVQUFLLEdBQUcsS0FBSyxDQUFDO0lBT2hCLENBQUM7SUFMQyxJQUFJO1FBQ0YsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7SUFDcEIsQ0FBQztJQUVELE9BQU8sS0FBSSxDQUFDO0NBQ2I7QUFFRCxNQUFNLElBQUssU0FBUSxJQUFJLENBQUM7SUFDdEIsWUFBWSxFQUFFO1FBQ1osR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLFVBQVU7UUFDckIsU0FBUyxFQUFFLFVBQWlCLEVBQUUsNENBQTRDO0tBQzNFO0NBQ0YsQ0FBQztJQUNBLFNBQVM7UUFDUCxNQUFNLENBQUMsSUFBSSxDQUFDLDRDQUE0QyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELFlBQVk7UUFDVixNQUFNLENBQUMsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELFFBQVEsS0FBSSxDQUFDO0lBRWIsS0FBSyxDQUFDLE1BQU0sS0FBSSxDQUFDO0lBQ2pCLEtBQUssQ0FBQyxLQUFLLEtBQUksQ0FBQztJQUNoQixLQUFLLENBQUMsVUFBVSxLQUFJLENBQUM7SUFDckIsS0FBSyxDQUFDLFNBQVMsS0FBSSxDQUFDO0lB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
package/dist/run.d.ts CHANGED
@@ -1,7 +1,8 @@
1
- interface Options {
2
- log: Function;
3
- orderDebug: boolean;
4
- }
5
- export declare function ManualRun(options: Options): Promise<void>;
6
- export {};
1
+ import { TestWrap } from "./test-wrap.js";
2
+ import { BaseTest } from "./core.js";
3
+ export declare function ManualRun(originalTests: Set<new () => BaseTest>): Promise<void>;
4
+ export declare function updateInformationForClass(target: new () => BaseTest, test: TestWrap, tests: Map<new () => BaseTest, TestWrap>): void;
5
+ export declare function createInstanceIfNotExists(test: TestWrap): void;
6
+ export declare function getTestMap(): Map<new () => BaseTest, TestWrap>;
7
+ export declare function getFutureTestMap(): Map<new () => BaseTest, TestWrap>;
7
8
  //# sourceMappingURL=run.d.ts.map
package/dist/run.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"AAeA,UAAU,OAAO;IACf,GAAG,EAAE,QAAQ,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,iBA2CzC"}
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAsB,MAAM,WAAW,CAAC;AAWzD,wBAAsB,SAAS,CAAC,aAAa,EAAE,GAAG,CAAC,UAAU,QAAQ,CAAC,iBA0CrE;AAUD,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,UAAU,QAAQ,EAC1B,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,GAAG,CAAC,UAAU,QAAQ,EAAE,QAAQ,CAAC,QAyEzC;AAYD,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,QAAQ,QAWvD;AAgGD,wBAAgB,UAAU,kBA1PE,QAAQ,YA4PnC;AAED,wBAAgB,gBAAgB,kBA7PA,QAAQ,YA+PvC"}