nole 2.2.1 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/README.md +142 -236
  2. package/bin/nole.js +44 -42
  3. package/dist/const.d.ts +8 -0
  4. package/dist/const.d.ts.map +1 -0
  5. package/dist/const.js +9 -0
  6. package/dist/core.d.ts +22 -0
  7. package/dist/core.d.ts.map +1 -0
  8. package/dist/core.js +56 -0
  9. package/dist/dynamic.d.ts +4 -1
  10. package/dist/dynamic.d.ts.map +1 -1
  11. package/dist/dynamic.js +35 -11
  12. package/dist/handle/after-each-hooks.d.ts +3 -0
  13. package/dist/handle/after-each-hooks.d.ts.map +1 -0
  14. package/dist/handle/after-each-hooks.js +26 -0
  15. package/dist/handle/after-hooks.d.ts +3 -0
  16. package/dist/handle/after-hooks.d.ts.map +1 -0
  17. package/dist/handle/after-hooks.js +24 -0
  18. package/dist/handle/before-each-hooks.d.ts +3 -0
  19. package/dist/handle/before-each-hooks.d.ts.map +1 -0
  20. package/dist/handle/before-each-hooks.js +26 -0
  21. package/dist/handle/before-hooks.d.ts +3 -0
  22. package/dist/handle/before-hooks.d.ts.map +1 -0
  23. package/dist/handle/before-hooks.js +24 -0
  24. package/dist/handle/cleanup-hooks.d.ts +3 -0
  25. package/dist/handle/cleanup-hooks.d.ts.map +1 -0
  26. package/dist/handle/cleanup-hooks.js +34 -0
  27. package/dist/handle/specs.d.ts +3 -0
  28. package/dist/handle/specs.d.ts.map +1 -0
  29. package/dist/handle/specs.js +41 -0
  30. package/dist/index.d.ts +3 -3
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +4 -4
  33. package/dist/run.d.ts +7 -6
  34. package/dist/run.d.ts.map +1 -1
  35. package/dist/run.js +201 -239
  36. package/dist/symbol.d.ts +2 -0
  37. package/dist/symbol.d.ts.map +1 -0
  38. package/dist/symbol.js +2 -0
  39. package/dist/test-wrap.d.ts +37 -0
  40. package/dist/test-wrap.d.ts.map +1 -0
  41. package/dist/test-wrap.js +30 -0
  42. package/dist/utils/executor.d.ts +1 -1
  43. package/dist/utils/executor.js +20 -20
  44. package/dist/utils/executor.test.d.ts +7 -5
  45. package/dist/utils/executor.test.d.ts.map +1 -1
  46. package/dist/utils/executor.test.js +22 -49
  47. package/dist/utils/time_difference.d.ts +15 -6
  48. package/dist/utils/time_difference.d.ts.map +1 -1
  49. package/dist/utils/time_difference.js +22 -13
  50. package/dist/utils/time_difference.test.d.ts +5 -3
  51. package/dist/utils/time_difference.test.d.ts.map +1 -1
  52. package/dist/utils/time_difference.test.js +11 -24
  53. package/dist/utils/time_factor.d.ts +3 -3
  54. package/dist/utils/time_factor.d.ts.map +1 -1
  55. package/dist/utils/time_factor.js +26 -27
  56. package/dist/utils/time_factor.test.d.ts +5 -3
  57. package/dist/utils/time_factor.test.d.ts.map +1 -1
  58. package/dist/utils/time_factor.test.js +27 -42
  59. package/package.json +11 -8
  60. package/src/const.ts +11 -0
  61. package/src/core.ts +89 -0
  62. package/src/dynamic.ts +43 -1
  63. package/src/handle/after-each-hooks.ts +41 -0
  64. package/src/handle/after-hooks.ts +38 -0
  65. package/src/handle/before-each-hooks.ts +40 -0
  66. package/src/handle/before-hooks.ts +39 -0
  67. package/src/handle/cleanup-hooks.ts +55 -0
  68. package/src/handle/specs.ts +68 -0
  69. package/src/index.ts +3 -13
  70. package/src/run.ts +184 -256
  71. package/src/symbol.ts +1 -0
  72. package/src/{test.ts → test-wrap.ts} +13 -12
  73. package/src/utils/executor.test.ts +2 -5
  74. package/src/utils/executor.ts +1 -1
  75. package/src/utils/time_difference.test.ts +2 -3
  76. package/src/utils/time_factor.test.ts +2 -3
  77. package/src/utils/time_factor.ts +1 -3
  78. package/test/basic.test.ts +8 -9
  79. package/test/before.test.ts +14 -27
  80. package/test/clean-up.test.ts +12 -16
  81. package/test/dynamic-skip.test.ts +2 -4
  82. package/test/dynamic.test.ts +23 -8
  83. package/test/extend.test.ts +43 -0
  84. package/test/hook.test.ts +9 -10
  85. package/test/multi-dependency.test.ts +25 -27
  86. package/test/multiple-uppercased-chars.test.ts +8 -7
  87. package/test/skip-all.test.ts +4 -13
  88. package/test/turkish-chars.test.ts +8 -7
  89. package/tsconfig.json +9 -18
  90. package/dist/data.d.ts +0 -3
  91. package/dist/data.d.ts.map +0 -1
  92. package/dist/data.js +0 -9
  93. package/dist/data.js.map +0 -1
  94. package/dist/decorators.d.ts +0 -9
  95. package/dist/decorators.d.ts.map +0 -1
  96. package/dist/decorators.js +0 -118
  97. package/dist/decorators.js.map +0 -1
  98. package/dist/dynamic.js.map +0 -1
  99. package/dist/index.js.map +0 -1
  100. package/dist/run.js.map +0 -1
  101. package/dist/test.d.ts +0 -39
  102. package/dist/test.d.ts.map +0 -1
  103. package/dist/test.js +0 -25
  104. package/dist/test.js.map +0 -1
  105. package/dist/utils/executor.js.map +0 -1
  106. package/dist/utils/executor.test.js.map +0 -1
  107. package/dist/utils/time_difference.js.map +0 -1
  108. package/dist/utils/time_difference.test.js.map +0 -1
  109. package/dist/utils/time_factor.js.map +0 -1
  110. package/dist/utils/time_factor.test.js.map +0 -1
  111. package/src/data.ts +0 -13
  112. package/src/decorators.ts +0 -208
