From 6b2f14e15d1c9a7766b6f0490639a388862adc45 Mon Sep 17 00:00:00 2001 From: Matthew Flaschen Date: Wed, 15 Mar 2017 20:15:16 -0400 Subject: [PATCH] RCFilters: Test abstract class func directly, not in subclass tests Change-Id: I8f526975bbf0a5392b69d239bc9db9771c99cdd9 --- tests/common/TestsAutoLoader.php | 2 + .../ChangesListBooleanFilterGroupTest.php | 27 ------- .../changes/ChangesListBooleanFilterTest.php | 52 ------------- .../changes/ChangesListFilterGroupTest.php | 37 +++++++++ .../changes/ChangesListFilterTest.php | 77 +++++++++++++++++++ tests/phpunit/mocks/MockChangesListFilter.php | 11 +++ .../mocks/MockChangesListFilterGroup.php | 19 +++++ 7 files changed, 146 insertions(+), 79 deletions(-) create mode 100644 tests/phpunit/includes/changes/ChangesListFilterGroupTest.php create mode 100644 tests/phpunit/includes/changes/ChangesListFilterTest.php create mode 100644 tests/phpunit/mocks/MockChangesListFilter.php create mode 100644 tests/phpunit/mocks/MockChangesListFilterGroup.php diff --git a/tests/common/TestsAutoLoader.php b/tests/common/TestsAutoLoader.php index ebd3c53f99..2a4c43fffb 100644 --- a/tests/common/TestsAutoLoader.php +++ b/tests/common/TestsAutoLoader.php @@ -160,6 +160,8 @@ $wgAutoloadClasses += [ 'MockDjVuHandler' => "$testDir/phpunit/mocks/media/MockDjVuHandler.php", 'MockOggHandler' => "$testDir/phpunit/mocks/media/MockOggHandler.php", 'MockMediaHandlerFactory' => "$testDir/phpunit/mocks/media/MockMediaHandlerFactory.php", + 'MockChangesListFilter' => "$testDir/phpunit/mocks/MockChangesListFilter.php", + 'MockChangesListFilterGroup' => "$testDir/phpunit/mocks/MockChangesListFilterGroup.php", 'MockWebRequest' => "$testDir/phpunit/mocks/MockWebRequest.php", 'MediaWiki\\Session\\DummySessionBackend' => "$testDir/phpunit/mocks/session/DummySessionBackend.php", diff --git a/tests/phpunit/includes/changes/ChangesListBooleanFilterGroupTest.php b/tests/phpunit/includes/changes/ChangesListBooleanFilterGroupTest.php index 0db3a49693..d98311f1b6 100644 --- a/tests/phpunit/includes/changes/ChangesListBooleanFilterGroupTest.php +++ b/tests/phpunit/includes/changes/ChangesListBooleanFilterGroupTest.php @@ -19,33 +19,6 @@ class ChangesListBooleanFilterGroupTest extends MediaWikiTestCase { ); } - public function testAutoPriorities() { - $group = new ChangesListBooleanFilterGroup( [ - 'name' => 'groupName', - 'priority' => 1, - 'filters' => [ - [ 'name' => 'hidefoo', 'default' => false, ], - [ 'name' => 'hidebar', 'default' => false, ], - [ 'name' => 'hidebaz', 'default' => false, ], - ], - ] ); - - $filters = $group->getFilters(); - $this->assertEquals( - [ - -2, - -3, - -4, - ], - array_map( - function ( $f ) { - return $f->getPriority(); - }, - array_values( $filters ) - ) - ); - } - public function testGetJsData() { $definition = [ 'name' => 'some-group', diff --git a/tests/phpunit/includes/changes/ChangesListBooleanFilterTest.php b/tests/phpunit/includes/changes/ChangesListBooleanFilterTest.php index c715988eea..2c0c22d7b5 100644 --- a/tests/phpunit/includes/changes/ChangesListBooleanFilterTest.php +++ b/tests/phpunit/includes/changes/ChangesListBooleanFilterTest.php @@ -107,58 +107,6 @@ class ChangesListBooleanFilterTest extends MediaWikiTestCase { ); } - /** - * @expectedException MWException - * @expectedExceptionMessage Supersets can only be defined for filters in the same group - */ - public function testSetAsSupersetOf() { - $groupA = new ChangesListBooleanFilterGroup( [ - 'name' => 'groupA', - 'priority' => 2, - 'filters' => [ - [ - 'name' => 'foo', - 'default' => false, - ], - [ - 'name' => 'bar', - 'default' => false, - ] - ], - ] ); - - $groupB = new ChangesListBooleanFilterGroup( [ - 'name' => 'groupB', - 'priority' => 3, - 'filters' => [ - [ - 'name' => 'baz', - 'default' => true, - ], - ], - ] ); - - $foo = TestingAccessWrapper::newFromObject( $groupA->getFilter( 'foo' ) ); - - $bar = $groupA->getFilter( 'bar' ); - - $baz = $groupB->getFilter( 'baz' ); - - $foo->setAsSupersetOf( $bar ); - $this->assertArrayEquals( [ - [ - 'group' => 'groupA', - 'filter' => 'bar', - ], - ], - $foo->subsetFilters, - /** ordered= */ false, - /** named= */ true - ); - - $foo->setAsSupersetOf( $baz, 'some-message' ); - } - public function testIsFeatureAvailableOnStructuredUi() { $specialPage = $this->getMockBuilder( 'ChangesListSpecialPage' ) ->setConstructorArgs( [ diff --git a/tests/phpunit/includes/changes/ChangesListFilterGroupTest.php b/tests/phpunit/includes/changes/ChangesListFilterGroupTest.php new file mode 100644 index 0000000000..718d4b31ca --- /dev/null +++ b/tests/phpunit/includes/changes/ChangesListFilterGroupTest.php @@ -0,0 +1,37 @@ + 'some_type', + 'name' => 'groupName', + 'isFullCoverage' => true, + 'priority' => 1, + 'filters' => [ + [ 'name' => 'hidefoo' ], + [ 'name' => 'hidebar' ], + [ 'name' => 'hidebaz' ], + ], + ] + ); + + $filters = $group->getFilters(); + $this->assertEquals( + [ + -2, + -3, + -4, + ], + array_map( + function ( $f ) { + return $f->getPriority(); + }, + array_values( $filters ) + ) + ); + } +} diff --git a/tests/phpunit/includes/changes/ChangesListFilterTest.php b/tests/phpunit/includes/changes/ChangesListFilterTest.php new file mode 100644 index 0000000000..b63482fc7a --- /dev/null +++ b/tests/phpunit/includes/changes/ChangesListFilterTest.php @@ -0,0 +1,77 @@ +group = $this->getGroup( [ 'name' => 'group' ] ); + + parent::setUp(); + } + + protected function getGroup( $groupDefinition ) { + return new MockChangesListFilterGroup( + $groupDefinition + [ + 'isFullCoverage' => true, + 'type' => 'some_type', + 'name' => 'group', + 'filters' => [], + ] + ); + + } + + /** + * @expectedException MWException + * @expectedExceptionMessage Supersets can only be defined for filters in the same group + */ + public function testSetAsSupersetOf() { + $groupA = $this->getGroup( + [ + 'name' => 'groupA', + 'filters' => [ + [ + 'name' => 'foo', + ], + [ + 'name' => 'bar', + ] + ], + ] + ); + + $groupB = $this->getGroup( + [ + 'name' => 'groupB', + 'filters' => [ + [ + 'name' => 'baz', + ], + ], + ] + ); + + $foo = TestingAccessWrapper::newFromObject( $groupA->getFilter( 'foo' ) ); + + $bar = $groupA->getFilter( 'bar' ); + + $baz = $groupB->getFilter( 'baz' ); + + $foo->setAsSupersetOf( $bar ); + $this->assertArrayEquals( [ + [ + 'group' => 'groupA', + 'filter' => 'bar', + ], + ], + $foo->subsetFilters, + /** ordered= */ false, + /** named= */ true + ); + + $foo->setAsSupersetOf( $baz ); + } +} diff --git a/tests/phpunit/mocks/MockChangesListFilter.php b/tests/phpunit/mocks/MockChangesListFilter.php new file mode 100644 index 0000000000..cbf306ed57 --- /dev/null +++ b/tests/phpunit/mocks/MockChangesListFilter.php @@ -0,0 +1,11 @@ +filters[$filter->getName()] = $filter; + } + + public function isPerGroupRequestParameter() { + throw new MWException( + 'Not implemented: If the test relies on this, put it one of the ' . + 'subclasses\' tests (e.g. ChangesListBooleanFilterGroupTest) ' . + 'instead of testing the abstract class' + ); + } +} -- 2.20.1