-
Notifications
You must be signed in to change notification settings - Fork 3
/
mod.ts
71 lines (63 loc) · 1.71 KB
/
mod.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
export * from "./decrator.ts";
import { data } from "./decrator.ts";
interface TestDefined {
desc: string;
fn: () => void;
skip?: boolean;
skipReason?: string;
// deno-lint-ignore no-explicit-any
params?: Array<any>;
}
// deno-lint-ignore no-explicit-any
export default function (fn: any) {
const instance = new fn();
const suite = data()[fn.name];
const { hook, ...tests } = suite;
if (hook == undefined) {
Object.values<TestDefined>(tests).forEach((x) => {
if (x.params) {
x.params.map((param) =>
Deno.test({
name: x.desc,
fn: x.fn.bind(instance, param),
ignore: x.skip,
sanitizeOps: false,
sanitizeResources: false,
sanitizeExit: false,
})
);
} else {
Deno.test({
name: x.desc,
fn: x.fn.bind(instance),
ignore: x.skip,
});
}
});
return;
}
Deno.test(fn.name, async (t) => {
if (hook.before) hook.before.apply(instance);
for (const x of Object.values<TestDefined>(tests)) {
if (hook["before.each"]) hook["before.each"].apply(instance);
if (x.params) {
await Promise.all(
x.params.map((param) =>
t.step({
name: x.desc,
fn: x.fn.bind(instance, param),
ignore: x.skip,
sanitizeOps: false,
sanitizeResources: false,
sanitizeExit: false,
})
),
);
} else {
await t.step({ name: x.desc, fn: x.fn.bind(instance), ignore: x.skip });
}
if (hook["after.each"]) hook["after.each"].apply(instance);
}
if (hook.after) hook.after.apply(instance);
});
}