@@ -1,49 +1,22 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- var __metadata = (this && this.__metadata) || function (k, v) {
8
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
- };
10
- import * as assert from "assert";
11
- import { Spec } from "../index.js";
12
- import { Executor } from "./executor.js";
13
- export class ExecutorTest {
14
- async evaluate() {
15
- await Executor(() => 1, 1);
16
- await Executor(async () => 1, 1);
17
- }
18
- async throws() {
19
- await assert.rejects(() => {
20
- return Executor(() => {
21
- throw new Error("throws");
22
- }, 1);
23
- });
24
- }
25
- async timeout() {
26
- await assert.rejects(() => {
27
- return Executor(() => new Promise(() => { }), 10);
28
- });
29
- }
30
- }
31
- __decorate([
32
- Spec(),
33
- __metadata("design:type", Function),
34
- __metadata("design:paramtypes", []),
35
- __metadata("design:returntype", Promise)
36
- ], ExecutorTest.prototype, "evaluate", null);
37
- __decorate([
38
- Spec(),
39
- __metadata("design:type", Function),
40
- __metadata("design:paramtypes", []),
41
- __metadata("design:returntype", Promise)
42
- ], ExecutorTest.prototype, "throws", null);
43
- __decorate([
44
- Spec(),
45
- __metadata("design:type", Function),
46
- __metadata("design:paramtypes", []),
47
- __metadata("design:returntype", Promise)
48
- ], ExecutorTest.prototype, "timeout", null);
49
- //# sourceMappingURL=executor.test.js.map
1
+ import * as assert from "assert";
2
+ import { Executor } from "./executor.js";
3
+ import { Test } from "../index.js";
4
+ export class ExecutorTest extends Test() {
5
+ async evaluate() {
6
+ await Executor(() => 1, 1);
7
+ await Executor(async () => 1, 1);
8
+ }
9
+ async throws() {
10
+ await assert.rejects(() => {
11
+ return Executor(() => {
12
+ throw new Error("throws");
13
+ }, 1);
14
+ });
15
+ }
16
+ async timeout() {
17
+ await assert.rejects(() => {
18
+ return Executor(() => new Promise(() => { }), 10);
19
+ });
20
+ }
21
+ }
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0b3IudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9leGVjdXRvci50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVuQyxNQUFNLE9BQU8sWUFBYSxTQUFRLElBQUksRUFBRTtJQUN0QyxLQUFLLENBQUMsUUFBUTtRQUNaLE1BQU0sUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzQixNQUFNLFFBQVEsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsS0FBSyxDQUFDLE1BQU07UUFDVixNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFO1lBQ3hCLE9BQU8sUUFBUSxDQUFDLEdBQUcsRUFBRTtnQkFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM1QixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTztRQUNYLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUU7WUFDeEIsT0FBTyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDbkQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YifQ==
@@ -1,7 +1,16 @@
1
- export declare class TimeDifference {
2
- private startAt;
3
- private constructor();
4
- static begin(): TimeDifference;
5
- end(): number;
6
- }
1
+ /**
2
+ * Calculates the time difference in nanoseconds
3
+ */
4
+ export declare class TimeDifference {
5
+ private startAt;
6
+ private constructor();
7
+ /**
8
+ * Creates the instance at the begining
9
+ */
10
+ static begin(): TimeDifference;
11
+ /**
12
+ * Finishes the time, returns data in milliseconds
13
+ */
14
+ end(): number;
15
+ }
7
16
  //# sourceMappingURL=time_difference.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"time_difference.d.ts","sourceRoot":"","sources":["../../src/utils/time_difference.ts"],"names":[],"mappings":"AAGA,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAmB;IAElC,OAAO;WAOO,KAAK;IAOnB,GAAG,IAAI,MAAM;CAKd"}
