Completed
Push — master ( c0676d...e5a675 )
by
unknown
24s
created

testGivenListWithChangedStatements_changeOperationsInDiff()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 26
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 26
rs 8.8571
cc 1
eloc 17
nc 1
nop 0
1
<?php
2
3
namespace Wikibase\DataModel\Services\Tests\Diff;
4
5
use DataValues\StringValue;
6
use Diff\DiffOp\Diff\Diff;
7
use Diff\DiffOp\DiffOpAdd;
8
use Diff\DiffOp\DiffOpChange;
9
use Diff\DiffOp\DiffOpRemove;
10
use Wikibase\DataModel\Services\Diff\StatementListDiffer;
11
use Wikibase\DataModel\Snak\PropertyValueSnak;
12
use Wikibase\DataModel\Statement\Statement;
13
use Wikibase\DataModel\Statement\StatementList;
14
15
/**
16
 * @covers Wikibase\DataModel\Services\Diff\StatementListDiffer
17
 *
18
 * @license GPL-2.0+
19
 * @author Jeroen De Dauw < [email protected] >
20
 */
21
class StatementListDifferTest extends \PHPUnit_Framework_TestCase {
22
23
	public function testGivenTwoEmptyLists_diffIsEmpty() {
24
		$this->assertResultsInDiff( new StatementList(), new StatementList(), new Diff() );
25
	}
26
27
	private function assertResultsInDiff( StatementList $fromStatements, StatementList $toStatements, Diff $diff ) {
28
		$differ = new StatementListDiffer();
29
30
		$actual = $differ->getDiff( $fromStatements, $toStatements );
31
32
		$this->assertEquals( $diff, $actual );
33
	}
34
35
	public function testGivenTwoIdenticalLists_diffIsEmpty() {
36
		$statements = new StatementList(
37
			$this->getNewStatement( 'zero', 'first' ),
38
			$this->getNewStatement( 'one', 'second' )
39
		);
40
41
		$this->assertResultsInDiff( $statements, $statements, new Diff() );
42
	}
43
44
	private function getNewStatement( $guid, $hash ) {
45
		$statement = new Statement( new PropertyValueSnak( 1, new StringValue( $hash ) ) );
46
		$statement->setGuid( $guid );
47
		return $statement;
48
	}
49
50
	public function testGivenToListWithExtraStatement_additionOperationInDiff() {
51
		$fromStatements = new StatementList(
52
			$this->getNewStatement( 'zero', 'first' ),
53
			$this->getNewStatement( 'one', 'second' )
54
		);
55
56
		$toStatements = new StatementList(
57
			$this->getNewStatement( 'zero', 'first' ),
58
			$this->getNewStatement( 'two', 'third' ),
59
			$this->getNewStatement( 'one', 'second' )
60
		);
61
62
		$diff = new Diff( array(
63
			'two' => new DiffOpAdd( $this->getNewStatement( 'two', 'third' ) ),
64
		) );
65
66
		$this->assertResultsInDiff( $fromStatements, $toStatements, $diff );
67
	}
68
69
	public function testGivenToListWithLessStatements_removalOperationsInDiff() {
70
		$fromStatements = new StatementList(
71
			$this->getNewStatement( 'zero', 'first' ),
72
			$this->getNewStatement( 'one', 'second' ),
73
			$this->getNewStatement( 'two', 'third' )
74
		);
75
76
		$toStatements = new StatementList(
77
			$this->getNewStatement( 'one', 'second' )
78
		);
79
80
		$diff = new Diff( array(
81
			'zero' => new DiffOpRemove( $this->getNewStatement( 'zero', 'first' ) ),
82
			'two' => new DiffOpRemove( $this->getNewStatement( 'two', 'third' ) ),
83
		) );
84
85
		$this->assertResultsInDiff( $fromStatements, $toStatements, $diff );
86
	}
87
88
	public function testGivenListWithChangedStatements_changeOperationsInDiff() {
89
		$fromStatements = new StatementList(
90
			$this->getNewStatement( 'zero', 'first' ),
91
			$this->getNewStatement( 'one', 'second' ),
92
			$this->getNewStatement( 'two', 'third' )
93
		);
94
95
		$toStatements = new StatementList(
96
			$this->getNewStatement( 'zero', 'FIRST' ),
97
			$this->getNewStatement( 'one', 'second' ),
98
			$this->getNewStatement( 'two', 'THIRD' )
99
		);
100
101
		$diff = new Diff( array(
102
			'zero' => new DiffOpChange(
103
					$this->getNewStatement( 'zero', 'first' ),
104
					$this->getNewStatement( 'zero', 'FIRST' )
105
				),
106
			'two' => new DiffOpChange(
107
					$this->getNewStatement( 'two', 'third' ),
108
					$this->getNewStatement( 'two', 'THIRD' )
109
				),
110
		) );
111
112
		$this->assertResultsInDiff( $fromStatements, $toStatements, $diff );
113
	}
114
115
}
116