-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathGrammar.test.ts
36 lines (28 loc) · 1.19 KB
/
Grammar.test.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
import { parseTADs } from "../parser/Parser";
import { genGrammar } from "../parser/Grammar";
import { INVALID_STATEMENTS, VALID_STATEMENTS, TADS } from "./Common";
import { exprToString, parseToExpr } from "../parser/Expr";
const [tads] = parseTADs(TADS.join("\n"));
const grammar = genGrammar(tads);
const padSize = 60;
it("vacio tiene que fallar", () => expect(parseToExpr("", {}, grammar)).toBeNull());
for (const stmt of VALID_STATEMENTS) {
it("parsea --- " + stmt.padEnd(padSize), () => expect(parseToExpr(stmt, {}, grammar)).not.toBeNull());
}
for (const stmt of VALID_STATEMENTS) {
it("stmt -> Expr -> stmt -> Expr --- " + stmt.padEnd(padSize), () => {
const expr1 = parseToExpr(stmt, {}, grammar);
expect(expr1).not.toBeNull();
const stmt2 = exprToString(expr1!, grammar);
expect(stmt2.length).toBeGreaterThan(0);
const expr2 = parseToExpr(stmt2, {}, grammar);
expect(expr2).not.toBeNull();
expect(expr1).toStrictEqual(expr2);
});
}
for (const stmt of INVALID_STATEMENTS) {
it("no debería parsear --- " + stmt.padEnd(padSize), () => {
const expr = parseToExpr(stmt, {}, grammar);
expect(expr).toBeNull();
});
}