assemblyscript/tests/parser.ts

44 lines
1.4 KiB
TypeScript

import * as fs from "fs";
import * as chalk from "chalk";
import * as glob from "glob";
import "../src/glue/js";
import { Parser } from "../src/parser";
import { diff } from "./util/diff";
const isCreate = process.argv[2] === "--create";
const filter = process.argv.length > 2 && !isCreate ? "*" + process.argv[2] + "*.ts" : "**.ts";
glob.sync(filter, { cwd: __dirname + "/parser" }).forEach(filename => {
if (filename.charAt(0) == "_" || filename.endsWith(".fixture.ts"))
return;
console.log("Testing parser/" + filename);
const parser = new Parser();
const sourceText = fs.readFileSync(__dirname + "/parser/" + filename, { encoding: "utf8" }).replace(/\r?\n/g, "\n").replace(/^\/\/.*\r?\n/mg, "");
parser.parseFile(sourceText, filename, true);
var sb: string[] = [];
parser.program.sources[0].serialize(sb);
const actual = sb.join("");
const fixture = filename + ".fixture.ts";
if (isCreate) {
fs.writeFileSync(__dirname + "/parser/" + fixture, actual, { encoding: "utf8" });
console.log("Created\n");
} else {
const expected = fs.readFileSync(__dirname + "/parser/" + fixture, { encoding: "utf8" });
const diffs = diff("parser/" + fixture, expected, actual);
if (diffs !== null) {
process.exitCode = 1;
console.log(diffs);
console.log(chalk.default.red("diff ERROR"));
} else {
console.log(chalk.default.green("diff OK"));
}
}
console.log();
});