26 lines
1.1 KiB
TypeScript
26 lines
1.1 KiB
TypeScript
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));
|
|
});
|