REST: tests for HelloHandler and HeaderContainer
[lhc/web/wiklou.git] / tests / phpunit / includes / Rest / HeaderContainerTest.php
1 <?php
2
3 namespace MediaWiki\Tests\Rest;
4
5 use MediaWikiTestCase;
6 use MediaWiki\Rest\HeaderContainer;
7
8 /**
9 * @covers \MediaWiki\Rest\HeaderContainer
10 */
11 class HeaderContainerTest extends MediaWikiTestCase {
12 public static function provideSetHeader() {
13 return [
14 'simple' => [
15 [
16 [ 'Test', 'foo' ]
17 ],
18 [ 'Test' => [ 'foo' ] ],
19 [ 'Test' => 'foo' ]
20 ],
21 'replace' => [
22 [
23 [ 'Test', 'foo' ],
24 [ 'Test', 'bar' ],
25 ],
26 [ 'Test' => [ 'bar' ] ],
27 [ 'Test' => 'bar' ],
28 ],
29 'array value' => [
30 [
31 [ 'Test', [ '1', '2' ] ],
32 [ 'Test', [ '3', '4' ] ],
33 ],
34 [ 'Test' => [ '3', '4' ] ],
35 [ 'Test' => '3, 4' ]
36 ],
37 'preserve most recent case' => [
38 [
39 [ 'test', 'foo' ],
40 [ 'tesT', 'bar' ],
41 ],
42 [ 'tesT' => [ 'bar' ] ],
43 [ 'tesT' => 'bar' ]
44 ],
45 ];
46 }
47
48 /** @dataProvider provideSetHeader */
49 public function testSetHeader( $setOps, $headers, $lines ) {
50 $hc = new HeaderContainer;
51 foreach ( $setOps as list( $name, $value ) ) {
52 $hc->setHeader( $name, $value );
53 }
54 $this->assertSame( $headers, $hc->getHeaders() );
55 $this->assertSame( $lines, $hc->getHeaderLines() );
56 }
57
58 public static function provideAddHeader() {
59 return [
60 'simple' => [
61 [
62 [ 'Test', 'foo' ]
63 ],
64 [ 'Test' => [ 'foo' ] ],
65 [ 'Test' => 'foo' ]
66 ],
67 'add' => [
68 [
69 [ 'Test', 'foo' ],
70 [ 'Test', 'bar' ],
71 ],
72 [ 'Test' => [ 'foo', 'bar' ] ],
73 [ 'Test' => 'foo, bar' ],
74 ],
75 'array value' => [
76 [
77 [ 'Test', [ '1', '2' ] ],
78 [ 'Test', [ '3', '4' ] ],
79 ],
80 [ 'Test' => [ '1', '2', '3', '4' ] ],
81 [ 'Test' => '1, 2, 3, 4' ]
82 ],
83 'preserve original case' => [
84 [
85 [ 'Test', 'foo' ],
86 [ 'tesT', 'bar' ],
87 ],
88 [ 'Test' => [ 'foo', 'bar' ] ],
89 [ 'Test' => 'foo, bar' ]
90 ],
91 ];
92 }
93
94 /** @dataProvider provideAddHeader */
95 public function testAddHeader( $addOps, $headers, $lines ) {
96 $hc = new HeaderContainer;
97 foreach ( $addOps as list( $name, $value ) ) {
98 $hc->addHeader( $name, $value );
99 }
100 $this->assertSame( $headers, $hc->getHeaders() );
101 $this->assertSame( $lines, $hc->getHeaderLines() );
102 }
103
104 public static function provideRemoveHeader() {
105 return [
106 'simple' => [
107 [ [ 'Test', 'foo' ] ],
108 [ 'Test' ],
109 [],
110 []
111 ],
112 'case mismatch' => [
113 [ [ 'Test', 'foo' ] ],
114 [ 'tesT' ],
115 [],
116 []
117 ],
118 'remove nonexistent' => [
119 [ [ 'A', '1' ] ],
120 [ 'B' ],
121 [ 'A' => [ '1' ] ],
122 [ 'A' => '1' ]
123 ],
124 ];
125 }
126
127 /** @dataProvider provideRemoveHeader */
128 public function testRemoveHeader( $addOps, $removeOps, $headers, $lines ) {
129 $hc = new HeaderContainer;
130 foreach ( $addOps as list( $name, $value ) ) {
131 $hc->addHeader( $name, $value );
132 }
133 foreach ( $removeOps as $name ) {
134 $hc->removeHeader( $name );
135 }
136 $this->assertSame( $headers, $hc->getHeaders() );
137 $this->assertSame( $lines, $hc->getHeaderLines() );
138 }
139
140 public function testHasHeader() {
141 $hc = new HeaderContainer;
142 $hc->addHeader( 'A', '1' );
143 $hc->addHeader( 'B', '2' );
144 $hc->addHeader( 'C', '3' );
145 $hc->removeHeader( 'B' );
146 $hc->removeHeader( 'c' );
147 $this->assertTrue( $hc->hasHeader( 'A' ) );
148 $this->assertTrue( $hc->hasHeader( 'a' ) );
149 $this->assertFalse( $hc->hasHeader( 'B' ) );
150 $this->assertFalse( $hc->hasHeader( 'c' ) );
151 $this->assertFalse( $hc->hasHeader( 'C' ) );
152 }
153
154 public function testGetRawHeaderLines() {
155 $hc = new HeaderContainer;
156 $hc->addHeader( 'A', '1' );
157 $hc->addHeader( 'a', '2' );
158 $hc->addHeader( 'b', '3' );
159 $hc->addHeader( 'Set-Cookie', 'x' );
160 $hc->addHeader( 'SET-cookie', 'y' );
161 $this->assertSame(
162 [
163 'A: 1, 2',
164 'b: 3',
165 'Set-Cookie: x',
166 'Set-Cookie: y',
167 ],
168 $hc->getRawHeaderLines()
169 );
170 }
171 }