UNPKG

react-native-i18n-auto

Version:

Auto i18n tool for React Native with full TypeScript support

107 lines (99 loc) 3.54 kB
"use strict"; var _setup = require("../i18n/setup"); describe('I18n Manager', function () { beforeEach(function () { // Reset i18n state before each test _setup.i18n.clearCache(); _setup.i18n.setLocales({ en: { HELLO: 'Hello', WELCOME: 'Welcome, {name}!', NESTED: { KEY: 'Nested Value' } }, ko: { HELLO: '안녕하세요', WELCOME: '{name}님 환영합니다!', NESTED: { KEY: '중첩된 값' } } }); }); describe('Basic Translation', function () { it('should translate simple keys correctly', function () { _setup.i18n.setLanguage('en'); expect(_setup.i18n.t('HELLO')).toBe('Hello'); _setup.i18n.setLanguage('ko'); expect(_setup.i18n.t('HELLO')).toBe('안녕하세요'); }); it('should return key if translation is not found', function () { _setup.i18n.setLanguage('en'); expect(_setup.i18n.t('NONEXISTENT_KEY')).toBe('NONEXISTENT_KEY'); }); }); describe('Language Management', function () { it('should change language successfully', function () { expect(_setup.i18n.setLanguage('en')).toBe(true); expect(_setup.i18n.getLanguage()).toBe('en'); expect(_setup.i18n.setLanguage('ko')).toBe(true); expect(_setup.i18n.getLanguage()).toBe('ko'); }); it('should fail to change to unsupported language', function () { // Explicitly set initial language to en _setup.i18n.setLanguage('en'); expect(_setup.i18n.setLanguage('fr')).toBe(false); // Language should remain unchanged expect(_setup.i18n.getLanguage()).toBe('en'); }); it('should provide list of available languages', function () { var languages = _setup.i18n.getAvailableLanguages(); expect(languages).toHaveLength(2); expect(languages).toEqual(expect.arrayContaining([expect.objectContaining({ code: 'en', name: 'English' }), expect.objectContaining({ code: 'ko', name: 'Korean' })])); }); }); describe('Cache Management', function () { it('should cache translations', function () { _setup.i18n.setLanguage('en'); var key = 'HELLO'; // First call should cache the result expect(_setup.i18n.t(key)).toBe('Hello'); // Modify internal state (this is for testing only) var translations = _setup.i18n.translations; translations.en.HELLO = 'Modified Hello'; // Should still return cached value expect(_setup.i18n.t(key)).toBe('Hello'); // After clearing cache, should return new value _setup.i18n.clearCache(); expect(_setup.i18n.t(key)).toBe('Modified Hello'); }); it('should clear cache successfully', function () { _setup.i18n.setLanguage('en'); _setup.i18n.t('HELLO'); // Cache this translation _setup.i18n.clearCache(); // Verify cache is empty expect(_setup.i18n.cache).toEqual({}); }); }); describe('Event Handling', function () { it('should notify listeners when language changes', function () { var listener = jest.fn(); var unsubscribe = _setup.i18n.onLanguageChange(listener); _setup.i18n.setLanguage('ko'); expect(listener).toHaveBeenCalledTimes(1); _setup.i18n.setLanguage('en'); expect(listener).toHaveBeenCalledTimes(2); // Unsubscribe should work unsubscribe(); _setup.i18n.setLanguage('ko'); expect(listener).toHaveBeenCalledTimes(2); }); }); });