46 lines
2.1 KiB
JavaScript
46 lines
2.1 KiB
JavaScript
#!/usr/bin/env node
|
||
const assert = require('assert');
|
||
const fs = require('fs');
|
||
const path = require('path');
|
||
|
||
const root = path.resolve(__dirname, '..');
|
||
const i18n = require(path.join(root, 'shared', 'i18n.js'));
|
||
const en = JSON.parse(fs.readFileSync(path.join(root, 'shared', 'locales', 'en.json'), 'utf8'));
|
||
const ru = JSON.parse(fs.readFileSync(path.join(root, 'shared', 'locales', 'ru.json'), 'utf8'));
|
||
|
||
assert.strictEqual(i18n.normalizePreference(undefined), 'system');
|
||
assert.strictEqual(i18n.normalizePreference('de'), 'system');
|
||
assert.strictEqual(i18n.normalizePreference('system'), 'system');
|
||
assert.strictEqual(i18n.normalizePreference('en'), 'en');
|
||
assert.strictEqual(i18n.normalizePreference('ru'), 'ru');
|
||
|
||
assert.strictEqual(i18n.resolveLocale('system', 'ru'), 'ru');
|
||
assert.strictEqual(i18n.resolveLocale('system', 'ru-RU'), 'ru');
|
||
assert.strictEqual(i18n.resolveLocale('system', 'RU-ru'), 'ru');
|
||
assert.strictEqual(i18n.resolveLocale('system', 'uk-UA'), 'en');
|
||
assert.strictEqual(i18n.resolveLocale('system', 'en-US'), 'en');
|
||
assert.strictEqual(i18n.resolveLocale('en', 'ru-RU'), 'en');
|
||
assert.strictEqual(i18n.resolveLocale('ru', 'en-US'), 'ru');
|
||
|
||
assert.deepStrictEqual(Object.keys(ru).sort(), Object.keys(en).sort());
|
||
assert.ok(Object.values(en).every((value) => typeof value === 'string'));
|
||
assert.ok(Object.values(ru).every((value) => typeof value === 'string'));
|
||
|
||
const tEn = i18n.createTranslator({ en, ru }, 'en');
|
||
const tRu = i18n.createTranslator({ en, ru }, 'ru');
|
||
assert.strictEqual(tRu('status.queued'), 'В очереди до запуска Верстака');
|
||
assert.strictEqual(tEn('error.value', { error: 'offline' }), 'Error: offline');
|
||
assert.strictEqual(tRu('missing', null, 'Fallback'), 'Fallback');
|
||
assert.strictEqual(tRu('missing.key'), 'missing.key');
|
||
|
||
i18n.loadCatalogs((locale) => Promise.resolve(locale === 'ru' ? ru : en))
|
||
.then((catalogs) => {
|
||
assert.strictEqual(catalogs.en, en);
|
||
assert.strictEqual(catalogs.ru, ru);
|
||
console.log('browser extension localization runtime tests passed');
|
||
})
|
||
.catch((error) => {
|
||
console.error(error);
|
||
process.exit(1);
|
||
});
|