11import { describe , it , expect } from "vitest" ;
2- import { normalizeLocale } from "./locales" ;
2+ import { getLocaleCodeDelimiter , normalizeLocale , resolveLocaleCode , resolveOverriddenLocale } from "./locales" ;
33
44describe ( "normalizeLocale" , ( ) => {
55 it ( "should return normalized locale for short locale codes" , ( ) => {
@@ -24,3 +24,61 @@ describe("normalizeLocale", () => {
2424 expect ( normalizeLocale ( "zh-rCN" ) ) . toEqual ( "zh-CN" ) ;
2525 } ) ;
2626} ) ;
27+
28+ describe ( "resolveLocaleCode" , ( ) => {
29+ it ( "should resolve a short locale code to the first full locale code in the map" , ( ) => {
30+ expect ( resolveLocaleCode ( "en" ) ) . toEqual ( "en-US" ) ;
31+ expect ( resolveLocaleCode ( "fr" ) ) . toEqual ( "fr-FR" ) ;
32+ expect ( resolveLocaleCode ( "az" ) ) . toEqual ( "az-AZ" ) ;
33+ } ) ;
34+
35+ it ( "should return the full locale code if it is already provided" , ( ) => {
36+ expect ( resolveLocaleCode ( "en-US" ) ) . toEqual ( "en-US" ) ;
37+ expect ( resolveLocaleCode ( "fr-CA" ) ) . toEqual ( "fr-CA" ) ;
38+ expect ( resolveLocaleCode ( "es-MX" ) ) . toEqual ( "es-MX" ) ;
39+ } ) ;
40+
41+ it ( "should throw an error for an invalid or unsupported locale code" , ( ) => {
42+ expect ( ( ) => resolveLocaleCode ( "az-US" ) ) . toThrow ( "Invalid locale code" ) ;
43+ expect ( ( ) => resolveLocaleCode ( "au" ) ) . toThrow ( "Invalid locale code" ) ;
44+ } ) ;
45+
46+ it ( "should return first code for locales with multiple variants" , ( ) => {
47+ expect ( resolveLocaleCode ( "sr" ) ) . toEqual ( "sr-RS" ) ;
48+ expect ( resolveLocaleCode ( "zh" ) ) . toEqual ( "zh-CN" ) ;
49+ } ) ;
50+ } ) ;
51+
52+ describe ( "getLocaleCodeDelimiter" , ( ) => {
53+ it ( "should return '-' for locale codes with hyphen delimiter" , ( ) => {
54+ expect ( getLocaleCodeDelimiter ( "en-US" ) ) . toEqual ( "-" ) ;
55+ expect ( getLocaleCodeDelimiter ( "fr-FR" ) ) . toEqual ( "-" ) ;
56+ } ) ;
57+
58+ it ( "should return '_' for locale codes with underscore delimiter" , ( ) => {
59+ expect ( getLocaleCodeDelimiter ( "en_US" ) ) . toEqual ( "_" ) ;
60+ expect ( getLocaleCodeDelimiter ( "fr_FR" ) ) . toEqual ( "_" ) ;
61+ } ) ;
62+
63+ it ( "should return undefined for locale codes without a recognized delimiter" , ( ) => {
64+ expect ( getLocaleCodeDelimiter ( "enUS" ) ) . toBeNull ( ) ;
65+ expect ( getLocaleCodeDelimiter ( "frFR" ) ) . toBeNull ( ) ;
66+ } ) ;
67+ } ) ;
68+
69+ describe ( "resolveOverridenLocale" , ( ) => {
70+ it ( "should return the same locale if no delimiter is provided" , ( ) => {
71+ expect ( resolveOverriddenLocale ( "en-US" ) ) . toEqual ( "en-US" ) ;
72+ expect ( resolveOverriddenLocale ( "fr_FR" ) ) . toEqual ( "fr_FR" ) ;
73+ } ) ;
74+
75+ it ( "should replace the delimiter with the specified one" , ( ) => {
76+ expect ( resolveOverriddenLocale ( "en-US" , "_" ) ) . toEqual ( "en_US" ) ;
77+ expect ( resolveOverriddenLocale ( "fr_FR" , "-" ) ) . toEqual ( "fr-FR" ) ;
78+ } ) ;
79+
80+ it ( "should return the same locale if no recognized delimiter is found" , ( ) => {
81+ expect ( resolveOverriddenLocale ( "enUS" , "_" ) ) . toEqual ( "enUS" ) ;
82+ expect ( resolveOverriddenLocale ( "frFR" , "-" ) ) . toEqual ( "frFR" ) ;
83+ } ) ;
84+ } ) ;
0 commit comments