nole 2.0.1 → 2.1.1

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 (46) hide show
  1. package/README.md +59 -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 +12 -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 +62 -29
  16. package/dist/run.js.map +1 -1
  17. package/dist/test.d.ts +0 -1
  18. package/dist/test.d.ts.map +1 -1
  19. package/dist/test.js +1 -2
  20. package/dist/test.js.map +1 -1
  21. package/dist/utils/executor.test.d.ts +6 -0
  22. package/dist/utils/executor.test.d.ts.map +1 -0
  23. package/dist/utils/executor.test.js +49 -0
  24. package/dist/utils/executor.test.js.map +1 -0
  25. package/dist/utils/time_difference.test.d.ts +4 -0
  26. package/dist/utils/time_difference.test.d.ts.map +1 -0
  27. package/dist/utils/time_difference.test.js +24 -0
  28. package/dist/utils/time_difference.test.js.map +1 -0
  29. package/dist/utils/time_factor.test.d.ts +4 -0
  30. package/dist/utils/time_factor.test.d.ts.map +1 -0
  31. package/dist/utils/time_factor.test.js +42 -0
  32. package/dist/utils/time_factor.test.js.map +1 -0
  33. package/package.json +23 -2
  34. package/src/data.ts +1 -1
  35. package/src/decorators.ts +18 -0
  36. package/src/index.ts +1 -1
  37. package/src/run.ts +80 -35
  38. package/src/test.ts +2 -6
  39. package/src/utils/executor.test.ts +27 -0
  40. package/src/utils/executor.ts +1 -1
  41. package/src/utils/time_difference.test.ts +12 -0
  42. package/src/utils/time_factor.test.ts +29 -0
  43. package/test/hook.test.ts +2 -2
  44. package/test/multi-dependency.test.ts +23 -0
  45. package/test/skip-all.test.ts +7 -1
  46. package/test/turkish_chars.test.ts +19 -0
