54 lines
1.7 KiB
TypeScript
54 lines
1.7 KiB
TypeScript
import assert from "assert";
|
|
import fs from "fs";
|
|
import path from "path";
|
|
import * as types from "ast-types";
|
|
import { parse } from "../lib/parser";
|
|
const hasOwn = Object.prototype.hasOwnProperty;
|
|
|
|
// Babel 7 no longer supports Node 4 or 5.
|
|
const nodeMajorVersion = parseInt(process.versions.node, 10);
|
|
(nodeMajorVersion >= 6 ? describe : xdescribe)("Syntax", function () {
|
|
// Make sure the pretty-printer can print all node types currently provided by
|
|
// types.namedTypes.
|
|
describe("Pretty-printer switch (node.type) cases implemented", function () {
|
|
const printer = path.join(__dirname, "../lib/printer.ts");
|
|
const data = fs.readFileSync(printer, "utf-8");
|
|
const ast = parse(data, { parser: require("../parsers/typescript") });
|
|
const typeNames: { [name: string]: string } = {};
|
|
|
|
types.visit(ast, {
|
|
visitFunctionDeclaration(path) {
|
|
const decl = path.node;
|
|
if (
|
|
types.namedTypes.Identifier.check(decl.id) &&
|
|
decl.id.name === "genericPrintNoParens"
|
|
) {
|
|
this.traverse(path, {
|
|
visitSwitchCase(path) {
|
|
const test = path.node.test;
|
|
if (
|
|
test &&
|
|
test.type === "StringLiteral" &&
|
|
typeof test.value === "string"
|
|
) {
|
|
const name = test.value;
|
|
typeNames[name] = name;
|
|
}
|
|
return false;
|
|
},
|
|
});
|
|
} else {
|
|
this.traverse(path);
|
|
}
|
|
},
|
|
});
|
|
|
|
Object.keys(types.namedTypes).forEach((name) => {
|
|
it(name, () => {
|
|
assert.ok(hasOwn.call(typeNames, name), "unhandled type: " + name);
|
|
assert.strictEqual(name, typeNames[name]);
|
|
delete typeNames[name];
|
|
});
|
|
});
|
|
});
|
|
});
|