Move trivially compatible tests to the unit tests suite

This changeset resumes work on T89432 and related tickets
by porting an initial set of tests to the new unit test suite
separated out in I69b92db3e70093570e05cc0a64c7780a278b321a.
The tests were only ported if they worked immediately without
requiring any changes other than changing the test case class
to MediaWikiUnitTestCase and moving the test to the new suite.
If a test failed for any reason (even trivial misconfiguration),
it was NOT ported.

With this change, the unit tests suite now consits of a total
of 455 tests. As before, you can run these tests via the following
command:
$ composer phpunit:unit

Bug: T84948
Bug: T89432
Bug: T87781
Change-Id: Ibb8175981092d7f41864e641cc3c118af70a5c76
This commit is contained in:
Máté Szabó 2019-06-30 15:23:53 +02:00
parent e93b90e429
commit 344481f60d
55 changed files with 106 additions and 75 deletions

View file

@ -18,6 +18,9 @@ class TestSetup {
global $wgSessionProviders, $wgSessionPbkdf2Iterations;
global $wgJobTypeConf;
global $wgAuthManagerConfig;
global $wgShowExceptionDetails;
$wgShowExceptionDetails = true;
// wfWarn should cause tests to fail
$wgDevelopmentWarnings = true;

View file

@ -54,6 +54,7 @@ $wgAutoloadClasses += [
'HamcrestPHPUnitIntegration' => "$testDir/phpunit/HamcrestPHPUnitIntegration.php",
'LessFileCompilationTest' => "$testDir/phpunit/LessFileCompilationTest.php",
'MediaWikiCoversValidator' => "$testDir/phpunit/MediaWikiCoversValidator.php",
'MediaWikiGroupValidator' => "$testDir/phpunit/MediaWikiGroupValidator.php",
'MediaWikiLangTestCase' => "$testDir/phpunit/MediaWikiLangTestCase.php",
'MediaWikiLoggerPHPUnitTestListener' => "$testDir/phpunit/MediaWikiLoggerPHPUnitTestListener.php",
'MediaWikiPHPUnitCommand' => "$testDir/phpunit/MediaWikiPHPUnitCommand.php",

View file

@ -0,0 +1,38 @@
<?php
/**
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* http://www.gnu.org/copyleft/gpl.html
*
* @file
* @ingroup Testing
*/
/**
* Trait that provides methods to check if group annotations are valid.
*/
trait MediaWikiGroupValidator {
/**
* @return bool
* @throws ReflectionException
* @since 1.34
*/
public function isTestInDatabaseGroup() {
// If the test class says it belongs to the Database group, it needs the database.
// NOTE: This ONLY checks for the group in the class level doc comment.
$rc = new ReflectionClass( $this );
return (bool)preg_match( '/@group +Database/im', $rc->getDocComment() );
}
}

View file

@ -24,6 +24,7 @@ abstract class MediaWikiIntegrationTestCase extends PHPUnit\Framework\TestCase {
use MediaWikiCoversValidator;
use PHPUnit4And6Compat;
use MediaWikiGroupValidator;
/**
* The original service locator. This is overridden during setUp().
@ -1319,17 +1320,6 @@ abstract class MediaWikiIntegrationTestCase extends PHPUnit\Framework\TestCase {
return $this->tablesUsed || $this->isTestInDatabaseGroup();
}
/**
* @return bool
* @since 1.32
*/
protected function isTestInDatabaseGroup() {
// If the test class says it belongs to the Database group, it needs the database.
// NOTE: This ONLY checks for the group in the class level doc comment.
$rc = new ReflectionClass( $this );
return (bool)preg_match( '/@group +Database/im', $rc->getDocComment() );
}
/**
* Insert a new page.
*

View file

@ -30,4 +30,17 @@ use PHPUnit\Framework\TestCase;
abstract class MediaWikiUnitTestCase extends TestCase {
use PHPUnit4And6Compat;
use MediaWikiCoversValidator;
use MediaWikiGroupValidator;
/**
* @throws ReflectionException
*/
protected function setUp() {
parent::setUp();
if ( $this->isTestInDatabaseGroup() ) {
throw new \Exception( get_class( $this ) .
' extends MediaWikiUnitTestCase, and may not have the @group Database annotation.' );
}
}
}

View file

@ -65,3 +65,4 @@ require_once "$IP/tests/common/TestSetup.php";
wfRequireOnceInGlobalScope( "$IP/includes/AutoLoader.php" );
wfRequireOnceInGlobalScope( "$IP/tests/common/TestsAutoLoader.php" );
wfRequireOnceInGlobalScope( "$IP/includes/Defines.php" );

View file

@ -11,7 +11,7 @@
*
* @author Katie Filbert < aude.wiki@gmail.com >
*/
class SpecialPageAliasTest extends MediaWikiTestCase {
class SpecialPageAliasTest extends \MediaWikiUnitTestCase {
/**
* @coversNothing

View file

@ -20,7 +20,7 @@
* @file
*/
class FauxResponseTest extends MediaWikiTestCase {
class FauxResponseTest extends \MediaWikiUnitTestCase {
/** @var FauxResponse */
protected $response;

View file

@ -10,7 +10,7 @@ use Wikimedia\TestingAccessWrapper;
*
* @author Antoine Musso
*/
class FormOptionsInitializationTest extends MediaWikiTestCase {
class FormOptionsInitializationTest extends \MediaWikiUnitTestCase {
/**
* @var FormOptions
*/

View file

@ -15,7 +15,7 @@
*
* @author Antoine Musso
*/
class FormOptionsTest extends MediaWikiTestCase {
class FormOptionsTest extends \MediaWikiUnitTestCase {
/**
* @var FormOptions
*/

View file

@ -3,7 +3,7 @@
/**
* @covers Licenses
*/
class LicensesTest extends MediaWikiTestCase {
class LicensesTest extends \MediaWikiUnitTestCase {
public function testLicenses() {
$str = "

View file

@ -2,13 +2,12 @@
namespace MediaWiki\Tests\Rest;
use MediaWikiTestCase;
use MediaWiki\Rest\HeaderContainer;
/**
* @covers \MediaWiki\Rest\HeaderContainer
*/
class HeaderContainerTest extends MediaWikiTestCase {
class HeaderContainerTest extends \MediaWikiUnitTestCase {
public static function provideSetHeader() {
return [
'simple' => [

View file

@ -4,13 +4,12 @@ namespace MediaWiki\Tests\Rest\PathTemplateMatcher;
use MediaWiki\Rest\PathTemplateMatcher\PathConflict;
use MediaWiki\Rest\PathTemplateMatcher\PathMatcher;
use MediaWikiTestCase;
/**
* @covers \MediaWiki\Rest\PathTemplateMatcher\PathMatcher
* @covers \MediaWiki\Rest\PathTemplateMatcher\PathConflict
*/
class PathMatcherTest extends MediaWikiTestCase {
class PathMatcherTest extends \MediaWikiUnitTestCase {
private static $normalRoutes = [
'/a/b',
'/b/{x}',

View file

@ -3,10 +3,9 @@
namespace MediaWiki\Tests\Rest;
use MediaWiki\Rest\StringStream;
use MediaWikiTestCase;
/** @covers \MediaWiki\Rest\StringStream */
class StringStreamTest extends MediaWikiTestCase {
class StringStreamTest extends \MediaWikiUnitTestCase {
public static function provideSeekGetContents() {
return [
[ 'abcde', 0, SEEK_SET, 'abcde' ],

View file

@ -3,13 +3,12 @@
namespace MediaWiki\Tests\Revision;
use MediaWiki\Revision\FallbackSlotRoleHandler;
use MediaWikiTestCase;
use Title;
/**
* @covers \MediaWiki\Revision\FallbackSlotRoleHandler
*/
class FallbackSlotRoleHandlerTest extends MediaWikiTestCase {
class FallbackSlotRoleHandlerTest extends \MediaWikiUnitTestCase {
/**
* @return Title

View file

@ -3,13 +3,12 @@
namespace MediaWiki\Tests\Revision;
use MediaWiki\Revision\SlotRoleHandler;
use MediaWikiTestCase;
use Title;
/**
* @covers \MediaWiki\Revision\SlotRoleHandler
*/
class SlotRoleHandlerTest extends MediaWikiTestCase {
class SlotRoleHandlerTest extends \MediaWikiUnitTestCase {
/**
* @return Title

View file

@ -3,7 +3,7 @@
/**
* @coversNothing
*/
class ServiceWiringTest extends MediaWikiTestCase {
class ServiceWiringTest extends \MediaWikiUnitTestCase {
public function testServicesAreSorted() {
global $IP;
$services = array_keys( require "$IP/includes/ServiceWiring.php" );

View file

@ -1,6 +1,6 @@
<?php
class SiteConfigurationTest extends MediaWikiTestCase {
class SiteConfigurationTest extends \MediaWikiUnitTestCase {
/**
* @var SiteConfiguration

View file

@ -3,12 +3,11 @@
namespace MediaWiki\Edit;
use ParserOutput;
use MediaWikiTestCase;
/**
* @covers \MediaWiki\Edit\PreparedEdit
*/
class PreparedEditTest extends MediaWikiTestCase {
class PreparedEditTest extends \MediaWikiUnitTestCase {
function testCallback() {
$output = new ParserOutput();
$edit = new PreparedEdit();

View file

@ -3,7 +3,7 @@
/**
* @group Xml
*/
class XmlSelectTest extends MediaWikiTestCase {
class XmlSelectTest extends \MediaWikiUnitTestCase {
/**
* @var XmlSelect

View file

@ -6,7 +6,7 @@ namespace MediaWiki\Auth;
* @group AuthManager
* @covers \MediaWiki\Auth\AuthenticationResponse
*/
class AuthenticationResponseTest extends \MediaWikiTestCase {
class AuthenticationResponseTest extends \MediaWikiUnitTestCase {
/**
* @dataProvider provideConstructors
* @param string $constructor

View file

@ -3,7 +3,7 @@
/**
* @covers ChangesListFilterGroup
*/
class ChangesListFilterGroupTest extends MediaWikiTestCase {
class ChangesListFilterGroupTest extends \MediaWikiUnitTestCase {
/**
* phpcs:disable Generic.Files.LineLength
* @expectedException MWException

View file

@ -1,6 +1,6 @@
<?php
class HashConfigTest extends MediaWikiTestCase {
class HashConfigTest extends \MediaWikiUnitTestCase {
/**
* @covers HashConfig::newInstance

View file

@ -1,6 +1,6 @@
<?php
class MultiConfigTest extends MediaWikiTestCase {
class MultiConfigTest extends \MediaWikiUnitTestCase {
/**
* Tests that settings are fetched in the right order

View file

@ -5,7 +5,7 @@ use MediaWiki\Config\ServiceOptions;
/**
* @coversDefaultClass \MediaWiki\Config\ServiceOptions
*/
class ServiceOptionsTest extends MediaWikiTestCase {
class ServiceOptionsTest extends \MediaWikiUnitTestCase {
public static $testObj;
public static function setUpBeforeClass() {

View file

@ -1,6 +1,6 @@
<?php
class JsonContentHandlerTest extends MediaWikiTestCase {
class JsonContentHandlerTest extends \MediaWikiUnitTestCase {
/**
* @covers JsonContentHandler::makeEmptyContent

View file

@ -20,10 +20,9 @@
namespace MediaWiki\Logger;
use MediaWikiTestCase;
use Wikimedia\TestingAccessWrapper;
class MonologSpiTest extends MediaWikiTestCase {
class MonologSpiTest extends \MediaWikiUnitTestCase {
/**
* @covers MediaWiki\Logger\MonologSpi::mergeConfig

View file

@ -20,13 +20,12 @@
namespace MediaWiki\Logger\Monolog;
use MediaWikiTestCase;
use PHPUnit_Framework_Error_Notice;
/**
* @covers \MediaWiki\Logger\Monolog\AvroFormatter
*/
class AvroFormatterTest extends MediaWikiTestCase {
class AvroFormatterTest extends \MediaWikiUnitTestCase {
protected function setUp() {
if ( !class_exists( 'AvroStringIO' ) ) {

View file

@ -20,14 +20,13 @@
namespace MediaWiki\Logger\Monolog;
use MediaWikiTestCase;
use Monolog\Logger;
use Wikimedia\TestingAccessWrapper;
/**
* @covers \MediaWiki\Logger\Monolog\KafkaHandler
*/
class KafkaHandlerTest extends MediaWikiTestCase {
class KafkaHandlerTest extends \MediaWikiUnitTestCase {
protected function setUp() {
if ( !class_exists( 'Monolog\Handler\AbstractProcessingHandler' )

View file

@ -24,10 +24,9 @@ use AssertionError;
use InvalidArgumentException;
use LengthException;
use LogicException;
use MediaWikiTestCase;
use Wikimedia\TestingAccessWrapper;
class LineFormatterTest extends MediaWikiTestCase {
class LineFormatterTest extends \MediaWikiUnitTestCase {
protected function setUp() {
if ( !class_exists( 'Monolog\Formatter\LineFormatter' ) ) {

View file

@ -5,7 +5,7 @@
*
* @group Diff
*/
class ArrayDiffFormatterTest extends MediaWikiTestCase {
class ArrayDiffFormatterTest extends \MediaWikiUnitTestCase {
/**
* @param Diff $input

View file

@ -4,7 +4,7 @@
*
* @group Diff
*/
class DiffOpTest extends MediaWikiTestCase {
class DiffOpTest extends \MediaWikiUnitTestCase {
/**
* @covers DiffOp::getType

View file

@ -5,7 +5,7 @@
*
* @group Diff
*/
class DiffTest extends MediaWikiTestCase {
class DiffTest extends \MediaWikiUnitTestCase {
/**
* @covers Diff::getEdits

View file

@ -6,7 +6,7 @@
* @file
*/
class MWExceptionHandlerTest extends MediaWikiTestCase {
class MWExceptionHandlerTest extends \MediaWikiUnitTestCase {
/**
* @covers MWExceptionHandler::getRedactedTrace

View file

@ -1,6 +1,6 @@
<?php
class InstallDocFormatterTest extends MediaWikiTestCase {
class InstallDocFormatterTest extends \MediaWikiUnitTestCase {
/**
* @covers InstallDocFormatter
* @dataProvider provideDocFormattingTests

View file

@ -1,10 +1,9 @@
<?php
/**
* @group Database
* @group Installer
*/
class OracleInstallerTest extends MediaWikiTestCase {
class OracleInstallerTest extends \MediaWikiUnitTestCase {
/**
* @dataProvider provideOracleConnectStrings

View file

@ -8,7 +8,7 @@ use MediaWiki\Interwiki\InterwikiLookupAdapter;
* @group MediaWiki
* @group Interwiki
*/
class InterwikiLookupAdapterTest extends MediaWikiTestCase {
class InterwikiLookupAdapterTest extends \MediaWikiUnitTestCase {
/**
* @var InterwikiLookupAdapter

View file

@ -1,6 +1,6 @@
<?php
class ReplicatedBagOStuffTest extends MediaWikiTestCase {
class ReplicatedBagOStuffTest extends \MediaWikiUnitTestCase {
/** @var HashBagOStuff */
private $writeCache;
/** @var HashBagOStuff */

View file

@ -3,7 +3,7 @@
/**
* @group Media
*/
class IPTCTest extends MediaWikiTestCase {
class IPTCTest extends \MediaWikiUnitTestCase {
/**
* @covers IPTC::getCharset

View file

@ -3,7 +3,7 @@
/**
* @group Media
*/
class MediaHandlerTest extends MediaWikiTestCase {
class MediaHandlerTest extends \MediaWikiUnitTestCase {
/**
* @covers MediaHandler::fitBoxWidth

View file

@ -2,7 +2,7 @@
/**
* @group BagOStuff
*/
class MemcachedBagOStuffTest extends MediaWikiTestCase {
class MemcachedBagOStuffTest extends \MediaWikiUnitTestCase {
/** @var MemcachedBagOStuff */
private $cache;

View file

@ -4,7 +4,7 @@
*
* @covers RESTBagOStuff
*/
class RESTBagOStuffTest extends MediaWikiTestCase {
class RESTBagOStuffTest extends \MediaWikiUnitTestCase {
/**
* @var MultiHttpClient

View file

@ -4,7 +4,7 @@
* @group Parser
* @covers MWTidy
*/
class TidyTest extends MediaWikiTestCase {
class TidyTest extends \MediaWikiUnitTestCase {
protected function setUp() {
parent::setUp();

View file

@ -23,7 +23,7 @@
/**
* @covers InvalidPassword
*/
class PasswordTest extends MediaWikiTestCase {
class PasswordTest extends \MediaWikiUnitTestCase {
public function testInvalidPlaintext() {
$passwordFactory = new PasswordFactory();
$invalid = $passwordFactory->newFromPlaintext( null );

View file

@ -25,7 +25,7 @@ use MediaWiki\Preferences\TimezoneFilter;
/**
* @group Preferences
*/
class FiltersTest extends MediaWikiTestCase {
class FiltersTest extends \MediaWikiUnitTestCase {
/**
* @covers MediaWiki\Preferences\IntvalFilter::filterFromForm()
* @covers MediaWiki\Preferences\IntvalFilter::filterForForm()

View file

@ -5,7 +5,7 @@ use Wikimedia\TestingAccessWrapper;
/**
* @covers ExtensionProcessor
*/
class ExtensionProcessorTest extends MediaWikiTestCase {
class ExtensionProcessorTest extends \MediaWikiUnitTestCase {
private $dir, $dirname;

View file

@ -4,7 +4,7 @@
* @group Search
* @covers SearchIndexFieldDefinition
*/
class SearchIndexFieldTest extends MediaWikiTestCase {
class SearchIndexFieldTest extends \MediaWikiUnitTestCase {
public function getMergeCases() {
return [

View file

@ -2,13 +2,11 @@
namespace MediaWiki\Session;
use MediaWikiTestCase;
/**
* @group Session
* @covers MediaWiki\Session\MetadataMergeException
*/
class MetadataMergeExceptionTest extends MediaWikiTestCase {
class MetadataMergeExceptionTest extends \MediaWikiUnitTestCase {
public function testBasics() {
$data = [ 'foo' => 'bar' ];

View file

@ -2,13 +2,11 @@
namespace MediaWiki\Session;
use MediaWikiTestCase;
/**
* @group Session
* @covers MediaWiki\Session\SessionId
*/
class SessionIdTest extends MediaWikiTestCase {
class SessionIdTest extends \MediaWikiUnitTestCase {
public function testEverything() {
$id = new SessionId( 'foo' );

View file

@ -1,6 +1,6 @@
<?php
class SkinFactoryTest extends MediaWikiTestCase {
class SkinFactoryTest extends \MediaWikiUnitTestCase {
/**
* @covers SkinFactory::register

View file

@ -24,7 +24,7 @@
*
* @group Title
*/
class ForeignTitleTest extends MediaWikiTestCase {
class ForeignTitleTest extends \MediaWikiUnitTestCase {
public function basicProvider() {
return [

View file

@ -24,7 +24,7 @@
*
* @group Title
*/
class NamespaceAwareForeignTitleFactoryTest extends MediaWikiTestCase {
class NamespaceAwareForeignTitleFactoryTest extends \MediaWikiUnitTestCase {
public function basicProvider() {
return [

View file

@ -24,7 +24,7 @@
*
* @group Title
*/
class TitleValueTest extends MediaWikiTestCase {
class TitleValueTest extends \MediaWikiUnitTestCase {
public function goodConstructorProvider() {
return [

View file

@ -4,7 +4,7 @@
* @author Addshore
* @covers UserArrayFromResult
*/
class UserArrayFromResultTest extends MediaWikiTestCase {
class UserArrayFromResultTest extends \MediaWikiUnitTestCase {
private function getMockResultWrapper( $row = null, $numRows = 1 ) {
$resultWrapper = $this->getMockBuilder( Wikimedia\Rdbms\ResultWrapper::class )

View file

@ -7,7 +7,7 @@ use MediaWiki\User\UserIdentityValue;
*
* @covers NoWriteWatchedItemStore
*/
class NoWriteWatchedItemStoreUnitTest extends MediaWikiTestCase {
class NoWriteWatchedItemStoreUnitTest extends \MediaWikiUnitTestCase {
public function testAddWatch() {
/** @var WatchedItemStoreInterface|PHPUnit_Framework_MockObject_MockObject $innerService */