package/README.md CHANGED
@@ -150,6 +150,32 @@ class Other {
150
150
  > * All dependencies will be waited until done
151
151
  > * If dependencies cannot resolve, it will occurr an error after the available tests done.
152
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
+
153
179
  ## Hook
154
180
 
155
181
  Hooks will help you to develop helper methods.
@@ -260,6 +286,38 @@ Connection closed!
260
286
 
261
287
  We do not provide assert library. You can use chai or should.js.
262
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
+
263
321
  ## Compiled files
264
322
 
265
323
  > Deprecated (v2.x+), It will always use ts-node/esm module
@@ -273,4 +331,4 @@ $ nole -T ./build/test/**/*.test.js
273
331
  (ok) 1.09 ms QueueTest.Pipe()
274
332
  ```
275
333
 
276
- > 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,CAU/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,17 @@ 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
+ locale: 'en-US'
20
+ });
21
+ DeclareDependencyForTestClass({ constructor: target }, propertyKey, dependency);
22
+ }
23
+ };
24
+ }
13
25
  export function Hook(type, timeout = 5000) {
14
26
  return function (target, propertyKey) {
15
27
  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,iBA2CtC"}
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,14 +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);
33
34
  test.isFinished = true;
34
35
  if (test.dependents.length == 0) {
35
- await HandleCleanUp(test);
36
+ await HandleCleanUp(test, options);
36
37
  }
37
- test.isFullyFinished = true;
38
38
  }
39
39
  else {
40
40
  DependencyLock(hashMap);
@@ -66,52 +66,71 @@ function HandleDependencies(test) {
66
66
  test.testInstance[dependency.propertyKey] = dependency.dependency.testInstance;
67
67
  }
68
68
  }
69
- async function HandleBeforeHooks(test) {
69
+ async function HandleBeforeHooks(test, options) {
70
70
  for (let [propertyKey, hook] of test.hooks.entries()) {
71
71
  if (hook.type != HookType.Before)
72
72
  continue;
73
+ let hookName = colors.bold(colors.yellow(test.name + (propertyKey != 'before' ? `.${propertyKey}:before` : ':before')));
73
74
  try {
74
- 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
+ }
75
82
  }
76
83
  catch (e) {
77
- let hookName = colors.bold(colors.yellow(test.name + (propertyKey != 'before' ? `.${propertyKey}:before` : ':before')));
78
84
  console.error(`${HOOK_FAILED_TEXT} ${hookName}()`);
79
85
  console.error(e?.stack ?? e);
80
86
  throw e;
81
87
  }
82
88
  }
83
89
  }
84
- async function HandleBeforeEachHooks(test) {
90
+ async function HandleBeforeEachHooks(test, options) {
85
91
  for (let [propertyKey, hook] of test.hooks.entries()) {
86
92
  if (hook.type != HookType.BeforeEach)
87
93
  continue;
94
+ let hookName = colors.bold(colors.yellow(test.name + (propertyKey != 'beforeEach' ? `.${propertyKey}:beforeEach` : ':beforeEach')));
88
95
  try {
89
- 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
+ }
90
103
  }
91
104
  catch (e) {
92
- let hookName = colors.bold(colors.yellow(test.name + (propertyKey != 'beforeEach' ? `.${propertyKey}:beforeEach` : ':beforeEach')));
93
105
  console.error(`${HOOK_FAILED_TEXT} ${hookName}()`);
94
106
  console.error(e?.stack ?? e);
95
107
  throw e;
96
108
  }
97
109
  }
98
110
  }
99
- async function HandleAfterEachHooks(test) {
111
+ async function HandleAfterEachHooks(test, options) {
100
112
  for (let [propertyKey, hook] of test.hooks.entries()) {
101
113
  if (hook.type != HookType.AfterEach)
102
114
  continue;
115
+ let hookName = colors.bold(colors.yellow(test.name + (propertyKey != 'afterEach' ? `.${propertyKey}:afterEach` : ':afterEach')));
103
116
  try {
104
- 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
+ }
105
124
  }
106
125
  catch (e) {
107
- let hookName = colors.bold(colors.yellow(test.name + (propertyKey != 'afterEach' ? `.${propertyKey}:afterEach` : ':afterEach')));
108
126
  console.error(`${HOOK_FAILED_TEXT} ${hookName}()`);
109
127
  console.error(e?.stack ?? e);
110
128
  throw e;
111
129
  }
112
130
  }
113
131
  }
114
- async function HandleSpecs(test, log) {
132
+ async function HandleSpecs(test, options) {
133
+ const log = options.log;
115
134
  for (let [propertyKey, spec] of test.specs.entries()) {
116
135
  let testName = colors.bold(colors.yellow(test.name + '.' + propertyKey));
117
136
  const shouldPropertySkip = test.skip.has(propertyKey);
@@ -120,10 +139,12 @@ async function HandleSpecs(test, log) {
120
139
  log(`${SKIP_TEXT} ${' '.repeat(9)} ${testName}() ${reason ? '{' + reason + '}' : ''}`);
121
140
  continue;
122
141
  }
123
- await HandleBeforeEachHooks(test);
142
+ await HandleBeforeEachHooks(test, options);
124
143
  let start = TimeDifference.begin();
125
144
  try {
126
- 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
+ }
127
148
  let timeText = TimeFactor(start.end(), spec.timeout);
128
149
  log(`${OK_TEXT} ${timeText} ${testName}()`);
129
150
  }
@@ -138,45 +159,57 @@ async function HandleSpecs(test, log) {
138
159
  console.error(e?.stack ?? e);
139
160
  throw e;
140
161
  }
141
- await HandleAfterEachHooks(test);
162
+ await HandleAfterEachHooks(test, options);
142
163
  }
143
164
  }
144
- async function HandleAfterHooks(test) {
165
+ async function HandleAfterHooks(test, options) {
145
166
  for (let [propertyKey, hook] of test.hooks.entries()) {
146
167
  if (hook.type != HookType.After)
147
168
  continue;
169
+ let hookName = colors.bold(colors.yellow(test.name + (propertyKey != 'after' ? `.${propertyKey}:after` : ':after')));
148
170
  try {
149
- 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
+ }
150
178
  }
151
179
  catch (e) {
152
- let hookName = colors.bold(colors.yellow(test.name + (propertyKey != 'after' ? `.${propertyKey}:after` : ':after')));
153
180
  console.error(`${HOOK_FAILED_TEXT} ${hookName}()`);
154
181
  console.error(e?.stack ?? e);
155
182
  throw e;
156
183
  }
157
184
  }
158
185
  }
159
- async function HandleCleanUp(test) {
186
+ async function HandleCleanUp(test, options) {
160
187
  if (test.cleanUpCalled)
161
188
  return;
162
- if (!test.dependents.every(dependent => dependent.isFinished))
189
+ if (!test.dependents.every(dependent => dependent.isFinished && dependent.cleanUpCalled))
163
190
  return;
164
191
  test.cleanUpCalled = true;
192
+ const log = options.log;
165
193
  for (let [propertyKey, hook] of test.hooks.entries()) {
166
194
  if (hook.type != HookType.CleanUp)
167
195
  continue;
196
+ let hookName = colors.bold(colors.yellow(test.name + (propertyKey != 'cleanUp' ? `.${propertyKey}:cleanUp` : ':cleanUp')));
197
+ let start = TimeDifference.begin();
168
198
  try {
169
- 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}()`);
170
204
  }
