Skip to content

Commit 7e0d450

Browse files
committed
added new tests for localeswitch
1 parent f7c6857 commit 7e0d450

File tree

1 file changed

+316
-0
lines changed

1 file changed

+316
-0
lines changed

tests/test.jsx

Lines changed: 316 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,316 @@
1+
import React from 'react';
2+
import should from 'should';
3+
import Translate, { LocaleProvider, TranslateHTML, Memory, Namespace, LocaleSwitch } from '../dist';
4+
import { renderJSX } from '../utils/tester';
5+
import { findDOMNode } from 'react-dom';
6+
import TestUtils from 'react-addons-test-utils';
7+
8+
describe('Translate', () => {
9+
it('should be able to create simple instance', () => {
10+
const adapter = {
11+
sk_SK: {
12+
test: 'Test response',
13+
},
14+
};
15+
16+
const node = renderJSX(
17+
<LocaleProvider locale="sk_SK" adapter={adapter}>
18+
<Translate path="test" />
19+
</LocaleProvider>
20+
);
21+
22+
findDOMNode(node).nodeName.should.equal('SPAN');
23+
findDOMNode(node).innerHTML.should.equal('Test response');
24+
});
25+
26+
it('should be able to create simple instance with default value', () => {
27+
const adapter = {};
28+
29+
const node = renderJSX(
30+
<LocaleProvider locale="sk_SK" adapter={adapter}>
31+
<Translate path="test" defaultValue="Default value" />
32+
</LocaleProvider>
33+
);
34+
35+
findDOMNode(node).nodeName.should.equal('SPAN');
36+
findDOMNode(node).innerHTML.should.equal('Default value');
37+
});
38+
39+
it('should be able to create element h1', () => {
40+
const adapter = {
41+
sk_SK: {
42+
test: 'Test response',
43+
},
44+
};
45+
46+
const node = renderJSX(
47+
<LocaleProvider locale="sk_SK" adapter={adapter}>
48+
<Translate path="test" defaultValue="Default value" tagName="h1" />
49+
</LocaleProvider>
50+
);
51+
52+
findDOMNode(node).nodeName.should.equal('H1');
53+
findDOMNode(node).innerHTML.should.equal('Test response');
54+
});
55+
56+
it('should be able to use variable inside translation', () => {
57+
const adapter = {
58+
sk_SK: {
59+
hello: 'Hello {$name}',
60+
},
61+
};
62+
63+
const node = renderJSX(
64+
<LocaleProvider locale="sk_SK" adapter={adapter}>
65+
<Translate path="hello" name="Zlatko" />
66+
</LocaleProvider>
67+
);
68+
69+
findDOMNode(node).innerHTML.should.equal('Hello Zlatko');
70+
});
71+
72+
it('should be able to use plurals inside translation', () => {
73+
const adapter = {
74+
sk_SK: {
75+
followers: `{$name} has {$followers, plural,
76+
=0 {no followers}
77+
=1 {# follower}
78+
{# followers}
79+
}`
80+
},
81+
};
82+
83+
const node = renderJSX(
84+
<LocaleProvider locale="sk_SK" adapter={adapter}>
85+
<Translate path="followers" name="Zlatko" followers={0} />
86+
</LocaleProvider>
87+
);
88+
89+
findDOMNode(node).innerHTML.should.equal('Zlatko has no followers');
90+
});
91+
92+
it('should be able to use params instead of props', () => {
93+
const adapter = {
94+
sk_SK: {
95+
hello: 'Hello {$name}',
96+
},
97+
};
98+
99+
const user = {
100+
name: 'Zlatko',
101+
};
102+
103+
const node = renderJSX(
104+
<LocaleProvider locale="sk_SK" adapter={adapter}>
105+
<Translate path="hello" params={user} />
106+
</LocaleProvider>
107+
);
108+
109+
findDOMNode(node).innerHTML.should.equal('Hello Zlatko');
110+
});
111+
112+
it('should be able to use props for custom element', () => {
113+
const adapter = {
114+
sk_SK: {
115+
hello: 'Hello {$className}',
116+
},
117+
};
118+
119+
const props = {
120+
className: 'testik'
121+
};
122+
123+
const node = renderJSX(
124+
<LocaleProvider locale="sk_SK" adapter={adapter}>
125+
<Translate path="hello" className="Zlatko" props={props} />
126+
</LocaleProvider>
127+
);
128+
129+
findDOMNode(node).innerHTML.should.equal('Hello Zlatko');
130+
findDOMNode(node).getAttribute('class').should.equal('testik');
131+
});
132+
133+
it('should be able to use html content', () => {
134+
const adapter = {
135+
sk_SK: {
136+
hello: 'Welcome back <b>{$name}</b>. How is it going?',
137+
},
138+
};
139+
140+
const node = renderJSX(
141+
<LocaleProvider locale="sk_SK" adapter={adapter}>
142+
<TranslateHTML path="hello" name="Zlatko" />
143+
</LocaleProvider>
144+
);
145+
146+
findDOMNode(node).innerHTML.should.equal('Welcome back <b>Zlatko</b>. How is it going?');
147+
});
148+
149+
it('should be able to use filters', () => {
150+
const adapter = {
151+
sk_SK: {
152+
hello: 'Hello {$name | star}',
153+
},
154+
};
155+
156+
const filters = {
157+
star: (value) => '*** ' + value + ' ***',
158+
};
159+
160+
const node = renderJSX(
161+
<LocaleProvider locale="sk_SK" adapter={adapter} filters={filters}>
162+
<Translate path="hello" name="Zlatko" />
163+
</LocaleProvider>
164+
);
165+
166+
findDOMNode(node).innerHTML.should.equal('Hello *** Zlatko ***');
167+
});
168+
169+
it('should be able to use namespace', () => {
170+
const adapter = {
171+
sk_SK: {
172+
namespace: {
173+
test: 'Test response',
174+
},
175+
},
176+
};
177+
178+
const node = renderJSX(
179+
<LocaleProvider locale="sk_SK" adapter={adapter}>
180+
<Namespace path="namespace">
181+
<Translate path="test" />
182+
</Namespace>
183+
</LocaleProvider>
184+
);
185+
186+
findDOMNode(node).innerHTML.should.equal('Test response');
187+
});
188+
189+
it('should be able to use namespace inside namespace', () => {
190+
const adapter = {
191+
sk_SK: {
192+
namespace1: {
193+
namespace2: {
194+
test: 'Test response',
195+
},
196+
},
197+
},
198+
};
199+
200+
const node = renderJSX(
201+
<LocaleProvider locale="sk_SK" adapter={adapter}>
202+
<Namespace path="namespace1">
203+
<Namespace path="namespace2" compose>
204+
<Translate path="test" />
205+
</Namespace>
206+
</Namespace>
207+
</LocaleProvider>
208+
);
209+
210+
findDOMNode(node).innerHTML.should.equal('Test response');
211+
});
212+
213+
it('should be able to use namespace inside namespace with replace', () => {
214+
const adapter = {
215+
sk_SK: {
216+
namespace: {
217+
test: 'Test response',
218+
},
219+
},
220+
};
221+
222+
const node = renderJSX(
223+
<LocaleProvider locale="sk_SK" adapter={adapter}>
224+
<Namespace path="namespace1">
225+
<Namespace path="namespace">
226+
<Translate path="test" />
227+
</Namespace>
228+
</Namespace>
229+
</LocaleProvider>
230+
);
231+
232+
findDOMNode(node).innerHTML.should.equal('Test response');
233+
});
234+
235+
it('should be able to use LocaleSwitch as uncontrolled component', () => {
236+
const adapter = {
237+
sk_SK: {
238+
test: 'Testovacia odpoved',
239+
},
240+
en_US: {
241+
test: 'Test response',
242+
},
243+
};
244+
245+
const locales = [{
246+
locale: 'sk_SK',
247+
label: 'Slovencina',
248+
}, {
249+
locale: 'en_US',
250+
label: 'English',
251+
}];
252+
253+
const node = renderJSX(
254+
<LocaleProvider locale="sk_SK" adapter={adapter} controlled={false}>
255+
<div>
256+
<Translate path="test" />
257+
<LocaleSwitch locales={locales} onError={(err) => {
258+
throw err;
259+
}}/>
260+
</div>
261+
</LocaleProvider>
262+
);
263+
264+
findDOMNode(node).querySelector('span').innerHTML.should.equal('Testovacia odpoved');
265+
266+
const select = findDOMNode(node).querySelector('select');
267+
TestUtils.Simulate.change(select, { target: { value: 'en_US' } });
268+
269+
findDOMNode(node).querySelector('span').innerHTML.should.equal('Test response');
270+
});
271+
272+
it('should be able to use LocaleSwitch as controlled component', (done) => {
273+
const adapter = {
274+
sk_SK: {
275+
test: 'Testovacia odpoved',
276+
},
277+
en_US: {
278+
test: 'Test response',
279+
},
280+
};
281+
282+
const locales = [{
283+
locale: 'sk_SK',
284+
label: 'Slovencina',
285+
}, {
286+
locale: 'en_US',
287+
label: 'English',
288+
}];
289+
290+
function handleChange(newLocale) {
291+
const node = createNode(newLocale);
292+
findDOMNode(node).querySelector('span').innerHTML.should.equal('Test response');
293+
294+
done();
295+
}
296+
297+
function createNode(locale) {
298+
return renderJSX(
299+
<LocaleProvider locale={locale} adapter={adapter}>
300+
<div>
301+
<Translate path="test" />
302+
<LocaleSwitch locales={locales} onChange={handleChange} onError={(err) => {
303+
throw err;
304+
}}/>
305+
</div>
306+
</LocaleProvider>
307+
);
308+
}
309+
310+
const node = createNode('sk_SK');
311+
findDOMNode(node).querySelector('span').innerHTML.should.equal('Testovacia odpoved');
312+
313+
const select = findDOMNode(node).querySelector('select');
314+
TestUtils.Simulate.change(select, { target: { value: 'en_US' } });
315+
});
316+
});

0 commit comments

Comments
 (0)