import { assert, assertEquals, assertFalse } from "@std/assert"; import { describe, it } from "@std/testing/bdd"; import { getFlagEmojiFromLocale, getLanguageNameFromLocale, isValidLocale, LANGUAGE_DEFAULTS, } from "./lang.ts"; describe("getFlagEmojiFromLocale", () => { it("returns πŸ‡ΊπŸ‡Έ for 'en-US'", () => { assertEquals(getFlagEmojiFromLocale("en-US"), "πŸ‡ΊπŸ‡Έ"); }); it("returns πŸ‡§πŸ‡· for 'pt-BR'", () => { assertEquals(getFlagEmojiFromLocale("pt-BR"), "πŸ‡§πŸ‡·"); }); it("returns πŸ‡«πŸ‡· for 'fr-FR'", () => { assertEquals(getFlagEmojiFromLocale("fr-FR"), "πŸ‡«πŸ‡·"); }); it("uses fallback country from LANGUAGE_DEFAULTS when no region", () => { for (const i in LANGUAGE_DEFAULTS) { if (i in LANGUAGE_DEFAULTS) { assertEquals( getFlagEmojiFromLocale(i), getFlagEmojiFromLocale( `${i}-${LANGUAGE_DEFAULTS[i as keyof typeof LANGUAGE_DEFAULTS]}`, ), ); } } }); it("returns empty string for unsupported languages", () => { assertEquals(getFlagEmojiFromLocale("xx"), ""); assertEquals(getFlagEmojiFromLocale("de"), ""); }); it("is case-insensitive", () => { assertEquals(getFlagEmojiFromLocale("EN-us"), "πŸ‡ΊπŸ‡Έ"); assertEquals(getFlagEmojiFromLocale("Pt"), "πŸ‡΅πŸ‡Ή"); }); }); describe("getLanguageNameFromLocale", () => { it("returns 'English' for 'en'", () => { const result = getLanguageNameFromLocale("en"); assertEquals(typeof result, "string"); assert(result.length > 0); }); it("returns '' for invalid locale", () => { assertEquals(getLanguageNameFromLocale(new Date().toLocaleString()), ""); }); it("returns name in the correct locale", () => { const fr = getLanguageNameFromLocale("fr"); const pt = getLanguageNameFromLocale("pt"); assertEquals(typeof fr, "string"); assertEquals(typeof pt, "string"); assert(fr.length > 0); assert(pt.length > 0); }); }); describe("isValidLocale", () => { it("returns true for valid simple language tags", () => { assert(isValidLocale("en")); assert(isValidLocale("fr")); assert(isValidLocale("pt")); }); it("returns true for valid language-region tags", () => { assert(isValidLocale("en-US")); assert(isValidLocale("pt-BR")); assert(isValidLocale("fr-FR")); }); it("returns true for valid locale with script", () => { assert(isValidLocale("zh-Hant")); assert(isValidLocale("sr-Cyrl")); }); it("returns false for invalid formats", () => { assertFalse(isValidLocale("EN_us")); assertFalse(isValidLocale("xx-YY-ZZ")); assertFalse(isValidLocale("123")); assertFalse(isValidLocale("")); }); it("is case-insensitive and accepts well-formed mixed cases", () => { assert(isValidLocale("eN-uS")); }); });