171
205
  catch (e) {
172
- let hookName = colors.bold(colors.yellow(test.name + (propertyKey != 'cleanUp' ? `.${propertyKey}:cleanUp` : ':cleanUp')));
173
206
  console.error(`${HOOK_FAILED_TEXT} ${hookName}()`);
174
207
  console.error(e?.stack ?? e);
175
208
  throw e;
176
209
  }
177
210
  }
178
211
  for (let tree of test.dependencies) {
179
- await HandleCleanUp(tree.dependency);
212
+ await HandleCleanUp(tree.dependency, options);
180
213
  }
181
214
  }
182
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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"}
package/dist/test.d.ts CHANGED
@@ -21,7 +21,6 @@ export declare class Test {
21
21
  specs: Map<string, ISpec>;
22
22
  hooks: Map<string, IHook>;
23
23
  isFinished: boolean;
24
- isFullyFinished: boolean;
25
24
  cleanUpCalled: boolean;
26
25
  testInstance: any;
27
26
  constructor(target: any);
@@ -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;IAYI,MAAM,EAAE,GAAG;IAX9B,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,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,EAAE,OAAO,CAAS;IAC/B,YAAY,EAAE,GAAG,CAAC;gBAEC,MAAM,EAAE,GAAG;IAK9B,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,9 +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;
12
- this.isFullyFinished = false;
11
+ this.cleanUpCalled = false;
13
12
  }
14
13
  get name() {
15
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;IAYf,YAAmB,MAAW;QAAX,WAAM,GAAN,MAAM,CAAK;QAX9B,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;QAGjC,kBAAa,GAAY,KAAK,CAAC;QAI7B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;IAC/B,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.1",
3
+ "version": "2.1.1",
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,23 @@ 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
+ locale: 'en-US'
36
+ });
37
+ DeclareDependencyForTestClass({ constructor: target }, propertyKey, dependency);
38
+ }
39
+ }
40
+ }
41
+
42
+
25
43
 
