6 use Wikimedia\TestingAccessWrapper;
30 $this->context->setTitle(
$title );
32 if ( !self::$revisions ) {
33 self::$revisions = $this->
doEdits();
52 $strings = [
"it is a kitten",
"two kittens",
"three kittens",
"four kittens" ];
55 foreach ( $strings
as $string ) {
57 $page->doEditContent(
$content,
'edit page' );
67 foreach ( $cases
as $case ) {
68 list( $expected, $old, $new, $message ) = $case;
70 $diffEngine =
new DifferenceEngine( $this->context, $old, $new, 2,
true,
false );
71 $diffMap = $diffEngine->mapDiffPrevNext( $old, $new );
72 $this->assertEquals( $expected, $diffMap, $message );
80 [ [ $revs[1], $revs[2] ], $revs[2],
'prev',
'diff=prev' ],
81 [ [ $revs[2], $revs[3] ], $revs[2],
'next',
'diff=next' ],
82 [ [ $revs[1], $revs[3] ], $revs[1], $revs[3],
'diff=' . $revs[3] ]
89 foreach ( $cases
as $testName => $case ) {
90 list( $expectedOld, $expectedNew, $expectedRet, $old, $new ) = $case;
92 $diffEngine =
new DifferenceEngine( $this->context, $old, $new, 2,
true,
false );
93 $ret = $diffEngine->loadRevisionData();
94 $ret2 = $diffEngine->loadRevisionData();
96 $this->assertEquals( $expectedOld, $diffEngine->getOldid(), $testName );
97 $this->assertEquals( $expectedNew, $diffEngine->getNewid(), $testName );
98 $this->assertEquals( $expectedRet,
$ret, $testName );
99 $this->assertEquals( $expectedRet, $ret2, $testName );
107 'diff=prev' => [ $revs[2], $revs[3],
true, $revs[3],
'prev' ],
108 'diff=next' => [ $revs[2], $revs[3],
true, $revs[2],
'next' ],
109 'diff=' . $revs[3] => [ $revs[1], $revs[3],
true, $revs[1], $revs[3] ],
110 'diff=0' => [ $revs[1], $revs[3],
true, $revs[1], 0 ],
111 'diff=prev&oldid=<first>' => [
false, $revs[0],
true, $revs[0],
'prev' ],
112 'invalid' => [ 123456789, $revs[1],
false, 123456789, $revs[1] ],
119 $diffEngine =
new DifferenceEngine( $this->context, $revs[1], $revs[2], 2,
true,
false );
120 $this->assertEquals( $revs[1], $diffEngine->getOldid(),
'diff get old id' );
126 $diffEngine =
new DifferenceEngine( $this->context, $revs[1], $revs[2], 2,
true,
false );
127 $this->assertEquals( $revs[2], $diffEngine->getNewid(),
'diff get new id' );
132 'moved paragraph left shoud get new location title' => [
133 '<a class="mw-diff-movedpara-left">⚫</a>',
134 '<a class="mw-diff-movedpara-left" title="(diff-paragraph-moved-tonew)">⚫</a>',
136 'moved paragraph right shoud get old location title' => [
137 '<a class="mw-diff-movedpara-right">⚫</a>',
138 '<a class="mw-diff-movedpara-right" title="(diff-paragraph-moved-toold)">⚫</a>',
140 'nothing changed when key not hit' => [
141 '<a class="mw-diff-movedpara-rightis">⚫</a>',
142 '<a class="mw-diff-movedpara-rightis">⚫</a>',
152 $diffEngine = TestingAccessWrapper::newFromObject(
new DifferenceEngine() );
153 $this->assertEquals( $expected, $diffEngine->addLocalisedTitleTooltips(
$input ) );
165 'wgExternalDiffEngine' =>
'/dev/null',
170 $this->assertSame( $expectedDiff, $this->
getPlainDiff( $diff ) );
181 'self-diff' => [ $content1, $content1,
'' ],
182 'text diff' => [ $content1, $content2,
'-xxx+yyy' ],
190 'wgExternalDiffEngine' =>
'/dev/null',
193 $oldText =
"aaa\nbbb\nccc";
194 $newText =
"aaa\nxxx\nccc";
195 $expectedDiff =
" aaa aaa\n-bbb+xxx\n ccc ccc";
199 $this->assertSame( $expectedDiff, $this->
getPlainDiff( $diff ) );
206 'wgExternalDiffEngine' =>
'/dev/null',
215 $this->assertSame(
"Line 1:\nLine 1:\n-xxx+yyy", $this->
getPlainDiff( $diff ) );
219 $main1 = SlotRecord::newUnsaved( SlotRecord::MAIN,
221 $main2 = SlotRecord::newUnsaved( SlotRecord::MAIN,
246 'wgExternalDiffEngine' =>
'/dev/null',
249 if ( $expectedDiff instanceof Exception ) {
250 $this->setExpectedException( get_class( $expectedDiff ), $expectedDiff->getMessage() );
254 if ( $expectedDiff instanceof Exception ) {
259 $this->assertSame( $expectedDiff, $this->
getPlainDiff( $diff ) );
263 $main1 = SlotRecord::newUnsaved( SlotRecord::MAIN,
265 $main2 = SlotRecord::newUnsaved( SlotRecord::MAIN,
267 $slot1 = SlotRecord::newUnsaved(
'slot',
269 $slot2 = SlotRecord::newUnsaved(
'slot',
273 'revision vs. null' => [
278 'revision vs. itself' => [
283 'different text in one slot' => [
286 "slotLine 1:\nLine 1:\n-aaa+bbb",
288 'different text in two slots' => [
291 "Line 1:\nLine 1:\n-xxx+yyy\nslotLine 1:\nLine 1:\n-aaa+bbb",
296 "slotLine 1:\nLine 1:\n- +aaa",
307 ->enableProxyingToOriginalMethods()
310 ->setConstructorArgs( [
'foo', [] ] )
311 ->setMethods( [
'createDifferenceEngine' ] )
312 ->getMockForAbstractClass();
313 $customContentHandler->expects( $this->
any() )
314 ->method(
'createDifferenceEngine' )
315 ->willReturn( $customDifferenceEngine );
318 ->setMethods( [
'getContentHandler' ] )
319 ->getMockForAbstractClass();
320 $customContent->expects( $this->
any() )
321 ->method(
'getContentHandler' )
322 ->willReturn( $customContentHandler );
324 $customContent2 = clone $customContent;
328 ': could not maintain backwards compatibility. Please use a SlotDiffRenderer.' );
329 $slotDiffRenderer->getDiff( $customContent, $customContent2 );
339 html_entity_decode(
' ' ) =>
' ',
340 html_entity_decode(
'−' ) =>
'-',
342 return str_replace( array_keys( $replacements ), array_values( $replacements ),
343 trim( strip_tags( $diff ),
"\n" ) );
352 ->disableOriginalConstructor()
354 $mock->expects( $this->
any() )
355 ->method(
'getDBkey' )
356 ->will( $this->returnValue( __CLASS__ ) );
357 $mock->expects( $this->
any() )
358 ->method(
'getArticleID' )
359 ->will( $this->returnValue( $id ) );
371 foreach ( $slots
as $slot ) {
372 $revision->setSlot( $slot );