Merge "Chinese Conversion Table Update 2017-6"
[lhc/web/wiklou.git] / tests / phpunit / includes / FauxRequestTest.php
1 <?php
2
3 use MediaWiki\Session\SessionManager;
4
5 class FauxRequestTest extends PHPUnit_Framework_TestCase {
6
7 use MediaWikiCoversValidator;
8
9 /**
10 * @covers FauxRequest::__construct
11 */
12 public function testConstructInvalidData() {
13 $this->setExpectedException( MWException::class, 'bogus data' );
14 $req = new FauxRequest( 'x' );
15 }
16
17 /**
18 * @covers FauxRequest::__construct
19 */
20 public function testConstructInvalidSession() {
21 $this->setExpectedException( MWException::class, 'bogus session' );
22 $req = new FauxRequest( [], false, 'x' );
23 }
24
25 /**
26 * @covers FauxRequest::__construct
27 */
28 public function testConstructWithSession() {
29 $session = SessionManager::singleton()->getEmptySession( new FauxRequest( [] ) );
30 $this->assertInstanceOf(
31 FauxRequest::class,
32 new FauxRequest( [], false, $session )
33 );
34 }
35
36 /**
37 * @covers FauxRequest::getText
38 */
39 public function testGetText() {
40 $req = new FauxRequest( [ 'x' => 'Value' ] );
41 $this->assertEquals( 'Value', $req->getText( 'x' ) );
42 $this->assertEquals( '', $req->getText( 'z' ) );
43 }
44
45 // Integration test for parent method.
46 public function testGetVal() {
47 $req = new FauxRequest( [ 'crlf' => "A\r\nb" ] );
48 $this->assertSame( "A\r\nb", $req->getVal( 'crlf' ), 'CRLF' );
49 }
50
51 // Integration test for parent method.
52 public function testGetRawVal() {
53 $req = new FauxRequest( [
54 'x' => 'Value',
55 'y' => [ 'a' ],
56 'crlf' => "A\r\nb"
57 ] );
58 $this->assertSame( 'Value', $req->getRawVal( 'x' ) );
59 $this->assertSame( null, $req->getRawVal( 'z' ), 'Not found' );
60 $this->assertSame( null, $req->getRawVal( 'y' ), 'Array is ignored' );
61 $this->assertSame( "A\r\nb", $req->getRawVal( 'crlf' ), 'CRLF' );
62 }
63
64 /**
65 * @covers FauxRequest::getValues
66 */
67 public function testGetValues() {
68 $values = [ 'x' => 'Value', 'y' => '' ];
69 $req = new FauxRequest( $values );
70 $this->assertEquals( $values, $req->getValues() );
71 }
72
73 /**
74 * @covers FauxRequest::getQueryValues
75 */
76 public function testGetQueryValues() {
77 $values = [ 'x' => 'Value', 'y' => '' ];
78
79 $req = new FauxRequest( $values );
80 $this->assertEquals( $values, $req->getQueryValues() );
81 $req = new FauxRequest( $values, /*wasPosted*/ true );
82 $this->assertEquals( [], $req->getQueryValues() );
83 }
84
85 /**
86 * @covers FauxRequest::getMethod
87 */
88 public function testGetMethod() {
89 $req = new FauxRequest( [] );
90 $this->assertEquals( 'GET', $req->getMethod() );
91 $req = new FauxRequest( [], /*wasPosted*/ true );
92 $this->assertEquals( 'POST', $req->getMethod() );
93 }
94
95 /**
96 * @covers FauxRequest::wasPosted
97 */
98 public function testWasPosted() {
99 $req = new FauxRequest( [] );
100 $this->assertFalse( $req->wasPosted() );
101 $req = new FauxRequest( [], /*wasPosted*/ true );
102 $this->assertTrue( $req->wasPosted() );
103 }
104
105 /**
106 * @covers FauxRequest::getCookie
107 * @covers FauxRequest::setCookie
108 * @covers FauxRequest::setCookies
109 */
110 public function testCookies() {
111 $req = new FauxRequest();
112 $this->assertSame( null, $req->getCookie( 'z', '' ) );
113
114 $req->setCookie( 'x', 'Value', '' );
115 $this->assertEquals( 'Value', $req->getCookie( 'x', '' ) );
116
117 $req->setCookies( [ 'x' => 'One', 'y' => 'Two' ], '' );
118 $this->assertEquals( 'One', $req->getCookie( 'x', '' ) );
119 $this->assertEquals( 'Two', $req->getCookie( 'y', '' ) );
120 }
121
122 /**
123 * @covers FauxRequest::getCookie
124 * @covers FauxRequest::setCookie
125 * @covers FauxRequest::setCookies
126 */
127 public function testCookiesDefaultPrefix() {
128 global $wgCookiePrefix;
129 $oldPrefix = $wgCookiePrefix;
130 $wgCookiePrefix = '_';
131
132 $req = new FauxRequest();
133 $this->assertSame( null, $req->getCookie( 'z' ) );
134
135 $req->setCookie( 'x', 'Value' );
136 $this->assertEquals( 'Value', $req->getCookie( 'x' ) );
137
138 $wgCookiePrefix = $oldPrefix;
139 }
140
141 /**
142 * @covers FauxRequest::getRequestURL
143 */
144 public function testGetRequestURL() {
145 $req = new FauxRequest();
146 $this->setExpectedException( MWException::class );
147 $req->getRequestURL();
148 }
149
150 /**
151 * @covers FauxRequest::setRequestURL
152 * @covers FauxRequest::getRequestURL
153 */
154 public function testSetRequestURL() {
155 $req = new FauxRequest();
156 $req->setRequestURL( 'https://example.org' );
157 $this->assertEquals( 'https://example.org', $req->getRequestURL() );
158 }
159
160 /**
161 * @covers FauxRequest::__construct
162 * @covers FauxRequest::getProtocol
163 */
164 public function testProtocol() {
165 $req = new FauxRequest();
166 $this->assertEquals( 'http', $req->getProtocol() );
167 $req = new FauxRequest( [], false, null, 'http' );
168 $this->assertEquals( 'http', $req->getProtocol() );
169 $req = new FauxRequest( [], false, null, 'https' );
170 $this->assertEquals( 'https', $req->getProtocol() );
171 }
172
173 /**
174 * @covers FauxRequest::setHeader
175 * @covers FauxRequest::setHeaders
176 * @covers FauxRequest::getHeader
177 */
178 public function testGetSetHeader() {
179 $value = 'text/plain, text/html';
180
181 $request = new FauxRequest();
182 $request->setHeader( 'Accept', $value );
183
184 $this->assertEquals( $request->getHeader( 'Nonexistent' ), false );
185 $this->assertEquals( $request->getHeader( 'Accept' ), $value );
186 $this->assertEquals( $request->getHeader( 'ACCEPT' ), $value );
187 $this->assertEquals( $request->getHeader( 'accept' ), $value );
188 $this->assertEquals(
189 $request->getHeader( 'Accept', WebRequest::GETHEADER_LIST ),
190 [ 'text/plain', 'text/html' ]
191 );
192 }
193
194 /**
195 * @covers FauxRequest::initHeaders
196 */
197 public function testGetAllHeaders() {
198 $_SERVER['HTTP_TEST'] = 'Example';
199
200 $request = new FauxRequest();
201
202 $this->assertEquals(
203 [],
204 $request->getAllHeaders()
205 );
206
207 $this->assertEquals(
208 false,
209 $request->getHeader( 'test' )
210 );
211 }
212
213 /**
214 * @covers FauxRequest::__construct
215 * @covers FauxRequest::getSessionArray
216 */
217 public function testSessionData() {
218 $values = [ 'x' => 'Value', 'y' => '' ];
219
220 $req = new FauxRequest( [], false, /*session*/ $values );
221 $this->assertEquals( $values, $req->getSessionArray() );
222
223 $req = new FauxRequest();
224 $this->assertSame( null, $req->getSessionArray() );
225 }
226
227 /**
228 * @covers FauxRequest::getRawQueryString
229 * @covers FauxRequest::getRawPostString
230 * @covers FauxRequest::getRawInput
231 */
232 public function testDummies() {
233 $req = new FauxRequest();
234 $this->assertEquals( '', $req->getRawQueryString() );
235 $this->assertEquals( '', $req->getRawPostString() );
236 $this->assertEquals( '', $req->getRawInput() );
237 }
238 }