Completed
Push — master ( f3f299...16dfc5 )
by
unknown
05:26 queued 02:39
created

StatementListPatcherTest::testPatchStatementList()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 9
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 9
rs 9.6666
cc 1
eloc 7
nc 1
nop 3
1
<?php
2
3
namespace Wikibase\DataModel\Services\Tests\Diff\Internal;
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\Internal\StatementListPatcher;
11
use Wikibase\DataModel\Snak\PropertyNoValueSnak;
12
use Wikibase\DataModel\Snak\PropertySomeValueSnak;
13
use Wikibase\DataModel\Snak\PropertyValueSnak;
14
use Wikibase\DataModel\Statement\Statement;
15
use Wikibase\DataModel\Statement\StatementList;
16
17
/**
18
 * @covers Wikibase\DataModel\Services\Diff\Internal\StatementListPatcher
19
 *
20
 * @license GPL-2.0+
21
 * @author Jeroen De Dauw < [email protected] >
22
 * @author Thiemo Mättig
23
 */
24
class StatementListPatcherTest extends \PHPUnit_Framework_TestCase {
25
26
	public function patchStatementListProvider() {
27
		$statement1 = new Statement( new PropertyNoValueSnak( 1 ) );
28
		$statement2 = new Statement( new PropertyNoValueSnak( 2 ) );
29
30
		return array(
31
			// Empty diffs
32
			array(
33
				new StatementList(),
34
				new Diff(),
35
				new StatementList()
36
			),
37
			array(
38
				new StatementList( $statement1 ),
39
				new Diff(),
40
				new StatementList( $statement1 )
41
			),
42
43
			// Add operations
44
			array(
45
				new StatementList(),
46
				new Diff( array( new DiffOpAdd( $statement1 ) ), true ),
47
				new StatementList( $statement1 )
48
			),
49
			array(
50
				new StatementList(),
51
				new Diff( array( new DiffOpAdd( $statement1 ) ), false ),
52
				new StatementList( $statement1 )
53
			),
54
			array(
55
				new StatementList(),
56
				new Diff( array( new DiffOpAdd( $statement1 ) ) ),
57
				new StatementList( $statement1 )
58
			),
59
60
			// Remove operations
61
			array(
62
				new StatementList( $statement1 ),
63
				new Diff( array( new DiffOpRemove( $statement1 ) ), true ),
64
				new StatementList()
65
			),
66
			array(
67
				new StatementList( $statement1 ),
68
				new Diff( array( new DiffOpRemove( $statement1 ) ), false ),
69
				new StatementList()
70
			),
71
			array(
72
				new StatementList( $statement1 ),
73
				new Diff( array( new DiffOpRemove( $statement1 ) ) ),
74
				new StatementList()
75
			),
76
77
			// Mixed operations
78
			array(
79
				new StatementList( $statement1 ),
80
				new Diff( array(
81
					new DiffOpRemove( $statement1 ),
82
					new DiffOpAdd( $statement2 ),
83
				) ),
84
				new StatementList( $statement2 )
85
			),
86
			array(
87
				new StatementList( $statement1 ),
88
				new Diff( array(
89
					new DiffOpChange( $statement1, $statement2 ),
90
				) ),
91
				new StatementList( $statement2 )
92
			),
93
		);
94
	}
95
96
	/**
97
	 * @dataProvider patchStatementListProvider
98
	 */
99
	public function testPatchStatementList(
100
		StatementList $statements,
101
		Diff $patch,
102
		StatementList $expected
103
	) {
104
		$patcher = new StatementListPatcher();
105
		$patcher->patchStatementList( $statements, $patch );
106
		$this->assertEquals( $expected, $statements );
107
	}
108
109
	public function testGivenEmptyDiff_listIsReturnedAsIs() {
110
		$statements = new StatementList();
111
112
		$this->assertListResultsFromPatch( $statements, $statements, new Diff() );
113
	}
114
115
	private function assertListResultsFromPatch( StatementList $expected, StatementList $original, Diff $patch ) {
116
		$patcher = new StatementListPatcher();
117
		$clone = clone $original;
118
		$this->assertEquals( $expected, $patcher->getPatchedStatementList( $original, $patch ) );
0 ignored issues
show
Deprecated Code introduced by
The method Wikibase\DataModel\Servi...tPatchedStatementList() has been deprecated with message: since 3.6, use patchStatementList instead

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.

Loading history...
119
		$this->assertEquals( $clone, $original, 'original must not change' );
120
	}
121
122
	public function testFoo() {
123
		$statement0 = new Statement( new PropertyNoValueSnak( 42 ) );
124
		$statement0->setGuid( 's0' );
125
126
		$statement1 = new Statement( new PropertySomeValueSnak( 42 ) );
127
		$statement1->setGuid( 's1' );
128
129
		$statement2 = new Statement( new PropertyValueSnak( 42, new StringValue( 'ohi' ) ) );
130
		$statement2->setGuid( 's2' );
131
132
		$statement3 = new Statement( new PropertyNoValueSnak( 1 ) );
133
		$statement3->setGuid( 's3' );
134
135
		$patch = new Diff( array(
136
			's0' => new DiffOpRemove( $statement0 ),
137
			's2' => new DiffOpAdd( $statement2 ),
138
			's3' => new DiffOpAdd( $statement3 )
139
		) );
140
141
		$source = new StatementList();
142
		$source->addStatement( $statement0 );
143
		$source->addStatement( $statement1 );
144
145
		$expected = new StatementList();
146
		$expected->addStatement( $statement1 );
147
		$expected->addStatement( $statement2 );
148
		$expected->addStatement( $statement3 );
149
150
		$this->assertListResultsFromPatch( $expected, $source, $patch );
151
	}
152
153
}
154