Warn if stateful ParserOutput transforms are used
[lhc/web/wiklou.git] / tests / phpunit / includes / MediaWikiTest.php
1 <?php
2
3 class MediaWikiTest extends MediaWikiTestCase {
4 protected function setUp() {
5 parent::setUp();
6
7 $this->setMwGlobals( [
8 'wgServer' => 'http://example.org',
9 'wgScriptPath' => '/w',
10 'wgScript' => '/w/index.php',
11 'wgArticlePath' => '/wiki/$1',
12 'wgActionPaths' => [],
13 ] );
14 }
15
16 public static function provideTryNormaliseRedirect() {
17 return [
18 [
19 // View: Canonical
20 'url' => 'http://example.org/wiki/Foo_Bar',
21 'query' => [],
22 'title' => 'Foo_Bar',
23 'redirect' => false,
24 ],
25 [
26 // View: Escaped title
27 'url' => 'http://example.org/wiki/Foo%20Bar',
28 'query' => [],
29 'title' => 'Foo_Bar',
30 'redirect' => 'http://example.org/wiki/Foo_Bar',
31 ],
32 [
33 // View: Script path
34 'url' => 'http://example.org/w/index.php?title=Foo_Bar',
35 'query' => [ 'title' => 'Foo_Bar' ],
36 'title' => 'Foo_Bar',
37 'redirect' => false,
38 ],
39 [
40 // View: Script path with implicit title from page id
41 'url' => 'http://example.org/w/index.php?curid=123',
42 'query' => [ 'curid' => '123' ],
43 'title' => 'Foo_Bar',
44 'redirect' => false,
45 ],
46 [
47 // View: Script path with implicit title from revision id
48 'url' => 'http://example.org/w/index.php?oldid=123',
49 'query' => [ 'oldid' => '123' ],
50 'title' => 'Foo_Bar',
51 'redirect' => false,
52 ],
53 [
54 // View: Script path without title
55 'url' => 'http://example.org/w/index.php',
56 'query' => [],
57 'title' => 'Main_Page',
58 'redirect' => 'http://example.org/wiki/Main_Page',
59 ],
60 [
61 // View: Script path with empty title
62 'url' => 'http://example.org/w/index.php?title=',
63 'query' => [ 'title' => '' ],
64 'title' => 'Main_Page',
65 'redirect' => 'http://example.org/wiki/Main_Page',
66 ],
67 [
68 // View: Index with escaped title
69 'url' => 'http://example.org/w/index.php?title=Foo%20Bar',
70 'query' => [ 'title' => 'Foo Bar' ],
71 'title' => 'Foo_Bar',
72 'redirect' => 'http://example.org/wiki/Foo_Bar',
73 ],
74 [
75 // View: Script path with escaped title
76 'url' => 'http://example.org/w/?title=Foo_Bar',
77 'query' => [ 'title' => 'Foo_Bar' ],
78 'title' => 'Foo_Bar',
79 'redirect' => false,
80 ],
81 [
82 // View: Root path with escaped title
83 'url' => 'http://example.org/?title=Foo_Bar',
84 'query' => [ 'title' => 'Foo_Bar' ],
85 'title' => 'Foo_Bar',
86 'redirect' => false,
87 ],
88 [
89 // View: Canonical with redundant query
90 'url' => 'http://example.org/wiki/Foo_Bar?action=view',
91 'query' => [ 'action' => 'view' ],
92 'title' => 'Foo_Bar',
93 'redirect' => false,
94 ],
95 [
96 // Edit: Canonical view url with action query
97 'url' => 'http://example.org/wiki/Foo_Bar?action=edit',
98 'query' => [ 'action' => 'edit' ],
99 'title' => 'Foo_Bar',
100 'redirect' => false,
101 ],
102 [
103 // View: Index with action query
104 'url' => 'http://example.org/w/index.php?title=Foo_Bar&action=view',
105 'query' => [ 'title' => 'Foo_Bar', 'action' => 'view' ],
106 'title' => 'Foo_Bar',
107 'redirect' => false,
108 ],
109 [
110 // Edit: Index with action query
111 'url' => 'http://example.org/w/index.php?title=Foo_Bar&action=edit',
112 'query' => [ 'title' => 'Foo_Bar', 'action' => 'edit' ],
113 'title' => 'Foo_Bar',
114 'redirect' => false,
115 ],
116 ];
117 }
118
119 /**
120 * @dataProvider provideTryNormaliseRedirect
121 * @covers MediaWiki::tryNormaliseRedirect
122 */
123 public function testTryNormaliseRedirect( $url, $query, $title, $expectedRedirect = false ) {
124 // Set SERVER because interpolateTitle() doesn't use getRequestURL(),
125 // whereas tryNormaliseRedirect does().
126 $_SERVER['REQUEST_URI'] = $url;
127
128 $req = new FauxRequest( $query );
129 $req->setRequestURL( $url );
130 // This adds a virtual 'title' query parameter. Normally called from Setup.php
131 $req->interpolateTitle();
132
133 $titleObj = Title::newFromText( $title );
134
135 // Set global context since some involved code paths don't yet have context
136 $context = RequestContext::getMain();
137 $context->setRequest( $req );
138 $context->setTitle( $titleObj );
139
140 $mw = new MediaWiki( $context );
141
142 $method = new ReflectionMethod( $mw, 'tryNormaliseRedirect' );
143 $method->setAccessible( true );
144 $ret = $method->invoke( $mw, $titleObj );
145
146 $this->assertEquals(
147 $expectedRedirect !== false,
148 $ret,
149 'Return true only when redirecting'
150 );
151
152 $this->assertEquals(
153 $expectedRedirect ?: '',
154 $context->getOutput()->getRedirect()
155 );
156 }
157 }