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(); }); });