2011-01-17 16:43:12 +00:00
< ? php
class HooksTest extends MediaWikiTestCase {
2011-03-27 01:27:02 +00:00
2011-01-17 16:43:12 +00:00
public function testOldStyleHooks () {
$foo = 'Foo' ;
$bar = 'Bar' ;
2011-03-27 01:27:02 +00:00
2011-01-17 16:43:12 +00:00
$i = new NothingClass ();
2011-03-27 01:27:02 +00:00
2011-01-17 16:43:12 +00:00
global $wgHooks ;
2011-03-27 01:27:02 +00:00
2011-01-17 16:43:12 +00:00
$wgHooks [ 'MediaWikiHooksTest001' ][] = array ( $i , 'someNonStatic' );
2011-03-27 01:27:02 +00:00
2011-01-17 16:43:12 +00:00
wfRunHooks ( 'MediaWikiHooksTest001' , array ( & $foo , & $bar ) );
2011-03-27 01:27:02 +00:00
2011-01-17 16:43:12 +00:00
$this -> assertEquals ( 'fOO' , $foo , 'Standard method' );
$foo = 'Foo' ;
2011-03-27 01:27:02 +00:00
2011-01-17 16:43:12 +00:00
$wgHooks [ 'MediaWikiHooksTest001' ][] = $i ;
2011-03-27 01:27:02 +00:00
2011-01-17 16:43:12 +00:00
wfRunHooks ( 'MediaWikiHooksTest001' , array ( & $foo , & $bar ) );
2011-03-27 01:27:02 +00:00
2011-01-17 16:43:12 +00:00
$this -> assertEquals ( 'foo' , $foo , 'onEventName style' );
$foo = 'Foo' ;
2011-03-27 01:27:02 +00:00
2011-01-17 16:43:12 +00:00
$wgHooks [ 'MediaWikiHooksTest001' ][] = array ( $i , 'someNonStaticWithData' , 'baz' );
2011-03-27 01:27:02 +00:00
2011-01-17 16:43:12 +00:00
wfRunHooks ( 'MediaWikiHooksTest001' , array ( & $foo , & $bar ) );
2011-03-27 01:27:02 +00:00
2011-01-17 16:43:12 +00:00
$this -> assertEquals ( 'baz' , $foo , 'Data included' );
$foo = 'Foo' ;
2011-03-27 01:27:02 +00:00
2011-01-17 16:43:12 +00:00
$wgHooks [ 'MediaWikiHooksTest001' ][] = array ( $i , 'someStatic' );
2011-03-27 01:27:02 +00:00
2011-01-17 16:43:12 +00:00
wfRunHooks ( 'MediaWikiHooksTest001' , array ( & $foo , & $bar ) );
2011-03-27 01:27:02 +00:00
2011-01-17 16:43:12 +00:00
$this -> assertEquals ( 'bah' , $foo , 'Standard static method' );
2011-03-27 01:27:02 +00:00
//$foo = 'Foo';
2011-01-17 16:43:12 +00:00
unset ( $wgHooks [ 'MediaWikiHooksTest001' ] );
2011-03-27 01:27:02 +00:00
2011-01-17 16:43:12 +00:00
}
2011-03-27 01:27:02 +00:00
2011-01-17 16:43:12 +00:00
public function testNewStyleHooks () {
$foo = 'Foo' ;
$bar = 'Bar' ;
2011-03-27 01:27:02 +00:00
2011-01-17 16:43:12 +00:00
$i = new NothingClass ();
2011-03-27 01:27:02 +00:00
2011-01-17 16:43:12 +00:00
Hooks :: register ( 'MediaWikiHooksTest001' , array ( $i , 'someNonStatic' ) );
2011-03-27 01:27:02 +00:00
2011-01-17 16:43:12 +00:00
Hooks :: run ( 'MediaWikiHooksTest001' , array ( & $foo , & $bar ) );
2011-03-27 01:27:02 +00:00
2011-01-17 16:43:12 +00:00
$this -> assertEquals ( 'fOO' , $foo , 'Standard method' );
$foo = 'Foo' ;
2011-03-27 01:27:02 +00:00
2011-01-17 16:43:12 +00:00
Hooks :: register ( 'MediaWikiHooksTest001' , $i );
2011-03-27 01:27:02 +00:00
2011-01-17 16:43:12 +00:00
Hooks :: run ( 'MediaWikiHooksTest001' , array ( & $foo , & $bar ) );
2011-03-27 01:27:02 +00:00
2011-01-17 16:43:12 +00:00
$this -> assertEquals ( 'foo' , $foo , 'onEventName style' );
$foo = 'Foo' ;
2011-03-27 01:27:02 +00:00
2011-01-17 16:43:12 +00:00
Hooks :: register ( 'MediaWikiHooksTest001' , array ( $i , 'someNonStaticWithData' , 'baz' ) );
2011-03-27 01:27:02 +00:00
2011-01-17 16:43:12 +00:00
Hooks :: run ( 'MediaWikiHooksTest001' , array ( & $foo , & $bar ) );
2011-03-27 01:27:02 +00:00
2011-01-17 16:43:12 +00:00
$this -> assertEquals ( 'baz' , $foo , 'Data included' );
$foo = 'Foo' ;
2011-03-27 01:27:02 +00:00
2011-01-17 16:43:12 +00:00
Hooks :: register ( 'MediaWikiHooksTest001' , array ( $i , 'someStatic' ) );
2011-03-27 01:27:02 +00:00
2011-01-17 16:43:12 +00:00
Hooks :: run ( 'MediaWikiHooksTest001' , array ( & $foo , & $bar ) );
2011-03-27 01:27:02 +00:00
2011-01-17 16:43:12 +00:00
$this -> assertEquals ( 'bah' , $foo , 'Standard static method' );
$foo = 'Foo' ;
2012-10-05 16:28:21 +00:00
Hooks :: clear ( 'MediaWikiHooksTest001' );
}
public function testNewStyleHookInteraction () {
global $wgHooks ;
$a = new NothingClass ();
$b = new NothingClass ();
// make sure to start with a clean slate
Hooks :: clear ( 'MediaWikiHooksTest001' );
unset ( $wgHooks [ 'MediaWikiHooksTest001' ] );
$wgHooks [ 'MediaWikiHooksTest001' ][] = $a ;
$this -> assertTrue ( Hooks :: isRegistered ( 'MediaWikiHooksTest001' ), 'Hook registered via $wgHooks should be noticed by Hooks::isRegistered' );
Hooks :: register ( 'MediaWikiHooksTest001' , $b );
$this -> assertEquals ( 2 , count ( Hooks :: getHandlers ( 'MediaWikiHooksTest001' ) ), 'Hooks::getHandlers() should return hooks registered via wgHooks as well as Hooks::register' );
$foo = 'quux' ;
$bar = 'qaax' ;
Hooks :: run ( 'MediaWikiHooksTest001' , array ( & $foo , & $bar ) );
$this -> assertEquals ( 1 , $a -> calls , 'Hooks::run() should run hooks registered via wgHooks as well as Hooks::register' );
$this -> assertEquals ( 1 , $b -> calls , 'Hooks::run() should run hooks registered via wgHooks as well as Hooks::register' );
// clean up
Hooks :: clear ( 'MediaWikiHooksTest001' );
unset ( $wgHooks [ 'MediaWikiHooksTest001' ] );
2011-01-17 16:43:12 +00:00
}
}
class NothingClass {
2012-10-05 16:28:21 +00:00
public $calls = 0 ;
2013-01-28 10:27:15 +00:00
public static function someStatic ( & $foo , & $bar ) {
2011-01-17 16:43:12 +00:00
$foo = 'bah' ;
return true ;
}
2011-03-27 01:27:02 +00:00
2011-01-17 16:43:12 +00:00
public function someNonStatic ( & $foo , & $bar ) {
2012-10-05 16:28:21 +00:00
$this -> calls ++ ;
2011-01-17 16:43:12 +00:00
$foo = 'fOO' ;
$bar = 'bAR' ;
return true ;
}
2011-03-27 01:27:02 +00:00
2011-01-17 16:43:12 +00:00
public function onMediaWikiHooksTest001 ( & $foo , & $bar ) {
2012-10-05 16:28:21 +00:00
$this -> calls ++ ;
2011-01-17 16:43:12 +00:00
$foo = 'foo' ;
return true ;
}
2011-03-27 01:27:02 +00:00
2011-01-17 16:43:12 +00:00
public function someNonStaticWithData ( $foo , & $bar ) {
2012-10-05 16:28:21 +00:00
$this -> calls ++ ;
2011-01-17 16:43:12 +00:00
$bar = $foo ;
return true ;
}
}