PageRenderTime 30ms CodeModel.GetById 8ms RepoModel.GetById 0ms app.codeStats 0ms

/tests/Zend/Http/HeadersTest.php

https://github.com/mrbanzai/zf2
PHP | 258 lines | 225 code | 32 blank | 1 comment | 1 complexity | 290b38d23988b1ebefadfb6270d009f8 MD5 | raw file
  1. <?php
  2. namespace ZendTest\Http;
  3. use Zend\Http\Headers,
  4. Zend\Http\Header;
  5. class HeadersTest extends \PHPUnit_Framework_TestCase
  6. {
  7. public function testHeadersImplementsProperClasses()
  8. {
  9. $headers = new Headers();
  10. $this->assertInstanceOf('Iterator', $headers);
  11. $this->assertInstanceOf('Countable', $headers);
  12. }
  13. public function testHeadersFromStringFactoryCreatesSingleObject()
  14. {
  15. $headers = Headers::fromString("Fake: foo-bar");
  16. $this->assertEquals(1, $headers->count());
  17. $header = $headers->get('fake');
  18. $this->assertInstanceOf('Zend\Http\Header\GenericHeader', $header);
  19. $this->assertEquals('Fake', $header->getFieldName());
  20. $this->assertEquals('foo-bar', $header->getFieldValue());
  21. }
  22. public function testHeadersFromStringFactoryCreatesSingleObjectWithContinuationLine()
  23. {
  24. $headers = Headers::fromString("Fake: foo-bar,\r\n blah-blah");
  25. $this->assertEquals(1, $headers->count());
  26. $header = $headers->get('fake');
  27. $this->assertInstanceOf('Zend\Http\Header\GenericHeader', $header);
  28. $this->assertEquals('Fake', $header->getFieldName());
  29. $this->assertEquals('foo-bar,blah-blah', $header->getFieldValue());
  30. }
  31. public function testHeadersFromStringFactoryCreatesSingleObjectWithHeaderBreakLine()
  32. {
  33. $headers = Headers::fromString("Fake: foo-bar\r\n\r\n");
  34. $this->assertEquals(1, $headers->count());
  35. $header = $headers->get('fake');
  36. $this->assertInstanceOf('Zend\Http\Header\GenericHeader', $header);
  37. $this->assertEquals('Fake', $header->getFieldName());
  38. $this->assertEquals('foo-bar', $header->getFieldValue());
  39. }
  40. public function testHeadersFromStringFactoryThrowsExceptionOnMalformedHeaderLine()
  41. {
  42. $this->setExpectedException('Zend\Http\Exception\RuntimeException', 'does not match');
  43. Headers::fromString("Fake = foo-bar\r\n\r\n");
  44. }
  45. public function testHeadersFromStringFactoryCreatesMultipleObjects()
  46. {
  47. $headers = Headers::fromString("Fake: foo-bar\r\nAnother-Fake: boo-baz");
  48. $this->assertEquals(2, $headers->count());
  49. $header = $headers->get('fake');
  50. $this->assertInstanceOf('Zend\Http\Header\GenericHeader', $header);
  51. $this->assertEquals('Fake', $header->getFieldName());
  52. $this->assertEquals('foo-bar', $header->getFieldValue());
  53. $header = $headers->get('anotherfake');
  54. $this->assertInstanceOf('Zend\Http\Header\GenericHeader', $header);
  55. $this->assertEquals('Another-Fake', $header->getFieldName());
  56. $this->assertEquals('boo-baz', $header->getFieldValue());
  57. }
  58. public function testHeadersFromStringMultiHeaderWillAggregateLazyLoadedHeaders()
  59. {
  60. $headers = new Headers();
  61. /* @var $pcl \Zend\Loader\PluginClassLoader */
  62. $pcl = $headers->getPluginClassLoader();
  63. $pcl->registerPlugin('foo', 'Zend\Http\Header\GenericMultiHeader');
  64. $headers->addHeaderLine('foo: bar1,bar2,bar3');
  65. $headers->forceLoading();
  66. $this->assertEquals(3, $headers->count());
  67. }
  68. public function testHeadersHasAndGetWorkProperly()
  69. {
  70. $headers = new Headers();
  71. $headers->addHeaders(array($f = new Header\GenericHeader('Foo', 'bar'), new Header\GenericHeader('Baz', 'baz')));
  72. $this->assertFalse($headers->has('foobar'));
  73. $this->assertTrue($headers->has('foo'));
  74. $this->assertTrue($headers->has('Foo'));
  75. $this->assertSame($f, $headers->get('foo'));
  76. }
  77. public function testHeadersAggregatesHeaderObjects()
  78. {
  79. $fakeHeader = new Header\GenericHeader('Fake', 'bar');
  80. $headers = new Headers();
  81. $headers->addHeader($fakeHeader);
  82. $this->assertEquals(1, $headers->count());
  83. $this->assertSame($fakeHeader, $headers->get('Fake'));
  84. }
  85. public function testHeadersAggregatesHeaderThroughAddHeader()
  86. {
  87. $headers = new Headers();
  88. $headers->addHeader(new Header\GenericHeader('Fake', 'bar'));
  89. $this->assertEquals(1, $headers->count());
  90. $this->assertInstanceOf('Zend\Http\Header\GenericHeader', $headers->get('Fake'));
  91. }
  92. public function testHeadersAggregatesHeaderThroughAddHeaderLine()
  93. {
  94. $headers = new Headers();
  95. $headers->addHeaderLine('Fake', 'bar');
  96. $this->assertEquals(1, $headers->count());
  97. $this->assertInstanceOf('Zend\Http\Header\GenericHeader', $headers->get('Fake'));
  98. }
  99. public function testHeadersAddHeaderLineThrowsExceptionOnMissingFieldValue()
  100. {
  101. $this->setExpectedException('Zend\Http\Exception\InvalidArgumentException', 'without a field');
  102. $headers = new Headers();
  103. $headers->addHeaderLine('Foo');
  104. }
  105. public function testHeadersAggregatesHeadersThroughAddHeaders()
  106. {
  107. $headers = new Headers();
  108. $headers->addHeaders(array(new Header\GenericHeader('Foo', 'bar'), new Header\GenericHeader('Baz', 'baz')));
  109. $this->assertEquals(2, $headers->count());
  110. $this->assertInstanceOf('Zend\Http\Header\GenericHeader', $headers->get('Foo'));
  111. $this->assertEquals('bar', $headers->get('foo')->getFieldValue());
  112. $this->assertEquals('baz', $headers->get('baz')->getFieldValue());
  113. $headers = new Headers();
  114. $headers->addHeaders(array('Foo: bar', 'Baz: baz'));
  115. $this->assertEquals(2, $headers->count());
  116. $this->assertInstanceOf('Zend\Http\Header\GenericHeader', $headers->get('Foo'));
  117. $this->assertEquals('bar', $headers->get('foo')->getFieldValue());
  118. $this->assertEquals('baz', $headers->get('baz')->getFieldValue());
  119. $headers = new Headers();
  120. $headers->addHeaders(array(array('Foo' => 'bar'), array('Baz' => 'baz')));
  121. $this->assertEquals(2, $headers->count());
  122. $this->assertInstanceOf('Zend\Http\Header\GenericHeader', $headers->get('Foo'));
  123. $this->assertEquals('bar', $headers->get('foo')->getFieldValue());
  124. $this->assertEquals('baz', $headers->get('baz')->getFieldValue());
  125. $headers = new Headers();
  126. $headers->addHeaders(array(array('Foo', 'bar'), array('Baz', 'baz')));
  127. $this->assertEquals(2, $headers->count());
  128. $this->assertInstanceOf('Zend\Http\Header\GenericHeader', $headers->get('Foo'));
  129. $this->assertEquals('bar', $headers->get('foo')->getFieldValue());
  130. $this->assertEquals('baz', $headers->get('baz')->getFieldValue());
  131. $headers = new Headers();
  132. $headers->addHeaders(array('Foo' => 'bar', 'Baz' => 'baz'));
  133. $this->assertEquals(2, $headers->count());
  134. $this->assertInstanceOf('Zend\Http\Header\GenericHeader', $headers->get('Foo'));
  135. $this->assertEquals('bar', $headers->get('foo')->getFieldValue());
  136. $this->assertEquals('baz', $headers->get('baz')->getFieldValue());
  137. }
  138. public function testHeadersAddHeadersThrowsExceptionOnInvalidArguments()
  139. {
  140. $this->setExpectedException('Zend\Http\Exception\InvalidArgumentException', 'Expected array or Trav');
  141. $headers = new Headers();
  142. $headers->addHeaders('foo');
  143. }
  144. public function testHeadersCanRemoveHeader()
  145. {
  146. $headers = new Headers();
  147. $headers->addHeaders(array('Foo' => 'bar', 'Baz' => 'baz'));
  148. $header = $headers->get('foo');
  149. $this->assertEquals(2, $headers->count());
  150. $headers->removeHeader($header);
  151. $this->assertEquals(1, $headers->count());
  152. $this->assertFalse($headers->get('foo'));
  153. }
  154. public function testHeadersCanClearAllHeaders()
  155. {
  156. $headers = new Headers();
  157. $headers->addHeaders(array('Foo' => 'bar', 'Baz' => 'baz'));
  158. $this->assertEquals(2, $headers->count());
  159. $headers->clearHeaders();
  160. $this->assertEquals(0, $headers->count());
  161. }
  162. public function testHeadersCanBeIterated()
  163. {
  164. $headers = new Headers();
  165. $headers->addHeaders(array('Foo' => 'bar', 'Baz' => 'baz'));
  166. $iterations = 0;
  167. foreach ($headers as $index => $header) {
  168. $iterations++;
  169. $this->assertInstanceOf('Zend\Http\Header\GenericHeader', $header);
  170. switch ($index) {
  171. case 0:
  172. $this->assertEquals('bar', $header->getFieldValue());
  173. break;
  174. case 1:
  175. $this->assertEquals('baz', $header->getFieldValue());
  176. break;
  177. default:
  178. $this->fail('Invalid index returned from iterator');
  179. }
  180. }
  181. $this->assertEquals(2, $iterations);
  182. }
  183. public function testHeadersCanBeCastToString()
  184. {
  185. $headers = new Headers();
  186. $headers->addHeaders(array('Foo' => 'bar', 'Baz' => 'baz'));
  187. $this->assertEquals('Foo: bar' . "\r\n" . 'Baz: baz' . "\r\n", $headers->toString());
  188. }
  189. public function testHeadersCanBeCastToArray()
  190. {
  191. $headers = new Headers();
  192. $headers->addHeaders(array('Foo' => 'bar', 'Baz' => 'baz'));
  193. $this->assertEquals(array('Foo' => 'bar', 'Baz' => 'baz'), $headers->toArray());
  194. }
  195. public function testCastingToArrayReturnsMultiHeadersAsArrays()
  196. {
  197. $headers = new Headers();
  198. $cookie1 = new Header\SetCookie('foo', 'bar');
  199. $cookie2 = new Header\SetCookie('bar', 'baz');
  200. $headers->addHeader($cookie1);
  201. $headers->addHeader($cookie2);
  202. $array = $headers->toArray();
  203. $expected = array(
  204. 'Set-Cookie' => array(
  205. $cookie1->getFieldValue(),
  206. $cookie2->getFieldValue(),
  207. ),
  208. );
  209. $this->assertEquals($expected, $array);
  210. }
  211. public function testCastingToStringReturnsAllMultiHeaderValues()
  212. {
  213. $headers = new Headers();
  214. $cookie1 = new Header\SetCookie('foo', 'bar');
  215. $cookie2 = new Header\SetCookie('bar', 'baz');
  216. $headers->addHeader($cookie1);
  217. $headers->addHeader($cookie2);
  218. $string = $headers->toString();
  219. $expected = array(
  220. 'Set-Cookie: ' . $cookie1->getFieldValue(),
  221. 'Set-Cookie: ' . $cookie2->getFieldValue(),
  222. );
  223. $expected = implode("\r\n", $expected) . "\r\n";
  224. $this->assertEquals($expected, $string);
  225. }
  226. }