1
+ {"version":3,"file":"time_difference.d.ts","sourceRoot":"","sources":["../../src/utils/time_difference.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAmB;IAElC,OAAO;IAIP;;OAEG;WACW,KAAK;IAInB;;OAEG;IACH,GAAG,IAAI,MAAM;CAKd"}
@@ -1,13 +1,22 @@
1
- export class TimeDifference {
2
- constructor() {
3
- this.startAt = process.hrtime();
4
- }
5
- static begin() {
6
- return new TimeDifference();
7
- }
8
- end() {
9
- let diff = process.hrtime(this.startAt);
10
- return diff[0] * 1000 + diff[1] / 1e6;
11
- }
12
- }
13
- //# sourceMappingURL=time_difference.js.map
1
+ /**
2
+ * Calculates the time difference in nanoseconds
3
+ */
4
+ export class TimeDifference {
5
+ constructor() {
6
+ this.startAt = process.hrtime();
7
+ }
8
+ /**
9
+ * Creates the instance at the begining
10
+ */
11
+ static begin() {
12
+ return new TimeDifference();
13
+ }
14
+ /**
15
+ * Finishes the time, returns data in milliseconds
16
+ */
17
+ end() {
18
+ let diff = process.hrtime(this.startAt);
19
+ return diff[0] * 1000 + diff[1] / 1e6;
20
+ }
21
+ }
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZV9kaWZmZXJlbmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3RpbWVfZGlmZmVyZW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sT0FBTyxjQUFjO0lBR3pCO1FBQ0UsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLEtBQUs7UUFDakIsT0FBTyxJQUFJLGNBQWMsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRDs7T0FFRztJQUNILEdBQUc7UUFDRCxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV4QyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUN4QyxDQUFDO0NBQ0YifQ==
@@ -1,4 +1,6 @@
1
- export declare class TimeDifferenceTest {
2
- evaluate(): Promise<void>;
3
- }
1
+ declare const TimeDifferenceTest_base: new () => {} & import("../core.js").BaseTest;
2
+ export declare class TimeDifferenceTest extends TimeDifferenceTest_base {
3
+ evaluate(): Promise<void>;
4
+ }
5
+ export {};
4
6
  //# sourceMappingURL=time_difference.test.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"time_difference.test.d.ts","sourceRoot":"","sources":["../../src/utils/time_difference.test.ts"],"names":[],"mappings":"AAKA,qBAAa,kBAAkB;IAEvB,QAAQ;CAIf"}
1
+ {"version":3,"file":"time_difference.test.d.ts","sourceRoot":"","sources":["../../src/utils/time_difference.test.ts"],"names":[],"mappings":";AAKA,qBAAa,kBAAmB,SAAQ,uBAAM;IACtC,QAAQ;CAIf"}
@@ -1,24 +1,11 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- var __metadata = (this && this.__metadata) || function (k, v) {
8
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
- };
10
- import { Spec } from "../index.js";
11
- import { TimeDifference } from "./time_difference.js";
12
- export class TimeDifferenceTest {
13
- async evaluate() {
14
- const td = TimeDifference.begin();
15
- td.end();
16
- }
17
- }
18
- __decorate([
19
- Spec(),
20
- __metadata("design:type", Function),
21
- __metadata("design:paramtypes", []),
22
- __metadata("design:returntype", Promise)
23
- ], TimeDifferenceTest.prototype, "evaluate", null);
24
- //# sourceMappingURL=time_difference.test.js.map
1
+ import * as assert from "assert";
2
+ import { Test } from "../index.js";
3
+ import { Executor } from "./executor.js";
4
+ import { TimeDifference } from "./time_difference.js";
5
+ export class TimeDifferenceTest extends Test() {
6
+ async evaluate() {
7
+ const td = TimeDifference.begin();
8
+ td.end();
9
+ }
10
+ }
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZV9kaWZmZXJlbmNlLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvdGltZV9kaWZmZXJlbmNlLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDakMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNuQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV0RCxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsSUFBSSxFQUFFO0lBQzVDLEtBQUssQ0FBQyxRQUFRO1FBQ1osTUFBTSxFQUFFLEdBQUcsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2xDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNYLENBQUM7Q0FDRiJ9
@@ -1,4 +1,4 @@
1
- export declare function TimeFactor(diff: number, timeout: number): any;
2
- export declare function TimeResolve(ms: number): string;
3
- export declare function Delay(ms: number): Promise<void>;
1
+ export declare function TimeFactor(diff: number, timeout: number): any;
2
+ export declare function TimeResolve(ms: number): string;
3
+ export declare function Delay(ms: number): Promise<void>;
4
4
  //# sourceMappingURL=time_factor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"time_factor.d.ts","sourceRoot":"","sources":["../../src/utils/time_factor.ts"],"names":[],"mappings":"AAIA,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,OAUvD;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,UAcrC;AAED,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C"}
1
+ {"version":3,"file":"time_factor.d.ts","sourceRoot":"","sources":["../../src/utils/time_factor.ts"],"names":[],"mappings":"AAEA,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,OAUvD;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,UAcrC;AAED,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C"}
@@ -1,27 +1,26 @@
1
- import * as clrs from "colors/safe.js";
2
- const colors = clrs.default;
3
- export function TimeFactor(diff, timeout) {
4
- if (diff < timeout / 5) {
5
- return colors.green(TimeResolve(diff).padStart(9, " "));
6
- }
7
- if (diff < timeout / 2) {
8
- return colors.yellow(TimeResolve(diff).padStart(9, " "));
9
- }
10
- return colors.red(TimeResolve(diff).padStart(9, " "));
11
- }
12
- export function TimeResolve(ms) {
13
- if (ms < 1000) {
14
- return ((ms * 100) | 0) / 100 + " ms";
15
- }
16
- if (ms < 60 * 1000) {
17
- return ((ms / 10) | 0) / 100 + " s";
18
- }
19
- if (ms < 60 * 60 * 1000) {
20
- return ((ms / 600) | 0) / 100 + " m";
21
- }
22
- return ((ms / 36000) | 0) / 100 + " h";
23
- }
24
- export function Delay(ms) {
25
- return new Promise((resolve) => setTimeout(resolve, ms));
26
- }
27
- //# sourceMappingURL=time_factor.js.map
1
+ import { colors } from "../const.js";
2
+ export function TimeFactor(diff, timeout) {
3
+ if (diff < timeout / 5) {
4
+ return colors.green(TimeResolve(diff).padStart(9, " "));
5
+ }
6
+ if (diff < timeout / 2) {
7
+ return colors.yellow(TimeResolve(diff).padStart(9, " "));
8
+ }
9
+ return colors.red(TimeResolve(diff).padStart(9, " "));
10
+ }
11
+ export function TimeResolve(ms) {
12
+ if (ms < 1000) {
13
+ return ((ms * 100) | 0) / 100 + " ms";
14
+ }
15
+ if (ms < 60 * 1000) {
16
+ return ((ms / 10) | 0) / 100 + " s";
17
+ }
18
+ if (ms < 60 * 60 * 1000) {
19
+ return ((ms / 600) | 0) / 100 + " m";
20
+ }
21
+ return ((ms / 36000) | 0) / 100 + " h";
22
+ }
23
+ export function Delay(ms) {
24
+ return new Promise((resolve) => setTimeout(resolve, ms));
25
+ }
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZV9mYWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvdGltZV9mYWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVyQyxNQUFNLFVBQVUsVUFBVSxDQUFDLElBQVksRUFBRSxPQUFlO0lBQ3RELElBQUksSUFBSSxHQUFHLE9BQU8sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN2QixPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsSUFBSSxJQUFJLEdBQUcsT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3ZCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN4RCxDQUFDO0FBRUQsTUFBTSxVQUFVLFdBQVcsQ0FBQyxFQUFVO0lBQ3BDLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO1FBQ2QsT0FBTyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUM7SUFDeEMsQ0FBQztJQUVELElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztRQUNuQixPQUFPLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztJQUN0QyxDQUFDO0lBRUQsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztRQUN4QixPQUFPLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztJQUN2QyxDQUFDO0lBRUQsT0FBTyxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDekMsQ0FBQztBQUVELE1BQU0sVUFBVSxLQUFLLENBQUMsRUFBVTtJQUM5QixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0QsQ0FBQyJ9
@@ -1,4 +1,6 @@
1
- export declare class TimeFactorTest {
2
- evaluate(): Promise<void>;
3
- }
1
+ declare const TimeFactorTest_base: new () => {} & import("../core.js").BaseTest;
2
+ export declare class TimeFactorTest extends TimeFactorTest_base {
3
+ evaluate(): Promise<void>;
4
+ }
5
+ export {};
4
6
  //# sourceMappingURL=time_factor.test.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"time_factor.test.d.ts","sourceRoot":"","sources":["../../src/utils/time_factor.test.ts"],"names":[],"mappings":"AAGA,qBAAa,cAAc;IAEnB,QAAQ;CAuBf"}
1
+ {"version":3,"file":"time_factor.test.d.ts","sourceRoot":"","sources":["../../src/utils/time_factor.test.ts"],"names":[],"mappings":";AAGA,qBAAa,cAAe,SAAQ,mBAAM;IAClC,QAAQ;CAuBf"}
@@ -1,42 +1,27 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- var __metadata = (this && this.__metadata) || function (k, v) {
8
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
- };
10
- import { Spec } from "../index.js";
11
- import { Delay, TimeFactor } from "./time_factor.js";
12
- export class TimeFactorTest {
13
- async evaluate() {
14
- await Delay(1);
15
- for (const n of [
16
- 100,
17
- 1000,
18
- 60 * 1000,
19
- 120 * 1000,
20
- 60 * 60 * 1000,
21
- 65 * 60 * 1000,
22
- 25 * 60 * 60 * 1000,
23
- ]) {
24
- TimeFactor(n / 1000, n);
25
- TimeFactor(n / 500, n);
26
- TimeFactor(n / 10, n);
27
- TimeFactor(n / 6, n);
28
- TimeFactor(n / 4, n);
29
- TimeFactor(n / 2, n);
30
- TimeFactor(n / 1.5, n);
31
- TimeFactor(n, n);
32
- TimeFactor(n * 2, n);
33
- }
34
- }
35
- }
36
- __decorate([
37
- Spec(),
38
- __metadata("design:type", Function),
39
- __metadata("design:paramtypes", []),
40
- __metadata("design:returntype", Promise)
41
- ], TimeFactorTest.prototype, "evaluate", null);
42
- //# sourceMappingURL=time_factor.test.js.map
1
+ import { Test } from "../index.js";
2
+ import { Delay, TimeFactor } from "./time_factor.js";
3
+ export class TimeFactorTest extends Test() {
4
+ async evaluate() {
5
+ await Delay(1);
6
+ for (const n of [
7
+ 100,
8
+ 1000,
9
+ 60 * 1000,
10
+ 120 * 1000,
11
+ 60 * 60 * 1000,
12
+ 65 * 60 * 1000,
13
+ 25 * 60 * 60 * 1000,
14
+ ]) {
15
+ TimeFactor(n / 1000, n);
16
+ TimeFactor(n / 500, n);
17
+ TimeFactor(n / 10, n);
18
+ TimeFactor(n / 6, n);
19
+ TimeFactor(n / 4, n);
20
+ TimeFactor(n / 2, n);
21
+ TimeFactor(n / 1.5, n);
22
+ TimeFactor(n, n);
23
+ TimeFactor(n * 2, n);
24
+ }
25
+ }
26
+ }
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZV9mYWN0b3IudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy90aW1lX2ZhY3Rvci50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbkMsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVyRCxNQUFNLE9BQU8sY0FBZSxTQUFRLElBQUksRUFBRTtJQUN4QyxLQUFLLENBQUMsUUFBUTtRQUNaLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWYsS0FBSyxNQUFNLENBQUMsSUFBSTtZQUNkLEdBQUc7WUFDSCxJQUFJO1lBQ0osRUFBRSxHQUFHLElBQUk7WUFDVCxHQUFHLEdBQUcsSUFBSTtZQUNWLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSTtZQUNkLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSTtZQUNkLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUk7U0FDcEIsRUFBRSxDQUFDO1lBQ0YsVUFBVSxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDeEIsVUFBVSxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDdkIsVUFBVSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDdEIsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDckIsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDckIsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDckIsVUFBVSxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDdkIsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNqQixVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQztDQUNGIn0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nole",
3
- "version": "2.2.1",
3
+ "version": "3.0.0",
4
4
  "type": "module",
5
5
  "description": "Testing Library for Typescript projects",
6
6
  "main": "dist/index.js",
@@ -14,7 +14,7 @@
14
14
  },
