MediaWiki  REL1_21
HooksTest.php
Go to the documentation of this file.
00001 <?php
00002 
00003 class HooksTest extends MediaWikiTestCase {
00004 
00005         public function testOldStyleHooks() {
00006                 $foo = 'Foo';
00007                 $bar = 'Bar';
00008 
00009                 $i = new NothingClass();
00010 
00011                 global $wgHooks;
00012 
00013                 $wgHooks['MediaWikiHooksTest001'][] = array( $i, 'someNonStatic' );
00014 
00015                 wfRunHooks( 'MediaWikiHooksTest001', array( &$foo, &$bar ) );
00016 
00017                 $this->assertEquals( 'fOO', $foo, 'Standard method' );
00018                 $foo = 'Foo';
00019 
00020                 $wgHooks['MediaWikiHooksTest001'][] = $i;
00021 
00022                 wfRunHooks( 'MediaWikiHooksTest001', array( &$foo, &$bar ) );
00023 
00024                 $this->assertEquals( 'foo', $foo, 'onEventName style' );
00025                 $foo = 'Foo';
00026 
00027                 $wgHooks['MediaWikiHooksTest001'][] = array( $i, 'someNonStaticWithData', 'baz' );
00028 
00029                 wfRunHooks( 'MediaWikiHooksTest001', array( &$foo, &$bar ) );
00030 
00031                 $this->assertEquals( 'baz', $foo, 'Data included' );
00032                 $foo = 'Foo';
00033 
00034                 $wgHooks['MediaWikiHooksTest001'][] = array( $i, 'someStatic' );
00035 
00036                 wfRunHooks( 'MediaWikiHooksTest001', array( &$foo, &$bar ) );
00037 
00038                 $this->assertEquals( 'bah', $foo, 'Standard static method' );
00039                 //$foo = 'Foo';
00040 
00041                 unset( $wgHooks['MediaWikiHooksTest001'] );
00042 
00043         }
00044 
00045         public function testNewStyleHooks() {
00046                 $foo = 'Foo';
00047                 $bar = 'Bar';
00048 
00049                 $i = new NothingClass();
00050 
00051                 Hooks::register( 'MediaWikiHooksTest001', array( $i, 'someNonStatic' ) );
00052 
00053                 Hooks::run( 'MediaWikiHooksTest001', array( &$foo, &$bar ) );
00054 
00055                 $this->assertEquals( 'fOO', $foo, 'Standard method' );
00056                 $foo = 'Foo';
00057 
00058                 Hooks::register( 'MediaWikiHooksTest001', $i );
00059 
00060                 Hooks::run( 'MediaWikiHooksTest001', array( &$foo, &$bar ) );
00061 
00062                 $this->assertEquals( 'foo', $foo, 'onEventName style' );
00063                 $foo = 'Foo';
00064 
00065                 Hooks::register( 'MediaWikiHooksTest001', array( $i, 'someNonStaticWithData', 'baz' ) );
00066 
00067                 Hooks::run( 'MediaWikiHooksTest001', array( &$foo, &$bar ) );
00068 
00069                 $this->assertEquals( 'baz', $foo, 'Data included' );
00070                 $foo = 'Foo';
00071 
00072                 Hooks::register( 'MediaWikiHooksTest001', array( $i, 'someStatic' ) );
00073 
00074                 Hooks::run( 'MediaWikiHooksTest001', array( &$foo, &$bar ) );
00075 
00076                 $this->assertEquals( 'bah', $foo, 'Standard static method' );
00077                 $foo = 'Foo';
00078 
00079                 Hooks::clear( 'MediaWikiHooksTest001' );
00080         }
00081 
00082         public function testNewStyleHookInteraction() {
00083                 global $wgHooks;
00084 
00085                 $a = new NothingClass();
00086                 $b = new NothingClass();
00087 
00088                 // make sure to start with a clean slate
00089                 Hooks::clear( 'MediaWikiHooksTest001' );
00090                 unset( $wgHooks['MediaWikiHooksTest001'] );
00091 
00092                 $wgHooks['MediaWikiHooksTest001'][] = $a;
00093                 $this->assertTrue( Hooks::isRegistered( 'MediaWikiHooksTest001' ), 'Hook registered via $wgHooks should be noticed by Hooks::isRegistered' );
00094 
00095                 Hooks::register( 'MediaWikiHooksTest001', $b );
00096                 $this->assertEquals( 2, count( Hooks::getHandlers( 'MediaWikiHooksTest001' ) ), 'Hooks::getHandlers() should return hooks registered via wgHooks as well as Hooks::register' );
00097 
00098                 $foo = 'quux';
00099                 $bar = 'qaax';
00100 
00101                 Hooks::run( 'MediaWikiHooksTest001', array( &$foo, &$bar ) );
00102                 $this->assertEquals( 1, $a->calls, 'Hooks::run() should run hooks registered via wgHooks as well as Hooks::register' );
00103                 $this->assertEquals( 1, $b->calls, 'Hooks::run() should run hooks registered via wgHooks as well as Hooks::register' );
00104 
00105                 // clean up
00106                 Hooks::clear( 'MediaWikiHooksTest001' );
00107                 unset( $wgHooks['MediaWikiHooksTest001'] );
00108         }
00109 }
00110 
00111 class NothingClass {
00112         public $calls = 0;
00113 
00114         public static function someStatic( &$foo, &$bar ) {
00115                 $foo = 'bah';
00116                 return true;
00117         }
00118 
00119         public function someNonStatic( &$foo, &$bar ) {
00120                 $this->calls++;
00121                 $foo = 'fOO';
00122                 $bar = 'bAR';
00123                 return true;
00124         }
00125 
00126         public function onMediaWikiHooksTest001( &$foo, &$bar ) {
00127                 $this->calls++;
00128                 $foo = 'foo';
00129                 return true;
00130         }
00131 
00132         public function someNonStaticWithData( $foo, &$bar ) {
00133                 $this->calls++;
00134                 $bar = $foo;
00135                 return true;
00136         }
00137 }