@tolgee/core 4.7.0 → 4.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/tolgee.cjs.js +2 -4
- package/dist/tolgee.cjs.js.map +1 -1
- package/dist/tolgee.cjs.min.js +1 -1
- package/dist/tolgee.cjs.min.js.map +1 -1
- package/dist/{tolgee.esm.js → tolgee.esm.min.mjs} +2 -2
- package/dist/tolgee.esm.min.mjs.map +1 -0
- package/dist/tolgee.esm.mjs +5690 -0
- package/dist/tolgee.esm.mjs.map +1 -0
- package/dist/tolgee.umd.js +2 -4
- package/dist/tolgee.umd.js.map +1 -1
- package/dist/tolgee.umd.min.js +1 -1
- package/dist/tolgee.umd.min.js.map +1 -1
- package/package.json +10 -9
- package/src/Constants/Global.ts +9 -0
- package/src/Constants/ModifierKey.ts +6 -0
- package/src/Errors/ApiHttpError.ts +8 -0
- package/src/Observer.test.ts +119 -0
- package/src/Observer.ts +68 -0
- package/src/Properties.test.ts +150 -0
- package/src/Properties.ts +112 -0
- package/src/Tolgee.test.ts +473 -0
- package/src/Tolgee.ts +335 -0
- package/src/TolgeeConfig.test.ts +21 -0
- package/src/TolgeeConfig.ts +134 -0
- package/src/__integration/FormatterIcu.test.ts +80 -0
- package/src/__integration/FormatterMissing.ts +54 -0
- package/src/__integration/Tolgee.test.ts +90 -0
- package/src/__integration/TolgeeInvisible.test.ts +145 -0
- package/src/__integration/mockTranslations.ts +6 -0
- package/src/__integration/testConfig.ts +16 -0
- package/src/__testFixtures/classMock.ts +11 -0
- package/src/__testFixtures/createElement.ts +43 -0
- package/src/__testFixtures/createTestDom.ts +25 -0
- package/src/__testFixtures/mocked.ts +25 -0
- package/src/__testFixtures/setupAfterEnv.ts +34 -0
- package/src/helpers/NodeHelper.ts +90 -0
- package/src/helpers/TextHelper.test.ts +62 -0
- package/src/helpers/TextHelper.ts +58 -0
- package/src/helpers/commonTypes.ts +8 -0
- package/src/helpers/encoderPolyfill.ts +96 -0
- package/src/helpers/secret.test.ts +61 -0
- package/src/helpers/secret.ts +68 -0
- package/src/helpers/sleep.ts +2 -0
- package/src/highlighter/HighlightFunctionsInitializer.test.ts +40 -0
- package/src/highlighter/HighlightFunctionsInitializer.ts +61 -0
- package/src/highlighter/MouseEventHandler.test.ts +151 -0
- package/src/highlighter/MouseEventHandler.ts +191 -0
- package/src/highlighter/TranslationHighlighter.test.ts +177 -0
- package/src/highlighter/TranslationHighlighter.ts +113 -0
- package/src/index.ts +10 -0
- package/src/internal.ts +2 -0
- package/src/modules/IcuFormatter.ts +17 -0
- package/src/modules/index.ts +1 -0
- package/src/services/ApiHttpService.ts +85 -0
- package/src/services/CoreService.test.ts +142 -0
- package/src/services/CoreService.ts +76 -0
- package/src/services/DependencyService.test.ts +51 -0
- package/src/services/DependencyService.ts +116 -0
- package/src/services/ElementRegistrar.test.ts +131 -0
- package/src/services/ElementRegistrar.ts +108 -0
- package/src/services/EventEmitter.ts +52 -0
- package/src/services/EventService.ts +14 -0
- package/src/services/ModuleService.ts +14 -0
- package/src/services/ScreenshotService.ts +31 -0
- package/src/services/Subscription.ts +7 -0
- package/src/services/TextService.test.ts +88 -0
- package/src/services/TextService.ts +82 -0
- package/src/services/TranslationService.test.ts +358 -0
- package/src/services/TranslationService.ts +417 -0
- package/src/services/__mocks__/CoreService.ts +17 -0
- package/src/toolsManager/Messages.test.ts +79 -0
- package/src/toolsManager/Messages.ts +60 -0
- package/src/toolsManager/PluginManager.test.ts +108 -0
- package/src/toolsManager/PluginManager.ts +129 -0
- package/src/types/DTOs.ts +25 -0
- package/src/types/apiSchema.generated.ts +6208 -0
- package/src/types.ts +146 -0
- package/src/wrappers/AbstractWrapper.ts +14 -0
- package/src/wrappers/NodeHandler.ts +143 -0
- package/src/wrappers/WrappedHandler.ts +28 -0
- package/src/wrappers/invisible/AttributeHandler.ts +23 -0
- package/src/wrappers/invisible/Coder.ts +65 -0
- package/src/wrappers/invisible/ContentHandler.ts +15 -0
- package/src/wrappers/invisible/CoreHandler.ts +17 -0
- package/src/wrappers/invisible/InvisibleWrapper.ts +59 -0
- package/src/wrappers/invisible/ValueMemory.test.ts +25 -0
- package/src/wrappers/invisible/ValueMemory.ts +16 -0
- package/src/wrappers/text/AttributeHandler.test.ts +117 -0
- package/src/wrappers/text/AttributeHandler.ts +25 -0
- package/src/wrappers/text/Coder.test.ts +298 -0
- package/src/wrappers/text/Coder.ts +202 -0
- package/src/wrappers/text/ContentHandler.test.ts +185 -0
- package/src/wrappers/text/ContentHandler.ts +21 -0
- package/src/wrappers/text/CoreHandler.test.ts +106 -0
- package/src/wrappers/text/CoreHandler.ts +45 -0
- package/src/wrappers/text/TextWrapper.ts +69 -0
- package/dist/tolgee.esm.js.map +0 -1
|
@@ -0,0 +1,473 @@
|
|
|
1
|
+
jest.dontMock('./Tolgee');
|
|
2
|
+
jest.dontMock('./services/DependencyService');
|
|
3
|
+
|
|
4
|
+
import '@testing-library/jest-dom/extend-expect';
|
|
5
|
+
import { mocked } from 'ts-jest/utils';
|
|
6
|
+
import { Tolgee } from './Tolgee';
|
|
7
|
+
import {
|
|
8
|
+
configMock,
|
|
9
|
+
coreServiceMock,
|
|
10
|
+
eventServiceMock,
|
|
11
|
+
getMockedInstance,
|
|
12
|
+
observerMock,
|
|
13
|
+
propertiesMock,
|
|
14
|
+
textServiceMock,
|
|
15
|
+
translationServiceMock,
|
|
16
|
+
} from '@testFixtures/mocked';
|
|
17
|
+
import { EventEmitterImpl } from './services/EventEmitter';
|
|
18
|
+
import { TextService } from './services/TextService';
|
|
19
|
+
import { TextWrapper } from './wrappers/text/TextWrapper';
|
|
20
|
+
import { ElementRegistrar } from './services/ElementRegistrar';
|
|
21
|
+
import { NodeHelper } from './helpers/NodeHelper';
|
|
22
|
+
import { TOLGEE_TARGET_ATTRIBUTE } from './Constants/Global';
|
|
23
|
+
import { Properties } from './Properties';
|
|
24
|
+
import { waitFor } from '@testing-library/dom';
|
|
25
|
+
import { Translations } from './types';
|
|
26
|
+
|
|
27
|
+
describe('Tolgee', () => {
|
|
28
|
+
let tolgee: Tolgee;
|
|
29
|
+
|
|
30
|
+
beforeEach(() => {
|
|
31
|
+
jest.clearAllMocks();
|
|
32
|
+
tolgee = Tolgee.init({});
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
test('can be created', () => {
|
|
36
|
+
expect(tolgee).not.toBeNull();
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
test('returns proper default language', () => {
|
|
40
|
+
configMock.mock.instances[0].defaultLanguage = 'testDefaultLanguage';
|
|
41
|
+
expect(configMock).toBeCalledTimes(1);
|
|
42
|
+
expect(tolgee.defaultLanguage).toEqual('testDefaultLanguage');
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
test('returns proper language', () => {
|
|
46
|
+
propertiesMock.mock.instances[0].currentLanguage = 'currentLang';
|
|
47
|
+
expect(tolgee.lang).toEqual('currentLang');
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
test('will load api key details', async () => {
|
|
51
|
+
propertiesMock.mock.instances[0].mode = 'development';
|
|
52
|
+
await tolgee.run();
|
|
53
|
+
expect(
|
|
54
|
+
coreServiceMock.mock.instances[0].loadApiKeyDetails
|
|
55
|
+
).toHaveBeenCalledTimes(1);
|
|
56
|
+
expect(
|
|
57
|
+
coreServiceMock.mock.instances[0].loadApiKeyDetails
|
|
58
|
+
).toHaveBeenCalledWith();
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
test('will not set properties.scopes on run in production mode', async () => {
|
|
62
|
+
propertiesMock.mock.instances[0].mode = 'production';
|
|
63
|
+
await tolgee.run();
|
|
64
|
+
expect(coreServiceMock.mock.instances[0].getApiKeyDetails).toBeCalledTimes(
|
|
65
|
+
0
|
|
66
|
+
);
|
|
67
|
+
expect(propertiesMock.mock.instances[0].scopes).toBeUndefined();
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
test('will run the observer when watch is on', async () => {
|
|
71
|
+
propertiesMock.mock.instances[0].config.watch = true;
|
|
72
|
+
await tolgee.run();
|
|
73
|
+
expect(observerMock.mock.instances[0].observe).toBeCalledTimes(1);
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
test('will not the observer when watch is off', async () => {
|
|
77
|
+
propertiesMock.mock.instances[0].config.watch = false;
|
|
78
|
+
await tolgee.run();
|
|
79
|
+
expect(observerMock.mock.instances[0].observe).toBeCalledTimes(0);
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
test('will try to get translations with current language from properties', async () => {
|
|
83
|
+
propertiesMock.mock.instances[0].currentLanguage = 'dummyLang';
|
|
84
|
+
await tolgee.run();
|
|
85
|
+
expect(
|
|
86
|
+
translationServiceMock.mock.instances[0].loadTranslations
|
|
87
|
+
).toBeCalledWith();
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
test('will try to get translations with current language from properties', async () => {
|
|
91
|
+
propertiesMock.mock.instances[0].currentLanguage = 'dummyLang';
|
|
92
|
+
propertiesMock.mock.instances[0].config.preloadFallback = true;
|
|
93
|
+
propertiesMock.mock.instances[0].config.fallbackLanguage = 'fallbackLang';
|
|
94
|
+
await tolgee.run();
|
|
95
|
+
expect(
|
|
96
|
+
translationServiceMock.mock.instances[0].loadTranslations
|
|
97
|
+
).toBeCalledWith();
|
|
98
|
+
expect(
|
|
99
|
+
translationServiceMock.mock.instances[0].loadTranslations
|
|
100
|
+
).toBeCalledWith('fallbackLang');
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
test('will refresh translations using observer on run', async () => {
|
|
104
|
+
const htmlElement = document.createElement('dummyElement');
|
|
105
|
+
propertiesMock.mock.instances[0].config.targetElement = htmlElement;
|
|
106
|
+
await tolgee.run();
|
|
107
|
+
expect(getMockedInstance(TextWrapper).handleSubtree).toBeCalledWith(
|
|
108
|
+
htmlElement
|
|
109
|
+
);
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
test('will refresh translations using observer on refresh', async () => {
|
|
113
|
+
const htmlElement = document.createElement('dummyElement');
|
|
114
|
+
propertiesMock.mock.instances[0].config.targetElement = htmlElement;
|
|
115
|
+
await tolgee.run();
|
|
116
|
+
await tolgee.refresh();
|
|
117
|
+
expect(getMockedInstance(TextWrapper).handleSubtree).toBeCalledWith(
|
|
118
|
+
htmlElement
|
|
119
|
+
);
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
test('will get defaultLanguage from config', async () => {
|
|
123
|
+
propertiesMock.mock.instances[0].config.defaultLanguage = 'dummyLang';
|
|
124
|
+
expect(tolgee.defaultLanguage).toEqual('dummyLang');
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
describe('translation functions', () => {
|
|
128
|
+
const translatedDummyText = 'translatedDummyText';
|
|
129
|
+
const wrappedDummyText = 'wrappedDummyText';
|
|
130
|
+
const dummyKey = 'dummyText';
|
|
131
|
+
let mockedTranslate;
|
|
132
|
+
let mockedInstant;
|
|
133
|
+
let mockedWrap;
|
|
134
|
+
let mockedLoadTranslations;
|
|
135
|
+
const dummyParams = {};
|
|
136
|
+
|
|
137
|
+
beforeEach(() => {
|
|
138
|
+
tolgee.run();
|
|
139
|
+
mockedTranslate = mocked(textServiceMock.mock.instances[0].translate);
|
|
140
|
+
mockedInstant = mocked(textServiceMock.mock.instances[0].instant);
|
|
141
|
+
mockedWrap = getMockedInstance(TextWrapper).wrap;
|
|
142
|
+
mockedLoadTranslations = mocked(
|
|
143
|
+
translationServiceMock.mock.instances[0].loadTranslations
|
|
144
|
+
);
|
|
145
|
+
mockedTranslate.mockImplementation(async () => translatedDummyText);
|
|
146
|
+
mockedInstant.mockImplementation(() => translatedDummyText);
|
|
147
|
+
mockedWrap.mockImplementation(() => wrappedDummyText);
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
describe('async translate', () => {
|
|
151
|
+
test('will return wrapped string from text service in development mode', async () => {
|
|
152
|
+
propertiesMock.mock.instances[0].mode = 'development';
|
|
153
|
+
const translated = await tolgee.translate(dummyKey, dummyParams);
|
|
154
|
+
|
|
155
|
+
expect(mockedWrap).toBeCalledWith(
|
|
156
|
+
dummyKey,
|
|
157
|
+
dummyParams,
|
|
158
|
+
undefined,
|
|
159
|
+
'translatedDummyText'
|
|
160
|
+
);
|
|
161
|
+
expect(translated).toEqual(wrappedDummyText);
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
test('will return translated string from text service in production mode', async () => {
|
|
165
|
+
propertiesMock.mock.instances[0].mode = 'production';
|
|
166
|
+
const translated = await tolgee.translate(dummyKey, dummyParams);
|
|
167
|
+
|
|
168
|
+
expect(translated).toEqual(translatedDummyText);
|
|
169
|
+
expect(mockedWrap).not.toBeCalled();
|
|
170
|
+
expect(mockedTranslate).toBeCalledWith(
|
|
171
|
+
dummyKey,
|
|
172
|
+
dummyParams,
|
|
173
|
+
undefined,
|
|
174
|
+
undefined,
|
|
175
|
+
undefined
|
|
176
|
+
);
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
test('will not wrap when development is on, but noWrap is true', async () => {
|
|
180
|
+
propertiesMock.mock.instances[0].mode = 'development';
|
|
181
|
+
const translated = await tolgee.translate(dummyKey, dummyParams, true);
|
|
182
|
+
|
|
183
|
+
expect(mockedWrap).not.toBeCalled();
|
|
184
|
+
expect(translated).toEqual(translatedDummyText);
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
test('will wait for translations load before wrapping', async () => {
|
|
188
|
+
propertiesMock.mock.instances[0].mode = 'development';
|
|
189
|
+
await tolgee.translate(dummyKey, dummyParams);
|
|
190
|
+
expect(mockedLoadTranslations).toBeCalled();
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
test('passes default value to wrap fn', async () => {
|
|
194
|
+
propertiesMock.mock.instances[0].mode = 'development';
|
|
195
|
+
await tolgee.translate(dummyKey, dummyParams, false, 'Default');
|
|
196
|
+
expect(mockedWrap).toBeCalledWith(
|
|
197
|
+
'dummyText',
|
|
198
|
+
{},
|
|
199
|
+
'Default',
|
|
200
|
+
'translatedDummyText'
|
|
201
|
+
);
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
test('passes default value to translate fn', async () => {
|
|
205
|
+
propertiesMock.mock.instances[0].mode = 'development';
|
|
206
|
+
await tolgee.translate(dummyKey, dummyParams, true, 'Default');
|
|
207
|
+
expect(mockedTranslate).toBeCalledWith(
|
|
208
|
+
'dummyText',
|
|
209
|
+
{},
|
|
210
|
+
undefined,
|
|
211
|
+
undefined,
|
|
212
|
+
'Default'
|
|
213
|
+
);
|
|
214
|
+
});
|
|
215
|
+
|
|
216
|
+
test('props object works correctly', async () => {
|
|
217
|
+
propertiesMock.mock.instances[0].mode = 'development';
|
|
218
|
+
await tolgee.translate({
|
|
219
|
+
key: dummyKey,
|
|
220
|
+
params: dummyParams,
|
|
221
|
+
noWrap: true,
|
|
222
|
+
defaultValue: 'Default',
|
|
223
|
+
});
|
|
224
|
+
expect(mockedTranslate).toBeCalledWith(
|
|
225
|
+
dummyKey,
|
|
226
|
+
dummyParams,
|
|
227
|
+
undefined,
|
|
228
|
+
undefined,
|
|
229
|
+
'Default'
|
|
230
|
+
);
|
|
231
|
+
});
|
|
232
|
+
|
|
233
|
+
test('passes orEmpty correctly', async () => {
|
|
234
|
+
propertiesMock.mock.instances[0].mode = 'development';
|
|
235
|
+
await tolgee.translate({
|
|
236
|
+
key: dummyKey,
|
|
237
|
+
params: dummyParams,
|
|
238
|
+
noWrap: true,
|
|
239
|
+
orEmpty: true,
|
|
240
|
+
});
|
|
241
|
+
expect(mockedTranslate).toBeCalledWith(
|
|
242
|
+
dummyKey,
|
|
243
|
+
dummyParams,
|
|
244
|
+
undefined,
|
|
245
|
+
true,
|
|
246
|
+
undefined
|
|
247
|
+
);
|
|
248
|
+
});
|
|
249
|
+
});
|
|
250
|
+
|
|
251
|
+
describe('sync instant', () => {
|
|
252
|
+
test('will return wrapped string from text service in development mode', async () => {
|
|
253
|
+
propertiesMock.mock.instances[0].mode = 'development';
|
|
254
|
+
const dummyParams = {};
|
|
255
|
+
const translated = tolgee.instant(dummyKey, dummyParams);
|
|
256
|
+
|
|
257
|
+
expect(mockedWrap).toBeCalledWith(
|
|
258
|
+
dummyKey,
|
|
259
|
+
dummyParams,
|
|
260
|
+
undefined,
|
|
261
|
+
'translatedDummyText'
|
|
262
|
+
);
|
|
263
|
+
expect(translated).toEqual(wrappedDummyText);
|
|
264
|
+
});
|
|
265
|
+
|
|
266
|
+
test('will return translated string from text service in production mode', async () => {
|
|
267
|
+
propertiesMock.mock.instances[0].mode = 'production';
|
|
268
|
+
const translated = tolgee.instant(dummyKey, dummyParams);
|
|
269
|
+
|
|
270
|
+
expect(translated).toEqual(translatedDummyText);
|
|
271
|
+
expect(mockedWrap).not.toBeCalled();
|
|
272
|
+
expect(mockedInstant).toBeCalledWith(
|
|
273
|
+
dummyKey,
|
|
274
|
+
dummyParams,
|
|
275
|
+
undefined,
|
|
276
|
+
undefined,
|
|
277
|
+
undefined
|
|
278
|
+
);
|
|
279
|
+
});
|
|
280
|
+
|
|
281
|
+
test('will pass noEmpty parameter', () => {
|
|
282
|
+
tolgee.instant(dummyKey, dummyParams, undefined, true);
|
|
283
|
+
expect(mockedInstant).toBeCalledWith(
|
|
284
|
+
dummyKey,
|
|
285
|
+
dummyParams,
|
|
286
|
+
undefined,
|
|
287
|
+
true,
|
|
288
|
+
undefined
|
|
289
|
+
);
|
|
290
|
+
});
|
|
291
|
+
|
|
292
|
+
test('will not wrap when development is on, but noWrap is true', async () => {
|
|
293
|
+
propertiesMock.mock.instances[0].mode = 'development';
|
|
294
|
+
const translated = tolgee.instant(dummyKey, dummyParams, true);
|
|
295
|
+
|
|
296
|
+
expect(mockedWrap).not.toBeCalled();
|
|
297
|
+
expect(translated).toEqual(translatedDummyText);
|
|
298
|
+
});
|
|
299
|
+
|
|
300
|
+
test('will call instant with orEmpty true', async () => {
|
|
301
|
+
tolgee.instant(dummyKey, dummyParams, true, true);
|
|
302
|
+
expect(getMockedInstance(TextService).instant).toBeCalledWith(
|
|
303
|
+
dummyKey,
|
|
304
|
+
dummyParams,
|
|
305
|
+
undefined,
|
|
306
|
+
true,
|
|
307
|
+
undefined
|
|
308
|
+
);
|
|
309
|
+
});
|
|
310
|
+
|
|
311
|
+
test('passes default value to wrap fn', async () => {
|
|
312
|
+
propertiesMock.mock.instances[0].mode = 'development';
|
|
313
|
+
const dummyParams = {};
|
|
314
|
+
tolgee.instant(dummyKey, dummyParams, false, false, 'Default');
|
|
315
|
+
|
|
316
|
+
expect(mockedWrap).toBeCalledWith(
|
|
317
|
+
dummyKey,
|
|
318
|
+
dummyParams,
|
|
319
|
+
'Default',
|
|
320
|
+
'translatedDummyText'
|
|
321
|
+
);
|
|
322
|
+
});
|
|
323
|
+
|
|
324
|
+
test('props object works correctly', async () => {
|
|
325
|
+
propertiesMock.mock.instances[0].mode = 'development';
|
|
326
|
+
await tolgee.instant({
|
|
327
|
+
key: dummyKey,
|
|
328
|
+
params: dummyParams,
|
|
329
|
+
orEmpty: false,
|
|
330
|
+
noWrap: true,
|
|
331
|
+
defaultValue: 'Default',
|
|
332
|
+
});
|
|
333
|
+
expect(mockedInstant).toBeCalledWith(
|
|
334
|
+
dummyKey,
|
|
335
|
+
dummyParams,
|
|
336
|
+
undefined,
|
|
337
|
+
false,
|
|
338
|
+
'Default'
|
|
339
|
+
);
|
|
340
|
+
});
|
|
341
|
+
});
|
|
342
|
+
|
|
343
|
+
test('passes default value to instant fn', async () => {
|
|
344
|
+
propertiesMock.mock.instances[0].mode = 'development';
|
|
345
|
+
const dummyParams = {};
|
|
346
|
+
tolgee.instant(dummyKey, dummyParams, true, false, 'Default');
|
|
347
|
+
|
|
348
|
+
expect(mockedInstant).toBeCalledWith(
|
|
349
|
+
dummyKey,
|
|
350
|
+
dummyParams,
|
|
351
|
+
undefined,
|
|
352
|
+
false,
|
|
353
|
+
'Default'
|
|
354
|
+
);
|
|
355
|
+
});
|
|
356
|
+
});
|
|
357
|
+
|
|
358
|
+
test('will stop on stop function', () => {
|
|
359
|
+
getMockedInstance(Properties).config.targetElement = document.body;
|
|
360
|
+
NodeHelper.markElementAsTargetElement(document.body);
|
|
361
|
+
tolgee.run();
|
|
362
|
+
tolgee.stop();
|
|
363
|
+
expect(getMockedInstance(ElementRegistrar).cleanAll).toBeCalledTimes(1);
|
|
364
|
+
expect(observerMock.mock.instances[0].stopObserving).toBeCalledTimes(1);
|
|
365
|
+
expect(document.body).not.toHaveAttribute(TOLGEE_TARGET_ATTRIBUTE);
|
|
366
|
+
});
|
|
367
|
+
|
|
368
|
+
test('will return proper onLangChange emitter', () => {
|
|
369
|
+
const eventEmitter = new EventEmitterImpl();
|
|
370
|
+
(eventServiceMock.mock.instances[0] as any).LANGUAGE_CHANGED = eventEmitter;
|
|
371
|
+
expect(tolgee.onLangChange).toEqual(eventEmitter);
|
|
372
|
+
});
|
|
373
|
+
|
|
374
|
+
test('will return proper initialLoading', () => {
|
|
375
|
+
tolgee.properties.mode = 'production';
|
|
376
|
+
tolgee.properties.config.preloadFallback = true;
|
|
377
|
+
tolgee.properties.currentLanguage = 'cs';
|
|
378
|
+
tolgee.properties.config.staticData = {
|
|
379
|
+
cs: {},
|
|
380
|
+
};
|
|
381
|
+
expect(tolgee.initialLoading).toEqual(true);
|
|
382
|
+
tolgee.properties.config.fallbackLanguage = 'en';
|
|
383
|
+
tolgee.properties.config.preloadFallback = false;
|
|
384
|
+
expect(tolgee.initialLoading).toEqual(false);
|
|
385
|
+
tolgee.properties.config.preloadFallback = true;
|
|
386
|
+
tolgee.properties.config.staticData.en = {};
|
|
387
|
+
expect(tolgee.initialLoading).toEqual(false);
|
|
388
|
+
tolgee.properties.mode = 'development';
|
|
389
|
+
expect(tolgee.initialLoading).toEqual(false);
|
|
390
|
+
});
|
|
391
|
+
|
|
392
|
+
describe('lang setter', () => {
|
|
393
|
+
const dummyLang = 'dummyLang';
|
|
394
|
+
let loadTranslationsResolve: (value: Translations) => void;
|
|
395
|
+
let languageChangedEmitter;
|
|
396
|
+
|
|
397
|
+
beforeEach(() => {
|
|
398
|
+
languageChangedEmitter = (
|
|
399
|
+
eventServiceMock.mock.instances[0] as any
|
|
400
|
+
).LANGUAGE_CHANGED = {
|
|
401
|
+
emit: jest.fn(),
|
|
402
|
+
};
|
|
403
|
+
|
|
404
|
+
translationServiceMock.mock.instances[0].loadTranslations = jest.fn(
|
|
405
|
+
async () =>
|
|
406
|
+
new Promise((resolve) => {
|
|
407
|
+
loadTranslationsResolve = resolve;
|
|
408
|
+
})
|
|
409
|
+
);
|
|
410
|
+
tolgee.lang = dummyLang;
|
|
411
|
+
});
|
|
412
|
+
|
|
413
|
+
test('will change the language', () => {
|
|
414
|
+
expect(propertiesMock.mock.instances[0].currentLanguage).toEqual(
|
|
415
|
+
dummyLang
|
|
416
|
+
);
|
|
417
|
+
});
|
|
418
|
+
|
|
419
|
+
test('emits the changed event', async () => {
|
|
420
|
+
expect(languageChangedEmitter.emit).toBeCalledTimes(0);
|
|
421
|
+
loadTranslationsResolve({});
|
|
422
|
+
await waitFor(() => {
|
|
423
|
+
expect(languageChangedEmitter.emit).toBeCalledTimes(1);
|
|
424
|
+
expect(languageChangedEmitter.emit).toBeCalledWith(dummyLang);
|
|
425
|
+
});
|
|
426
|
+
});
|
|
427
|
+
});
|
|
428
|
+
|
|
429
|
+
describe('changeLanguage method', () => {
|
|
430
|
+
const dummyLang = 'dummyLang';
|
|
431
|
+
let loadTranslationsResolve: (value: Translations) => void;
|
|
432
|
+
let languageChanged;
|
|
433
|
+
let changeLanguagePromise: Promise<void>;
|
|
434
|
+
|
|
435
|
+
beforeEach(() => {
|
|
436
|
+
languageChanged = (
|
|
437
|
+
eventServiceMock.mock.instances[0] as any
|
|
438
|
+
).LANGUAGE_CHANGED = {
|
|
439
|
+
emit: jest.fn(),
|
|
440
|
+
};
|
|
441
|
+
|
|
442
|
+
translationServiceMock.mock.instances[0].loadTranslations = jest.fn(
|
|
443
|
+
async () =>
|
|
444
|
+
new Promise((resolve) => {
|
|
445
|
+
loadTranslationsResolve = resolve;
|
|
446
|
+
})
|
|
447
|
+
);
|
|
448
|
+
changeLanguagePromise = tolgee.changeLanguage(dummyLang);
|
|
449
|
+
});
|
|
450
|
+
|
|
451
|
+
test('will change the language', (done) => {
|
|
452
|
+
expect(propertiesMock.mock.instances[0].currentLanguage).not.toEqual(
|
|
453
|
+
dummyLang
|
|
454
|
+
);
|
|
455
|
+
changeLanguagePromise.then(() => {
|
|
456
|
+
expect(propertiesMock.mock.instances[0].currentLanguage).toEqual(
|
|
457
|
+
dummyLang
|
|
458
|
+
);
|
|
459
|
+
done();
|
|
460
|
+
});
|
|
461
|
+
loadTranslationsResolve({});
|
|
462
|
+
});
|
|
463
|
+
|
|
464
|
+
test('emits the change and loaded event', (done) => {
|
|
465
|
+
expect(languageChanged.emit).toBeCalledTimes(0);
|
|
466
|
+
changeLanguagePromise.then(() => {
|
|
467
|
+
expect(languageChanged.emit).toBeCalledTimes(1);
|
|
468
|
+
done();
|
|
469
|
+
});
|
|
470
|
+
loadTranslationsResolve({});
|
|
471
|
+
});
|
|
472
|
+
});
|
|
473
|
+
});
|