X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=tests%2Fphpunit%2FMediaWikiUnitTestCase.php;h=edd8195991ff3277a519cde92671b643152d4d54;hb=b5fc03a7bfe46f434e332613c477e0ce9fe50e09;hp=5f7746b3e631ac17001aa2340bd9681e55e374de;hpb=0ae01716c36bd03192a6dc79816beee8a0a74fa5;p=lhc%2Fweb%2Fwiklou.git diff --git a/tests/phpunit/MediaWikiUnitTestCase.php b/tests/phpunit/MediaWikiUnitTestCase.php index 5f7746b3e6..edd8195991 100644 --- a/tests/phpunit/MediaWikiUnitTestCase.php +++ b/tests/phpunit/MediaWikiUnitTestCase.php @@ -26,10 +26,13 @@ use PHPUnit\Framework\TestCase; * * Extend this class if you are testing classes which use dependency injection and do not access * global functions, variables, services or a storage backend. + * + * @since 1.34 */ abstract class MediaWikiUnitTestCase extends TestCase { use PHPUnit4And6Compat; use MediaWikiCoversValidator; + use MediaWikiTestCaseTrait; private $unitGlobals = []; @@ -38,7 +41,7 @@ abstract class MediaWikiUnitTestCase extends TestCase { $reflection = new ReflectionClass( $this ); $dirSeparator = DIRECTORY_SEPARATOR; if ( strpos( $reflection->getFilename(), "${dirSeparator}unit${dirSeparator}" ) === false ) { - $this->fail( 'This unit test needs to be in "tests/phpunit/unit" !' ); + $this->fail( 'This unit test needs to be in "tests/phpunit/unit"!' ); } $this->unitGlobals = $GLOBALS; unset( $GLOBALS ); @@ -54,4 +57,49 @@ abstract class MediaWikiUnitTestCase extends TestCase { $GLOBALS = $this->unitGlobals; parent::tearDown(); } + + /** + * Create a temporary hook handler which will be reset by tearDown. + * This replaces other handlers for the same hook. + * @param string $hookName Hook name + * @param mixed $handler Value suitable for a hook handler + * @since 1.34 + */ + protected function setTemporaryHook( $hookName, $handler ) { + // This will be reset by tearDown() when it restores globals. We don't want to use + // Hooks::register()/clear() because they won't replace other handlers for the same hook, + // which doesn't match behavior of MediaWikiIntegrationTestCase. + global $wgHooks; + $wgHooks[$hookName] = [ $handler ]; + } + + protected function getMockMessage( $text, ...$params ) { + if ( isset( $params[0] ) && is_array( $params[0] ) ) { + $params = $params[0]; + } + + $msg = $this->getMockBuilder( Message::class ) + ->disableOriginalConstructor() + ->setMethods( [] ) + ->getMock(); + + $msg->method( 'toString' )->willReturn( $text ); + $msg->method( '__toString' )->willReturn( $text ); + $msg->method( 'text' )->willReturn( $text ); + $msg->method( 'parse' )->willReturn( $text ); + $msg->method( 'plain' )->willReturn( $text ); + $msg->method( 'parseAsBlock' )->willReturn( $text ); + $msg->method( 'escaped' )->willReturn( $text ); + + $msg->method( 'title' )->willReturn( $msg ); + $msg->method( 'inLanguage' )->willReturn( $msg ); + $msg->method( 'inContentLanguage' )->willReturn( $msg ); + $msg->method( 'useDatabase' )->willReturn( $msg ); + $msg->method( 'setContext' )->willReturn( $msg ); + + $msg->method( 'exists' )->willReturn( true ); + $msg->method( 'content' )->willReturn( new MessageContent( $msg ) ); + + return $msg; + } }