-
Notifications
You must be signed in to change notification settings - Fork 0
/
Generator.ts
43 lines (34 loc) · 1.44 KB
/
Generator.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
import RandExp from "randexp";
import { recipe, testcase, generateMode, testcaseGenerator } from "./types";
class Generator {
recipes: recipe[] = [];
constructor(testcases: recipe[] = []) {
if (testcases.length) this.load(testcases);
}
public load(testcases: recipe[]): Generator {
this.recipes = testcases.map((tc) => {
return Object.assign({ name: null, regex: null, generator: null, text: null, repeat: 1 }, tc);
});
return this;
}
public gen(mode: generateMode = "normal"): testcase[] | string | null {
const testcases: testcase[] = [];
for (let i = 0; i < this.recipes.length; i++) testcases.push(this.genTestcase(this.recipes[i], i));
if (mode == "normal") return testcases;
else if (mode == "simple") return testcases.reduce((acc, cur) => acc + cur.testcase, "");
return null;
}
private genTestcase(rc: recipe, id: number = 0): testcase {
const name = rc.name || "Case " + id.toString();
let tc = "";
for (let i = 0; i < rc.repeat; i++) {
if (typeof rc.generator === "function") tc += rc.generator().trim();
else if (rc.regex instanceof RegExp) tc += new RandExp(rc.regex).gen().trim();
else if (typeof rc.text === "string") tc += rc.text.trim();
else continue;
tc += "\n\n";
}
return { id, name, testcase: tc };
}
}
export default Generator;