15
15
  "scripts": {
16
16
  "build": "tsc",
17
- "test": "node --loader=ts-node/esm ./bin/nole.js ./test/**/*.test.ts ./src/**/*.test.ts",
17
+ "test": "node ./bin/nole.js ./test/**/*.test.ts ./src/**/*.test.ts",
18
18
  "coverage": "c8 npm run test"
19
19
  },
20
20
  "keywords": [
@@ -25,16 +25,19 @@
25
25
  "author": "co3moz",
26
26
  "license": "ISC",
27
27
  "dependencies": {
28
- "@types/node": "^16.11.41",
29
28
  "camelcase": "^7.0.0",
30
29
  "colors": "^1.3.3",
31
30
  "commander": "^2.19.0",
32
- "glob": "^7.2.3",
33
- "ts-node": "^10.8.1",
34
- "typescript": "^4.7.3"
31
+ "glob": "^13.0.2"
32
+ },
33
+ "peerDependencies": {
34
+ "tsx": "^4.21.0"
35
35
  },
36
36
  "devDependencies": {
37
- "c8": "^7.11.3"
37
+ "@types/node": "^20.17.25",
38
+ "c8": "^7.11.3",
39
+ "tsx": "^4.21.0",
40
+ "typescript": "^5.9.3"
38
41
  },
39
42
  "c8": {
40
43
  "all": true,
@@ -52,4 +55,4 @@
52
55
  "**/*.test.ts"
53
56
  ]
54
57
  }
