nole 2.0.0 → 2.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 (44) hide show
  1. package/README.md +65 -1
  2. package/bin/nole.js +6 -2
  3. package/dist/data.js +1 -1
  4. package/dist/data.js.map +1 -1
  5. package/dist/decorators.d.ts +1 -0
  6. package/dist/decorators.d.ts.map +1 -1
  7. package/dist/decorators.js +11 -0
  8. package/dist/decorators.js.map +1 -1
  9. package/dist/index.d.ts +1 -1
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +1 -1
  12. package/dist/index.js.map +1 -1
  13. package/dist/run.d.ts +6 -1
  14. package/dist/run.d.ts.map +1 -1
  15. package/dist/run.js +63 -29
  16. package/dist/run.js.map +1 -1
  17. package/dist/test.d.ts.map +1 -1
  18. package/dist/test.js +1 -1
  19. package/dist/test.js.map +1 -1
  20. package/dist/utils/executor.test.d.ts +6 -0
  21. package/dist/utils/executor.test.d.ts.map +1 -0
  22. package/dist/utils/executor.test.js +49 -0
  23. package/dist/utils/executor.test.js.map +1 -0
  24. package/dist/utils/time_difference.test.d.ts +4 -0
  25. package/dist/utils/time_difference.test.d.ts.map +1 -0
  26. package/dist/utils/time_difference.test.js +24 -0
  27. package/dist/utils/time_difference.test.js.map +1 -0
  28. package/dist/utils/time_factor.test.d.ts +4 -0
  29. package/dist/utils/time_factor.test.d.ts.map +1 -0
  30. package/dist/utils/time_factor.test.js +42 -0
  31. package/dist/utils/time_factor.test.js.map +1 -0
  32. package/package.json +23 -2
  33. package/src/data.ts +1 -1
  34. package/src/decorators.ts +17 -0
  35. package/src/index.ts +1 -1
  36. package/src/run.ts +81 -34
  37. package/src/test.ts +2 -4
  38. package/src/utils/executor.test.ts +27 -0
  39. package/src/utils/executor.ts +1 -1
  40. package/src/utils/time_difference.test.ts +12 -0
  41. package/src/utils/time_factor.test.ts +29 -0
  42. package/test/hook.test.ts +2 -2
  43. package/test/multi-dependency.test.ts +23 -0
  44. package/test/skip-all.test.ts +7 -1
package/README.md CHANGED
@@ -5,6 +5,10 @@ Nole
5
5
 
6
6
  Nole is a testing platform just like mocha.. You can create test classes and declare specs with decorators..
7
7
 
8
+ > Use nole 2.x for ESM and Typescript.
9
+
10
+ > Use nole 1.x for CommonJS. (ability to disable Typescript with -T option)
11
+
8
12
  ```ts
9
13
  // test/queue.test.ts
10
14
  import { Spec } from 'nole';
@@ -146,6 +150,32 @@ class Other {
146
150
  > * All dependencies will be waited until done
147
151
  > * If dependencies cannot resolve, it will occurr an error after the available tests done.
148
152
 
153
+
154
+ ## Multi Dependencies
155
+
156
+ Easier way to declare dependencies by decorating class with an array.
157
+
158
+ ```ts
159
+ // test/redis.test.ts
160
+ import { Spec, Dependencies } from 'nole';
161
+ import { Database } from './database.test';
162
+ import { Other } from './other.test';
163
+
164
+ @Dependencies([
165
+ Database,
166
+ Other
167
+ ])
168
+ class Redis {
169
+ database: Database; // camel-case syntax
170
+ // even though other does not exist in this test, but nole will make sure it is completed when this test runs
171
+
172
+ @Spec()
173
+ async DoThings() {
174
+ await database.connection.doStuff();
175
+ }
176
+ }
177
+ ```
178
+
149
179
  ## Hook
150
180
 
151
181
  Hooks will help you to develop helper methods.
@@ -256,8 +286,42 @@ Connection closed!
256
286
 
257
287
  We do not provide assert library. You can use chai or should.js.
258
288
 
289
+ ## Debugging
290
+
291
+ Having cleanup features with missing dependencies could lead to issues and time loses. To make sure execution of tests correct, use `-O` parameter to print out every spec and hook without calling the function. It will also print before/after hook orders.
292
+
293
+ ```bash
294
+ $ nole -O ./test/**/*.test.ts
295
+ (skip) SkipAllTest.wontRun() {skip all class}
296
+ (skip) SkipAllTest.wontRunToo() {wont run too}
297
+ (skip) SkipAllWithoutReason.wontRun()
298
+ (ok) 0 ms BasicTest.checkEqual()
299
+ (ok) 0 ms DependencyTest.check()
300
+ (ok) 0 ms CleanUpLayer1Test.start()
301
+ (ok) 0 ms CleanUpLayer2Test.start()
302
+ (ok) 0 ms CleanUpLayer3Test.start()
303
+ (ok) 0 ms DynamicSkipTest.thisShouldBeSkipped()
304
+ (ok) 0 ms HookTest.pushFourIntoArray:beforeEach()
305
+ (ok) 0 ms HookTest.hasToBe4()
306
+ (skip) HookTest.hasToBe4Again() {no need}
307
+ (ok) 0 ms HookTest.pushFourIntoArray:beforeEach()
308
+ (ok) 0.03 ms HookTest.hasToBe4AgainButNotSkipped()
309
+ (ok) 0 ms MultiDependency.test()
310
+ (ok) 0 ms CleanUpLayer3Test:cleanUp()
311
+ (ok) 0 ms CleanUpLayer2Test:cleanUp()
312
+ (ok) 0 ms CleanUpLayer1Test:cleanUp()
313
+ (ok) 0 ms DynamicTest.thisTestsShouldNotFail()
314
+ (ok) 0 ms TimeFactorTest.evaluate()
315
+ (ok) 0 ms TimeDifferenceTest.evaluate()
316
+ (ok) 0 ms ExecutorTest.evaluate()
317
+ (ok) 0 ms ExecutorTest.throws()
318
+ (ok) 0 ms ExecutorTest.timeout()
319
+ ```
320
+
259
321
  ## Compiled files
260
322
 
323
+ > Deprecated (v2.x+), It will always use ts-node/esm module
324
+
261
325
  You can run the compiled test files with `-T` option.
262
326
 
263
327
  ```bash
@@ -267,4 +331,4 @@ $ nole -T ./build/test/**/*.test.js
267
331
  (ok) 1.09 ms QueueTest.Pipe()
