1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
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"));
});
});
|