/** Clean implementation for Lattice; spec: docs/visual-editor-spec.md */import { describe, expect, it } from "vitest";import { CODE_LANGUAGES, codeLanguageLabel, resolveCodeLanguage } from "./code-languages"; describe("code block languages (R-BLK-7, R-FMT-8)", () => { it("offers Plain text first and Mermaid among the named languages", () => { expect(CODE_LANGUAGES[0]?.value).toBe("text"); expect(CODE_LANGUAGES.map((language) => language.value)).toContain("mermaid"); expect(new Set(CODE_LANGUAGES.map((language) => language.value)).size).toBe(CODE_LANGUAGES.length); }); it.each([ ["ts", "typescript", "TypeScript"], ["TS", "typescript", "TypeScript"], ["py", "python", "Python"], ["golang", "go", "Go"], ["yml", "yaml", "YAML"], ["xml", "html", "HTML"], ["html", "html", "HTML"], ["ini", "toml", "TOML"], ["tex", "latex", "LaTeX"], ["shell", "bash", "Bash"], ["console", "bash", "Bash"], ["python3", "python", "Python"], ["json5", "json", "JSON"], ["sass", "scss", "SCSS"], ])("resolves the authored %s to the %s entry, labelled %s", (authored, value, label) => { expect(resolveCodeLanguage(authored)?.value).toBe(value); expect(codeLanguageLabel(authored, "Plain text")).toBe(label); }); it("labels plain and unknown languages without highlighting them", () => { expect(codeLanguageLabel("txt", "纯文本")).toBe("纯文本"); expect(resolveCodeLanguage("plain")?.value).toBe("text"); expect(codeLanguageLabel("plain", "Plain text")).toBe("Plain text"); expect(resolveCodeLanguage("txt")?.grammar).toBeUndefined(); expect(resolveCodeLanguage("mermaid")?.grammar).toBeUndefined(); expect(resolveCodeLanguage("brainfuck-ish")).toBeNull(); expect(codeLanguageLabel("brainfuck-ish", "Plain text")).toBe("brainfuck-ish"); }); it("highlights every named language with a grammar lowlight has", () => { const grammars = CODE_LANGUAGES.flatMap((language) => (language.grammar ? [language.grammar] : [])); expect(grammars).toContain("typescript"); expect(grammars).not.toContain("plaintext"); expect(["shell", "console", "python3", "json5", "sass"].map((authored) => resolveCodeLanguage(authored)?.grammar)) .toEqual(["bash", "bash", "python", "json", "scss"]); });});
/** Clean implementation for Lattice; spec: docs/visual-editor-spec.md */
import { describe, expect, it } from "vitest";
import { CODE_LANGUAGES, codeLanguageLabel, resolveCodeLanguage } from "./code-languages";
describe("code block languages (R-BLK-7, R-FMT-8)", () => {
it("offers Plain text first and Mermaid among the named languages", () => {
expect(CODE_LANGUAGES[0]?.value).toBe("text");
expect(CODE_LANGUAGES.map((language) => language.value)).toContain("mermaid");
expect(new Set(CODE_LANGUAGES.map((language) => language.value)).size).toBe(CODE_LANGUAGES.length);
});
it.each([
["ts", "typescript", "TypeScript"],
["TS", "typescript", "TypeScript"],
["py", "python", "Python"],
["golang", "go", "Go"],
["yml", "yaml", "YAML"],
["xml", "html", "HTML"],
["html", "html", "HTML"],
["ini", "toml", "TOML"],
["tex", "latex", "LaTeX"],
["shell", "bash", "Bash"],
["console", "bash", "Bash"],
["python3", "python", "Python"],
["json5", "json", "JSON"],
["sass", "scss", "SCSS"],
])("resolves the authored %s to the %s entry, labelled %s", (authored, value, label) => {
expect(resolveCodeLanguage(authored)?.value).toBe(value);
expect(codeLanguageLabel(authored, "Plain text")).toBe(label);
});
it("labels plain and unknown languages without highlighting them", () => {
expect(codeLanguageLabel("txt", "纯文本")).toBe("纯文本");
expect(resolveCodeLanguage("plain")?.value).toBe("text");
expect(codeLanguageLabel("plain", "Plain text")).toBe("Plain text");
expect(resolveCodeLanguage("txt")?.grammar).toBeUndefined();
expect(resolveCodeLanguage("mermaid")?.grammar).toBeUndefined();
expect(resolveCodeLanguage("brainfuck-ish")).toBeNull();
expect(codeLanguageLabel("brainfuck-ish", "Plain text")).toBe("brainfuck-ish");
});
it("highlights every named language with a grammar lowlight has", () => {
const grammars = CODE_LANGUAGES.flatMap((language) => (language.grammar ? [language.grammar] : []));
expect(grammars).toContain("typescript");
expect(grammars).not.toContain("plaintext");
expect(["shell", "console", "python3", "json5", "sass"].map((authored) => resolveCodeLanguage(authored)?.grammar))
.toEqual(["bash", "bash", "python", "json", "scss"]);
});
});