26
44
  /**
27
45
  * 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,17 +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);
41
48
 
42
49
  test.isFinished = true;
43
-
50
+
44
51
  if (test.dependents.length == 0) {
45
- await HandleCleanUp(test);
52
+ await HandleCleanUp(test, options);
46
53
  }
47
-
48
- test.isFullyFinished = true;
49
54
  } else {
50
55
  DependencyLock(hashMap);
51
56
  }
@@ -79,16 +84,22 @@ function HandleDependencies(test: Test) {
79
84
  }
80
85
  }
81
86
 
82
- async function HandleBeforeHooks(test: Test) {
87
+ async function HandleBeforeHooks(test: Test, options: Options) {
83
88
  for (let [propertyKey, hook] of test.hooks.entries()) {
84
89
  if (hook.type != HookType.Before) continue;
85
90
 
91
+ let hookName = colors.bold(colors.yellow(test.name + (propertyKey != 'before' ? `.${propertyKey}:before` : ':before')));
92
+
86
93
  try {
87
- 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);
88
98
 
89
- } catch (e) {
90
- let hookName = colors.bold(colors.yellow(test.name + (propertyKey != 'before' ? `.${propertyKey}:before` : ':before')));
99
+ options.log(`${OK_TEXT} ${timeText} ${hookName}()`);
100
+ }
91
101
 
102
+ } catch (e) {
92
103
  console.error(`${HOOK_FAILED_TEXT} ${hookName}()`);
93
104
  console.error((e as any)?.stack ?? e);
94
105
  throw e;
@@ -96,14 +107,21 @@ async function HandleBeforeHooks(test: Test) {
96
107
  }
97
108
  }
98
109
 
99
- async function HandleBeforeEachHooks(test: Test) {
110
+ async function HandleBeforeEachHooks(test: Test, options: Options) {
100
111
  for (let [propertyKey, hook] of test.hooks.entries()) {
101
112
  if (hook.type != HookType.BeforeEach) continue;
113
+ let hookName = colors.bold(colors.yellow(test.name + (propertyKey != 'beforeEach' ? `.${propertyKey}:beforeEach` : ':beforeEach')));
114
+
102
115
  try {
103
- 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
+ }
104
123
 
105
124
  } catch (e) {
106
- let hookName = colors.bold(colors.yellow(test.name + (propertyKey != 'beforeEach' ? `.${propertyKey}:beforeEach` : ':beforeEach')));
107
125
 
108
126
  console.error(`${HOOK_FAILED_TEXT} ${hookName}()`);
109
127
  console.error((e as any)?.stack ?? e);
@@ -112,15 +130,22 @@ async function HandleBeforeEachHooks(test: Test) {
112
130
  }
113
131
  }
114
132
 
115
- async function HandleAfterEachHooks(test: Test) {
133
+ async function HandleAfterEachHooks(test: Test, options: Options) {
116
134
  for (let [propertyKey, hook] of test.hooks.entries()) {
117
135
  if (hook.type != HookType.AfterEach) continue;
136
+
137
+ let hookName = colors.bold(colors.yellow(test.name + (propertyKey != 'afterEach' ? `.${propertyKey}:afterEach` : ':afterEach')));
138
+
118
139
  try {
119
- 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);
120
144
 
121
- } catch (e) {
122
- let hookName = colors.bold(colors.yellow(test.name + (propertyKey != 'afterEach' ? `.${propertyKey}:afterEach` : ':afterEach')));
145
+ options.log(`${OK_TEXT} ${timeText} ${hookName}()`);
146
+ }
123
147
 
148
+ } catch (e) {
124
149
  console.error(`${HOOK_FAILED_TEXT} ${hookName}()`);
125
150
  console.error((e as any)?.stack ?? e);
126
151
  throw e;
@@ -128,7 +153,9 @@ async function HandleAfterEachHooks(test: Test) {
128
153
  }
129
154
  }
130
155
 
131
- async function HandleSpecs(test: Test, log: Function) {
156
+ async function HandleSpecs(test: Test, options: Options) {
157
+ const log = options.log;
158
+
132
159
  for (let [propertyKey, spec] of test.specs.entries()) {
133
160
  let testName = colors.bold(colors.yellow(test.name + '.' + propertyKey));
134
161
 
@@ -139,12 +166,14 @@ async function HandleSpecs(test: Test, log: Function) {
139
166
  continue;
140
167
  }
141
168
 
142
- await HandleBeforeEachHooks(test);
169
+ await HandleBeforeEachHooks(test, options);
143
170
 
144
171
  let start = TimeDifference.begin();
145
172
 
146
173
  try {
147
- 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
+ }
148
177
 
149
178
  let timeText = TimeFactor(start.end(), spec.timeout);
150
179
 
@@ -163,19 +192,26 @@ async function HandleSpecs(test: Test, log: Function) {
163
192
  throw e;
164
193
  }
165
194
 
166
- await HandleAfterEachHooks(test);
195
+ await HandleAfterEachHooks(test, options);
167
196
  }
168
197
  }
169
198
 
170
- async function HandleAfterHooks(test: Test) {
199
+ async function HandleAfterHooks(test: Test, options: Options) {
171
200
  for (let [propertyKey, hook] of test.hooks.entries()) {
172
201
  if (hook.type != HookType.After) continue;
202
+
203
+ let hookName = colors.bold(colors.yellow(test.name + (propertyKey != 'after' ? `.${propertyKey}:after` : ':after')));
204
+
173
205
  try {
174
- 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);
175
210
 
176
- } catch (e) {
177
- let hookName = colors.bold(colors.yellow(test.name + (propertyKey != 'after' ? `.${propertyKey}:after` : ':after')));
211
+ options.log(`${OK_TEXT} ${timeText} ${hookName}()`);
212
+ }
178
213
 
214
+ } catch (e) {
179
215
  console.error(`${HOOK_FAILED_TEXT} ${hookName}()`);
180
216
  console.error((e as any)?.stack ?? e);
181
217
  throw e;
@@ -184,20 +220,29 @@ async function HandleAfterHooks(test: Test) {
184
220
  }
185
221
 
186
222
 
187
- async function HandleCleanUp(test: Test) {
223
+ async function HandleCleanUp(test: Test, options: Options) {
188
224
  if (test.cleanUpCalled) return;
189
- if (!test.dependents.every(dependent => dependent.isFinished)) return;
225
+ if (!test.dependents.every(dependent => dependent.isFinished && dependent.cleanUpCalled)) return;
190
226
 
191
227
  test.cleanUpCalled = true;
192
228
 
229
+ const log = options.log;
230
+
193
231
  for (let [propertyKey, hook] of test.hooks.entries()) {
194
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
+
195
237
  try {
196
- 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
+ }
197
241
 
198
- } catch (e) {
199
- let hookName = colors.bold(colors.yellow(test.name + (propertyKey != 'cleanUp' ? `.${propertyKey}:cleanUp` : ':cleanUp')));
242
+ let timeText = TimeFactor(start.end(), hook.timeout);
200
243
 
244
+ log(`${OK_TEXT} ${timeText} ${hookName}()`);
245
+ } catch (e) {
201
246
  console.error(`${HOOK_FAILED_TEXT} ${hookName}()`);
202
247
  console.error((e as any)?.stack ?? e);
203
248
  throw e;
@@ -205,7 +250,7 @@ async function HandleCleanUp(test: Test) {
205
250
  }
206
251
 
207
252
  for (let tree of test.dependencies) {
208
- await HandleCleanUp(tree.dependency);
253
+ await HandleCleanUp(tree.dependency, options);
209
254
  }
210
255
  }
211
256
 
package/src/test.ts CHANGED
@@ -23,15 +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; // cleanup ignored
27
- isFullyFinished: boolean; // including cleanup
26
+ isFinished: boolean = false; // cleanup ignored
28
27
  cleanUpCalled: boolean = false;
29
28
  testInstance: any;
30
29
 
31
- constructor(public target: any) {
32
- this.isFinished = false;
33
- this.isFullyFinished = false;
34
- }
30
+ constructor(public target: any) {}
35
31
 
36
32
  get name() {
37
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
+ }
@@ -0,0 +1,19 @@
1
+ import { Spec, Dependencies } from "../src/index.js";
2
+ import { strict as assert } from 'assert';
3
+
4
+ export class ICharacterTest {
5
+
6
+ @Spec()
7
+ async test() { }
8
+ }
9
+
10
+ @Dependencies([
11
+ ICharacterTest
12
+ ])
13
+ export class TurkishCharacterTest {
14
+ @Spec()
15
+ async check() {
16
+ assert.notEqual(this['iCharacterTest'], undefined, 'turkish character test is failed');
17
+ }
18
+ }
19
+