268
332
  ```
269
333
 
270
- > This will prevent to load ts-node register. It will be quite faster.
334
+ > This will prevent to load ts-node register. It will be quite faster.
package/bin/nole.js CHANGED
@@ -14,6 +14,7 @@ const pkg = JSON.parse(fs.readFileSync(new URL('../package.json', import.meta.ur
14
14
  program
15
15
  .usage('<glob> ...')
16
16
  .option('-L, --no-log', 'disable console.log')
17
+ .option('-O, --order-debug', 'shows execution order')
17
18
  .version(pkg.version)
18
19
  .parse(process.argv);
19
20
 
@@ -59,13 +60,16 @@ if (!program.args.length) {
59
60
 
60
61
  log('Nole tests v' + pkg.version);
61
62
  try {
62
- await ManualRun(log);
63
+ await ManualRun({
64
+ log,
65
+ orderDebug: program.orderDebug
66
+ });
63
67
 
64
68
  log(' discover: %s', TimeResolve(file))
65
69
  log(' resolve: %s', TimeResolve(prop - file))
66
70
  log(' tests: %s', TimeResolve(time.end() - prop))
67
71
  process.exit(0);
68
- } catch(e) {
72
+ } catch (e) {
69
73
  console.error(e);
70
74
  process.exit(1);
71
75
  }
package/dist/data.js CHANGED
@@ -1,6 +1,6 @@
1
1
  const KEY = '_nole_hash';
2
2
  export function HashMap() {
3
- let g = global || {};
3
+ let g = global;
4
4
  if (g[KEY]) {
5
5
  return g[KEY];
6
6
  }
package/dist/data.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"data.js","sourceRoot":"","sources":["../src/data.ts"],"names":[],"mappings":"AAEA,MAAM,GAAG,GAAG,YAAY,CAAC;AAEzB,MAAM,UAAU,OAAO;IACrB,IAAI,CAAC,GAAQ,MAAM,IAAI,EAAE,CAAC;IAE1B,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE;QACV,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;KACf;IAED,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAa,CAAC;AACvC,CAAC"}
1
+ {"version":3,"file":"data.js","sourceRoot":"","sources":["../src/data.ts"],"names":[],"mappings":"AAEA,MAAM,GAAG,GAAG,YAAY,CAAC;AAEzB,MAAM,UAAU,OAAO;IACrB,IAAI,CAAC,GAAQ,MAAM,CAAC;IAEpB,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE;QACV,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;KACf;IAED,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAa,CAAC;AACvC,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import { HookType, ClassDefition } from "./test.js";
2
2
  export declare function Spec(timeout?: number): MethodDecorator;
3
3
  export declare function Dependency<T>(dependency: ClassDefition<T>): PropertyDecorator;
4
+ export declare function Dependencies(dependencies: ClassDefition<any>[]): ClassDecorator;
4
5
  export declare function Hook(type: HookType, timeout?: number): MethodDecorator;
5
6
  export declare function Skip(reason?: string): MethodDecorator;
6
7
  export declare function SkipClass(reason?: string): ClassDecorator;
@@ -1 +1 @@
1
- {"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../src/decorators.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,QAAQ,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAM1D,wBAAgB,IAAI,CAAC,OAAO,GAAE,MAAa,GAAG,eAAe,CAI5D;AAOD,wBAAgB,UAAU,CAAC,CAAC,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAI7E;AAQD,wBAAgB,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,GAAE,MAAa,GAAG,eAAe,CAI5E;AAOD,wBAAgB,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,eAAe,CAIrD;AAMD,wBAAgB,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,cAAc,CAIzD"}
1
+ {"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../src/decorators.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,QAAQ,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAO1D,wBAAgB,IAAI,CAAC,OAAO,GAAE,MAAa,GAAG,eAAe,CAI5D;AAOD,wBAAgB,UAAU,CAAC,CAAC,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAI7E;AAMD,wBAAgB,YAAY,CAAC,YAAY,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,GAAG,cAAc,CAS/E;AASD,wBAAgB,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,GAAE,MAAa,GAAG,eAAe,CAI5E;AAOD,wBAAgB,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,eAAe,CAIrD;AAMD,wBAAgB,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,cAAc,CAIzD"}
@@ -1,5 +1,6 @@
1
1
  import { HashMap } from "./data.js";
2
2
  import { Test } from "./test.js";
3
+ import camelcase from "camelcase";
3
4
  export function Spec(timeout = 5000) {
4
5
  return function (target, propertyKey) {
5
6
  DeclareSpecForTestClass(target, propertyKey, timeout);
@@ -10,6 +11,16 @@ export function Dependency(dependency) {
10
11
  DeclareDependencyForTestClass(target, propertyKey, dependency);
11
12
  };
12
13
  }
14
+ export function Dependencies(dependencies) {
15
+ return function (target) {
16
+ for (const dependency of dependencies) {
17
+ const propertyKey = camelcase(dependency.name, {
18
+ preserveConsecutiveUppercase: true
19
+ });
20
+ DeclareDependencyForTestClass({ constructor: target }, propertyKey, dependency);
21
+ }
22
+ };
23
+ }
13
24
  export function Hook(type, timeout = 5000) {
14
25
  return function (target, propertyKey) {
15
26
  DeclareHookForTestClass(target, propertyKey, type, timeout);
@@ -1 +1 @@
1
- {"version":3,"file":"decorators.js","sourceRoot":"","sources":["../src/decorators.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"decorators.js","sourceRoot":"","sources":["../src/decorators.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { Dependency, Spec, Hook, Skip, SkipClass } from './decorators.js';
1
+ export { Dependency, Spec, Hook, Skip, SkipClass, Dependencies } from './decorators.js';
2
2
  export { HookType } from './test.js';
3
3
  export { skipTest } 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":"AACA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC1E,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":"AACA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACxF,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC"}
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- export { Dependency, Spec, Hook, Skip, SkipClass } from './decorators.js';
1
+ export { Dependency, Spec, Hook, Skip, SkipClass, Dependencies } from './decorators.js';
2
2
  export { HookType } from './test.js';
3
3
  export { skipTest } from './dynamic.js';
4
4
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACxF,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC"}
package/dist/run.d.ts CHANGED
@@ -1,2 +1,7 @@
1
- export declare function ManualRun(log: Function): Promise<void>;
1
+ interface Options {
2
+ log: Function;
3
+ orderDebug: boolean;
4
+ }
5
+ export declare function ManualRun(options: Options): Promise<void>;
6
+ export {};
2
7
  //# 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,wBAAgB,SAAS,CAAC,GAAG,EAAE,QAAQ,iBAyCtC"}
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,CAAA;CACpB;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,iBA2CzC"}
package/dist/run.js CHANGED
@@ -10,10 +10,11 @@ const SKIP_TEXT = colors.bold(colors.yellow(' (skip) '));
10
10
  const DYNAMIC_SKIP_TEXT = colors.bold(colors.blue(' (dskip) '));
11
11
  const FAILED_TEXT = colors.bold(colors.red(' (failed) '));
12
12
  const HOOK_FAILED_TEXT = colors.bold(colors.red(' (hook failed) '));
13
- export function ManualRun(log) {
14
- if (!log) {
15
- log = console.log.bind(console);
13
+ export function ManualRun(options) {
14
+ if (!options.log) {
15
+ options.log = console.log.bind(console);
16
16
  }
17
+ const log = options.log;
17
18
  return new Promise(async (resolve, reject) => {
18
19
  try {
19
20
  let hashMap = new Map(HashMap());
@@ -27,13 +28,13 @@ export function ManualRun(log) {
27
28
  hashMap.delete(test.target);
28
29
  CreateInstanceIfNotExists(test);
29
30
  HandleDependencies(test);
30
- await HandleBeforeHooks(test);
31
- await HandleSpecs(test, log);
32
- await HandleAfterHooks(test);
31
+ await HandleBeforeHooks(test, options);
32
+ await HandleSpecs(test, options);
33
+ await HandleAfterHooks(test, options);
34
+ test.isFinished = true;
33
35
  if (test.dependents.length == 0) {
34
- await HandleCleanUp(test);
36
+ await HandleCleanUp(test, options);
35
37
  }
36
- test.isFinished = true;
37
38
  }
38
39
  else {
39
40
  DependencyLock(hashMap);
@@ -65,52 +66,71 @@ function HandleDependencies(test) {
65
66
  test.testInstance[dependency.propertyKey] = dependency.dependency.testInstance;
66
67
  }
67
68
  }
68
- async function HandleBeforeHooks(test) {
69
+ async function HandleBeforeHooks(test, options) {
69
70
  for (let [propertyKey, hook] of test.hooks.entries()) {
70
71
  if (hook.type != HookType.Before)
71
72
  continue;
73
+ let hookName = colors.bold(colors.yellow(test.name + (propertyKey != 'before' ? `.${propertyKey}:before` : ':before')));
72
74
  try {
73
- await Executor(test.testInstance[propertyKey].bind(test.testInstance), hook.timeout);
75
+ if (!options.orderDebug) {
76
+ await Executor(test.testInstance[propertyKey].bind(test.testInstance), hook.timeout);
77
+ }
78
+ else {
79
+ let timeText = TimeFactor(0, hook.timeout);
80
+ options.log(`${OK_TEXT} ${timeText} ${hookName}()`);
81
+ }
74
82
  }
75
83
  catch (e) {
76
- let hookName = colors.bold(colors.yellow(test.name + (propertyKey != 'before' ? `.${propertyKey}:before` : ':before')));
77
84
  console.error(`${HOOK_FAILED_TEXT} ${hookName}()`);
78
85
  console.error(e?.stack ?? e);
79
86
  throw e;
80
87
  }
81
88
  }
82
89
  }
83
- async function HandleBeforeEachHooks(test) {
90
+ async function HandleBeforeEachHooks(test, options) {
84
91
  for (let [propertyKey, hook] of test.hooks.entries()) {
85
92
  if (hook.type != HookType.BeforeEach)
86
93
  continue;
94
+ let hookName = colors.bold(colors.yellow(test.name + (propertyKey != 'beforeEach' ? `.${propertyKey}:beforeEach` : ':beforeEach')));
87
95
  try {
88
- await Executor(test.testInstance[propertyKey].bind(test.testInstance), hook.timeout);
96
+ if (!options.orderDebug) {
97
+ await Executor(test.testInstance[propertyKey].bind(test.testInstance), hook.timeout);
98
+ }
99
+ else {
100
+ let timeText = TimeFactor(0, hook.timeout);
101
+ options.log(`${OK_TEXT} ${timeText} ${hookName}()`);
102
+ }
89
103
  }
90
104
  catch (e) {
91
- let hookName = colors.bold(colors.yellow(test.name + (propertyKey != 'beforeEach' ? `.${propertyKey}:beforeEach` : ':beforeEach')));
92
105
  console.error(`${HOOK_FAILED_TEXT} ${hookName}()`);
93
106
  console.error(e?.stack ?? e);
94
107
  throw e;
95
108
  }
96
109
  }
97
110
  }
98
- async function HandleAfterEachHooks(test) {
111
+ async function HandleAfterEachHooks(test, options) {
99
112
  for (let [propertyKey, hook] of test.hooks.entries()) {
100
113
  if (hook.type != HookType.AfterEach)
101
114
  continue;
115
+ let hookName = colors.bold(colors.yellow(test.name + (propertyKey != 'afterEach' ? `.${propertyKey}:afterEach` : ':afterEach')));
102
116
  try {
103
- await Executor(test.testInstance[propertyKey].bind(test.testInstance), hook.timeout);
117
+ if (!options.orderDebug) {
118
+ await Executor(test.testInstance[propertyKey].bind(test.testInstance), hook.timeout);
119
+ }
120
+ else {
121
+ let timeText = TimeFactor(0, hook.timeout);
122
+ options.log(`${OK_TEXT} ${timeText} ${hookName}()`);
123
+ }
104
124
  }
105
125
  catch (e) {
106
- let hookName = colors.bold(colors.yellow(test.name + (propertyKey != 'afterEach' ? `.${propertyKey}:afterEach` : ':afterEach')));
107
126
  console.error(`${HOOK_FAILED_TEXT} ${hookName}()`);
108
127
  console.error(e?.stack ?? e);
109
128
  throw e;
110
129
  }
111
130
  }
112
131
  }
113
- async function HandleSpecs(test, log) {
132
+ async function HandleSpecs(test, options) {
133
+ const log = options.log;
114
134
  for (let [propertyKey, spec] of test.specs.entries()) {
115
135
  let testName = colors.bold(colors.yellow(test.name + '.' + propertyKey));
116
136
  const shouldPropertySkip = test.skip.has(propertyKey);
@@ -119,10 +139,12 @@ async function HandleSpecs(test, log) {
119
139
  log(`${SKIP_TEXT} ${' '.repeat(9)} ${testName}() ${reason ? '{' + reason + '}' : ''}`);
120
140
  continue;
121
141
  }
122
- await HandleBeforeEachHooks(test);
142
+ await HandleBeforeEachHooks(test, options);
123
143
  let start = TimeDifference.begin();
124
144
  try {
125
- await Executor(test.testInstance[propertyKey].bind(test.testInstance), spec.timeout);
145
+ if (!options.orderDebug) {
146
+ await Executor(test.testInstance[propertyKey].bind(test.testInstance), spec.timeout);
147
+ }
126
148
  let timeText = TimeFactor(start.end(), spec.timeout);
127
149
  log(`${OK_TEXT} ${timeText} ${testName}()`);
128
150
  }
@@ -137,45 +159,57 @@ async function HandleSpecs(test, log) {
137
159
  console.error(e?.stack ?? e);
138
160
  throw e;
139
161
  }
140
- await HandleAfterEachHooks(test);
162
+ await HandleAfterEachHooks(test, options);
141
163
  }
142
164
  }
143
- async function HandleAfterHooks(test) {
165
+ async function HandleAfterHooks(test, options) {
144
166
  for (let [propertyKey, hook] of test.hooks.entries()) {
145
167
  if (hook.type != HookType.After)
146
168
  continue;
169
+ let hookName = colors.bold(colors.yellow(test.name + (propertyKey != 'after' ? `.${propertyKey}:after` : ':after')));
147
170
  try {
148
- await Executor(test.testInstance[propertyKey].bind(test.testInstance), hook.timeout);
171
+ if (!options.orderDebug) {
172
+ await Executor(test.testInstance[propertyKey].bind(test.testInstance), hook.timeout);
173
+ }
174
+ else {
175
+ let timeText = TimeFactor(0, hook.timeout);
176
+ options.log(`${OK_TEXT} ${timeText} ${hookName}()`);
177
+ }
149
178
  }
150
179
  catch (e) {
151
- let hookName = colors.bold(colors.yellow(test.name + (propertyKey != 'after' ? `.${propertyKey}:after` : ':after')));
152
180
  console.error(`${HOOK_FAILED_TEXT} ${hookName}()`);
153
181
  console.error(e?.stack ?? e);
154
182
  throw e;
155
183
  }
156
184
  }
157
185
  }
158
- async function HandleCleanUp(test) {
186
+ async function HandleCleanUp(test, options) {
159
187
  if (test.cleanUpCalled)
160
188
  return;
161
- if (!test.dependents.every(dependent => dependent.isFinished))
189
+ if (!test.dependents.every(dependent => dependent.isFinished && dependent.cleanUpCalled))
162
190
  return;
163
191
  test.cleanUpCalled = true;
192
+ const log = options.log;
164
193
  for (let [propertyKey, hook] of test.hooks.entries()) {
165
194
  if (hook.type != HookType.CleanUp)
166
195
  continue;
196
+ let hookName = colors.bold(colors.yellow(test.name + (propertyKey != 'cleanUp' ? `.${propertyKey}:cleanUp` : ':cleanUp')));
197
+ let start = TimeDifference.begin();
167
198
  try {
168
- await Executor(test.testInstance[propertyKey].bind(test.testInstance), hook.timeout);
199
+ if (!options.orderDebug) {
200
+ await Executor(test.testInstance[propertyKey].bind(test.testInstance), hook.timeout);
201
+ }
202
+ let timeText = TimeFactor(start.end(), hook.timeout);
203
+ log(`${OK_TEXT} ${timeText} ${hookName}()`);
169
204
  }
170
205
  catch (e) {
171
- let hookName = colors.bold(colors.yellow(test.name + (propertyKey != 'cleanUp' ? `.${propertyKey}:cleanUp` : ':cleanUp')));
172
206
  console.error(`${HOOK_FAILED_TEXT} ${hookName}()`);
173
207
  console.error(e?.stack ?? e);
174
208
  throw e;
175
209
  }
176
210
  }
177
211
  for (let tree of test.dependencies) {
178
- HandleCleanUp(tree.dependency);
212
+ await HandleCleanUp(tree.dependency, options);
179
213
  }
180
214
  }
181
215
  function DependencyLock(hashMap) {
package/dist/run.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,IAAI,CAAA;CACjB;AAED,MAAM,WAAW,KAAK;IACpB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,QAAQ,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,KAAK;IACpB,MAAM,EAAE,MAAM,CAAA;CACf;AAED,qBAAa,IAAI;IAWI,MAAM,EAAE,GAAG;IAV9B,YAAY,EAAE,WAAW,EAAE,CAAM;IACjC,UAAU,EAAE,IAAI,EAAE,CAAM;IACxB,IAAI,qBAA4B;IAChC,SAAS,EAAE,KAAK,GAAG,IAAI,CAAQ;IAC/B,KAAK,qBAA4B;IACjC,KAAK,qBAA4B;IACjC,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,OAAO,CAAS;IAC/B,YAAY,EAAE,GAAG,CAAC;gBAEC,MAAM,EAAE,GAAG;IAI9B,IAAI,IAAI,QAEP;CACF;AAED,oBAAY,QAAQ;IAClB,MAAM,IAAA;IACN,KAAK,IAAA;IACL,UAAU,IAAA;IACV,SAAS,IAAA;IACT,OAAO,IAAA;CACR;AAED,MAAM,WAAW,aAAa,CAAC,CAAC;IAAI,QAAO,CAAC,CAAC;CAAE"}
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,IAAI,CAAA;CACjB;AAED,MAAM,WAAW,KAAK;IACpB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,QAAQ,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,KAAK;IACpB,MAAM,EAAE,MAAM,CAAA;CACf;AAED,qBAAa,IAAI;IAWI,MAAM,EAAE,GAAG;IAV9B,YAAY,EAAE,WAAW,EAAE,CAAM;IACjC,UAAU,EAAE,IAAI,EAAE,CAAM;IACxB,IAAI,qBAA4B;IAChC,SAAS,EAAE,KAAK,GAAG,IAAI,CAAQ;IAC/B,KAAK,qBAA4B;IACjC,KAAK,qBAA4B;IACjC,UAAU,EAAE,OAAO,CAAS;IAC5B,aAAa,EAAE,OAAO,CAAS;IAC/B,YAAY,EAAE,GAAG,CAAC;gBAEC,MAAM,EAAE,GAAG;IAE9B,IAAI,IAAI,QAEP;CACF;AAED,oBAAY,QAAQ;IAClB,MAAM,IAAA;IACN,KAAK,IAAA;IACL,UAAU,IAAA;IACV,SAAS,IAAA;IACT,OAAO,IAAA;CACR;AAED,MAAM,WAAW,aAAa,CAAC,CAAC;IAAI,QAAO,CAAC,CAAC;CAAE"}
package/dist/test.js CHANGED
@@ -7,8 +7,8 @@ export class Test {
7
7
  this.skipClass = null;
8
8
  this.specs = new Map();
9
9
  this.hooks = new Map();
10
- this.cleanUpCalled = false;
11
10
  this.isFinished = false;
11
+ this.cleanUpCalled = false;
12
12
  }
13
13
  get name() {
14
14
  return this.target.name;
package/dist/test.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"test.js","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":"AAkBA,MAAM,OAAO,IAAI;IAWf,YAAmB,MAAW;QAAX,WAAM,GAAN,MAAM,CAAK;QAV9B,iBAAY,GAAkB,EAAE,CAAC;QACjC,eAAU,GAAW,EAAE,CAAC;QACxB,SAAI,GAAG,IAAI,GAAG,EAAiB,CAAC;QAChC,cAAS,GAAiB,IAAI,CAAC;QAC/B,UAAK,GAAG,IAAI,GAAG,EAAiB,CAAC;QACjC,UAAK,GAAG,IAAI,GAAG,EAAiB,CAAC;QAEjC,kBAAa,GAAY,KAAK,CAAC;QAI7B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IAC1B,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IAC1B,CAAC;CACF;AAED,MAAM,CAAN,IAAY,QAMX;AAND,WAAY,QAAQ;IAClB,2CAAM,CAAA;IACN,yCAAK,CAAA;IACL,mDAAU,CAAA;IACV,iDAAS,CAAA;IACT,6CAAO,CAAA;AACT,CAAC,EANW,QAAQ,KAAR,QAAQ,QAMnB"}
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":"AAkBA,MAAM,OAAO,IAAI;IAWf,YAAmB,MAAW;QAAX,WAAM,GAAN,MAAM,CAAK;QAV9B,iBAAY,GAAkB,EAAE,CAAC;QACjC,eAAU,GAAW,EAAE,CAAC;QACxB,SAAI,GAAG,IAAI,GAAG,EAAiB,CAAC;QAChC,cAAS,GAAiB,IAAI,CAAC;QAC/B,UAAK,GAAG,IAAI,GAAG,EAAiB,CAAC;QACjC,UAAK,GAAG,IAAI,GAAG,EAAiB,CAAC;QACjC,eAAU,GAAY,KAAK,CAAC;QAC5B,kBAAa,GAAY,KAAK,CAAC;IAGE,CAAC;IAElC,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IAC1B,CAAC;CACF;AAED,MAAM,CAAN,IAAY,QAMX;AAND,WAAY,QAAQ;IAClB,2CAAM,CAAA;IACN,yCAAK,CAAA;IACL,mDAAU,CAAA;IACV,iDAAS,CAAA;IACT,6CAAO,CAAA;AACT,CAAC,EANW,QAAQ,KAAR,QAAQ,QAMnB"}
@@ -0,0 +1,6 @@
1
+ export declare class ExecutorTest {
2
+ evaluate(): Promise<void>;
3
+ throws(): Promise<void>;
4
+ timeout(): Promise<void>;
5
+ }
6
+ //# sourceMappingURL=executor.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.test.d.ts","sourceRoot":"","sources":["../../src/utils/executor.test.ts"],"names":[],"mappings":"AAIA,qBAAa,YAAY;IAEjB,QAAQ;IAMR,MAAM;IASN,OAAO;CAKd"}
@@ -0,0 +1,49 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.test.js","sourceRoot":"","sources":["../../src/utils/executor.test.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,OAAO,YAAY;IAEvB,KAAK,CAAC,QAAQ;QACZ,MAAM,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3B,MAAM,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACnC,CAAC;IAGD,KAAK,CAAC,MAAM;QACV,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE;YACxB,OAAO,QAAQ,CAAC,GAAG,EAAE;gBACnB,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC5B,CAAC,EAAE,CAAC,CAAC,CAAC;QACR,CAAC,CAAC,CAAA;IACJ,CAAC;IAGD,KAAK,CAAC,OAAO;QACX,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE;YACxB,OAAO,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACnD,CAAC,CAAC,CAAA;IACJ,CAAC;CACF;AApBC;IADC,IAAI,EAAE;;;;4CAIN;AAGD;IADC,IAAI,EAAE;;;;0CAON;AAGD;IADC,IAAI,EAAE;;;;2CAKN"}
@@ -0,0 +1,4 @@
1
+ export declare class TimeDifferenceTest {
2
+ evaluate(): Promise<void>;
3
+ }
4
+ //# sourceMappingURL=time_difference.test.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,24 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time_difference.test.js","sourceRoot":"","sources":["../../src/utils/time_difference.test.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAEnC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,OAAO,kBAAkB;IAE7B,KAAK,CAAC,QAAQ;QACZ,MAAM,EAAE,GAAG,cAAc,CAAC,KAAK,EAAE,CAAC;QAClC,EAAE,CAAC,GAAG,EAAE,CAAA;IACV,CAAC;CACF;AAJC;IADC,IAAI,EAAE;;;;kDAIN"}
@@ -0,0 +1,4 @@
1
+ export declare class TimeFactorTest {
2
+ evaluate(): Promise<void>;
3
+ }
4
+ //# sourceMappingURL=time_factor.test.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,42 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time_factor.test.js","sourceRoot":"","sources":["../../src/utils/time_factor.test.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAErD,MAAM,OAAO,cAAc;IAEzB,KAAK,CAAC,QAAQ;QACZ,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;QAEf,KAAK,MAAM,CAAC,IAAI;YACd,GAAG;YACH,IAAI;YACJ,EAAE,GAAG,IAAI;YACT,GAAG,GAAG,IAAI;YACV,EAAE,GAAG,EAAE,GAAG,IAAI;YACd,EAAE,GAAG,EAAE,GAAG,IAAI;YACd,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;SACpB,EAAE;YACD,UAAU,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;YACxB,UAAU,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;YACvB,UAAU,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;YACtB,UAAU,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YACrB,UAAU,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YACrB,UAAU,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YACrB,UAAU,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;YACvB,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACjB,UAAU,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;SACtB;IACH,CAAC;CACF;AAvBC;IADC,IAAI,EAAE;;;;8CAuBN"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nole",
3
- "version": "2.0.0",
3
+ "version": "2.1.0",
4
4
  "type": "module",
5
5
  "description": "Testing Library for Typescript projects",
6
6
  "main": "dist/index.js",
@@ -14,7 +14,8 @@
14
14
  },
15
15
  "scripts": {
16
16
  "build": "tsc",
17
- "test": "node --loader=ts-node/esm ./bin/nole.js ./test/**/*.test.ts"
17
+ "test": "node --loader=ts-node/esm ./bin/nole.js ./test/**/*.test.ts ./src/**/*.test.ts",
18
+ "coverage": "c8 npm run test"
18
19
  },
19
20
  "keywords": [
20
21
  "typescript",
@@ -25,10 +26,30 @@
25
26
  "license": "ISC",
26
27
  "dependencies": {
27
28
  "@types/node": "^16.11.41",
29
+ "camelcase": "^7.0.0",
28
30
  "colors": "^1.3.3",
29
31
  "commander": "^2.19.0",
30
32
  "glob": "^7.2.3",
31
33
  "ts-node": "^10.8.1",
32
34
  "typescript": "^4.7.3"
35
+ },
36
+ "devDependencies": {
37
+ "c8": "^7.11.3"
38
+ },
39
+ "c8": {
40
+ "all": true,
41
+ "check-coverage": true,
42
+ "report-dir": "./coverage",
43
+ "reporter": [
44
+ "text",
45
+ "lcovonly",
46
+ "text-summary"
47
+ ],
48
+ "include": [
49
+ "src/**/*.ts"
50
+ ],
51
+ "exclude": [
52
+ "**/*.test.ts"
53
+ ]
33
54
  }
34
55
  }
package/src/data.ts CHANGED
@@ -3,7 +3,7 @@ import { Test } from "./test.js";
3
3
  const KEY = '_nole_hash';
4
4
 
5
5
  export function HashMap(): Map<any, Test> {
6
- let g: any = global || {};
6
+ let g: any = global;
7
7
 
8
8
  if (g[KEY]) {
9
9
  return g[KEY];
package/src/decorators.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import { HashMap } from "./data.js";
2
2
  import { Test, HookType, ClassDefition } from "./test.js";
3
+ import camelcase from "camelcase";
3
4
 
4
5
  /**
5
6
  * Assignes method as test case
@@ -22,6 +23,22 @@ export function Dependency<T>(dependency: ClassDefition<T>): PropertyDecorator {
22
23
  }
23
24
  }
24
25
 
26
+ /**
27
+ * Assignes dependencies for test class
28
+ * @param dependencies a Test class array that needed
29
+ */
30
+ export function Dependencies(dependencies: ClassDefition<any>[]): ClassDecorator {
31
+ return function (target) {
32
+ for (const dependency of dependencies) {
33
+ const propertyKey = camelcase(dependency.name, {
34
+ preserveConsecutiveUppercase: true
35
+ });
36
+ DeclareDependencyForTestClass({ constructor: target }, propertyKey, dependency);
37
+ }
38
+ }
39
+ }
40
+
41
+
25
42
 
26
43
  /**
27
44
  * Creates hook for test case
package/src/index.ts CHANGED
@@ -1,4 +1,4 @@
1
1
 
2
- export { Dependency, Spec, Hook, Skip, SkipClass } from './decorators.js';
2
+ export { Dependency, Spec, Hook, Skip, SkipClass, Dependencies } from './decorators.js';
3
3
  export { HookType } from './test.js';
4
4
  export { skipTest } from './dynamic.js';
package/src/run.ts CHANGED
@@ -13,11 +13,18 @@ const DYNAMIC_SKIP_TEXT = colors.bold(colors.blue(' (dskip) '));
13
13
  const FAILED_TEXT = colors.bold(colors.red(' (failed) '));
14
14
  const HOOK_FAILED_TEXT = colors.bold(colors.red(' (hook failed) '));
15
15
 
16
- export function ManualRun(log: Function) {
17
- if (!log) {
18
- log = console.log.bind(console);
16
+ interface Options {
17
+ log: Function,
18
+ orderDebug: boolean
19
+ }
20
+
21
+ export function ManualRun(options: Options) {
22
+ if (!options.log) {
23
+ options.log = console.log.bind(console);
19
24
  }
20
25
 
26
+ const log = options.log;
27
+
21
28
  return new Promise<void>(async (resolve, reject) => {
22
29
  try {
23
30
  let hashMap = new Map(HashMap());
@@ -35,15 +42,15 @@ export function ManualRun(log: Function) {
35
42
  CreateInstanceIfNotExists(test);
36
43
  HandleDependencies(test);
37
44
 
38
- await HandleBeforeHooks(test);
39
- await HandleSpecs(test, log);
40
- await HandleAfterHooks(test);
45
+ await HandleBeforeHooks(test, options);
46
+ await HandleSpecs(test, options);
47
+ await HandleAfterHooks(test, options);
48
+
49
+ test.isFinished = true;
41
50
 
42
51
  if (test.dependents.length == 0) {
43
- await HandleCleanUp(test);
52
+ await HandleCleanUp(test, options);
44
53
  }
45
-
46
- test.isFinished = true;
47
54
  } else {
48
55
  DependencyLock(hashMap);
49
56
  }
@@ -77,16 +84,22 @@ function HandleDependencies(test: Test) {
77
84
  }
78
85
  }
79
86
 
80
- async function HandleBeforeHooks(test: Test) {
87
+ async function HandleBeforeHooks(test: Test, options: Options) {
81
88
  for (let [propertyKey, hook] of test.hooks.entries()) {
82
89
  if (hook.type != HookType.Before) continue;
83
90
 
91
+ let hookName = colors.bold(colors.yellow(test.name + (propertyKey != 'before' ? `.${propertyKey}:before` : ':before')));
92
+
84
93
  try {
85
- await Executor(test.testInstance[propertyKey].bind(test.testInstance), hook.timeout);
94
+ if (!options.orderDebug) {
95
+ await Executor(test.testInstance[propertyKey].bind(test.testInstance), hook.timeout);
96
+ } else {
97
+ let timeText = TimeFactor(0, hook.timeout);
86
98
 
87
- } catch (e) {
88
- let hookName = colors.bold(colors.yellow(test.name + (propertyKey != 'before' ? `.${propertyKey}:before` : ':before')));
99
+ options.log(`${OK_TEXT} ${timeText} ${hookName}()`);
100
+ }
89
101
 
102
+ } catch (e) {
90
103
  console.error(`${HOOK_FAILED_TEXT} ${hookName}()`);
91
104
  console.error((e as any)?.stack ?? e);
92
105
  throw e;
@@ -94,14 +107,21 @@ async function HandleBeforeHooks(test: Test) {
94
107
  }
95
108
  }
96
109
 
97
- async function HandleBeforeEachHooks(test: Test) {
110
+ async function HandleBeforeEachHooks(test: Test, options: Options) {
98
111
  for (let [propertyKey, hook] of test.hooks.entries()) {
99
112
  if (hook.type != HookType.BeforeEach) continue;
113
+ let hookName = colors.bold(colors.yellow(test.name + (propertyKey != 'beforeEach' ? `.${propertyKey}:beforeEach` : ':beforeEach')));
114
+
100
115
  try {
101
- await Executor(test.testInstance[propertyKey].bind(test.testInstance), hook.timeout);
116
+ if (!options.orderDebug) {
117
+ await Executor(test.testInstance[propertyKey].bind(test.testInstance), hook.timeout);
118
+ } else {
119
+ let timeText = TimeFactor(0, hook.timeout);
120
+
121
+ options.log(`${OK_TEXT} ${timeText} ${hookName}()`);
122
+ }
102
123
 
103
124
  } catch (e) {
104
- let hookName = colors.bold(colors.yellow(test.name + (propertyKey != 'beforeEach' ? `.${propertyKey}:beforeEach` : ':beforeEach')));
105
125
 
106
126
  console.error(`${HOOK_FAILED_TEXT} ${hookName}()`);
107
127
  console.error((e as any)?.stack ?? e);
@@ -110,15 +130,22 @@ async function HandleBeforeEachHooks(test: Test) {
110
130
  }
111
131
  }
112
132
 
113
- async function HandleAfterEachHooks(test: Test) {
133
+ async function HandleAfterEachHooks(test: Test, options: Options) {
114
134
  for (let [propertyKey, hook] of test.hooks.entries()) {
115
135
  if (hook.type != HookType.AfterEach) continue;
136
+
137
+ let hookName = colors.bold(colors.yellow(test.name + (propertyKey != 'afterEach' ? `.${propertyKey}:afterEach` : ':afterEach')));
138
+
116
139
  try {
117
- await Executor(test.testInstance[propertyKey].bind(test.testInstance), hook.timeout);
140
+ if (!options.orderDebug) {
141
+ await Executor(test.testInstance[propertyKey].bind(test.testInstance), hook.timeout);
142
+ } else {
143
+ let timeText = TimeFactor(0, hook.timeout);
118
144
 
119
- } catch (e) {
120
- let hookName = colors.bold(colors.yellow(test.name + (propertyKey != 'afterEach' ? `.${propertyKey}:afterEach` : ':afterEach')));
145
+ options.log(`${OK_TEXT} ${timeText} ${hookName}()`);
146
+ }
121
147
 
148
+ } catch (e) {
122
149
  console.error(`${HOOK_FAILED_TEXT} ${hookName}()`);
123
150
  console.error((e as any)?.stack ?? e);
124
151
  throw e;
@@ -126,7 +153,9 @@ async function HandleAfterEachHooks(test: Test) {
126
153
  }
127
154
  }
128
155
 
129
- async function HandleSpecs(test: Test, log: Function) {
156
+ async function HandleSpecs(test: Test, options: Options) {
157
+ const log = options.log;
158
+
130
159
  for (let [propertyKey, spec] of test.specs.entries()) {
131
160
  let testName = colors.bold(colors.yellow(test.name + '.' + propertyKey));
132
161
 
@@ -137,12 +166,14 @@ async function HandleSpecs(test: Test, log: Function) {
137
166
  continue;
138
167
  }
139
168
 
140
- await HandleBeforeEachHooks(test);
169
+ await HandleBeforeEachHooks(test, options);
141
170
 
142
171
  let start = TimeDifference.begin();
143
172
 
144
173
  try {
145
- await Executor(test.testInstance[propertyKey].bind(test.testInstance), spec.timeout);
174
+ if (!options.orderDebug) {
175
+ await Executor(test.testInstance[propertyKey].bind(test.testInstance), spec.timeout);
176
+ }
146
177
 
147
178
  let timeText = TimeFactor(start.end(), spec.timeout);
148
179
 
@@ -161,19 +192,26 @@ async function HandleSpecs(test: Test, log: Function) {
161
192
  throw e;
162
193
  }
163
194
 
164
- await HandleAfterEachHooks(test);
195
+ await HandleAfterEachHooks(test, options);
165
196
  }
166
197
  }
167
198
 
168
- async function HandleAfterHooks(test: Test) {
199
+ async function HandleAfterHooks(test: Test, options: Options) {
169
200
  for (let [propertyKey, hook] of test.hooks.entries()) {
170
201
  if (hook.type != HookType.After) continue;
202
+
203
+ let hookName = colors.bold(colors.yellow(test.name + (propertyKey != 'after' ? `.${propertyKey}:after` : ':after')));
204
+
171
205
  try {
172
- await Executor(test.testInstance[propertyKey].bind(test.testInstance), hook.timeout);
206
+ if (!options.orderDebug) {
207
+ await Executor(test.testInstance[propertyKey].bind(test.testInstance), hook.timeout);
208
+ } else {
209
+ let timeText = TimeFactor(0, hook.timeout);
173
210
 
174
- } catch (e) {
175
- let hookName = colors.bold(colors.yellow(test.name + (propertyKey != 'after' ? `.${propertyKey}:after` : ':after')));
211
+ options.log(`${OK_TEXT} ${timeText} ${hookName}()`);
212
+ }
176
213
 
214
+ } catch (e) {
177
215
  console.error(`${HOOK_FAILED_TEXT} ${hookName}()`);
178
216
  console.error((e as any)?.stack ?? e);
179
217
  throw e;
@@ -182,20 +220,29 @@ async function HandleAfterHooks(test: Test) {
182
220
  }
183
221
 
184
222
 
185
- async function HandleCleanUp(test: Test) {
223
+ async function HandleCleanUp(test: Test, options: Options) {
186
224
  if (test.cleanUpCalled) return;
187
- if (!test.dependents.every(dependent => dependent.isFinished)) return;
225
+ if (!test.dependents.every(dependent => dependent.isFinished && dependent.cleanUpCalled)) return;
188
226
 
189
227
  test.cleanUpCalled = true;
190
228
 
229
+ const log = options.log;
230
+
191
231
  for (let [propertyKey, hook] of test.hooks.entries()) {
192
232
  if (hook.type != HookType.CleanUp) continue;
233
+
234
+ let hookName = colors.bold(colors.yellow(test.name + (propertyKey != 'cleanUp' ? `.${propertyKey}:cleanUp` : ':cleanUp')));
235
+ let start = TimeDifference.begin();
236
+
193
237
  try {
194
- await Executor(test.testInstance[propertyKey].bind(test.testInstance), hook.timeout);
238
+ if (!options.orderDebug) {
239
+ await Executor(test.testInstance[propertyKey].bind(test.testInstance), hook.timeout);
240
+ }
195
241
 
196
- } catch (e) {
197
- let hookName = colors.bold(colors.yellow(test.name + (propertyKey != 'cleanUp' ? `.${propertyKey}:cleanUp` : ':cleanUp')));
242
+ let timeText = TimeFactor(start.end(), hook.timeout);
198
243
 
244
+ log(`${OK_TEXT} ${timeText} ${hookName}()`);
245
+ } catch (e) {
199
246
  console.error(`${HOOK_FAILED_TEXT} ${hookName}()`);
200
247
  console.error((e as any)?.stack ?? e);
201
248
  throw e;
@@ -203,7 +250,7 @@ async function HandleCleanUp(test: Test) {
203
250
  }
204
251
 
205
252
  for (let tree of test.dependencies) {
206
- HandleCleanUp(tree.dependency);
253
+ await HandleCleanUp(tree.dependency, options);
207
254
  }
208
255
  }
209
256
 
package/src/test.ts CHANGED
@@ -23,13 +23,11 @@ export class Test {
23
23
  skipClass: ISkip | null = null;
24
24
  specs = new Map<string, ISpec>();
25
25
  hooks = new Map<string, IHook>();
26
- isFinished: boolean;
26
+ isFinished: boolean = false; // cleanup ignored
27
27
  cleanUpCalled: boolean = false;
28
28
  testInstance: any;
29
29
 
30
- constructor(public target: any) {
31
- this.isFinished = false;
32
- }
30
+ constructor(public target: any) {}
33
31
 
34
32
  get name() {
35
33
  return this.target.name;
@@ -0,0 +1,27 @@
1
+ import * as assert from "assert";
2
+ import { Spec } from "../index.js";
3
+ import { Executor } from "./executor.js";
4
+
5
+ export class ExecutorTest {
6
+ @Spec()
7
+ async evaluate() {
8
+ await Executor(() => 1, 1);
9
+ await Executor(async () => 1, 1);
10
+ }
11
+
12
+ @Spec()
13
+ async throws() {
14
+ await assert.rejects(() => {
15
+ return Executor(() => {
16
+ throw new Error('throws');
17
+ }, 1);
18
+ })
19
+ }
20
+
21
+ @Spec()
22
+ async timeout() {
23
+ await assert.rejects(() => {
24
+ return Executor(() => new Promise(() => {}), 10);
25
+ })
26
+ }
27
+ }
@@ -19,4 +19,4 @@ export function Executor(fn: Function, timeout: number): Promise<void> {
19
19
 
20
20
  resolve();
21
21
  });
22
- }
22
+ }
@@ -0,0 +1,12 @@
1
+ import * as assert from "assert";
2
+ import { Spec } from "../index.js";
3
+ import { Executor } from "./executor.js";
4
+ import { TimeDifference } from "./time_difference.js";
5
+
6
+ export class TimeDifferenceTest {
7
+ @Spec()
8
+ async evaluate() {
9
+ const td = TimeDifference.begin();
10
+ td.end()
11
+ }
12
+ }
@@ -0,0 +1,29 @@
1
+ import { Spec } from "../index.js";
2
+ import { Delay, TimeFactor } from "./time_factor.js";
3
+
4
+ export class TimeFactorTest {
5
+ @Spec()
6
+ async evaluate() {
7
+ await Delay(1);
8
+
9
+ for (const n of [
10
+ 100,
11
+ 1000,
12
+ 60 * 1000,
13
+ 120 * 1000,
14
+ 60 * 60 * 1000,
15
+ 65 * 60 * 1000,
16
+ 25 * 60 * 60 * 1000
17
+ ]) {
18
+ TimeFactor(n / 1000, n);
19
+ TimeFactor(n / 500, n);
20
+ TimeFactor(n / 10, n);
21
+ TimeFactor(n / 6, n);
22
+ TimeFactor(n / 4, n);
23
+ TimeFactor(n / 2, n);
24
+ TimeFactor(n / 1.5, n);
25
+ TimeFactor(n, n);
26
+ TimeFactor(n * 2, n);
27
+ }
28
+ }
29
+ }
package/test/hook.test.ts CHANGED
@@ -1,11 +1,11 @@
1
1
  import * as assert from 'assert';
2
2
  import { Spec, Hook, Skip, HookType } from "../src/index.js";
3
3
 
4
- export class BasicTest {
4
+ export class HookTest {
5
5
  array: any[] = [1, 2, 3];
6
6
 
7
7
  @Hook(HookType.BeforeEach)
8
- async beforeEach() {
8
+ async pushFourIntoArray() {
9
9
  this.array.push(4);
10
10
  }
11
11
 
@@ -0,0 +1,23 @@
1
+ import * as assert from 'assert';
2
+ import { Dependencies, Spec } from "../src/index.js";
3
+ import { BasicTest } from './basic.test.js';
4
+ import { CleanUpLayer1Test, CleanUpLayer2Test, CleanUpLayer3Test } from './clean-up.test.js';
5
+ import { DynamicSkipTest } from './dynamic-skip.test.js';
6
+ import { HookTest } from './hook.test.js';
7
+
8
+ @Dependencies([
9
+ BasicTest,
10
+ CleanUpLayer1Test,
11
+ CleanUpLayer2Test,
12
+ CleanUpLayer3Test,
13
+ DynamicSkipTest,
14
+ HookTest
15
+ ])
16
+ export class MultiDependency {
17
+ basicTest: BasicTest;
18
+
19
+ @Spec()
20
+ test() {
21
+ assert.strictEqual(this.basicTest.variable, 1);
22
+ }
23
+ }
@@ -10,4 +10,10 @@ export class SkipAllTest {
10
10
  @Skip('won\'t run too')
11
11
  @Spec()
12
12
  async wontRunToo() { }
13
- }
13
+ }
14
+
15
+ @SkipClass()
16
+ export class SkipAllWithoutReason {
17
+ @Spec()
18
+ async wontRun() { }
19
+ }