1import { Platform } from 'expo-modules-core'; 2 3import * as Localization from '../Localization'; 4 5function validateString(result) { 6 expect(typeof result).toBe('string'); 7 expect(result.length).toBeGreaterThan(0); 8} 9 10function validateStringArray(result) { 11 expect(result).toBeDefined(); 12 expect(Array.isArray(result)).toBe(true); 13} 14 15if (Platform.isDOMAvailable) { 16 describe(`Localization methods`, () => { 17 it(`expect async to return locale`, async () => { 18 const { 19 currency, 20 decimalSeparator, 21 digitGroupingSeparator, 22 isoCurrencyCodes, 23 isMetric, 24 isRTL, 25 locale, 26 locales, 27 timezone, 28 region, 29 } = await Localization.getLocalizationAsync(); 30 31 validateString(locale); 32 validateString(timezone); 33 validateString(region); 34 validateStringArray(isoCurrencyCodes); 35 validateStringArray(locales); 36 expect(locales[0]).toBe(Localization.locale); 37 expect(typeof isRTL).toBe('boolean'); 38 expect(typeof isMetric).toBe('boolean'); 39 validateString(decimalSeparator); 40 validateString(digitGroupingSeparator); 41 expect(currency).toBe(null); 42 }); 43 }); 44} 45 46if (Platform.isDOMAvailable) { 47 describe('region', () => { 48 it(`can resolve a region with a partial locale`, async () => { 49 jest.spyOn(navigator, 'language', 'get').mockReturnValue('en'); 50 51 const Localization = require('../ExpoLocalization').default; 52 expect(Localization.locale).toBe('en'); 53 expect(Localization.region).toBe(null); 54 }); 55 xit(`can resolve a region from a full locale`, async () => { 56 jest.spyOn(navigator, 'language', 'get').mockReturnValue('en-us'); 57 58 const Localization = require('../ExpoLocalization').default; 59 expect(Localization.locale).toBe('en-us'); 60 expect(Localization.region).toBe('US'); 61 }); 62 }); 63} 64 65describe(`Localization defines constants`, () => { 66 it('Gets the region', async () => { 67 const result = Localization.region; 68 if (Platform.isDOMAvailable) { 69 validateString(result); 70 } else { 71 expect(result).toBe(null); 72 } 73 }); 74 it('Gets the locale', async () => { 75 const result = Localization.locale; 76 if (Platform.isDOMAvailable) { 77 expect(typeof result).toBe('string'); 78 expect(result.length > 0).toBe(true); 79 } else { 80 // Empty in node env 81 expect(result).toBe(''); 82 } 83 }); 84 it('Gets the preferred locales', async () => { 85 const result = Localization.locales; 86 validateStringArray(result); 87 if (Platform.isDOMAvailable) { 88 expect(result.length).toBeGreaterThan(0); 89 expect(result[0]).toBe(Localization.locale); 90 } else { 91 expect(result.length).toBe(0); 92 } 93 }); 94 it('Gets ISO currency codes', async () => { 95 const result = Localization.isoCurrencyCodes; 96 validateStringArray(result); 97 result.forEach(validateString); 98 }); 99 it('Gets the timezone', async () => { 100 validateString(Localization.timezone); 101 }); 102 it('Gets the layout direction (ltr only)', async () => { 103 const result = Localization.isRTL; 104 expect(typeof result).toBe('boolean'); 105 expect(result).toBe(false); 106 }); 107 it('Gets the measurement system (metric)', async () => { 108 const result = Localization.isMetric; 109 expect(typeof result).toBe('boolean'); 110 }); 111 it('Gets the decimal separator', async () => { 112 validateString(Localization.decimalSeparator); 113 }); 114 it('Gets the digit grouping separator', async () => { 115 const result = Localization.digitGroupingSeparator; 116 expect(result).toBeDefined(); 117 expect(typeof result).toBe('string'); 118 }); 119 it.skip('Gets the currency', async () => { 120 validateString(Localization.currency); 121 }); 122}); 123