X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=tests%2Fphpunit%2Fincludes%2FHooksTest.php;h=c66b712b83552c1a92e2dd70df7eec0a305c5ee7;hb=214b37ff07f3fde89430297b2a857750a56ae205;hp=87acb52e1a788945b6bc24c828d5bbe76c4a47c4;hpb=a8379682a46a428320c88702c800a6107c015137;p=lhc%2Fweb%2Fwiklou.git diff --git a/tests/phpunit/includes/HooksTest.php b/tests/phpunit/includes/HooksTest.php index 87acb52e1a..c66b712b83 100644 --- a/tests/phpunit/includes/HooksTest.php +++ b/tests/phpunit/includes/HooksTest.php @@ -33,6 +33,12 @@ class HooksTest extends MediaWikiTestCase { 'changed-static', 'original' ], + [ + 'Class::method static call as array', + [ [ 'NothingClass::someStatic' ] ], + 'changed-static', + 'original' + ], [ 'Global function', [ 'NothingFunction' ], 'changed-func', 'original' ], [ 'Global function with data', [ 'NothingFunctionData', 'data' ], 'data', 'original' ], [ 'Closure', [ function ( &$foo, $bar ) { @@ -50,39 +56,66 @@ class HooksTest extends MediaWikiTestCase { /** * @dataProvider provideHooks - * @covers ::wfRunHooks + * @covers Hooks::register + * @covers Hooks::run + * @covers Hooks::callHook */ - public function testOldStyleHooks( $msg, array $hook, $expectedFoo, $expectedBar ) { - global $wgHooks; + public function testNewStyleHooks( $msg, $hook, $expectedFoo, $expectedBar ) { $foo = $bar = 'original'; - $wgHooks['MediaWikiHooksTest001'][] = $hook; - wfRunHooks( 'MediaWikiHooksTest001', [ &$foo, &$bar ] ); + Hooks::register( 'MediaWikiHooksTest001', $hook ); + Hooks::run( 'MediaWikiHooksTest001', [ &$foo, &$bar ] ); $this->assertSame( $expectedFoo, $foo, $msg ); $this->assertSame( $expectedBar, $bar, $msg ); } /** - * @dataProvider provideHooks - * @covers Hooks::register - * @covers Hooks::run + * @covers Hooks::getHandlers */ - public function testNewStyleHooks( $msg, $hook, $expectedFoo, $expectedBar ) { - $foo = $bar = 'original'; + public function testGetHandlers() { + global $wgHooks; - Hooks::register( 'MediaWikiHooksTest001', $hook ); - Hooks::run( 'MediaWikiHooksTest001', [ &$foo, &$bar ] ); + $this->assertSame( + [], + Hooks::getHandlers( 'MediaWikiHooksTest001' ), + 'No hooks registered' + ); - $this->assertSame( $expectedFoo, $foo, $msg ); - $this->assertSame( $expectedBar, $bar, $msg ); + $a = new NothingClass(); + $b = new NothingClass(); + + $wgHooks['MediaWikiHooksTest001'][] = $a; + + $this->assertSame( + [ $a ], + Hooks::getHandlers( 'MediaWikiHooksTest001' ), + 'Hook registered by $wgHooks' + ); + + Hooks::register( 'MediaWikiHooksTest001', $b ); + $this->assertSame( + [ $b, $a ], + Hooks::getHandlers( 'MediaWikiHooksTest001' ), + 'Hooks::getHandlers() should return hooks registered via wgHooks as well as Hooks::register' + ); + + Hooks::clear( 'MediaWikiHooksTest001' ); + unset( $wgHooks['MediaWikiHooksTest001'] ); + + Hooks::register( 'MediaWikiHooksTest001', $b ); + $this->assertSame( + [ $b ], + Hooks::getHandlers( 'MediaWikiHooksTest001' ), + 'Hook registered by Hook::register' + ); } /** * @covers Hooks::isRegistered * @covers Hooks::register - * @covers Hooks::getHandlers * @covers Hooks::run + * @covers Hooks::callHook */ public function testNewStyleHookInteraction() { global $wgHooks; @@ -122,6 +155,7 @@ class HooksTest extends MediaWikiTestCase { /** * @expectedException MWException * @covers Hooks::run + * @covers Hooks::callHook */ public function testUncallableFunction() { Hooks::register( 'MediaWikiHooksTest001', 'ThisFunctionDoesntExist' ); @@ -130,6 +164,7 @@ class HooksTest extends MediaWikiTestCase { /** * @covers Hooks::run + * @covers Hooks::callHook */ public function testFalseReturn() { Hooks::register( 'MediaWikiHooksTest001', function ( &$foo ) { @@ -145,8 +180,59 @@ class HooksTest extends MediaWikiTestCase { $this->assertSame( 'original', $foo, 'Hooks abort after a false return.' ); } + /** + * @covers Hooks::run + */ + public function testNullReturn() { + Hooks::register( 'MediaWikiHooksTest001', function ( &$foo ) { + return; + } ); + Hooks::register( 'MediaWikiHooksTest001', function ( &$foo ) { + $foo = 'test'; + + return true; + } ); + $foo = 'original'; + Hooks::run( 'MediaWikiHooksTest001', [ &$foo ] ); + $this->assertSame( 'test', $foo, 'Hooks continue after a null return.' ); + } + + /** + * @covers Hooks::callHook + */ + public function testCallHook_FalseHook() { + Hooks::register( 'MediaWikiHooksTest001', false ); + Hooks::register( 'MediaWikiHooksTest001', function ( &$foo ) { + $foo = 'test'; + + return true; + } ); + $foo = 'original'; + Hooks::run( 'MediaWikiHooksTest001', [ &$foo ] ); + $this->assertSame( 'test', $foo, 'Hooks that are falsey are skipped.' ); + } + + /** + * @covers Hooks::callHook + * @expectedException MWException + */ + public function testCallHook_UnknownDatatype() { + Hooks::register( 'MediaWikiHooksTest001', 12345 ); + Hooks::run( 'MediaWikiHooksTest001' ); + } + + /** + * @covers Hooks::callHook + * @expectedException PHPUnit_Framework_Error_Deprecated + */ + public function testCallHook_Deprecated() { + Hooks::register( 'MediaWikiHooksTest001', 'NothingClass::someStatic' ); + Hooks::run( 'MediaWikiHooksTest001', [], '1.31' ); + } + /** * @covers Hooks::runWithoutAbort + * @covers Hooks::callHook */ public function testRunWithoutAbort() { $list = []; @@ -169,6 +255,7 @@ class HooksTest extends MediaWikiTestCase { /** * @covers Hooks::runWithoutAbort + * @covers Hooks::callHook */ public function testRunWithoutAbortWarning() { Hooks::register( 'MediaWikiHooksTest001', function ( &$foo ) {