1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
namespace Wikibase\DataModel\Services\Tests\Diff; |
4
|
|
|
|
5
|
|
|
use PHPUnit\Framework\TestCase; |
6
|
|
|
use Wikibase\DataModel\Services\Diff\FingerprintDiffer; |
7
|
|
|
use Wikibase\DataModel\Term\AliasGroup; |
8
|
|
|
use Wikibase\DataModel\Term\AliasGroupList; |
9
|
|
|
use Wikibase\DataModel\Term\Fingerprint; |
10
|
|
|
use Wikibase\DataModel\Term\Term; |
11
|
|
|
use Wikibase\DataModel\Term\TermList; |
12
|
|
|
|
13
|
|
|
/** |
14
|
|
|
* @covers \Wikibase\DataModel\Services\Diff\FingerprintDiffer |
15
|
|
|
*/ |
16
|
|
|
class FingerprintDifferTest extends TestCase { |
17
|
|
|
|
18
|
|
|
public function testEmptyFingerprints() { |
19
|
|
|
$this->assertEquals( |
20
|
|
|
new Fingerprint(), |
21
|
|
|
$this->diff( new Fingerprint(), new Fingerprint() ) |
22
|
|
|
); |
23
|
|
|
} |
24
|
|
|
|
25
|
|
|
private function diff( Fingerprint $first, Fingerprint $second ): Fingerprint { |
26
|
|
|
return ( new FingerprintDiffer() )->diff( $first, $second ); |
27
|
|
|
} |
28
|
|
|
|
29
|
|
|
public function testTermsNotInSecondAreReturned() { |
30
|
|
|
$first = new Fingerprint( |
31
|
|
|
new TermList( [ new Term( 'en', 'FirstLabel' ) ] ), |
32
|
|
|
new TermList( [ new Term( 'en', 'FirstDesc' ) ] ), |
33
|
|
|
new AliasGroupList( [ |
34
|
|
|
new AliasGroup( 'en', [ 'FirstAliasOne', 'FirstAliasTwo' ] ), |
35
|
|
|
new AliasGroup( 'de', [ 'DeAliasOne', 'DeAliasTwo' ] ), |
36
|
|
|
] ) |
37
|
|
|
); |
38
|
|
|
|
39
|
|
|
$this->assertEquals( |
40
|
|
|
$first, |
41
|
|
|
$this->diff( |
42
|
|
|
$first, |
43
|
|
|
new Fingerprint( |
44
|
|
|
new TermList( [ new Term( 'en', 'SecondLabel' ) ] ), |
45
|
|
|
new TermList( [ new Term( 'en', 'SecondDesc' ) ] ), |
46
|
|
|
new AliasGroupList( [ |
47
|
|
|
new AliasGroup( 'en', [ 'SecondAliasOne', 'SecondAliasTwo' ] ), |
48
|
|
|
new AliasGroup( 'different', [ 'DeAliasOne', 'DeAliasTwo' ] ), |
49
|
|
|
] ) |
50
|
|
|
) |
51
|
|
|
) |
52
|
|
|
); |
53
|
|
|
} |
54
|
|
|
|
55
|
|
|
public function testTermsInSecondAreNotReturned() { |
56
|
|
|
$fingerprint = new Fingerprint( |
57
|
|
|
new TermList( [ new Term( 'en', 'FirstLabel' ) ] ), |
58
|
|
|
new TermList( [ new Term( 'en', 'FirstDesc' ) ] ), |
59
|
|
|
new AliasGroupList( [ |
60
|
|
|
new AliasGroup( 'en', [ 'FirstAliasOne', 'FirstAliasTwo' ] ), |
61
|
|
|
] ) |
62
|
|
|
); |
63
|
|
|
|
64
|
|
|
$this->assertEquals( |
65
|
|
|
new Fingerprint(), |
66
|
|
|
$this->diff( |
67
|
|
|
$fingerprint, |
68
|
|
|
$fingerprint |
69
|
|
|
) |
70
|
|
|
); |
71
|
|
|
} |
72
|
|
|
|
73
|
|
|
public function testAllTheThings() { |
74
|
|
|
$this->assertEquals( |
75
|
|
|
new Fingerprint( |
76
|
|
|
new TermList( [ |
77
|
|
|
new Term( 'fr', 'OnlyInFirst' ) |
78
|
|
|
] ), |
79
|
|
|
new TermList( [ |
80
|
|
|
new Term( 'de', 'MismatchLanguage' ) |
81
|
|
|
] ), |
82
|
|
|
new AliasGroupList( [ |
83
|
|
|
new AliasGroup( 'en', [ 'AliasOnlyInFirst' ] ), |
84
|
|
|
new AliasGroup( 'de', [ 'AliasesOnlyInFirst' ] ) |
85
|
|
|
] ) |
86
|
|
|
), |
87
|
|
|
$this->diff( |
88
|
|
|
new Fingerprint( |
89
|
|
|
new TermList( [ |
90
|
|
|
new Term( 'en', 'MatchingTerm' ), |
91
|
|
|
new Term( 'fr', 'OnlyInFirst' ) |
92
|
|
|
] ), |
93
|
|
|
new TermList( [ |
94
|
|
|
new Term( 'de', 'MismatchLanguage' ) |
95
|
|
|
] ), |
96
|
|
|
new AliasGroupList( [ |
97
|
|
|
new AliasGroup( 'en', [ 'MatchingAlias', 'AliasOnlyInFirst' ] ), |
98
|
|
|
new AliasGroup( 'de', [ 'AliasesOnlyInFirst' ] ), |
99
|
|
|
] ) |
100
|
|
|
), |
101
|
|
|
new Fingerprint( |
102
|
|
|
new TermList( [ |
103
|
|
|
new Term( 'en', 'MatchingTerm' ), |
104
|
|
|
new Term( 'ru', 'OnlyInSecond' ) |
105
|
|
|
] ), |
106
|
|
|
new TermList( [ |
107
|
|
|
new Term( 'different', 'MismatchLanguage' ) |
108
|
|
|
] ), |
109
|
|
|
new AliasGroupList( [ |
110
|
|
|
new AliasGroup( 'en', [ 'MatchingAlias', 'AliasOnlyInSecond' ] ), |
111
|
|
|
new AliasGroup( 'ru', [ 'AliasesOnlyInSecond' ] ), |
112
|
|
|
] ) |
113
|
|
|
) |
114
|
|
|
) |
115
|
|
|
); |
116
|
|
|
} |
117
|
|
|
|
118
|
|
|
} |
119
|
|
|
|