This changeset implements T89432 and related tickets and is based on exploration done at the Prague Hackathon. The goal is to identify tests in MediaWiki core that can be run without having to install & configure MediaWiki and its dependencies, and provide a way to execute these tests via the standard phpunit entry point, allowing for faster development and integration with existing tooling like IDEs. The initial set of tests that met these criteria were identified using the work Amir did in I88822667693d9e00ac3d4639c87bc24e5083e5e8. These tests were then moved into a new subdirectory under phpunit/ and organized into a separate test suite. The environment for this suite is set up via a PHPUnit bootstrap file without a custom entry point. You can execute these tests by running: $ vendor/bin/phpunit -d memory_limit=512M -c tests/phpunit/unit-tests.xml Bug: T89432 Bug: T87781 Bug: T84948 Change-Id: Iad01033a0548afd4d2a6f2c1ef6fcc9debf72c0d
134 lines
3.7 KiB
PHP
134 lines
3.7 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @author Addshore
|
|
*
|
|
* @group Diff
|
|
*/
|
|
class ArrayDiffFormatterTest extends \MediaWikiUnitTestCase {
|
|
|
|
/**
|
|
* @param Diff $input
|
|
* @param array $expectedOutput
|
|
* @dataProvider provideTestFormat
|
|
* @covers ArrayDiffFormatter::format
|
|
*/
|
|
public function testFormat( $input, $expectedOutput ) {
|
|
$instance = new ArrayDiffFormatter();
|
|
$output = $instance->format( $input );
|
|
$this->assertEquals( $expectedOutput, $output );
|
|
}
|
|
|
|
private function getMockDiff( $edits ) {
|
|
$diff = $this->getMockBuilder( Diff::class )
|
|
->disableOriginalConstructor()
|
|
->getMock();
|
|
$diff->expects( $this->any() )
|
|
->method( 'getEdits' )
|
|
->will( $this->returnValue( $edits ) );
|
|
return $diff;
|
|
}
|
|
|
|
private function getMockDiffOp( $type = null, $orig = [], $closing = [] ) {
|
|
$diffOp = $this->getMockBuilder( DiffOp::class )
|
|
->disableOriginalConstructor()
|
|
->getMock();
|
|
$diffOp->expects( $this->any() )
|
|
->method( 'getType' )
|
|
->will( $this->returnValue( $type ) );
|
|
$diffOp->expects( $this->any() )
|
|
->method( 'getOrig' )
|
|
->will( $this->returnValue( $orig ) );
|
|
if ( $type === 'change' ) {
|
|
$diffOp->expects( $this->any() )
|
|
->method( 'getClosing' )
|
|
->with( $this->isType( 'integer' ) )
|
|
->will( $this->returnCallback( function () {
|
|
return 'mockLine';
|
|
} ) );
|
|
} else {
|
|
$diffOp->expects( $this->any() )
|
|
->method( 'getClosing' )
|
|
->will( $this->returnValue( $closing ) );
|
|
}
|
|
return $diffOp;
|
|
}
|
|
|
|
public function provideTestFormat() {
|
|
$emptyArrayTestCases = [
|
|
$this->getMockDiff( [] ),
|
|
$this->getMockDiff( [ $this->getMockDiffOp( 'add' ) ] ),
|
|
$this->getMockDiff( [ $this->getMockDiffOp( 'delete' ) ] ),
|
|
$this->getMockDiff( [ $this->getMockDiffOp( 'change' ) ] ),
|
|
$this->getMockDiff( [ $this->getMockDiffOp( 'copy' ) ] ),
|
|
$this->getMockDiff( [ $this->getMockDiffOp( 'FOOBARBAZ' ) ] ),
|
|
$this->getMockDiff( [ $this->getMockDiffOp( 'add', 'line' ) ] ),
|
|
$this->getMockDiff( [ $this->getMockDiffOp( 'delete', [], [ 'line' ] ) ] ),
|
|
$this->getMockDiff( [ $this->getMockDiffOp( 'copy', [], [ 'line' ] ) ] ),
|
|
];
|
|
|
|
$otherTestCases = [];
|
|
$otherTestCases[] = [
|
|
$this->getMockDiff( [ $this->getMockDiffOp( 'add', [], [ 'a1' ] ) ] ),
|
|
[ [ 'action' => 'add', 'new' => 'a1', 'newline' => 1 ] ],
|
|
];
|
|
$otherTestCases[] = [
|
|
$this->getMockDiff( [ $this->getMockDiffOp( 'add', [], [ 'a1', 'a2' ] ) ] ),
|
|
[
|
|
[ 'action' => 'add', 'new' => 'a1', 'newline' => 1 ],
|
|
[ 'action' => 'add', 'new' => 'a2', 'newline' => 2 ],
|
|
],
|
|
];
|
|
$otherTestCases[] = [
|
|
$this->getMockDiff( [ $this->getMockDiffOp( 'delete', [ 'd1' ] ) ] ),
|
|
[ [ 'action' => 'delete', 'old' => 'd1', 'oldline' => 1 ] ],
|
|
];
|
|
$otherTestCases[] = [
|
|
$this->getMockDiff( [ $this->getMockDiffOp( 'delete', [ 'd1', 'd2' ] ) ] ),
|
|
[
|
|
[ 'action' => 'delete', 'old' => 'd1', 'oldline' => 1 ],
|
|
[ 'action' => 'delete', 'old' => 'd2', 'oldline' => 2 ],
|
|
],
|
|
];
|
|
$otherTestCases[] = [
|
|
$this->getMockDiff( [ $this->getMockDiffOp( 'change', [ 'd1' ], [ 'a1' ] ) ] ),
|
|
[ [
|
|
'action' => 'change',
|
|
'old' => 'd1',
|
|
'new' => 'mockLine',
|
|
'newline' => 1, 'oldline' => 1
|
|
] ],
|
|
];
|
|
$otherTestCases[] = [
|
|
$this->getMockDiff( [ $this->getMockDiffOp(
|
|
'change',
|
|
[ 'd1', 'd2' ],
|
|
[ 'a1', 'a2' ]
|
|
) ] ),
|
|
[
|
|
[
|
|
'action' => 'change',
|
|
'old' => 'd1',
|
|
'new' => 'mockLine',
|
|
'newline' => 1, 'oldline' => 1
|
|
],
|
|
[
|
|
'action' => 'change',
|
|
'old' => 'd2',
|
|
'new' => 'mockLine',
|
|
'newline' => 2, 'oldline' => 2
|
|
],
|
|
],
|
|
];
|
|
|
|
$testCases = [];
|
|
foreach ( $emptyArrayTestCases as $testCase ) {
|
|
$testCases[] = [ $testCase, [] ];
|
|
}
|
|
foreach ( $otherTestCases as $testCase ) {
|
|
$testCases[] = [ $testCase[0], $testCase[1] ];
|
|
}
|
|
return $testCases;
|
|
}
|
|
|
|
}
|