Move trivially compatible tests to the unit tests suite
[lhc/web/wiklou.git] / tests / phpunit / unit / includes / Rest / HeaderContainerTest.php
1 <?php
2
3 namespace MediaWiki\Tests\Rest;
4
5 use MediaWiki\Rest\HeaderContainer;
6
7 /**
8 * @covers \MediaWiki\Rest\HeaderContainer
9 */
10 class HeaderContainerTest extends \MediaWikiUnitTestCase {
11 public static function provideSetHeader() {
12 return [
13 'simple' => [
14 [
15 [ 'Test', 'foo' ]
16 ],
17 [ 'Test' => [ 'foo' ] ],
18 [ 'Test' => 'foo' ]
19 ],
20 'replace' => [
21 [
22 [ 'Test', 'foo' ],
23 [ 'Test', 'bar' ],
24 ],
25 [ 'Test' => [ 'bar' ] ],
26 [ 'Test' => 'bar' ],
27 ],
28 'array value' => [
29 [
30 [ 'Test', [ '1', '2' ] ],
31 [ 'Test', [ '3', '4' ] ],
32 ],
33 [ 'Test' => [ '3', '4' ] ],
34 [ 'Test' => '3, 4' ]
35 ],
36 'preserve most recent case' => [
37 [
38 [ 'test', 'foo' ],
39 [ 'tesT', 'bar' ],
40 ],
41 [ 'tesT' => [ 'bar' ] ],
42 [ 'tesT' => 'bar' ]
43 ],
44 'empty' => [ [], [], [] ],
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 }