test.govlab/code-parse/core/loaders/manifest.loader.test.ts
test.govlab/code-parse/core/loaders/manifest.loader.test.ts is a file in Codebase Testing. 50 lines of code and 0 definitions.
import {
FILE_TYPES_KEY,
GRAMMARS_KEY,
GRAMMAR_CONFIG_FILE,
NAME_KEY,
PACKAGE_GRAMMAR_KEY,
PACKAGE_MANIFEST_FILE,
} from "@govlab/code-parse/configuration/constants/grammar.constants.ts";
import { describe, expect, it } from "vitest";
import { fileTypesForSource, readGrammarMeta } from "@govlab/code-parse/core/loaders/manifest.loader.ts";
import { mkdtempSync, rmSync } from "node:fs";
import { isRecord } from "@govlab/code-parse/core/predicates/record.predicate.ts";
import { join } from "node:path";
import { tmpdir } from "node:os";
import { writeVerbatim } from "@govlab/canonical-write";
const withPackage = function withPackage(body: (dir: string) => void): void {
const dir = mkdtempSync(join(tmpdir(), "grammar-meta-"));
try {
body(dir);
} finally {
rmSync(dir, { force: true, recursive: true });
}
};
describe("readGrammarMeta and fileTypesForSource", () => {
it("takes a grammar's own file types, and the pooled ones when it declares none", () => {
withPackage((dir) => {
const grammars = [{ [FILE_TYPES_KEY]: ["ts"], [NAME_KEY]: "typescript" }, { [NAME_KEY]: "tsx" }];
writeVerbatim(join(dir, GRAMMAR_CONFIG_FILE), JSON.stringify({ [GRAMMARS_KEY]: grammars }));
writeVerbatim(
join(dir, PACKAGE_MANIFEST_FILE),
JSON.stringify({ [PACKAGE_GRAMMAR_KEY]: [{ [FILE_TYPES_KEY]: ["tsx"] }] }),
);
const meta = readGrammarMeta(dir);
expect(fileTypesForSource({ lang: "typescript" }, meta)).toStrictEqual(["ts"]);
expect(fileTypesForSource({ lang: "tsx" }, meta)).toStrictEqual(["ts", "tsx"]);
});
});
it("reads an empty pool from a package with no manifests", () => {
withPackage((dir) => {
expect(readGrammarMeta(dir)).toStrictEqual({ entries: [], pool: [] });
});
});
});
describe("isRecord", () => {
it("accepts a plain object and refuses an array and null", () => {
expect(isRecord({})).toBe(true);
expect(isRecord([])).toBe(false);
expect(isRecord(null)).toBe(false);
});
});