MediaWiki
REL1_21
|
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 }