aboutsummaryrefslogtreecommitdiffstats
path: root/tests/phpunit/includes/diff
diff options
context:
space:
mode:
authorMáté Szabó <mszabo@wikia-inc.com>2019-06-01 16:10:15 +0200
committerMáté Szabó <mszabo@wikia-inc.com>2019-06-13 22:56:31 +0200
commit0a2b996278e57a8b8c5377cd3a3eaa54f993d4a9 (patch)
treecde53a6eeb2d94ceece63322ffcd107cedbd553d /tests/phpunit/includes/diff
parent15c27d356b5e6760024ac0653279a76d94d78b1f (diff)
downloadmediawikicore-0a2b996278e57a8b8c5377cd3a3eaa54f993d4a9.tar.gz
mediawikicore-0a2b996278e57a8b8c5377cd3a3eaa54f993d4a9.zip
Separate MediaWiki unit and integration tests
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
Diffstat (limited to 'tests/phpunit/includes/diff')
-rw-r--r--tests/phpunit/includes/diff/ArrayDiffFormatterTest.php134
-rw-r--r--tests/phpunit/includes/diff/DiffOpTest.php68
-rw-r--r--tests/phpunit/includes/diff/DiffTest.php19
-rw-r--r--tests/phpunit/includes/diff/DifferenceEngineSlotDiffRendererTest.php44
-rw-r--r--tests/phpunit/includes/diff/SlotDiffRendererTest.php78
5 files changed, 0 insertions, 343 deletions
diff --git a/tests/phpunit/includes/diff/ArrayDiffFormatterTest.php b/tests/phpunit/includes/diff/ArrayDiffFormatterTest.php
deleted file mode 100644
index 8d94404cd4f6..000000000000
--- a/tests/phpunit/includes/diff/ArrayDiffFormatterTest.php
+++ /dev/null
@@ -1,134 +0,0 @@
-<?php
-
-/**
- * @author Addshore
- *
- * @group Diff
- */
-class ArrayDiffFormatterTest extends MediaWikiTestCase {
-
- /**
- * @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;
- }
-
-}
diff --git a/tests/phpunit/includes/diff/DiffOpTest.php b/tests/phpunit/includes/diff/DiffOpTest.php
deleted file mode 100644
index 3026fad6bd66..000000000000
--- a/tests/phpunit/includes/diff/DiffOpTest.php
+++ /dev/null
@@ -1,68 +0,0 @@
-<?php
-/**
- * @author Addshore
- *
- * @group Diff
- */
-class DiffOpTest extends MediaWikiTestCase {
-
- /**
- * @covers DiffOp::getType
- */
- public function testGetType() {
- $obj = new FakeDiffOp();
- $obj->type = 'foo';
- $this->assertEquals( 'foo', $obj->getType() );
- }
-
- /**
- * @covers DiffOp::getOrig
- */
- public function testGetOrig() {
- $obj = new FakeDiffOp();
- $obj->orig = [ 'foo' ];
- $this->assertEquals( [ 'foo' ], $obj->getOrig() );
- }
-
- /**
- * @covers DiffOp::getClosing
- */
- public function testGetClosing() {
- $obj = new FakeDiffOp();
- $obj->closing = [ 'foo' ];
- $this->assertEquals( [ 'foo' ], $obj->getClosing() );
- }
-
- /**
- * @covers DiffOp::getClosing
- */
- public function testGetClosingWithParameter() {
- $obj = new FakeDiffOp();
- $obj->closing = [ 'foo', 'bar', 'baz' ];
- $this->assertEquals( 'foo', $obj->getClosing( 0 ) );
- $this->assertEquals( 'bar', $obj->getClosing( 1 ) );
- $this->assertEquals( 'baz', $obj->getClosing( 2 ) );
- $this->assertEquals( null, $obj->getClosing( 3 ) );
- }
-
- /**
- * @covers DiffOp::norig
- */
- public function testNorig() {
- $obj = new FakeDiffOp();
- $this->assertEquals( 0, $obj->norig() );
- $obj->orig = [ 'foo' ];
- $this->assertEquals( 1, $obj->norig() );
- }
-
- /**
- * @covers DiffOp::nclosing
- */
- public function testNclosing() {
- $obj = new FakeDiffOp();
- $this->assertEquals( 0, $obj->nclosing() );
- $obj->closing = [ 'foo' ];
- $this->assertEquals( 1, $obj->nclosing() );
- }
-
-}
diff --git a/tests/phpunit/includes/diff/DiffTest.php b/tests/phpunit/includes/diff/DiffTest.php
deleted file mode 100644
index da6d7d95446e..000000000000
--- a/tests/phpunit/includes/diff/DiffTest.php
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-
-/**
- * @author Addshore
- *
- * @group Diff
- */
-class DiffTest extends MediaWikiTestCase {
-
- /**
- * @covers Diff::getEdits
- */
- public function testGetEdits() {
- $obj = new Diff( [], [] );
- $obj->edits = 'FooBarBaz';
- $this->assertEquals( 'FooBarBaz', $obj->getEdits() );
- }
-
-}
diff --git a/tests/phpunit/includes/diff/DifferenceEngineSlotDiffRendererTest.php b/tests/phpunit/includes/diff/DifferenceEngineSlotDiffRendererTest.php
deleted file mode 100644
index fe129b751aec..000000000000
--- a/tests/phpunit/includes/diff/DifferenceEngineSlotDiffRendererTest.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-
-/**
- * @covers DifferenceEngineSlotDiffRenderer
- */
-class DifferenceEngineSlotDiffRendererTest extends \PHPUnit\Framework\TestCase {
-
- public function testGetDiff() {
- $differenceEngine = new CustomDifferenceEngine();
- $slotDiffRenderer = new DifferenceEngineSlotDiffRenderer( $differenceEngine );
- $oldContent = ContentHandler::makeContent( 'xxx', null, CONTENT_MODEL_TEXT );
- $newContent = ContentHandler::makeContent( 'yyy', null, CONTENT_MODEL_TEXT );
-
- $diff = $slotDiffRenderer->getDiff( $oldContent, $newContent );
- $this->assertEquals( 'xxx|yyy', $diff );
-
- $diff = $slotDiffRenderer->getDiff( null, $newContent );
- $this->assertEquals( '|yyy', $diff );
-
- $diff = $slotDiffRenderer->getDiff( $oldContent, null );
- $this->assertEquals( 'xxx|', $diff );
- }
-
- public function testAddModules() {
- $output = $this->getMockBuilder( OutputPage::class )
- ->disableOriginalConstructor()
- ->setMethods( [ 'addModules' ] )
- ->getMock();
- $output->expects( $this->once() )
- ->method( 'addModules' )
- ->with( 'foo' );
- $differenceEngine = new CustomDifferenceEngine();
- $slotDiffRenderer = new DifferenceEngineSlotDiffRenderer( $differenceEngine );
- $slotDiffRenderer->addModules( $output );
- }
-
- public function testGetExtraCacheKeys() {
- $differenceEngine = new CustomDifferenceEngine();
- $slotDiffRenderer = new DifferenceEngineSlotDiffRenderer( $differenceEngine );
- $extraCacheKeys = $slotDiffRenderer->getExtraCacheKeys();
- $this->assertSame( [ 'foo' ], $extraCacheKeys );
- }
-
-}
diff --git a/tests/phpunit/includes/diff/SlotDiffRendererTest.php b/tests/phpunit/includes/diff/SlotDiffRendererTest.php
deleted file mode 100644
index a03280ddb285..000000000000
--- a/tests/phpunit/includes/diff/SlotDiffRendererTest.php
+++ /dev/null
@@ -1,78 +0,0 @@
-<?php
-
-use Wikimedia\Assert\ParameterTypeException;
-use Wikimedia\TestingAccessWrapper;
-
-/**
- * @covers SlotDiffRenderer
- */
-class SlotDiffRendererTest extends \PHPUnit\Framework\TestCase {
-
- /**
- * @dataProvider provideNormalizeContents
- */
- public function testNormalizeContents(
- $oldContent, $newContent, $allowedClasses,
- $expectedOldContent, $expectedNewContent, $expectedExceptionClass
- ) {
- $slotDiffRenderer = $this->getMockBuilder( SlotDiffRenderer::class )
- ->getMock();
- try {
- // __call needs help deciding which parameter to take by reference
- call_user_func_array( [ TestingAccessWrapper::newFromObject( $slotDiffRenderer ),
- 'normalizeContents' ], [ &$oldContent, &$newContent, $allowedClasses ] );
- $this->assertEquals( $expectedOldContent, $oldContent );
- $this->assertEquals( $expectedNewContent, $newContent );
- } catch ( Exception $e ) {
- if ( !$expectedExceptionClass ) {
- throw $e;
- }
- $this->assertInstanceOf( $expectedExceptionClass, $e );
- }
- }
-
- public function provideNormalizeContents() {
- return [
- 'both null' => [ null, null, null, null, null, InvalidArgumentException::class ],
- 'left null' => [
- null, new WikitextContent( 'abc' ), null,
- new WikitextContent( '' ), new WikitextContent( 'abc' ), null,
- ],
- 'right null' => [
- new WikitextContent( 'def' ), null, null,
- new WikitextContent( 'def' ), new WikitextContent( '' ), null,
- ],
- 'type filter' => [
- new WikitextContent( 'abc' ), new WikitextContent( 'def' ), WikitextContent::class,
- new WikitextContent( 'abc' ), new WikitextContent( 'def' ), null,
- ],
- 'type filter (subclass)' => [
- new WikitextContent( 'abc' ), new WikitextContent( 'def' ), TextContent::class,
- new WikitextContent( 'abc' ), new WikitextContent( 'def' ), null,
- ],
- 'type filter (null)' => [
- new WikitextContent( 'abc' ), null, TextContent::class,
- new WikitextContent( 'abc' ), new WikitextContent( '' ), null,
- ],
- 'type filter failure (left)' => [
- new TextContent( 'abc' ), new WikitextContent( 'def' ), WikitextContent::class,
- null, null, ParameterTypeException::class,
- ],
- 'type filter failure (right)' => [
- new WikitextContent( 'abc' ), new TextContent( 'def' ), WikitextContent::class,
- null, null, ParameterTypeException::class,
- ],
- 'type filter (array syntax)' => [
- new WikitextContent( 'abc' ), new JsonContent( 'def' ),
- [ JsonContent::class, WikitextContent::class ],
- new WikitextContent( 'abc' ), new JsonContent( 'def' ), null,
- ],
- 'type filter failure (array syntax)' => [
- new WikitextContent( 'abc' ), new CssContent( 'def' ),
- [ JsonContent::class, WikitextContent::class ],
- null, null, ParameterTypeException::class,
- ],
- ];
- }
-
-}