1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
namespace Wikibase\DataModel\Tests\Term; |
4
|
|
|
|
5
|
|
|
use InvalidArgumentException; |
6
|
|
|
use Wikibase\DataModel\Term\Term; |
7
|
|
|
use Wikibase\DataModel\Term\TermList; |
8
|
|
|
|
9
|
|
|
/** |
10
|
|
|
* @covers Wikibase\DataModel\Term\TermList |
11
|
|
|
* @uses Wikibase\DataModel\Term\Term |
12
|
|
|
* |
13
|
|
|
* @licence GNU GPL v2+ |
14
|
|
|
* @author Jeroen De Dauw < [email protected] > |
15
|
|
|
*/ |
16
|
|
|
class TermListTest extends \PHPUnit_Framework_TestCase { |
17
|
|
|
|
18
|
|
|
public function testIsEmpty() { |
19
|
|
|
$list = new TermList(); |
20
|
|
|
$this->assertTrue( $list->isEmpty() ); |
21
|
|
|
|
22
|
|
|
$list = new TermList( array( new Term( 'en', 'foo' ) ) ); |
23
|
|
|
$this->assertFalse( $list->isEmpty() ); |
24
|
|
|
} |
25
|
|
|
|
26
|
|
|
public function testGivenNoTerms_sizeIsZero() { |
27
|
|
|
$list = new TermList(); |
28
|
|
|
$this->assertCount( 0, $list ); |
29
|
|
|
} |
30
|
|
|
|
31
|
|
|
public function testGivenTwoTerms_countReturnsTwo() { |
32
|
|
|
$list = new TermList( $this->getTwoTerms() ); |
33
|
|
|
|
34
|
|
|
$this->assertCount( 2, $list ); |
35
|
|
|
} |
36
|
|
|
|
37
|
|
|
private function getTwoTerms() { |
38
|
|
|
return array( |
39
|
|
|
'en' => new Term( 'en', 'foo' ), |
40
|
|
|
'de' => new Term( 'de', 'bar' ), |
41
|
|
|
); |
42
|
|
|
} |
43
|
|
|
|
44
|
|
|
public function testGivenTwoTerms_listContainsThem() { |
45
|
|
|
$array = $this->getTwoTerms(); |
46
|
|
|
|
47
|
|
|
$list = new TermList( $array ); |
48
|
|
|
|
49
|
|
|
$this->assertEquals( $array, iterator_to_array( $list ) ); |
50
|
|
|
} |
51
|
|
|
|
52
|
|
|
public function testGivenTermsWithTheSameLanguage_onlyTheLastOnesAreRetained() { |
53
|
|
|
$array = array( |
54
|
|
|
new Term( 'en', 'foo' ), |
55
|
|
|
new Term( 'en', 'bar' ), |
56
|
|
|
|
57
|
|
|
new Term( 'de', 'baz' ), |
58
|
|
|
|
59
|
|
|
new Term( 'nl', 'bah' ), |
60
|
|
|
new Term( 'nl', 'blah' ), |
61
|
|
|
new Term( 'nl', 'spam' ), |
62
|
|
|
); |
63
|
|
|
|
64
|
|
|
$list = new TermList( $array ); |
65
|
|
|
|
66
|
|
|
$this->assertEquals( |
67
|
|
|
array( |
68
|
|
|
'en' => new Term( 'en', 'bar' ), |
69
|
|
|
'de' => new Term( 'de', 'baz' ), |
70
|
|
|
'nl' => new Term( 'nl', 'spam' ), |
71
|
|
|
), |
72
|
|
|
iterator_to_array( $list ) |
73
|
|
|
); |
74
|
|
|
} |
75
|
|
|
|
76
|
|
|
public function testGivenNoTerms_toTextArrayReturnsEmptyArray() { |
77
|
|
|
$list = new TermList(); |
78
|
|
|
$this->assertEquals( array(), $list->toTextArray() ); |
79
|
|
|
} |
80
|
|
|
|
81
|
|
|
public function testGivenTerms_toTextArrayReturnsTermsInFormat() { |
82
|
|
|
$list = new TermList( array( |
83
|
|
|
new Term( 'en', 'foo' ), |
84
|
|
|
new Term( 'de', 'bar' ), |
85
|
|
|
) ); |
86
|
|
|
|
87
|
|
|
$this->assertEquals( |
88
|
|
|
array( |
89
|
|
|
'en' => 'foo', |
90
|
|
|
'de' => 'bar', |
91
|
|
|
), |
92
|
|
|
$list->toTextArray() |
93
|
|
|
); |
94
|
|
|
} |
95
|
|
|
|
96
|
|
|
public function testCanIterateOverList() { |
97
|
|
|
$list = new TermList( array( |
98
|
|
|
new Term( 'en', 'foo' ), |
99
|
|
|
) ); |
100
|
|
|
|
101
|
|
|
foreach ( $list as $key => $term ) { |
102
|
|
|
$this->assertEquals( 'en', $key ); |
103
|
|
|
$this->assertEquals( new Term( 'en', 'foo' ), $term ); |
104
|
|
|
} |
105
|
|
|
} |
106
|
|
|
|
107
|
|
|
public function testGivenSetLanguageCode_getByLanguageReturnsGroup() { |
108
|
|
|
$enTerm = new Term( 'en', 'a' ); |
109
|
|
|
|
110
|
|
|
$list = new TermList( array( |
111
|
|
|
new Term( 'de', 'b' ), |
112
|
|
|
$enTerm, |
113
|
|
|
new Term( 'nl', 'c' ), |
114
|
|
|
) ); |
115
|
|
|
|
116
|
|
|
$this->assertEquals( $enTerm, $list->getByLanguage( 'en' ) ); |
117
|
|
|
} |
118
|
|
|
|
119
|
|
|
/** |
120
|
|
|
* @dataProvider invalidLanguageCodeProvider |
121
|
|
|
*/ |
122
|
|
|
public function testGivenInvalidLanguageCode_getByLanguageThrowsException( $languageCode ) { |
123
|
|
|
$list = new TermList(); |
124
|
|
|
$this->setExpectedException( 'OutOfBoundsException' ); |
|
|
|
|
125
|
|
|
$list->getByLanguage( $languageCode ); |
126
|
|
|
} |
127
|
|
|
|
128
|
|
|
public function testGivenNonSetLanguageCode_getByLanguageThrowsException() { |
129
|
|
|
$list = new TermList(); |
130
|
|
|
|
131
|
|
|
$this->setExpectedException( 'OutOfBoundsException' ); |
|
|
|
|
132
|
|
|
$list->getByLanguage( 'en' ); |
133
|
|
|
} |
134
|
|
|
|
135
|
|
|
public function testHasTermForLanguage() { |
136
|
|
|
$list = new TermList( array( |
137
|
|
|
new Term( 'en', 'foo' ), |
138
|
|
|
new Term( 'de', 'bar' ), |
139
|
|
|
) ); |
140
|
|
|
|
141
|
|
|
$this->assertTrue( $list->hasTermForLanguage( 'en' ) ); |
142
|
|
|
$this->assertTrue( $list->hasTermForLanguage( 'de' ) ); |
143
|
|
|
|
144
|
|
|
$this->assertFalse( $list->hasTermForLanguage( 'nl' ) ); |
145
|
|
|
$this->assertFalse( $list->hasTermForLanguage( 'fr' ) ); |
146
|
|
|
|
147
|
|
|
$this->assertFalse( $list->hasTermForLanguage( 'EN' ) ); |
148
|
|
|
$this->assertFalse( $list->hasTermForLanguage( ' de ' ) ); |
149
|
|
|
} |
150
|
|
|
|
151
|
|
|
/** |
152
|
|
|
* @dataProvider invalidLanguageCodeProvider |
153
|
|
|
*/ |
154
|
|
|
public function testGivenInvalidLanguageCode_hasTermForLanguageReturnsFalse( $languageCode ) { |
155
|
|
|
$list = new TermList(); |
156
|
|
|
$this->assertFalse( $list->hasTermForLanguage( $languageCode ) ); |
157
|
|
|
} |
158
|
|
|
|
159
|
|
|
public function invalidLanguageCodeProvider() { |
160
|
|
|
return array( |
161
|
|
|
array( null ), |
162
|
|
|
array( 21 ), |
163
|
|
|
array( '' ), |
164
|
|
|
); |
165
|
|
|
} |
166
|
|
|
|
167
|
|
|
public function testGivenNotSetLanguageCode_removeByLanguageDoesNoOp() { |
168
|
|
|
$list = new TermList( array( |
169
|
|
|
new Term( 'en', 'foo' ), |
170
|
|
|
new Term( 'de', 'bar' ), |
171
|
|
|
) ); |
172
|
|
|
|
173
|
|
|
$list->removeByLanguage( 'nl' ); |
174
|
|
|
|
175
|
|
|
$this->assertCount( 2, $list ); |
176
|
|
|
} |
177
|
|
|
|
178
|
|
|
public function testGivenSetLanguageCode_removeByLanguageRemovesIt() { |
179
|
|
|
$deTerm = new Term( 'de', 'bar' ); |
180
|
|
|
|
181
|
|
|
$list = new TermList( array( |
182
|
|
|
new Term( 'en', 'foo' ), |
183
|
|
|
$deTerm, |
184
|
|
|
) ); |
185
|
|
|
|
186
|
|
|
$list->removeByLanguage( 'en' ); |
187
|
|
|
|
188
|
|
|
$this->assertEquals( |
189
|
|
|
array( 'de' => $deTerm ), |
190
|
|
|
iterator_to_array( $list ) |
191
|
|
|
); |
192
|
|
|
} |
193
|
|
|
|
194
|
|
|
/** |
195
|
|
|
* @dataProvider invalidLanguageCodeProvider |
196
|
|
|
*/ |
197
|
|
|
public function testGivenInvalidLanguageCode_removeByLanguageDoesNoOp( $languageCode ) { |
198
|
|
|
$list = new TermList( array( new Term( 'en', 'foo' ) ) ); |
199
|
|
|
$list->removeByLanguage( $languageCode ); |
200
|
|
|
$this->assertFalse( $list->isEmpty() ); |
201
|
|
|
} |
202
|
|
|
|
203
|
|
|
public function testGivenTermForNewLanguage_setTermAddsTerm() { |
204
|
|
|
$enTerm = new Term( 'en', 'foo' ); |
205
|
|
|
$deTerm = new Term( 'de', 'bar' ); |
206
|
|
|
|
207
|
|
|
$list = new TermList( array( $enTerm ) ); |
208
|
|
|
$expectedList = new TermList( array( $enTerm, $deTerm ) ); |
209
|
|
|
|
210
|
|
|
$list->setTerm( $deTerm ); |
211
|
|
|
|
212
|
|
|
$this->assertEquals( $expectedList, $list ); |
213
|
|
|
} |
214
|
|
|
|
215
|
|
|
public function testGivenTermForExistingLanguage_setTermReplacesTerm() { |
216
|
|
|
$enTerm = new Term( 'en', 'foo' ); |
217
|
|
|
$newEnTerm = new Term( 'en', 'bar' ); |
218
|
|
|
|
219
|
|
|
$list = new TermList( array( $enTerm ) ); |
220
|
|
|
$expectedList = new TermList( array( $newEnTerm ) ); |
221
|
|
|
|
222
|
|
|
$list->setTerm( $newEnTerm ); |
223
|
|
|
$this->assertEquals( $expectedList, $list ); |
224
|
|
|
} |
225
|
|
|
|
226
|
|
|
public function testEmptyListEqualsEmptyList() { |
227
|
|
|
$list = new TermList(); |
228
|
|
|
$this->assertTrue( $list->equals( new TermList() ) ); |
229
|
|
|
} |
230
|
|
|
|
231
|
|
|
public function testFilledListEqualsItself() { |
232
|
|
|
$list = new TermList( array( |
233
|
|
|
new Term( 'en', 'foo' ), |
234
|
|
|
new Term( 'de', 'bar' ), |
235
|
|
|
) ); |
236
|
|
|
|
237
|
|
|
$this->assertTrue( $list->equals( $list ) ); |
238
|
|
|
$this->assertTrue( $list->equals( clone $list ) ); |
239
|
|
|
} |
240
|
|
|
|
241
|
|
|
public function testDifferentListsDoNotEqual() { |
242
|
|
|
$list = new TermList( array( |
243
|
|
|
new Term( 'en', 'foo' ), |
244
|
|
|
new Term( 'de', 'bar' ), |
245
|
|
|
) ); |
246
|
|
|
|
247
|
|
|
$this->assertFalse( $list->equals( new TermList() ) ); |
248
|
|
|
|
249
|
|
|
$this->assertFalse( $list->equals( |
250
|
|
|
new TermList( array( |
251
|
|
|
new Term( 'en', 'foo' ), |
252
|
|
|
) ) |
253
|
|
|
) ); |
254
|
|
|
|
255
|
|
|
$this->assertFalse( $list->equals( |
256
|
|
|
new TermList( array( |
257
|
|
|
new Term( 'en', 'foo' ), |
258
|
|
|
new Term( 'de', 'HAX' ), |
259
|
|
|
) ) |
260
|
|
|
) ); |
261
|
|
|
|
262
|
|
|
$this->assertFalse( $list->equals( |
263
|
|
|
new TermList( array( |
264
|
|
|
new Term( 'en', 'foo' ), |
265
|
|
|
new Term( 'de', 'bar' ), |
266
|
|
|
new Term( 'nl', 'baz' ), |
267
|
|
|
) ) |
268
|
|
|
) ); |
269
|
|
|
} |
270
|
|
|
|
271
|
|
|
public function testGivenNonTermList_equalsReturnsFalse() { |
272
|
|
|
$list = new TermList(); |
273
|
|
|
$this->assertFalse( $list->equals( null ) ); |
274
|
|
|
$this->assertFalse( $list->equals( new \stdClass() ) ); |
275
|
|
|
} |
276
|
|
|
|
277
|
|
|
public function testGivenListsThatOnlyDifferInOrder_equalsReturnsTrue() { |
278
|
|
|
$list = new TermList( array( |
279
|
|
|
new Term( 'en', 'foo' ), |
280
|
|
|
new Term( 'de', 'bar' ), |
281
|
|
|
) ); |
282
|
|
|
|
283
|
|
|
$this->assertTrue( $list->equals( |
284
|
|
|
new TermList( array( |
285
|
|
|
new Term( 'de', 'bar' ), |
286
|
|
|
new Term( 'en', 'foo' ), |
287
|
|
|
) ) |
288
|
|
|
) ); |
289
|
|
|
} |
290
|
|
|
|
291
|
|
|
public function testGivenNonSetLanguageTerm_hasTermReturnsFalse() { |
292
|
|
|
$list = new TermList(); |
293
|
|
|
$this->assertFalse( $list->hasTerm( new Term( 'en', 'kittens' ) ) ); |
294
|
|
|
} |
295
|
|
|
|
296
|
|
|
public function testGivenMismatchingTerm_hasTermReturnsFalse() { |
297
|
|
|
$list = new TermList( array( new Term( 'en', 'cats' ) ) ); |
298
|
|
|
$this->assertFalse( $list->hasTerm( new Term( 'en', 'kittens' ) ) ); |
299
|
|
|
} |
300
|
|
|
|
301
|
|
|
public function testGivenMatchingTerm_hasTermReturnsTrue() { |
302
|
|
|
$list = new TermList( array( new Term( 'en', 'kittens' ) ) ); |
303
|
|
|
$this->assertTrue( $list->hasTerm( new Term( 'en', 'kittens' ) ) ); |
304
|
|
|
} |
305
|
|
|
|
306
|
|
|
public function testGivenValidArgs_setTermTextSetsTerm() { |
307
|
|
|
$list = new TermList(); |
308
|
|
|
|
309
|
|
|
$list->setTextForLanguage( 'en', 'kittens' ); |
310
|
|
|
|
311
|
|
|
$this->assertTrue( $list->getByLanguage( 'en' )->equals( new Term( 'en', 'kittens' ) ) ); |
312
|
|
|
} |
313
|
|
|
|
314
|
|
|
public function testGivenInvalidLanguageCode_setTermTextThrowsException() { |
315
|
|
|
$list = new TermList(); |
316
|
|
|
|
317
|
|
|
$this->setExpectedException( 'InvalidArgumentException' ); |
|
|
|
|
318
|
|
|
$list->setTextForLanguage( null, 'kittens' ); |
319
|
|
|
} |
320
|
|
|
|
321
|
|
|
public function testGivenInvalidTermText_setTermTextThrowsException() { |
322
|
|
|
$list = new TermList(); |
323
|
|
|
|
324
|
|
|
$this->setExpectedException( 'InvalidArgumentException' ); |
|
|
|
|
325
|
|
|
$list->setTextForLanguage( 'en', null ); |
326
|
|
|
} |
327
|
|
|
|
328
|
|
|
public function testGivenEmptyList_getWithLanguagesReturnsEmptyList() { |
329
|
|
|
$list = new TermList(); |
330
|
|
|
$this->assertEquals( new TermList(), $list->getWithLanguages( array() ) ); |
331
|
|
|
$this->assertEquals( new TermList(), $list->getWithLanguages( array( 'en', 'de' ) ) ); |
332
|
|
|
} |
333
|
|
|
|
334
|
|
|
public function testGivenNoLanguages_getWithLanguagesReturnsEmptyList() { |
335
|
|
|
$list = new TermList(); |
336
|
|
|
$list->setTextForLanguage( 'en', 'foo' ); |
337
|
|
|
$list->setTextForLanguage( 'de', 'bar' ); |
338
|
|
|
|
339
|
|
|
$this->assertEquals( new TermList(), $list->getWithLanguages( array() ) ); |
340
|
|
|
} |
341
|
|
|
|
342
|
|
|
public function testGivenAllLanguages_getWithLanguagesReturnsFullList() { |
343
|
|
|
$list = new TermList(); |
344
|
|
|
$list->setTextForLanguage( 'en', 'foo' ); |
345
|
|
|
$list->setTextForLanguage( 'de', 'bar' ); |
346
|
|
|
|
347
|
|
|
$this->assertEquals( $list, $list->getWithLanguages( array( 'en', 'de' ) ) ); |
348
|
|
|
} |
349
|
|
|
|
350
|
|
|
public function testGivenSomeLanguages_getWithLanguagesReturnsPartialList() { |
351
|
|
|
$list = new TermList(); |
352
|
|
|
$list->setTextForLanguage( 'en', 'foo' ); |
353
|
|
|
$list->setTextForLanguage( 'de', 'bar' ); |
354
|
|
|
$list->setTextForLanguage( 'nl', 'baz' ); |
355
|
|
|
$list->setTextForLanguage( 'fr', 'hax' ); |
356
|
|
|
|
357
|
|
|
$expectedList = new TermList(); |
358
|
|
|
$expectedList->setTextForLanguage( 'en', 'foo' ); |
359
|
|
|
$expectedList->setTextForLanguage( 'nl', 'baz' ); |
360
|
|
|
|
361
|
|
|
$this->assertEquals( $expectedList, $list->getWithLanguages( array( 'en', 'nl' ) ) ); |
362
|
|
|
} |
363
|
|
|
|
364
|
|
|
public function testGivenEmptyTerms_constructorOnlyAddsNonEmptyTerms() { |
365
|
|
|
$list = new TermList( array( |
366
|
|
|
new Term( 'en', 'foo' ), |
367
|
|
|
new Term( 'de', '' ), |
368
|
|
|
new Term( 'nl', 'baz' ), |
369
|
|
|
new Term( 'fr', '' ), |
370
|
|
|
) ); |
371
|
|
|
|
372
|
|
|
$this->assertEquals( |
373
|
|
|
array( |
374
|
|
|
'en' => new Term( 'en', 'foo' ), |
375
|
|
|
'nl' => new Term( 'nl', 'baz' ), |
376
|
|
|
), |
377
|
|
|
iterator_to_array( $list ) |
378
|
|
|
); |
379
|
|
|
} |
380
|
|
|
|
381
|
|
|
public function testGivenEmptyTerm_setTermDoesNotAddIt() { |
382
|
|
|
$list = new TermList(); |
383
|
|
|
$list->setTerm( new Term( 'en', '' ) ); |
384
|
|
|
|
385
|
|
|
$this->assertEquals( new TermList(), $list ); |
386
|
|
|
} |
387
|
|
|
|
388
|
|
|
public function testGivenEmptyTerm_setTermRemovesExistingOne() { |
389
|
|
|
$list = new TermList(); |
390
|
|
|
$list->setTerm( new Term( 'en', 'foo' ) ); |
391
|
|
|
$list->setTerm( new Term( 'de', 'bar' ) ); |
392
|
|
|
$list->setTerm( new Term( 'en', '' ) ); |
393
|
|
|
|
394
|
|
|
$this->assertEquals( |
395
|
|
|
new TermList( array( new Term( 'de', 'bar' ) ) ), |
396
|
|
|
$list |
397
|
|
|
); |
398
|
|
|
} |
399
|
|
|
|
400
|
|
|
} |
401
|
|
|
|
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.