Merge "Fix RevisionStorageTest with non-wikitext NS_MAIN"
[lhc/web/wiklou.git] / tests / phpunit / includes / HooksTest.php
1 <?php
2
3 class HooksTest extends MediaWikiTestCase {
4
5 public function testOldStyleHooks() {
6 $foo = 'Foo';
7 $bar = 'Bar';
8
9 $i = new NothingClass();
10
11 global $wgHooks;
12
13 $wgHooks['MediaWikiHooksTest001'][] = array( $i, 'someNonStatic' );
14
15 wfRunHooks( 'MediaWikiHooksTest001', array( &$foo, &$bar ) );
16
17 $this->assertEquals( 'fOO', $foo, 'Standard method' );
18 $foo = 'Foo';
19
20 $wgHooks['MediaWikiHooksTest001'][] = $i;
21
22 wfRunHooks( 'MediaWikiHooksTest001', array( &$foo, &$bar ) );
23
24 $this->assertEquals( 'foo', $foo, 'onEventName style' );
25 $foo = 'Foo';
26
27 $wgHooks['MediaWikiHooksTest001'][] = array( $i, 'someNonStaticWithData', 'baz' );
28
29 wfRunHooks( 'MediaWikiHooksTest001', array( &$foo, &$bar ) );
30
31 $this->assertEquals( 'baz', $foo, 'Data included' );
32 $foo = 'Foo';
33
34 $wgHooks['MediaWikiHooksTest001'][] = array( $i, 'someStatic' );
35
36 wfRunHooks( 'MediaWikiHooksTest001', array( &$foo, &$bar ) );
37
38 $this->assertEquals( 'bah', $foo, 'Standard static method' );
39 //$foo = 'Foo';
40
41 unset( $wgHooks['MediaWikiHooksTest001'] );
42
43 }
44
45 public function testNewStyleHooks() {
46 $foo = 'Foo';
47 $bar = 'Bar';
48
49 $i = new NothingClass();
50
51 Hooks::register( 'MediaWikiHooksTest001', array( $i, 'someNonStatic' ) );
52
53 Hooks::run( 'MediaWikiHooksTest001', array( &$foo, &$bar ) );
54
55 $this->assertEquals( 'fOO', $foo, 'Standard method' );
56 $foo = 'Foo';
57
58 Hooks::register( 'MediaWikiHooksTest001', $i );
59
60 Hooks::run( 'MediaWikiHooksTest001', array( &$foo, &$bar ) );
61
62 $this->assertEquals( 'foo', $foo, 'onEventName style' );
63 $foo = 'Foo';
64
65 Hooks::register( 'MediaWikiHooksTest001', array( $i, 'someNonStaticWithData', 'baz' ) );
66
67 Hooks::run( 'MediaWikiHooksTest001', array( &$foo, &$bar ) );
68
69 $this->assertEquals( 'baz', $foo, 'Data included' );
70 $foo = 'Foo';
71
72 Hooks::register( 'MediaWikiHooksTest001', array( $i, 'someStatic' ) );
73
74 Hooks::run( 'MediaWikiHooksTest001', array( &$foo, &$bar ) );
75
76 $this->assertEquals( 'bah', $foo, 'Standard static method' );
77 $foo = 'Foo';
78
79 Hooks::clear( 'MediaWikiHooksTest001' );
80 }
81
82 public function testNewStyleHookInteraction() {
83 global $wgHooks;
84
85 $a = new NothingClass();
86 $b = new NothingClass();
87
88 // make sure to start with a clean slate
89 Hooks::clear( 'MediaWikiHooksTest001' );
90 unset( $wgHooks['MediaWikiHooksTest001'] );
91
92 $wgHooks['MediaWikiHooksTest001'][] = $a;
93 $this->assertTrue( Hooks::isRegistered( 'MediaWikiHooksTest001' ), 'Hook registered via $wgHooks should be noticed by Hooks::isRegistered' );
94
95 Hooks::register( 'MediaWikiHooksTest001', $b );
96 $this->assertEquals( 2, count( Hooks::getHandlers( 'MediaWikiHooksTest001' ) ), 'Hooks::getHandlers() should return hooks registered via wgHooks as well as Hooks::register' );
97
98 $foo = 'quux';
99 $bar = 'qaax';
100
101 Hooks::run( 'MediaWikiHooksTest001', array( &$foo, &$bar ) );
102 $this->assertEquals( 1, $a->calls, 'Hooks::run() should run hooks registered via wgHooks as well as Hooks::register' );
103 $this->assertEquals( 1, $b->calls, 'Hooks::run() should run hooks registered via wgHooks as well as Hooks::register' );
104
105 // clean up
106 Hooks::clear( 'MediaWikiHooksTest001' );
107 unset( $wgHooks['MediaWikiHooksTest001'] );
108 }
109 }
110
111 class NothingClass {
112 public $calls = 0;
113
114 static public function someStatic( &$foo, &$bar ) {
115 $foo = 'bah';
116 return true;
117 }
118
119 public function someNonStatic( &$foo, &$bar ) {
120 $this->calls++;
121 $foo = 'fOO';
122 $bar = 'bAR';
123 return true;
124 }
125
126 public function onMediaWikiHooksTest001( &$foo, &$bar ) {
127 $this->calls++;
128 $foo = 'foo';
129 return true;
130 }
131
132 public function someNonStaticWithData( $foo, &$bar ) {
133 $this->calls++;
134 $bar = $foo;
135 return true;
136 }
137 }