'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 ) {
/**
* @dataProvider provideHooks
- * @covers ::wfRunHooks
+ * @covers Hooks::register
+ * @covers Hooks::run
+ * @covers Hooks::callHook
*/
- public function testOldStyleHooks( $msg, array $hook, $expectedFoo, $expectedBar ) {
- global $wgHooks;
-
- $this->hideDeprecated( 'wfRunHooks' );
+ 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;
/**
* @expectedException MWException
* @covers Hooks::run
+ * @covers Hooks::callHook
*/
public function testUncallableFunction() {
Hooks::register( 'MediaWikiHooksTest001', 'ThisFunctionDoesntExist' );
/**
* @covers Hooks::run
+ * @covers Hooks::callHook
*/
public function testFalseReturn() {
Hooks::register( 'MediaWikiHooksTest001', function ( &$foo ) {
$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 = [];
/**
* @covers Hooks::runWithoutAbort
+ * @covers Hooks::callHook
*/
public function testRunWithoutAbortWarning() {
Hooks::register( 'MediaWikiHooksTest001', function ( &$foo ) {