import { assert, assertEquals, assertFalse } from "@std/assert"; import { isValidSlug, slugify } from "../slug.ts"; Deno.test("slugify: lowercases, strips accents, dashes the rest", () => { assertEquals(slugify("Hello, World!"), "hello-world"); assertEquals(slugify("Crème brûlée à Paris"), "creme-brulee-a-paris"); assertEquals(slugify(" --already--dashed-- "), "already-dashed"); assertEquals(slugify("日本語"), "untitled"); assertEquals(slugify(""), "untitled"); assertEquals(slugify("x".repeat(100)).length, 60); // A long title is cut at a word boundary, never left with a hyphen. const long = slugify(`${"word ".repeat(12)}tail`); assertEquals(long, "word-".repeat(12).slice(0, -1)); assert(isValidSlug(long)); }); Deno.test("isValidSlug: the format categories, dumps and playlists share", () => { assert(isValidSlug("music")); assert(isValidSlug("lo-fi-2")); for (const bad of ["Music", "-music", "music-", "lo--fi", "lo fi", ""]) { assertFalse(isValidSlug(bad), bad); } assertFalse(isValidSlug("a".repeat(61))); assertFalse(isValidSlug("a".repeat(51), 50)); });