Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/frontend/vue_shared/translate_spec.js')
-rw-r--r--spec/frontend/vue_shared/translate_spec.js214
1 files changed, 214 insertions, 0 deletions
diff --git a/spec/frontend/vue_shared/translate_spec.js b/spec/frontend/vue_shared/translate_spec.js
new file mode 100644
index 00000000000..42aa28a6309
--- /dev/null
+++ b/spec/frontend/vue_shared/translate_spec.js
@@ -0,0 +1,214 @@
+import { mount, createLocalVue } from '@vue/test-utils';
+import locale from '~/locale';
+import Translate from '~/vue_shared/translate';
+
+const localVue = createLocalVue();
+localVue.use(Translate);
+
+describe('Vue translate filter', () => {
+ const createTranslationMock = (key, ...translations) => {
+ locale.textdomain('app');
+
+ locale.options.locale_data = {
+ app: {
+ '': {
+ domain: 'app',
+ lang: 'vo',
+ plural_forms: 'nplurals=2; plural=(n != 1);',
+ },
+ [key]: translations,
+ },
+ };
+ };
+
+ it('translate singular text (`__`)', () => {
+ const key = 'singular';
+ const translation = 'singular_translated';
+ createTranslationMock(key, translation);
+
+ const wrapper = mount(
+ {
+ template: `
+ <span>
+ {{ __('${key}') }}
+ </span>
+ `,
+ },
+ { localVue },
+ );
+
+ expect(wrapper.text()).toBe(translation);
+ });
+
+ it('translate plural text (`n__`) without any substituting text', () => {
+ const key = 'plural';
+ const translationPlural = 'plural_multiple translation';
+ createTranslationMock(key, 'plural_singular translation', translationPlural);
+
+ const wrapper = mount(
+ {
+ template: `
+ <span>
+ {{ n__('${key}', 'plurals', 2) }}
+ </span>
+ `,
+ },
+ { localVue },
+ );
+
+ expect(wrapper.text()).toBe(translationPlural);
+ });
+
+ describe('translate plural text (`n__`) with substituting %d', () => {
+ const key = '%d day';
+
+ beforeEach(() => {
+ createTranslationMock(key, '%d singular translated', '%d plural translated');
+ });
+
+ it('and n === 1', () => {
+ const wrapper = mount(
+ {
+ template: `
+ <span>
+ {{ n__('${key}', '%d days', 1) }}
+ </span>
+ `,
+ },
+ { localVue },
+ );
+
+ expect(wrapper.text()).toBe('1 singular translated');
+ });
+
+ it('and n > 1', () => {
+ const wrapper = mount(
+ {
+ template: `
+ <span>
+ {{ n__('${key}', '%d days', 2) }}
+ </span>
+ `,
+ },
+ { localVue },
+ );
+
+ expect(wrapper.text()).toBe('2 plural translated');
+ });
+ });
+
+ describe('translates text with context `s__`', () => {
+ const key = 'Context|Foobar';
+ const translation = 'Context|Foobar translated';
+ const expectation = 'Foobar translated';
+
+ beforeEach(() => {
+ createTranslationMock(key, translation);
+ });
+
+ it('and using two parameters', () => {
+ const wrapper = mount(
+ {
+ template: `
+ <span>
+ {{ s__('Context', 'Foobar') }}
+ </span>
+ `,
+ },
+ { localVue },
+ );
+
+ expect(wrapper.text()).toBe(expectation);
+ });
+
+ it('and using the pipe syntax', () => {
+ const wrapper = mount(
+ {
+ template: `
+ <span>
+ {{ s__('${key}') }}
+ </span>
+ `,
+ },
+ { localVue },
+ );
+
+ expect(wrapper.text()).toBe(expectation);
+ });
+ });
+
+ it('translate multi line text', () => {
+ const translation = 'multiline string translated';
+ createTranslationMock('multiline string', translation);
+
+ const wrapper = mount(
+ {
+ template: `
+ <span>
+ {{ __(\`
+ multiline
+ string
+ \`) }}
+ </span>
+ `,
+ },
+ { localVue },
+ );
+
+ expect(wrapper.text()).toBe(translation);
+ });
+
+ it('translate pluralized multi line text', () => {
+ const translation = 'multiline string plural';
+
+ createTranslationMock('multiline string', 'multiline string singular', translation);
+
+ const wrapper = mount(
+ {
+ template: `
+ <span>
+ {{ n__(
+ \`
+ multiline
+ string
+ \`,
+ \`
+ multiline
+ strings
+ \`,
+ 2
+ ) }}
+ </span>
+ `,
+ },
+ { localVue },
+ );
+
+ expect(wrapper.text()).toBe(translation);
+ });
+
+ it('translate pluralized multi line text with context', () => {
+ const translation = 'multiline string with context';
+
+ createTranslationMock('Context| multiline string', translation);
+
+ const wrapper = mount(
+ {
+ template: `
+ <span>
+ {{ s__(
+ \`
+ Context|
+ multiline
+ string
+ \`
+ ) }}
+ </span>
+ `,
+ },
+ { localVue },
+ );
+
+ expect(wrapper.text()).toBe(translation);
+ });
+});