55
- }
58
+ }
package/src/const.ts ADDED
@@ -0,0 +1,11 @@
1
+ import * as clrs from "colors/safe.js";
2
+
3
+ export const colors = (clrs as any).default;
4
+
5
+ export const OK_TEXT = colors.bold(colors.green(" (ok) "));
6
+ export const SKIP_TEXT = colors.bold(colors.yellow(" (skip) "));
7
+ export const DYNAMIC_SKIP_TEXT = colors.bold(colors.blue(" (dskip) "));
8
+ export const FAILED_TEXT = colors.bold(colors.red(" (failed) "));
9
+ export const HOOK_FAILED_TEXT = colors.bold(colors.red(" (hook failed) "));
10
+
11
+ export const DEFAULT_TIMEOUT = 5000;
package/src/core.ts ADDED
@@ -0,0 +1,89 @@
1
+ import { TEST_CLASS_KEY } from "./symbol.js";
2
+
3
+ export interface TestClassInfo {
4
+ dependencies?: Map<string, () => new () => BaseTest>;
5
+ skip?: string;
6
+ before?: () => Array<new () => BaseTest>;
7
+ after?: () => Array<new () => BaseTest>;
8
+ timeout?: number;
9
+ }
10
+
11
+ export class BaseTest {
12
+ static [TEST_CLASS_KEY]: TestClassInfo = {
13
+ dependencies: new Map(),
14
+ timeout: 5000,
15
+ };
16
+ }
17
+
18
+ type DependencyDefinitionRule<T extends BaseTest> = () => new () => T;
19
+ type InferDependencyDefinition<T> = T extends () => infer U ? U : never;
20
+
21
+ export function Test<
22
+ Deps extends Record<string, DependencyDefinitionRule<any>> = {},
23
+ >({
24
+ dependencies,
25
+ skip,
26
+ before,
27
+ after,
28
+ timeout,
29
+ }: {
30
+ dependencies?: Deps;
31
+ skip?: string;
32
+ before?: () => Array<new () => BaseTest>;
33
+ after?: () => Array<new () => BaseTest>;
34
+ timeout?: number;
35
+ } = {}) {
36
+ type Props = {
37
+ [K in keyof Deps]: InstanceType<InferDependencyDefinition<Deps[K]>>;
38
+ };
39
+
40
+ function wrap(superClassInfo: TestClassInfo): TestClassInfo {
41
+ const deps = dependencies ? dependencies : ({} as Deps);
42
+
43
+ const classInfo = { ...superClassInfo };
44
+
45
+ if (!classInfo.dependencies) {
46
+ classInfo.dependencies = new Map();
47
+ } else {
48
+ classInfo.dependencies = new Map(classInfo.dependencies);
49
+ }
50
+
51
+ if (before !== undefined) {
52
+ classInfo.before = before;
53
+ }
54
+
55
+ if (after !== undefined) {
56
+ classInfo.after = after;
57
+ }
58
+
59
+ for (const key of Object.keys(deps)) {
60
+ const config = deps[key];
61
+
62
+ if (TEST_CLASS_KEY in config) {
63
+ classInfo.dependencies.set(key, (() => config) as any);
64
+ } else if (typeof config === "function") {
65
+ classInfo.dependencies.set(key, config);
66
+ } else {
67
+ throw new Error(`Invalid dependency configuration for key ${key}`);
68
+ }
69
+ }
70
+
71
+ if (skip !== undefined) {
72
+ classInfo.skip = skip;
73
+ }
74
+
75
+ if (timeout !== undefined) {
76
+ classInfo.timeout = timeout;
77
+ }
78
+
79
+ return classInfo;
80
+ }
81
+
82
+ return class extends BaseTest {
83
+ static [TEST_CLASS_KEY]: TestClassInfo = wrap(super[TEST_CLASS_KEY]);
84
+
85
+ constructor() {
86
+ super();
87
+ }
88
+ } as unknown as new () => Props & BaseTest;
89
+ }
package/src/dynamic.ts CHANGED
@@ -1,4 +1,13 @@
1
- export function skipTest(reason?: string) {
1
+ import { BaseTest } from "./core.js";
2
+ import {
3
+ createInstanceIfNotExists,
4
+ getFutureTestMap,
5
+ getTestMap,
6
+ updateInformationForClass,
7
+ } from "./run.js";
8
+ import { TestWrap } from "./test-wrap.js";
9
+
10
+ export function skipTest(reason?: string): never {
2
11
  throw new NoleManualSkip(reason);
3
12
  }
4
13
 
@@ -9,3 +18,36 @@ class NoleManualSkip extends Error {
9
18
  super(`Dynamicly skipped! ${reason}`);
10
19
  }
11
20
  }
