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.
- package/README.md +65 -1
- package/bin/nole.js +6 -2
- package/dist/data.js +1 -1
- package/dist/data.js.map +1 -1
- package/dist/decorators.d.ts +1 -0
- package/dist/decorators.d.ts.map +1 -1
- package/dist/decorators.js +11 -0
- package/dist/decorators.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/run.d.ts +6 -1
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +63 -29
- package/dist/run.js.map +1 -1
- package/dist/test.d.ts.map +1 -1
- package/dist/test.js +1 -1
- package/dist/test.js.map +1 -1
- package/dist/utils/executor.test.d.ts +6 -0
- package/dist/utils/executor.test.d.ts.map +1 -0
- package/dist/utils/executor.test.js +49 -0
- package/dist/utils/executor.test.js.map +1 -0
- package/dist/utils/time_difference.test.d.ts +4 -0
- package/dist/utils/time_difference.test.d.ts.map +1 -0
- package/dist/utils/time_difference.test.js +24 -0
- package/dist/utils/time_difference.test.js.map +1 -0
- package/dist/utils/time_factor.test.d.ts +4 -0
- package/dist/utils/time_factor.test.d.ts.map +1 -0
- package/dist/utils/time_factor.test.js +42 -0
- package/dist/utils/time_factor.test.js.map +1 -0
- package/package.json +23 -2
- package/src/data.ts +1 -1
- package/src/decorators.ts +17 -0
- package/src/index.ts +1 -1
- package/src/run.ts +81 -34
- package/src/test.ts +2 -4
- package/src/utils/executor.test.ts +27 -0
- package/src/utils/executor.ts +1 -1
- package/src/utils/time_difference.test.ts +12 -0
- package/src/utils/time_factor.test.ts +29 -0
- package/test/hook.test.ts +2 -2
- package/test/multi-dependency.test.ts +23 -0
- 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(
|
|
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
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,
|
|
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"}
|
package/dist/decorators.d.ts
CHANGED
|
@@ -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;
|
package/dist/decorators.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/decorators.js
CHANGED
|
@@ -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);
|
package/dist/decorators.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decorators.js","sourceRoot":"","sources":["../src/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,IAAI,EAA2B,MAAM,WAAW,CAAC;
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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;
|
|
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;
|
|
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
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,
|
|
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(
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,KAAK,IAAI,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAQ,MAAM,WAAW,CAAC;AAE3C,MAAM,MAAM,GAAI,IAAY,CAAC,OAAO,CAAC;AAErC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;AACxD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;AAC3D,MAAM,iBAAiB,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;AAClE,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;AAC1D,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"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"}
|
package/dist/test.d.ts.map
CHANGED
|
@@ -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,
|
|
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
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;
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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.
|
|
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
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
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
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
88
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
120
|
-
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
175
|
-
|
|
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
|
-
|
|
238
|
+
if (!options.orderDebug) {
|
|
239
|
+
await Executor(test.testInstance[propertyKey].bind(test.testInstance), hook.timeout);
|
|
240
|
+
}
|
|
195
241
|
|
|
196
|
-
|
|
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
|
+
}
|
package/src/utils/executor.ts
CHANGED
|
@@ -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
|
|
4
|
+
export class HookTest {
|
|
5
5
|
array: any[] = [1, 2, 3];
|
|
6
6
|
|
|
7
7
|
@Hook(HookType.BeforeEach)
|
|
8
|
-
async
|
|
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
|
+
}
|