Complete test coverage of Hooks class
Change-Id: I9e720c44e6d6c9c5d726a8a147e07ee9b638913f
This commit is contained in:
parent
51d4dd5bfa
commit
cac3ce5668
2 changed files with 98 additions and 1 deletions
|
|
@ -62,6 +62,7 @@ class Hooks {
|
||||||
*
|
*
|
||||||
* @since 1.21
|
* @since 1.21
|
||||||
* @throws MWException If not in testing mode.
|
* @throws MWException If not in testing mode.
|
||||||
|
* @codeCoverageIgnore
|
||||||
*/
|
*/
|
||||||
public static function clear( $name ) {
|
public static function clear( $name ) {
|
||||||
if ( !defined( 'MW_PHPUNIT_TEST' ) && !defined( 'MW_PARSER_TEST' ) ) {
|
if ( !defined( 'MW_PHPUNIT_TEST' ) && !defined( 'MW_PARSER_TEST' ) ) {
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,12 @@ class HooksTest extends MediaWikiTestCase {
|
||||||
'changed-static',
|
'changed-static',
|
||||||
'original'
|
'original'
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
'Class::method static call as array',
|
||||||
|
[ [ 'NothingClass::someStatic' ] ],
|
||||||
|
'changed-static',
|
||||||
|
'original'
|
||||||
|
],
|
||||||
[ 'Global function', [ 'NothingFunction' ], 'changed-func', 'original' ],
|
[ 'Global function', [ 'NothingFunction' ], 'changed-func', 'original' ],
|
||||||
[ 'Global function with data', [ 'NothingFunctionData', 'data' ], 'data', 'original' ],
|
[ 'Global function with data', [ 'NothingFunctionData', 'data' ], 'data', 'original' ],
|
||||||
[ 'Closure', [ function ( &$foo, $bar ) {
|
[ 'Closure', [ function ( &$foo, $bar ) {
|
||||||
|
|
@ -81,10 +87,50 @@ class HooksTest extends MediaWikiTestCase {
|
||||||
$this->assertSame( $expectedBar, $bar, $msg );
|
$this->assertSame( $expectedBar, $bar, $msg );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers Hooks::getHandlers
|
||||||
|
*/
|
||||||
|
public function testGetHandlers() {
|
||||||
|
global $wgHooks;
|
||||||
|
|
||||||
|
$this->assertSame(
|
||||||
|
[],
|
||||||
|
Hooks::getHandlers( 'MediaWikiHooksTest001' ),
|
||||||
|
'No hooks registered'
|
||||||
|
);
|
||||||
|
|
||||||
|
$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::isRegistered
|
||||||
* @covers Hooks::register
|
* @covers Hooks::register
|
||||||
* @covers Hooks::getHandlers
|
|
||||||
* @covers Hooks::run
|
* @covers Hooks::run
|
||||||
* @covers Hooks::callHook
|
* @covers Hooks::callHook
|
||||||
*/
|
*/
|
||||||
|
|
@ -151,6 +197,56 @@ class HooksTest extends MediaWikiTestCase {
|
||||||
$this->assertSame( 'original', $foo, 'Hooks abort after a false return.' );
|
$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::runWithoutAbort
|
||||||
* @covers Hooks::callHook
|
* @covers Hooks::callHook
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue