@@ -9,47 +9,75 @@ beforeEach(() => vi.resetModules())
99
1010describe ( 'getLanguage' , ( ) => {
1111 it ( 'returns the set language as it is' , async ( ) => {
12- setLanguage ( 'de-DE' )
12+ mockLanguage ( 'de-DE' )
1313 expect ( await getLanguage ( ) ) . toEqual ( 'de-DE' )
1414 } )
1515
1616 it ( 'returns the navigator language if no language is set' , async ( ) => {
1717 const spy = vi . spyOn ( navigator , 'language' , 'get' )
1818 spy . mockImplementationOnce ( ( ) => 'ar-EG' )
1919
20- setLanguage ( undefined )
20+ mockLanguage ( undefined )
2121 expect ( await getLanguage ( ) ) . toEqual ( 'ar-EG' )
2222 expect ( spy ) . toHaveBeenCalledOnce ( )
2323 } )
2424} )
2525
26+ describe ( 'setLanguage' , ( ) => {
27+ it ( 'does set the global state' , async ( ) => {
28+ mockLanguage ( 'de' )
29+ await setLanguage ( 'ar' )
30+ expect ( globalThis . _nc_l10n_language ) . toBe ( 'ar' )
31+ } )
32+
33+ it . skipIf ( typeof globalThis . document === 'undefined' ) ( 'does set the DOM attribute' , async ( ) => {
34+ mockLanguage ( 'de' )
35+ await setLanguage ( 'ar' )
36+ expect ( document . documentElement . lang ) . toBe ( 'ar' )
37+ } )
38+ } )
39+
2640describe ( 'getLocale' , ( ) => {
2741 it ( 'returns the set locale as it is with underscore' , async ( ) => {
28- setLocale ( 'de_DE' )
42+ mockLocale ( 'de_DE' )
2943 expect ( await getLocale ( ) ) . toEqual ( 'de_DE' )
3044 } )
3145
3246 it ( 'returns the environment locale with underscore if no locale is set' , async ( ) => {
33- setLocale ( undefined )
47+ mockLocale ( undefined )
3448 expect ( await getLocale ( ) ) . toEqual ( process . env . LANG ?. replaceAll ( '-' , '_' ) . split ( '.' ) [ 0 ] )
3549 } )
3650} )
3751
52+ describe ( 'setLocale' , ( ) => {
53+ it ( 'does set the global state' , async ( ) => {
54+ mockLocale ( 'de_DE' )
55+ await setLocale ( 'ar' )
56+ expect ( globalThis . _nc_l10n_locale ) . toBe ( 'ar' )
57+ } )
58+
59+ it . skipIf ( typeof globalThis . document === 'undefined' ) ( 'does set the DOM attribute' , async ( ) => {
60+ mockLocale ( 'de_DE' )
61+ await setLocale ( 'ar' )
62+ expect ( document . documentElement . dataset . locale ) . toBe ( 'ar' )
63+ } )
64+ } )
65+
3866describe ( 'getCanonicalLocale' , ( ) => {
3967 it ( 'returns the set locale with hyphen' , async ( ) => {
40- setLocale ( 'de_DE' )
68+ mockLocale ( 'de_DE' )
4169 expect ( await getCanonicalLocale ( ) ) . toEqual ( 'de-DE' )
4270 } )
4371
4472 it ( 'returns the set locale with multiple hyphen' , async ( ) => {
45- setLocale ( 'az_Cyrl_AZ' )
73+ mockLocale ( 'az_Cyrl_AZ' )
4674 expect ( await getCanonicalLocale ( ) ) . toEqual ( 'az-Cyrl-AZ' )
4775 } )
4876
4977 it ( 'returns the environment locale with hyphen if no locale is set' , async ( ) => {
5078 expect ( process . env . LANG ) . toBeTruthy ( )
5179
52- setLocale ( undefined )
80+ mockLocale ( undefined )
5381 expect ( await getCanonicalLocale ( ) ) . toEqual ( process . env . LANG ! . split ( '.' ) [ 0 ] )
5482 } )
5583} )
@@ -69,11 +97,24 @@ async function getLanguage() {
6997 return getLanguage ( )
7098}
7199
72- function setLanguage ( lang ?: string ) {
100+ async function setLocale ( locale : string ) {
101+ const { setLocale } = await import ( '../lib/locale.ts' )
102+ return setLocale ( locale )
103+ }
104+
105+ async function setLanguage ( language : string ) {
106+ const { setLanguage } = await import ( '../lib/locale.ts' )
107+ return setLanguage ( language )
108+ }
109+
110+ function mockLanguage ( lang ?: string ) {
73111 // @ts -expect-error - Mocking global state
74112 globalThis . _nc_l10n_language = lang
75113}
76- function setLocale ( locale ?: string ) {
114+ function mockLocale ( locale ?: string ) {
77115 // @ts -expect-error - Mocking global state
78116 globalThis . _nc_l10n_locale = locale
117+ if ( typeof globalThis . document !== 'undefined' ) {
118+ delete globalThis . document . documentElement . dataset . locale
119+ }
79120}
0 commit comments