RequestTest.php 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. <?php
  2. /*
  3. * This file is part of the Symfony package.
  4. *
  5. * (c) Fabien Potencier <fabien.potencier@symfony-project.com>
  6. *
  7. * For the full copyright and license information, please view the LICENSE
  8. * file that was distributed with this source code.
  9. */
  10. namespace Symfony\Tests\Component\HttpFoundation;
  11. use Symfony\Component\HttpFoundation\Request;
  12. class RequestTest extends \PHPUnit_Framework_TestCase
  13. {
  14. /**
  15. * @covers Symfony\Component\HttpFoundation\Request::__construct
  16. */
  17. public function testConstructor()
  18. {
  19. $this->testInitialize();
  20. }
  21. /**
  22. * @covers Symfony\Component\HttpFoundation\Request::initialize
  23. */
  24. public function testInitialize()
  25. {
  26. $request = new Request();
  27. $request->initialize(array('foo' => 'bar'));
  28. $this->assertEquals('bar', $request->query->get('foo'), '->initialize() takes an array of query parameters as its first argument');
  29. $request->initialize(null, array('foo' => 'bar'));
  30. $this->assertEquals('bar', $request->request->get('foo'), '->initialize() takes an array of request parameters as its second argument');
  31. $request->initialize(null, null, array('foo' => 'bar'));
  32. $this->assertEquals('bar', $request->attributes->get('foo'), '->initialize() takes an array of attributes as its thrid argument');
  33. $request->initialize(null, null, null, null, null, array('HTTP_FOO' => 'bar'));
  34. $this->assertEquals('bar', $request->headers->get('FOO'), '->initialize() takes an array of HTTP headers as its fourth argument');
  35. }
  36. /**
  37. * @covers Symfony\Component\HttpFoundation\Request::duplicate
  38. */
  39. public function testDuplicate()
  40. {
  41. $request = new Request(array('foo' => 'bar'), array('foo' => 'bar'), array('foo' => 'bar'), array(), array(), array('HTTP_FOO' => 'bar'));
  42. $dup = $request->duplicate();
  43. $this->assertEquals($request->query->all(), $dup->query->all(), '->duplicate() duplicates a request an copy the current query parameters');
  44. $this->assertEquals($request->request->all(), $dup->request->all(), '->duplicate() duplicates a request an copy the current request parameters');
  45. $this->assertEquals($request->attributes->all(), $dup->attributes->all(), '->duplicate() duplicates a request an copy the current attributes');
  46. $this->assertEquals($request->headers->all(), $dup->headers->all(), '->duplicate() duplicates a request an copy the current HTTP headers');
  47. $dup = $request->duplicate(array('foo' => 'foobar'), array('foo' => 'foobar'), array('foo' => 'foobar'), array(), array(), array('HTTP_FOO' => 'foobar'));
  48. $this->assertEquals(array('foo' => 'foobar'), $dup->query->all(), '->duplicate() overrides the query parameters if provided');
  49. $this->assertEquals(array('foo' => 'foobar'), $dup->request->all(), '->duplicate() overrides the request parameters if provided');
  50. $this->assertEquals(array('foo' => 'foobar'), $dup->attributes->all(), '->duplicate() overrides the attributes if provided');
  51. $this->assertEquals(array('foo' => array('foobar')), $dup->headers->all(), '->duplicate() overrides the HTTP header if provided');
  52. }
  53. /**
  54. * @covers Symfony\Component\HttpFoundation\Request::getFormat
  55. */
  56. public function testGetFormat()
  57. {
  58. $request = new Request();
  59. $this->assertNull($request->getFormat(null), '->getFormat() returns null when mime-type is null');
  60. $this->assertNull($request->getFormat('unexistant-mime-type'), '->getFormat() returns null when mime-type is unknown');
  61. $this->assertEquals('txt', $request->getFormat('text/plain'), '->getFormat() returns correct format when mime-type have one format only');
  62. $this->assertEquals('js', $request->getFormat('application/javascript'), '->getFormat() returns correct format when format have multiple mime-type (first)');
  63. $this->assertEquals('js', $request->getFormat('application/x-javascript'), '->getFormat() returns correct format when format have multiple mime-type');
  64. $this->assertEquals('js', $request->getFormat('text/javascript'), '->getFormat() returns correct format when format have multiple mime-type (last)');
  65. }
  66. /**
  67. * @covers Symfony\Component\HttpFoundation\Request::getQueryString
  68. */
  69. public function testGetQueryString()
  70. {
  71. $request = new Request();
  72. $request->server->set('QUERY_STRING', 'foo');
  73. $this->assertEquals('foo', $request->getQueryString(), '->getQueryString() works with valueless parameters');
  74. $request->server->set('QUERY_STRING', 'foo=');
  75. $this->assertEquals('foo=', $request->getQueryString(), '->getQueryString() includes a dangling equal sign');
  76. $request->server->set('QUERY_STRING', 'bar=&foo=bar');
  77. $this->assertEquals('bar=&foo=bar', $request->getQueryString(), '->getQueryString() works when empty parameters');
  78. $request->server->set('QUERY_STRING', 'foo=bar&bar=');
  79. $this->assertEquals('bar=&foo=bar', $request->getQueryString(), '->getQueryString() sorts keys alphabetically');
  80. $request->server->set('QUERY_STRING', 'him=John%20Doe&her=Jane+Doe');
  81. $this->assertEquals('her=Jane+Doe&him=John+Doe', $request->getQueryString(), '->getQueryString() normalizes encoding');
  82. $request->server->set('QUERY_STRING', 'foo[]=1&foo[]=2');
  83. $this->assertEquals('foo%5B%5D=1&foo%5B%5D=2', $request->getQueryString(), '->getQueryString() allows array notation');
  84. $request->server->set('QUERY_STRING', 'foo=1&foo=2');
  85. $this->assertEquals('foo=1&foo=2', $request->getQueryString(), '->getQueryString() allows repeated parameters');
  86. }
  87. }