21
+
22
+ export function getTest<T extends BaseTest>(
23
+ test: () => new () => T,
24
+ ): Partial<T> | null {
25
+ const testWrap = getTestMap().get(test() as any) as TestWrap | undefined;
26
+
27
+ if (!testWrap) {
28
+ return null;
29
+ }
30
+
31
+ createInstanceIfNotExists(testWrap);
32
+
33
+ return testWrap.testInstance;
34
+ }
35
+
36
+ export function addTest<T extends BaseTest>(test: () => new () => T) {
37
+ const testMap = getTestMap();
38
+ const remainingTests = getFutureTestMap();
39
+
40
+ const testClass = test();
41
+
42
+ if (testMap.has(testClass)) {
43
+ return false;
44
+ }
45
+
46
+ const testWrap = new TestWrap(testClass);
47
+ remainingTests.set(testClass, testWrap);
48
+ testMap.set(testClass, testWrap);
49
+
50
+ updateInformationForClass(testClass, testWrap, testMap);
51
+
52
+ return true;
53
+ }
@@ -0,0 +1,41 @@
1
+ import { HookType, TestWrap } from "../test-wrap.js";
2
+ import { Executor } from "../utils/executor.js";
3
+ import { TimeFactor } from "../utils/time_factor.js";
4
+ import {
5
+ colors,
6
+ DEFAULT_TIMEOUT,
7
+ HOOK_FAILED_TEXT,
8
+ OK_TEXT,
9
+ } from "../const.js";
10
+
11
+ export async function handleAfterEachHooks(test: TestWrap) {
12
+ const timeout = test.config.timeout ?? DEFAULT_TIMEOUT;
13
+
14
+ for (let [propertyKey, hook] of test.hooks.entries()) {
15
+ if (hook.type != HookType.AfterEach) continue;
16
+
17
+ let hookName = colors.bold(
18
+ colors.yellow(
19
+ test.name +
20
+ (propertyKey != "afterEach"
21
+ ? `.${propertyKey}:afterEach`
22
+ : ":afterEach"),
23
+ ),
24
+ );
25
+
26
+ try {
27
+ await Executor(
28
+ test.testInstance[propertyKey].bind(test.testInstance),
29
+ timeout,
30
+ );
31
+
32
+ let timeText = TimeFactor(0, timeout);
33
+
34
+ console.log(`${OK_TEXT} ${timeText} ${hookName}()`);
35
+ } catch (e) {
36
+ console.error(`${HOOK_FAILED_TEXT} ${hookName}()`);
37
+ console.error((e as any)?.stack ?? e);
38
+ throw e;
39
+ }
40
+ }
41
+ }
@@ -0,0 +1,38 @@
1
+ import { HookType, TestWrap } from "../test-wrap.js";
2
+ import { Executor } from "../utils/executor.js";
3
+ import { TimeFactor } from "../utils/time_factor.js";
4
+ import {
5
+ colors,
6
+ DEFAULT_TIMEOUT,
7
+ HOOK_FAILED_TEXT,
8
+ OK_TEXT,
9
+ } from "../const.js";
10
+
11
+ export async function handleAfterHooks(test: TestWrap) {
12
+ const timeout = test.config.timeout ?? DEFAULT_TIMEOUT;
13
+
14
+ for (let [propertyKey, hook] of test.hooks.entries()) {
15
+ if (hook.type != HookType.After) continue;
16
+
17
+ let hookName = colors.bold(
18
+ colors.yellow(
19
+ test.name +
20
+ (propertyKey != "after" ? `.${propertyKey}:after` : ":after"),
21
+ ),
22
+ );
23
+
24
+ try {
25
+ await Executor(
26
+ test.testInstance[propertyKey].bind(test.testInstance),
27
+ timeout,
28
+ );
29
+ let timeText = TimeFactor(0, timeout);
30
+
31
+ console.log(`${OK_TEXT} ${timeText} ${hookName}()`);
32
+ } catch (e) {
33
+ console.error(`${HOOK_FAILED_TEXT} ${hookName}()`);
34
+ console.error((e as any)?.stack ?? e);
35
+ throw e;
36
+ }
37
+ }
38
+ }