1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
/** |
4
|
|
|
* File contains: eZ\Publish\Core\Persistence\Legacy\Tests\Content\Language\MaskGeneratorTest class. |
5
|
|
|
* |
6
|
|
|
* @copyright Copyright (C) eZ Systems AS. All rights reserved. |
7
|
|
|
* @license For full copyright and license information view LICENSE file distributed with this source code. |
8
|
|
|
*/ |
9
|
|
|
namespace eZ\Publish\Core\Persistence\Legacy\Tests\Content\Language; |
10
|
|
|
|
11
|
|
|
use eZ\Publish\Core\Persistence\Legacy\Tests\Content\LanguageAwareTestCase; |
12
|
|
|
use eZ\Publish\Core\Persistence\Legacy\Content\Language\MaskGenerator; |
13
|
|
|
use eZ\Publish\SPI\Persistence\Content\Language; |
14
|
|
|
use eZ\Publish\SPI\Persistence\Content\Language\Handler as LanguageHandler; |
15
|
|
|
|
16
|
|
|
/** |
17
|
|
|
* Test case for Language MaskGenerator. |
18
|
|
|
*/ |
19
|
|
|
class MaskGeneratorTest extends LanguageAwareTestCase |
20
|
|
|
{ |
21
|
|
|
/** |
22
|
|
|
* @param array $languages |
23
|
|
|
* @param int $expectedMask |
24
|
|
|
* |
25
|
|
|
* @covers \eZ\Publish\Core\Persistence\Legacy\Content\Language\MaskGenerator::generateLanguageMask |
26
|
|
|
* @dataProvider getLanguageMaskData |
27
|
|
|
*/ |
28
|
|
|
public function testGenerateLanguageMask(array $languages, $expectedMask) |
29
|
|
|
{ |
30
|
|
|
$generator = $this->getMaskGenerator(); |
31
|
|
|
|
32
|
|
|
$this->assertSame( |
33
|
|
|
$expectedMask, |
34
|
|
|
$generator->generateLanguageMask($languages) |
|
|
|
|
35
|
|
|
); |
36
|
|
|
} |
37
|
|
|
|
38
|
|
|
/** |
39
|
|
|
* @param array $languages |
40
|
|
|
* @param int $expectedMask |
41
|
|
|
* |
42
|
|
|
* @covers \eZ\Publish\Core\Persistence\Legacy\Content\Language\MaskGenerator::generateLanguageMaskFromLanguageCodes |
43
|
|
|
* @dataProvider getLanguageMaskData |
44
|
|
|
*/ |
45
|
|
|
public function testGenerateLanguageMaskFromLanguagesCodes(array $languages, $expectedMask) |
46
|
|
|
{ |
47
|
|
|
$generator = $this->getMaskGenerator(); |
48
|
|
|
|
49
|
|
|
if (isset($languages['always-available'])) { |
50
|
|
|
$isAlwaysAvailable = true; |
51
|
|
|
unset($languages['always-available']); |
52
|
|
|
} else { |
53
|
|
|
$isAlwaysAvailable = false; |
54
|
|
|
} |
55
|
|
|
|
56
|
|
|
$this->assertSame( |
57
|
|
|
$expectedMask, |
58
|
|
|
$generator->generateLanguageMaskFromLanguageCodes(array_keys($languages), $isAlwaysAvailable) |
59
|
|
|
); |
60
|
|
|
} |
61
|
|
|
|
62
|
|
|
/** |
63
|
|
|
* Returns test data for {@link testGenerateLanguageMask()} and {@link testGenerateLanguageMaskFromLanguagesCodes()}. |
64
|
|
|
* |
65
|
|
|
* @return array |
66
|
|
|
*/ |
67
|
|
|
public static function getLanguageMaskData() |
68
|
|
|
{ |
69
|
|
|
return array( |
70
|
|
|
'error' => array( |
71
|
|
|
array(), |
72
|
|
|
0, |
73
|
|
|
), |
74
|
|
|
'single_lang' => array( |
75
|
|
|
array('eng-GB' => true), |
76
|
|
|
4, |
77
|
|
|
), |
78
|
|
|
'multi_lang' => array( |
79
|
|
|
array('eng-US' => true, 'eng-GB' => true), |
80
|
|
|
6, |
81
|
|
|
), |
82
|
|
|
'always_available' => array( |
83
|
|
|
array('always-available' => 'eng-US', 'eng-US' => true), |
84
|
|
|
3, |
85
|
|
|
), |
86
|
|
|
'full' => array( |
87
|
|
|
array('always-available' => 'eng-US', 'eng-US' => true, 'eng-GB' => true), |
88
|
|
|
7, |
89
|
|
|
), |
90
|
|
|
); |
91
|
|
|
} |
92
|
|
|
|
93
|
|
|
/** |
94
|
|
|
* @param string $languageCode |
95
|
|
|
* @param bool $alwaysAvailable |
96
|
|
|
* @param int $expectedIndicator |
97
|
|
|
* |
98
|
|
|
* @covers \eZ\Publish\Core\Persistence\Legacy\Content\Language\MaskGenerator::generateLanguageIndicator |
99
|
|
|
* @dataProvider getLanguageIndicatorData |
100
|
|
|
*/ |
101
|
|
|
public function testGenerateLanguageIndicator( |
102
|
|
|
$languageCode, |
103
|
|
|
$alwaysAvailable, |
104
|
|
|
$expectedIndicator |
105
|
|
|
) { |
106
|
|
|
$generator = $this->getMaskGenerator(); |
107
|
|
|
|
108
|
|
|
$this->assertSame( |
109
|
|
|
$expectedIndicator, |
110
|
|
|
$generator->generateLanguageIndicator($languageCode, $alwaysAvailable) |
111
|
|
|
); |
112
|
|
|
} |
113
|
|
|
|
114
|
|
|
/** |
115
|
|
|
* Returns test data for {@link testGenerateLanguageIndicator()}. |
116
|
|
|
* |
117
|
|
|
* @return array |
118
|
|
|
*/ |
119
|
|
|
public static function getLanguageIndicatorData() |
120
|
|
|
{ |
121
|
|
|
return array( |
122
|
|
|
'not_available' => array( |
123
|
|
|
'eng-GB', |
124
|
|
|
false, |
125
|
|
|
4, |
126
|
|
|
), |
127
|
|
|
'always_available' => array( |
128
|
|
|
'eng-US', |
129
|
|
|
true, |
130
|
|
|
3, |
131
|
|
|
), |
132
|
|
|
); |
133
|
|
|
} |
134
|
|
|
|
135
|
|
|
/** |
136
|
|
|
* @covers \eZ\Publish\Core\Persistence\Legacy\Content\Language\MaskGenerator::isLanguageAlwaysAvailable |
137
|
|
|
*/ |
138
|
|
|
public function testIsLanguageAlwaysAvailable() |
139
|
|
|
{ |
140
|
|
|
$generator = $this->getMaskGenerator(); |
141
|
|
|
|
142
|
|
|
$this->assertTrue( |
143
|
|
|
$generator->isLanguageAlwaysAvailable( |
144
|
|
|
'eng-GB', |
145
|
|
|
array( |
146
|
|
|
'always-available' => 'eng-GB', |
147
|
|
|
'eng-GB' => 'lala', |
148
|
|
|
) |
149
|
|
|
) |
150
|
|
|
); |
151
|
|
|
} |
152
|
|
|
|
153
|
|
|
/** |
154
|
|
|
* @covers \eZ\Publish\Core\Persistence\Legacy\Content\Language\MaskGenerator::isLanguageAlwaysAvailable |
155
|
|
|
*/ |
156
|
|
|
public function testIsLanguageAlwaysAvailableOtherLanguage() |
157
|
|
|
{ |
158
|
|
|
$generator = $this->getMaskGenerator(); |
159
|
|
|
|
160
|
|
|
$this->assertFalse( |
161
|
|
|
$generator->isLanguageAlwaysAvailable( |
162
|
|
|
'eng-GB', |
163
|
|
|
array( |
164
|
|
|
'always-available' => 'eng-US', |
165
|
|
|
'eng-GB' => 'lala', |
166
|
|
|
) |
167
|
|
|
) |
168
|
|
|
); |
169
|
|
|
} |
170
|
|
|
|
171
|
|
|
/** |
172
|
|
|
* @covers \eZ\Publish\Core\Persistence\Legacy\Content\Language\MaskGenerator::isLanguageAlwaysAvailable |
173
|
|
|
*/ |
174
|
|
|
public function testIsLanguageAlwaysAvailableNoDefault() |
175
|
|
|
{ |
176
|
|
|
$generator = $this->getMaskGenerator(); |
177
|
|
|
|
178
|
|
|
$this->assertFalse( |
179
|
|
|
$generator->isLanguageAlwaysAvailable( |
180
|
|
|
'eng-GB', |
181
|
|
|
array( |
182
|
|
|
'eng-GB' => 'lala', |
183
|
|
|
) |
184
|
|
|
) |
185
|
|
|
); |
186
|
|
|
} |
187
|
|
|
|
188
|
|
|
/** |
189
|
|
|
* @param int $languageMask |
|
|
|
|
190
|
|
|
* @param bool $expectedResult |
191
|
|
|
* |
192
|
|
|
* @covers \eZ\Publish\Core\Persistence\Legacy\Content\Language\MaskGenerator::isAlwaysAvailable |
193
|
|
|
* @dataProvider isAlwaysAvailableProvider |
194
|
|
|
*/ |
195
|
|
|
public function testIsAlwaysAvailable($langMask, $expectedResult) |
196
|
|
|
{ |
197
|
|
|
$generator = $this->getMaskGenerator(); |
198
|
|
|
self::assertSame($expectedResult, $generator->isAlwaysAvailable($langMask)); |
199
|
|
|
} |
200
|
|
|
|
201
|
|
|
/** |
202
|
|
|
* Returns test data for {@link testIsAlwaysAvailable()}. |
203
|
|
|
* |
204
|
|
|
* @return array |
205
|
|
|
*/ |
206
|
|
|
public function isAlwaysAvailableProvider() |
207
|
|
|
{ |
208
|
|
|
return array( |
209
|
|
|
array(2, false), |
210
|
|
|
array(3, true), |
211
|
|
|
array(62, false), |
212
|
|
|
array(14, false), |
213
|
|
|
array(15, true), |
214
|
|
|
); |
215
|
|
|
} |
216
|
|
|
|
217
|
|
|
/** |
218
|
|
|
* @covers \eZ\Publish\Core\Persistence\Legacy\Content\Language\MaskGenerator::removeAlwaysAvailableFlag |
219
|
|
|
* @dataProvider removeAlwaysAvailableFlagProvider |
220
|
|
|
*/ |
221
|
|
|
public function testRemoveAlwaysAvailableFlag($langMask, $expectedResult) |
222
|
|
|
{ |
223
|
|
|
$generator = $this->getMaskGenerator(); |
224
|
|
|
self::assertSame($expectedResult, $generator->removeAlwaysAvailableFlag($langMask)); |
225
|
|
|
} |
226
|
|
|
|
227
|
|
|
/** |
228
|
|
|
* Returns test data for {@link testRemoveAlwaysAvailableFlag}. |
229
|
|
|
* |
230
|
|
|
* @return array |
231
|
|
|
*/ |
232
|
|
|
public function removeAlwaysAvailableFlagProvider() |
233
|
|
|
{ |
234
|
|
|
return array( |
235
|
|
|
array(3, 2), |
236
|
|
|
array(7, 6), |
237
|
|
|
array(14, 14), |
238
|
|
|
array(62, 62), |
239
|
|
|
); |
240
|
|
|
} |
241
|
|
|
|
242
|
|
|
/** |
243
|
|
|
* @param int $langMask |
244
|
|
|
* @param array $expectedResult |
245
|
|
|
* |
246
|
|
|
* @covers \eZ\Publish\Core\Persistence\Legacy\Content\Language\MaskGenerator::extractLanguageIdsFromMask |
247
|
|
|
* @dataProvider languageIdsFromMaskProvider |
248
|
|
|
*/ |
249
|
|
|
public function testExtractLanguageIdsFromMask($langMask, array $expectedResult) |
250
|
|
|
{ |
251
|
|
|
$generator = $this->getMaskGenerator(); |
252
|
|
|
self::assertSame($expectedResult, $generator->extractLanguageIdsFromMask($langMask)); |
253
|
|
|
} |
254
|
|
|
|
255
|
|
|
/** |
256
|
|
|
* Returns test data for {@link testExtractLanguageIdsFromMask}. |
257
|
|
|
* |
258
|
|
|
* @return array |
259
|
|
|
*/ |
260
|
|
|
public function languageIdsFromMaskProvider() |
261
|
|
|
{ |
262
|
|
|
return array( |
263
|
|
|
array( |
264
|
|
|
2, |
265
|
|
|
array(2), |
266
|
|
|
), |
267
|
|
|
array( |
268
|
|
|
15, |
269
|
|
|
array(2, 4, 8), |
270
|
|
|
), |
271
|
|
|
array( |
272
|
|
|
62, |
273
|
|
|
array(2, 4, 8, 16, 32), |
274
|
|
|
), |
275
|
|
|
); |
276
|
|
|
} |
277
|
|
|
|
278
|
|
|
/** |
279
|
|
|
* Returns the mask generator to test. |
280
|
|
|
* |
281
|
|
|
* @return \eZ\Publish\Core\Persistence\Legacy\Content\Language\MaskGenerator |
282
|
|
|
*/ |
283
|
|
|
protected function getMaskGenerator() |
284
|
|
|
{ |
285
|
|
|
return new MaskGenerator($this->getLanguageHandler()); |
|
|
|
|
286
|
|
|
} |
287
|
|
|
|
288
|
|
|
/** |
289
|
|
|
* Returns a language handler mock. |
290
|
|
|
* |
291
|
|
|
* @return \eZ\Publish\Core\Persistence\Legacy\Content\Language\Handler |
292
|
|
|
*/ |
293
|
|
|
protected function getLanguageHandler() |
294
|
|
|
{ |
295
|
|
|
if (!isset($this->languageHandler)) { |
296
|
|
|
$this->languageHandler = $this->createMock(LanguageHandler::class); |
|
|
|
|
297
|
|
|
$this->languageHandler->expects($this->any()) |
298
|
|
|
->method($this->anything())// loadByLanguageCode && loadListByLanguageCodes |
299
|
|
|
->will( |
300
|
|
|
$this->returnCallback( |
301
|
|
|
function ($languageCodes) { |
302
|
|
|
if (is_string($languageCodes)) { |
303
|
|
|
$language = $languageCodes; |
304
|
|
|
$languageCodes = [$language]; |
305
|
|
|
} |
306
|
|
|
|
307
|
|
|
$languages = []; |
308
|
|
View Code Duplication |
if (in_array('eng-US', $languageCodes, true)) { |
|
|
|
|
309
|
|
|
$languages['eng-US'] = new Language( |
310
|
|
|
[ |
311
|
|
|
'id' => 2, |
312
|
|
|
'languageCode' => 'eng-US', |
313
|
|
|
'name' => 'US english', |
314
|
|
|
] |
315
|
|
|
); |
316
|
|
|
} |
317
|
|
|
|
318
|
|
View Code Duplication |
if (in_array('eng-GB', $languageCodes, true)) { |
|
|
|
|
319
|
|
|
$languages['eng-GB'] = new Language( |
320
|
|
|
[ |
321
|
|
|
'id' => 4, |
322
|
|
|
'languageCode' => 'eng-GB', |
323
|
|
|
'name' => 'British english', |
324
|
|
|
] |
325
|
|
|
); |
326
|
|
|
} |
327
|
|
|
|
328
|
|
|
return isset($language) ? $languages[$language] : $languages; |
329
|
|
|
} |
330
|
|
|
) |
331
|
|
|
); |
332
|
|
|
} |
333
|
|
|
|
334
|
|
|
return $this->languageHandler; |
|
|
|
|
335
|
|
|
} |
336
|
|
|
} |
337
|
|
|
|
This method has been deprecated. The supplier of the class has supplied an explanatory message.
The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.