-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy pathStatementListDifferTest.php
More file actions
115 lines (92 loc) · 3.4 KB
/
StatementListDifferTest.php
File metadata and controls
115 lines (92 loc) · 3.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
<?php
namespace Wikibase\DataModel\Services\Tests\Diff;
use DataValues\StringValue;
use Diff\DiffOp\Diff\Diff;
use Diff\DiffOp\DiffOpAdd;
use Diff\DiffOp\DiffOpChange;
use Diff\DiffOp\DiffOpRemove;
use Wikibase\DataModel\Services\Diff\StatementListDiffer;
use Wikibase\DataModel\Snak\PropertyValueSnak;
use Wikibase\DataModel\Statement\Statement;
use Wikibase\DataModel\Statement\StatementList;
/**
* @covers Wikibase\DataModel\Services\Diff\StatementListDiffer
*
* @license GPL-2.0+
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
*/
class StatementListDifferTest extends \PHPUnit_Framework_TestCase {
public function testGivenTwoEmptyLists_diffIsEmpty() {
$this->assertResultsInDiff( new StatementList(), new StatementList(), new Diff() );
}
private function assertResultsInDiff( StatementList $fromStatements, StatementList $toStatements, Diff $diff ) {
$differ = new StatementListDiffer();
$actual = $differ->getDiff( $fromStatements, $toStatements );
$this->assertEquals( $diff, $actual );
}
public function testGivenTwoIdenticalLists_diffIsEmpty() {
$statements = new StatementList(
$this->getNewStatement( 'zero', 'first' ),
$this->getNewStatement( 'one', 'second' )
);
$this->assertResultsInDiff( $statements, $statements, new Diff() );
}
private function getNewStatement( $guid, $hash ) {
$statement = new Statement( new PropertyValueSnak( 1, new StringValue( $hash ) ) );
$statement->setGuid( $guid );
return $statement;
}
public function testGivenToListWithExtraStatement_additionOperationInDiff() {
$fromStatements = new StatementList(
$this->getNewStatement( 'zero', 'first' ),
$this->getNewStatement( 'one', 'second' )
);
$toStatements = new StatementList(
$this->getNewStatement( 'zero', 'first' ),
$this->getNewStatement( 'two', 'third' ),
$this->getNewStatement( 'one', 'second' )
);
$diff = new Diff( array(
'two' => new DiffOpAdd( $this->getNewStatement( 'two', 'third' ) ),
) );
$this->assertResultsInDiff( $fromStatements, $toStatements, $diff );
}
public function testGivenToListWithLessStatements_removalOperationsInDiff() {
$fromStatements = new StatementList(
$this->getNewStatement( 'zero', 'first' ),
$this->getNewStatement( 'one', 'second' ),
$this->getNewStatement( 'two', 'third' )
);
$toStatements = new StatementList(
$this->getNewStatement( 'one', 'second' )
);
$diff = new Diff( array(
'zero' => new DiffOpRemove( $this->getNewStatement( 'zero', 'first' ) ),
'two' => new DiffOpRemove( $this->getNewStatement( 'two', 'third' ) ),
) );
$this->assertResultsInDiff( $fromStatements, $toStatements, $diff );
}
public function testGivenListWithChangedStatements_changeOperationsInDiff() {
$fromStatements = new StatementList(
$this->getNewStatement( 'zero', 'first' ),
$this->getNewStatement( 'one', 'second' ),
$this->getNewStatement( 'two', 'third' )
);
$toStatements = new StatementList(
$this->getNewStatement( 'zero', 'FIRST' ),
$this->getNewStatement( 'one', 'second' ),
$this->getNewStatement( 'two', 'THIRD' )
);
$diff = new Diff( array(
'zero' => new DiffOpChange(
$this->getNewStatement( 'zero', 'first' ),
$this->getNewStatement( 'zero', 'FIRST' )
),
'two' => new DiffOpChange(
$this->getNewStatement( 'two', 'third' ),
$this->getNewStatement( 'two', 'THIRD' )
),
) );
$this->assertResultsInDiff( $fromStatements, $toStatements, $diff );
}
}