import { describe, expect, test } from "bun:test";
import { attributesFor, parseAttributes } from "./gitattributes";
describe("gitattributes", () => {
const rules = parseAttributes(
[
"# comment",
"*.js linguist-language=TypeScript",
"vendor/ linguist-vendored",
"/docs/** linguist-documentation",
"generated/*.ts linguist-generated -diff",
"vendor/keep.js -linguist-vendored",
"*.lock !linguist-generated",
].join("\n"),
100,
);
test("later rules win per attribute, with set, unset, value and unspecified forms", () => {
expect(Object.fromEntries(attributesFor(rules, "src/app.js"))).toEqual({ "linguist-language": "TypeScript" });
expect(attributesFor(rules, "lib/vendor/x/y.c").get("linguist-vendored")).toBe(true);
expect(attributesFor(rules, "vendor/keep.js").get("linguist-vendored")).toBe(false);
expect(attributesFor(rules, "docs/a/b.md").get("linguist-documentation")).toBe(true);
expect(attributesFor(rules, "src/docs/b.md").has("linguist-documentation")).toBe(false);
expect(Object.fromEntries(attributesFor(rules, "generated/a.ts"))).toEqual({
"linguist-generated": true,
diff: false,
});
expect(attributesFor(rules, "bun.lock").get("linguist-generated")).toBeNull();
});
});