mirror of
https://github.com/cupcakearmy/svelte-i18n.git
synced 2024-11-16 18:10:43 +01:00
76 lines
2.1 KiB
TypeScript
76 lines
2.1 KiB
TypeScript
import { defineMessages, waitLocale, register, init } from '../../src/runtime';
|
|
import { $locale } from '../../src/runtime/stores/locale';
|
|
import { hasLocaleQueue } from '../../src/runtime/includes/loaderQueue';
|
|
import {
|
|
getLocaleDictionary,
|
|
$dictionary,
|
|
} from '../../src/runtime/stores/dictionary';
|
|
import { $format } from '../../src/runtime/stores/formatters';
|
|
|
|
test('defineMessages returns the identity of its first argument', () => {
|
|
const obj = {};
|
|
|
|
expect(obj).toBe(defineMessages(obj));
|
|
});
|
|
|
|
describe('waiting for a locale to load', () => {
|
|
beforeEach(() => {
|
|
$dictionary.set({});
|
|
$locale.set(undefined);
|
|
});
|
|
|
|
it('should wait for a locale queue to be flushed', async () => {
|
|
register('en', () => Promise.resolve({ foo: 'foo' }));
|
|
$locale.set('en');
|
|
|
|
await waitLocale('en');
|
|
|
|
expect(hasLocaleQueue('en')).toBe(false);
|
|
expect(getLocaleDictionary('en')).toMatchObject({ foo: 'foo' });
|
|
});
|
|
|
|
it('should wait for the current locale queue to be flushed', async () => {
|
|
register('en', () => Promise.resolve({ foo: 'foo' }));
|
|
init({ fallbackLocale: 'pt', initialLocale: 'en' });
|
|
|
|
await waitLocale();
|
|
|
|
expect(hasLocaleQueue('en')).toBe(false);
|
|
expect(getLocaleDictionary('en')).toMatchObject({ foo: 'foo' });
|
|
});
|
|
|
|
it('should wait for the fallback locale queue to be flushed if initial not set', async () => {
|
|
register('pt', () => Promise.resolve({ foo: 'foo' }));
|
|
init({ fallbackLocale: 'pt' });
|
|
|
|
await waitLocale();
|
|
|
|
expect(hasLocaleQueue('pt')).toBe(false);
|
|
expect(getLocaleDictionary('pt')).toMatchObject({ foo: 'foo' });
|
|
});
|
|
});
|
|
|
|
describe('format updates', () => {
|
|
beforeEach(() => {
|
|
init({ fallbackLocale: 'en' });
|
|
});
|
|
|
|
it('format store is updated when locale changes', () => {
|
|
const fn = jest.fn();
|
|
const cancel = $format.subscribe(fn);
|
|
|
|
$locale.set('pt');
|
|
expect(fn).toHaveBeenCalledTimes(2);
|
|
cancel();
|
|
});
|
|
|
|
it('format store is updated when dictionary changes', () => {
|
|
const fn = jest.fn();
|
|
const cancel = $format.subscribe(fn);
|
|
|
|
$dictionary.set({});
|
|
expect(fn).toHaveBeenCalledTimes(2);
|
|
cancel();
|
|
});
|
|
});
|