2010-03-25 07:55:50 +00:00
< ? php
/*
2010-04-25 16:06:54 +01:00
* This file is part of the Symfony package .
2010-03-25 07:55:50 +00:00
*
2011-03-06 11:40:06 +00:00
* ( c ) Fabien Potencier < fabien @ symfony . com >
2010-03-25 07:55:50 +00:00
*
* For the full copyright and license information , please view the LICENSE
* file that was distributed with this source code .
*/
2010-08-20 22:09:55 +01:00
namespace Symfony\Tests\Component\HttpFoundation ;
2010-03-25 07:55:50 +00:00
2011-05-05 08:14:48 +01:00
2012-02-11 11:04:05 +00:00
use Symfony\Component\HttpFoundation\Session\Storage\MockArraySessionStorage ;
2012-02-08 23:15:47 +00:00
use Symfony\Component\HttpFoundation\Session\Session ;
2010-08-20 22:09:55 +01:00
use Symfony\Component\HttpFoundation\Request ;
2010-03-25 07:55:50 +00:00
class RequestTest extends \PHPUnit_Framework_TestCase
{
2011-07-05 18:38:29 +01:00
public function setUp ()
{
Request :: trustProxyData ();
}
2010-05-06 12:25:53 +01:00
/**
2010-08-20 22:09:55 +01:00
* @ covers Symfony\Component\HttpFoundation\Request :: __construct
2010-05-06 12:25:53 +01:00
*/
public function testConstructor ()
{
$this -> testInitialize ();
}
2010-03-25 07:55:50 +00:00
2010-05-06 12:25:53 +01:00
/**
2010-08-20 22:09:55 +01:00
* @ covers Symfony\Component\HttpFoundation\Request :: initialize
2010-05-06 12:25:53 +01:00
*/
public function testInitialize ()
{
$request = new Request ();
2010-03-25 07:55:50 +00:00
2010-05-06 12:25:53 +01:00
$request -> initialize ( array ( 'foo' => 'bar' ));
$this -> assertEquals ( 'bar' , $request -> query -> get ( 'foo' ), '->initialize() takes an array of query parameters as its first argument' );
2010-03-25 07:55:50 +00:00
2011-01-27 03:22:24 +00:00
$request -> initialize ( array (), array ( 'foo' => 'bar' ));
2010-05-06 12:25:53 +01:00
$this -> assertEquals ( 'bar' , $request -> request -> get ( 'foo' ), '->initialize() takes an array of request parameters as its second argument' );
2010-03-25 07:55:50 +00:00
2011-01-27 03:22:24 +00:00
$request -> initialize ( array (), array (), array ( 'foo' => 'bar' ));
2011-06-12 21:52:53 +01:00
$this -> assertEquals ( 'bar' , $request -> attributes -> get ( 'foo' ), '->initialize() takes an array of attributes as its third argument' );
2010-03-25 07:55:50 +00:00
2011-01-27 03:22:24 +00:00
$request -> initialize ( array (), array (), array (), array (), array (), array ( 'HTTP_FOO' => 'bar' ));
2010-05-06 12:25:53 +01:00
$this -> assertEquals ( 'bar' , $request -> headers -> get ( 'FOO' ), '->initialize() takes an array of HTTP headers as its fourth argument' );
}
2010-03-25 07:55:50 +00:00
2010-12-06 00:32:42 +00:00
/**
* @ covers Symfony\Component\HttpFoundation\Request :: create
*/
public function testCreate ()
{
$request = Request :: create ( 'http://test.com/foo?bar=baz' );
2010-12-07 21:51:45 +00:00
$this -> assertEquals ( 'http://test.com/foo?bar=baz' , $request -> getUri ());
2010-12-06 00:32:42 +00:00
$this -> assertEquals ( '/foo' , $request -> getPathInfo ());
$this -> assertEquals ( 'bar=baz' , $request -> getQueryString ());
2010-12-18 15:30:03 +00:00
$this -> assertEquals ( 80 , $request -> getPort ());
2011-02-07 01:40:20 +00:00
$this -> assertEquals ( 'test.com' , $request -> getHttpHost ());
$this -> assertFalse ( $request -> isSecure ());
2010-12-06 00:32:42 +00:00
2012-02-11 23:26:10 +00:00
$request = Request :: create ( 'http://test.com/foo' , 'GET' , array ( 'bar' => 'baz' ));
$this -> assertEquals ( 'http://test.com/foo?bar=baz' , $request -> getUri ());
$this -> assertEquals ( '/foo' , $request -> getPathInfo ());
$this -> assertEquals ( 'bar=baz' , $request -> getQueryString ());
$this -> assertEquals ( 80 , $request -> getPort ());
$this -> assertEquals ( 'test.com' , $request -> getHttpHost ());
$this -> assertFalse ( $request -> isSecure ());
$request = Request :: create ( 'http://test.com/foo?bar=foo' , 'GET' , array ( 'bar' => 'baz' ));
$this -> assertEquals ( 'http://test.com/foo?bar=baz' , $request -> getUri ());
$this -> assertEquals ( '/foo' , $request -> getPathInfo ());
$this -> assertEquals ( 'bar=baz' , $request -> getQueryString ());
$this -> assertEquals ( 80 , $request -> getPort ());
$this -> assertEquals ( 'test.com' , $request -> getHttpHost ());
$this -> assertFalse ( $request -> isSecure ());
2010-12-07 21:51:45 +00:00
$request = Request :: create ( 'https://test.com/foo?bar=baz' );
$this -> assertEquals ( 'https://test.com/foo?bar=baz' , $request -> getUri ());
$this -> assertEquals ( '/foo' , $request -> getPathInfo ());
$this -> assertEquals ( 'bar=baz' , $request -> getQueryString ());
$this -> assertEquals ( 443 , $request -> getPort ());
2011-02-07 01:40:20 +00:00
$this -> assertEquals ( 'test.com' , $request -> getHttpHost ());
$this -> assertTrue ( $request -> isSecure ());
2010-12-07 21:51:45 +00:00
2010-12-06 00:32:42 +00:00
$request = Request :: create ( 'test.com:90/foo' );
$this -> assertEquals ( 'http://test.com:90/foo' , $request -> getUri ());
$this -> assertEquals ( '/foo' , $request -> getPathInfo ());
$this -> assertEquals ( 'test.com' , $request -> getHost ());
2011-02-07 01:40:20 +00:00
$this -> assertEquals ( 'test.com:90' , $request -> getHttpHost ());
2010-12-06 00:32:42 +00:00
$this -> assertEquals ( 90 , $request -> getPort ());
2011-02-07 01:40:20 +00:00
$this -> assertFalse ( $request -> isSecure ());
2010-12-07 21:51:45 +00:00
$request = Request :: create ( 'https://test.com:90/foo' );
$this -> assertEquals ( 'https://test.com:90/foo' , $request -> getUri ());
$this -> assertEquals ( '/foo' , $request -> getPathInfo ());
$this -> assertEquals ( 'test.com' , $request -> getHost ());
2011-02-07 01:40:20 +00:00
$this -> assertEquals ( 'test.com:90' , $request -> getHttpHost ());
2010-12-07 21:51:45 +00:00
$this -> assertEquals ( 90 , $request -> getPort ());
2011-02-07 01:40:20 +00:00
$this -> assertTrue ( $request -> isSecure ());
2011-02-04 11:37:52 +00:00
2011-04-22 14:47:31 +01:00
$request = Request :: create ( 'https://127.0.0.1:90/foo' );
$this -> assertEquals ( 'https://127.0.0.1:90/foo' , $request -> getUri ());
$this -> assertEquals ( '/foo' , $request -> getPathInfo ());
$this -> assertEquals ( '127.0.0.1' , $request -> getHost ());
$this -> assertEquals ( '127.0.0.1:90' , $request -> getHttpHost ());
$this -> assertEquals ( 90 , $request -> getPort ());
$this -> assertTrue ( $request -> isSecure ());
2011-04-22 15:28:15 +01:00
$request = Request :: create ( 'https://[::1]:90/foo' );
$this -> assertEquals ( 'https://[::1]:90/foo' , $request -> getUri ());
$this -> assertEquals ( '/foo' , $request -> getPathInfo ());
$this -> assertEquals ( '[::1]' , $request -> getHost ());
$this -> assertEquals ( '[::1]:90' , $request -> getHttpHost ());
$this -> assertEquals ( 90 , $request -> getPort ());
$this -> assertTrue ( $request -> isSecure ());
2011-02-04 11:37:52 +00:00
$json = '{"jsonrpc":"2.0","method":"echo","id":7,"params":["Hello World"]}' ;
$request = Request :: create ( 'http://example.com/jsonrpc' , 'POST' , array (), array (), array (), array (), $json );
$this -> assertEquals ( $json , $request -> getContent ());
2011-02-07 01:40:20 +00:00
$this -> assertFalse ( $request -> isSecure ());
2011-07-27 07:27:46 +01:00
2011-07-19 09:54:21 +01:00
$request = Request :: create ( 'http://test.com' );
$this -> assertEquals ( 'http://test.com/' , $request -> getUri ());
$this -> assertEquals ( '/' , $request -> getPathInfo ());
$this -> assertEquals ( '' , $request -> getQueryString ());
$this -> assertEquals ( 80 , $request -> getPort ());
$this -> assertEquals ( 'test.com' , $request -> getHttpHost ());
$this -> assertFalse ( $request -> isSecure ());
2011-07-27 07:27:46 +01:00
2011-07-19 09:54:21 +01:00
$request = Request :: create ( 'http://test.com:90/?test=1' );
$this -> assertEquals ( 'http://test.com:90/?test=1' , $request -> getUri ());
$this -> assertEquals ( '/' , $request -> getPathInfo ());
$this -> assertEquals ( 'test=1' , $request -> getQueryString ());
$this -> assertEquals ( 90 , $request -> getPort ());
$this -> assertEquals ( 'test.com:90' , $request -> getHttpHost ());
$this -> assertFalse ( $request -> isSecure ());
2011-07-27 07:27:46 +01:00
2011-09-12 12:01:04 +01:00
$request = Request :: create ( 'http://test:test@test.com' );
$this -> assertEquals ( 'http://test:test@test.com/' , $request -> getUri ());
$this -> assertEquals ( '/' , $request -> getPathInfo ());
$this -> assertEquals ( '' , $request -> getQueryString ());
$this -> assertEquals ( 80 , $request -> getPort ());
$this -> assertEquals ( 'test.com' , $request -> getHttpHost ());
$this -> assertEquals ( 'test' , $request -> getUser ());
$this -> assertEquals ( 'test' , $request -> getPassword ());
$this -> assertFalse ( $request -> isSecure ());
$request = Request :: create ( 'http://testnopass@test.com' );
$this -> assertEquals ( 'http://testnopass@test.com/' , $request -> getUri ());
$this -> assertEquals ( '/' , $request -> getPathInfo ());
$this -> assertEquals ( '' , $request -> getQueryString ());
$this -> assertEquals ( 80 , $request -> getPort ());
$this -> assertEquals ( 'test.com' , $request -> getHttpHost ());
$this -> assertEquals ( 'testnopass' , $request -> getUser ());
$this -> assertNull ( $request -> getPassword ());
$this -> assertFalse ( $request -> isSecure ());
2010-12-06 00:32:42 +00:00
}
2010-05-06 12:25:53 +01:00
/**
2010-08-20 22:09:55 +01:00
* @ covers Symfony\Component\HttpFoundation\Request :: duplicate
2010-05-06 12:25:53 +01:00
*/
public function testDuplicate ()
{
$request = new Request ( array ( 'foo' => 'bar' ), array ( 'foo' => 'bar' ), array ( 'foo' => 'bar' ), array (), array (), array ( 'HTTP_FOO' => 'bar' ));
$dup = $request -> duplicate ();
2010-03-25 07:55:50 +00:00
2010-05-06 12:25:53 +01:00
$this -> assertEquals ( $request -> query -> all (), $dup -> query -> all (), '->duplicate() duplicates a request an copy the current query parameters' );
$this -> assertEquals ( $request -> request -> all (), $dup -> request -> all (), '->duplicate() duplicates a request an copy the current request parameters' );
2010-07-21 21:49:49 +01:00
$this -> assertEquals ( $request -> attributes -> all (), $dup -> attributes -> all (), '->duplicate() duplicates a request an copy the current attributes' );
2010-05-06 12:25:53 +01:00
$this -> assertEquals ( $request -> headers -> all (), $dup -> headers -> all (), '->duplicate() duplicates a request an copy the current HTTP headers' );
2010-03-25 07:55:50 +00:00
2010-05-06 12:25:53 +01:00
$dup = $request -> duplicate ( array ( 'foo' => 'foobar' ), array ( 'foo' => 'foobar' ), array ( 'foo' => 'foobar' ), array (), array (), array ( 'HTTP_FOO' => 'foobar' ));
2010-03-25 07:55:50 +00:00
2010-05-06 12:25:53 +01:00
$this -> assertEquals ( array ( 'foo' => 'foobar' ), $dup -> query -> all (), '->duplicate() overrides the query parameters if provided' );
$this -> assertEquals ( array ( 'foo' => 'foobar' ), $dup -> request -> all (), '->duplicate() overrides the request parameters if provided' );
2010-07-21 21:49:49 +01:00
$this -> assertEquals ( array ( 'foo' => 'foobar' ), $dup -> attributes -> all (), '->duplicate() overrides the attributes if provided' );
2010-06-23 15:24:24 +01:00
$this -> assertEquals ( array ( 'foo' => array ( 'foobar' )), $dup -> headers -> all (), '->duplicate() overrides the HTTP header if provided' );
2010-05-06 12:25:53 +01:00
}
2010-04-04 00:19:07 +01:00
2010-05-06 12:25:53 +01:00
/**
2010-08-20 22:09:55 +01:00
* @ covers Symfony\Component\HttpFoundation\Request :: getFormat
2011-02-07 01:40:20 +00:00
* @ covers Symfony\Component\HttpFoundation\Request :: setFormat
2011-01-30 12:13:16 +00:00
* @ dataProvider getFormatToMimeTypeMapProvider
2010-05-06 12:25:53 +01:00
*/
2011-01-30 12:13:16 +00:00
public function testGetFormatFromMimeType ( $format , $mimeTypes )
2010-05-06 12:25:53 +01:00
{
$request = new Request ();
2011-04-15 20:12:02 +01:00
foreach ( $mimeTypes as $mime ) {
2011-01-30 12:13:16 +00:00
$this -> assertEquals ( $format , $request -> getFormat ( $mime ));
}
2011-02-07 01:40:20 +00:00
$request -> setFormat ( $format , $mimeTypes );
foreach ( $mimeTypes as $mime ) {
$this -> assertEquals ( $format , $request -> getFormat ( $mime ));
}
2011-01-30 12:13:16 +00:00
}
2011-06-08 10:12:57 +01:00
/**
* @ covers Symfony\Component\HttpFoundation\Request :: getFormat
*/
public function testGetFormatFromMimeTypeWithParameters ()
{
$request = new Request ();
$this -> assertEquals ( 'json' , $request -> getFormat ( 'application/json; charset=utf-8' ));
}
2011-01-30 12:13:16 +00:00
/**
* @ covers Symfony\Component\HttpFoundation\Request :: getMimeType
* @ dataProvider getFormatToMimeTypeMapProvider
*/
public function testGetMimeTypeFromFormat ( $format , $mimeTypes )
{
2011-04-07 08:45:39 +01:00
if ( null !== $format ) {
2011-01-30 12:13:16 +00:00
$request = new Request ();
$this -> assertEquals ( $mimeTypes [ 0 ], $request -> getMimeType ( $format ));
}
}
public function getFormatToMimeTypeMapProvider ()
{
return array (
2011-03-01 17:56:35 +00:00
array ( null , array ( null , 'unexistent-mime-type' )),
2011-01-30 12:13:16 +00:00
array ( 'txt' , array ( 'text/plain' )),
array ( 'js' , array ( 'application/javascript' , 'application/x-javascript' , 'text/javascript' )),
array ( 'css' , array ( 'text/css' )),
array ( 'json' , array ( 'application/json' , 'application/x-json' )),
array ( 'xml' , array ( 'text/xml' , 'application/xml' , 'application/x-xml' )),
array ( 'rdf' , array ( 'application/rdf+xml' )),
array ( 'atom' , array ( 'application/atom+xml' )),
);
2010-12-07 21:51:45 +00:00
}
/**
* @ covers Symfony\Component\HttpFoundation\Request :: getUri
*/
public function testGetUri ()
{
$server = array ();
// Standard Request on non default PORT
// http://hostname:8080/index.php/path/info?query=string
$server [ 'HTTP_HOST' ] = 'hostname:8080' ;
2011-05-25 21:02:16 +01:00
$server [ 'SERVER_NAME' ] = 'servername' ;
2010-12-07 21:51:45 +00:00
$server [ 'SERVER_PORT' ] = '8080' ;
$server [ 'QUERY_STRING' ] = 'query=string' ;
$server [ 'REQUEST_URI' ] = '/index.php/path/info?query=string' ;
$server [ 'SCRIPT_NAME' ] = '/index.php' ;
$server [ 'PATH_INFO' ] = '/path/info' ;
$server [ 'PATH_TRANSLATED' ] = 'redirect:/index.php/path/info' ;
$server [ 'PHP_SELF' ] = '/index_dev.php/path/info' ;
$server [ 'SCRIPT_FILENAME' ] = '/some/where/index.php' ;
$request = new Request ();
2011-01-27 03:22:24 +00:00
$request -> initialize ( array (), array (), array (), array (), array (), $server );
2010-12-07 21:51:45 +00:00
$this -> assertEquals ( 'http://hostname:8080/index.php/path/info?query=string' , $request -> getUri (), '->getUri() with non default port' );
// Use std port number
$server [ 'HTTP_HOST' ] = 'hostname' ;
2011-05-25 21:02:16 +01:00
$server [ 'SERVER_NAME' ] = 'servername' ;
2010-12-07 21:51:45 +00:00
$server [ 'SERVER_PORT' ] = '80' ;
2011-01-27 03:22:24 +00:00
$request -> initialize ( array (), array (), array (), array (), array (), $server );
2010-12-07 21:51:45 +00:00
$this -> assertEquals ( 'http://hostname/index.php/path/info?query=string' , $request -> getUri (), '->getUri() with default port' );
// Without HOST HEADER
unset ( $server [ 'HTTP_HOST' ]);
2011-05-25 21:02:16 +01:00
$server [ 'SERVER_NAME' ] = 'servername' ;
2010-12-07 21:51:45 +00:00
$server [ 'SERVER_PORT' ] = '80' ;
2011-01-27 03:22:24 +00:00
$request -> initialize ( array (), array (), array (), array (), array (), $server );
2010-12-07 21:51:45 +00:00
2011-05-25 21:02:16 +01:00
$this -> assertEquals ( 'http://servername/index.php/path/info?query=string' , $request -> getUri (), '->getUri() with default port without HOST_HEADER' );
2010-12-07 21:51:45 +00:00
// Request with URL REWRITING (hide index.php)
// RewriteCond %{REQUEST_FILENAME} !-f
// RewriteRule ^(.*)$ index.php [QSA,L]
// http://hostname:8080/path/info?query=string
$server = array ();
$server [ 'HTTP_HOST' ] = 'hostname:8080' ;
2011-05-25 21:02:16 +01:00
$server [ 'SERVER_NAME' ] = 'servername' ;
2010-12-07 21:51:45 +00:00
$server [ 'SERVER_PORT' ] = '8080' ;
$server [ 'REDIRECT_QUERY_STRING' ] = 'query=string' ;
$server [ 'REDIRECT_URL' ] = '/path/info' ;
$server [ 'SCRIPT_NAME' ] = '/index.php' ;
$server [ 'QUERY_STRING' ] = 'query=string' ;
$server [ 'REQUEST_URI' ] = '/path/info?toto=test&1=1' ;
$server [ 'SCRIPT_NAME' ] = '/index.php' ;
$server [ 'PHP_SELF' ] = '/index.php' ;
$server [ 'SCRIPT_FILENAME' ] = '/some/where/index.php' ;
2011-01-27 03:22:24 +00:00
$request -> initialize ( array (), array (), array (), array (), array (), $server );
2010-12-07 21:51:45 +00:00
$this -> assertEquals ( 'http://hostname:8080/path/info?query=string' , $request -> getUri (), '->getUri() with rewrite' );
// Use std port number
// http://hostname/path/info?query=string
$server [ 'HTTP_HOST' ] = 'hostname' ;
2011-05-25 21:02:16 +01:00
$server [ 'SERVER_NAME' ] = 'servername' ;
2010-12-07 21:51:45 +00:00
$server [ 'SERVER_PORT' ] = '80' ;
2011-01-27 03:22:24 +00:00
$request -> initialize ( array (), array (), array (), array (), array (), $server );
2010-12-07 21:51:45 +00:00
$this -> assertEquals ( 'http://hostname/path/info?query=string' , $request -> getUri (), '->getUri() with rewrite and default port' );
// Without HOST HEADER
unset ( $server [ 'HTTP_HOST' ]);
2011-05-25 21:02:16 +01:00
$server [ 'SERVER_NAME' ] = 'servername' ;
2010-12-07 21:51:45 +00:00
$server [ 'SERVER_PORT' ] = '80' ;
2011-01-27 03:22:24 +00:00
$request -> initialize ( array (), array (), array (), array (), array (), $server );
2010-12-07 21:51:45 +00:00
2011-05-25 21:02:16 +01:00
$this -> assertEquals ( 'http://servername/path/info?query=string' , $request -> getUri (), '->getUri() with rewrite, default port without HOST_HEADER' );
2010-12-07 21:51:45 +00:00
}
/**
* @ covers Symfony\Component\HttpFoundation\Request :: getUriForPath
*/
public function testGetUriForPath ()
{
$request = Request :: create ( 'http://test.com/foo?bar=baz' );
$this -> assertEquals ( 'http://test.com/some/path' , $request -> getUriForPath ( '/some/path' ));
$request = Request :: create ( 'http://test.com:90/foo?bar=baz' );
$this -> assertEquals ( 'http://test.com:90/some/path' , $request -> getUriForPath ( '/some/path' ));
$request = Request :: create ( 'https://test.com/foo?bar=baz' );
$this -> assertEquals ( 'https://test.com/some/path' , $request -> getUriForPath ( '/some/path' ));
$request = Request :: create ( 'https://test.com:90/foo?bar=baz' );
$this -> assertEquals ( 'https://test.com:90/some/path' , $request -> getUriForPath ( '/some/path' ));
$server = array ();
// Standard Request on non default PORT
// http://hostname:8080/index.php/path/info?query=string
$server [ 'HTTP_HOST' ] = 'hostname:8080' ;
2011-05-25 21:02:16 +01:00
$server [ 'SERVER_NAME' ] = 'servername' ;
2010-12-07 21:51:45 +00:00
$server [ 'SERVER_PORT' ] = '8080' ;
$server [ 'QUERY_STRING' ] = 'query=string' ;
$server [ 'REQUEST_URI' ] = '/index.php/path/info?query=string' ;
$server [ 'SCRIPT_NAME' ] = '/index.php' ;
$server [ 'PATH_INFO' ] = '/path/info' ;
$server [ 'PATH_TRANSLATED' ] = 'redirect:/index.php/path/info' ;
$server [ 'PHP_SELF' ] = '/index_dev.php/path/info' ;
$server [ 'SCRIPT_FILENAME' ] = '/some/where/index.php' ;
$request = new Request ();
2011-01-27 03:22:24 +00:00
$request -> initialize ( array (), array (), array (), array (), array (), $server );
2010-12-07 21:51:45 +00:00
$this -> assertEquals ( 'http://hostname:8080/index.php/some/path' , $request -> getUriForPath ( '/some/path' ), '->getUriForPath() with non default port' );
// Use std port number
$server [ 'HTTP_HOST' ] = 'hostname' ;
2011-05-25 21:02:16 +01:00
$server [ 'SERVER_NAME' ] = 'servername' ;
2010-12-07 21:51:45 +00:00
$server [ 'SERVER_PORT' ] = '80' ;
2011-01-27 03:22:24 +00:00
$request -> initialize ( array (), array (), array (), array (), array (), $server );
2010-12-07 21:51:45 +00:00
$this -> assertEquals ( 'http://hostname/index.php/some/path' , $request -> getUriForPath ( '/some/path' ), '->getUriForPath() with default port' );
// Without HOST HEADER
unset ( $server [ 'HTTP_HOST' ]);
2011-05-25 21:02:16 +01:00
$server [ 'SERVER_NAME' ] = 'servername' ;
2010-12-07 21:51:45 +00:00
$server [ 'SERVER_PORT' ] = '80' ;
2011-01-27 03:22:24 +00:00
$request -> initialize ( array (), array (), array (), array (), array (), $server );
2010-12-07 21:51:45 +00:00
2011-05-25 21:02:16 +01:00
$this -> assertEquals ( 'http://servername/index.php/some/path' , $request -> getUriForPath ( '/some/path' ), '->getUriForPath() with default port without HOST_HEADER' );
2010-12-07 21:51:45 +00:00
// Request with URL REWRITING (hide index.php)
// RewriteCond %{REQUEST_FILENAME} !-f
// RewriteRule ^(.*)$ index.php [QSA,L]
// http://hostname:8080/path/info?query=string
$server = array ();
$server [ 'HTTP_HOST' ] = 'hostname:8080' ;
2011-05-25 21:02:16 +01:00
$server [ 'SERVER_NAME' ] = 'servername' ;
2010-12-07 21:51:45 +00:00
$server [ 'SERVER_PORT' ] = '8080' ;
$server [ 'REDIRECT_QUERY_STRING' ] = 'query=string' ;
$server [ 'REDIRECT_URL' ] = '/path/info' ;
$server [ 'SCRIPT_NAME' ] = '/index.php' ;
$server [ 'QUERY_STRING' ] = 'query=string' ;
$server [ 'REQUEST_URI' ] = '/path/info?toto=test&1=1' ;
$server [ 'SCRIPT_NAME' ] = '/index.php' ;
$server [ 'PHP_SELF' ] = '/index.php' ;
$server [ 'SCRIPT_FILENAME' ] = '/some/where/index.php' ;
2011-01-27 03:22:24 +00:00
$request -> initialize ( array (), array (), array (), array (), array (), $server );
2010-12-07 21:51:45 +00:00
$this -> assertEquals ( 'http://hostname:8080/some/path' , $request -> getUriForPath ( '/some/path' ), '->getUri() with rewrite' );
// Use std port number
// http://hostname/path/info?query=string
$server [ 'HTTP_HOST' ] = 'hostname' ;
2011-05-25 21:02:16 +01:00
$server [ 'SERVER_NAME' ] = 'servername' ;
2010-12-07 21:51:45 +00:00
$server [ 'SERVER_PORT' ] = '80' ;
2011-01-27 03:22:24 +00:00
$request -> initialize ( array (), array (), array (), array (), array (), $server );
2010-12-07 21:51:45 +00:00
$this -> assertEquals ( 'http://hostname/some/path' , $request -> getUriForPath ( '/some/path' ), '->getUriForPath() with rewrite and default port' );
// Without HOST HEADER
unset ( $server [ 'HTTP_HOST' ]);
2011-05-25 21:02:16 +01:00
$server [ 'SERVER_NAME' ] = 'servername' ;
2010-12-07 21:51:45 +00:00
$server [ 'SERVER_PORT' ] = '80' ;
2011-01-27 03:22:24 +00:00
$request -> initialize ( array (), array (), array (), array (), array (), $server );
2010-12-07 21:51:45 +00:00
2011-05-25 21:02:16 +01:00
$this -> assertEquals ( 'http://servername/some/path' , $request -> getUriForPath ( '/some/path' ), '->getUriForPath() with rewrite, default port without HOST_HEADER' );
$this -> assertEquals ( 'servername' , $request -> getHttpHost ());
2010-05-06 12:25:53 +01:00
}
2010-09-03 19:42:46 +01:00
/**
* @ covers Symfony\Component\HttpFoundation\Request :: getQueryString
*/
public function testGetQueryString ()
{
$request = new Request ();
$request -> server -> set ( 'QUERY_STRING' , 'foo' );
$this -> assertEquals ( 'foo' , $request -> getQueryString (), '->getQueryString() works with valueless parameters' );
$request -> server -> set ( 'QUERY_STRING' , 'foo=' );
$this -> assertEquals ( 'foo=' , $request -> getQueryString (), '->getQueryString() includes a dangling equal sign' );
$request -> server -> set ( 'QUERY_STRING' , 'bar=&foo=bar' );
$this -> assertEquals ( 'bar=&foo=bar' , $request -> getQueryString (), '->getQueryString() works when empty parameters' );
$request -> server -> set ( 'QUERY_STRING' , 'foo=bar&bar=' );
$this -> assertEquals ( 'bar=&foo=bar' , $request -> getQueryString (), '->getQueryString() sorts keys alphabetically' );
$request -> server -> set ( 'QUERY_STRING' , 'him=John%20Doe&her=Jane+Doe' );
2011-05-03 22:09:15 +01:00
$this -> assertEquals ( 'her=Jane%2BDoe&him=John%20Doe' , $request -> getQueryString (), '->getQueryString() normalizes encoding' );
2010-09-03 19:42:46 +01:00
$request -> server -> set ( 'QUERY_STRING' , 'foo[]=1&foo[]=2' );
$this -> assertEquals ( 'foo%5B%5D=1&foo%5B%5D=2' , $request -> getQueryString (), '->getQueryString() allows array notation' );
$request -> server -> set ( 'QUERY_STRING' , 'foo=1&foo=2' );
$this -> assertEquals ( 'foo=1&foo=2' , $request -> getQueryString (), '->getQueryString() allows repeated parameters' );
}
2010-09-09 13:40:40 +01:00
2010-10-27 21:56:16 +01:00
/**
* @ covers Symfony\Component\HttpFoundation\Request :: getHost
*/
public function testGetHost ()
{
$request = new Request ();
$request -> initialize ( array ( 'foo' => 'bar' ));
$this -> assertEquals ( '' , $request -> getHost (), '->getHost() return empty string if not initialized' );
2011-01-27 03:22:24 +00:00
$request -> initialize ( array (), array (), array (), array (), array (), array ( 'HTTP_HOST' => 'www.exemple.com' ));
2010-10-27 21:56:16 +01:00
$this -> assertEquals ( 'www.exemple.com' , $request -> getHost (), '->getHost() from Host Header' );
// Host header with port number.
2011-01-27 03:22:24 +00:00
$request -> initialize ( array (), array (), array (), array (), array (), array ( 'HTTP_HOST' => 'www.exemple.com:8080' ));
2010-10-27 21:56:16 +01:00
$this -> assertEquals ( 'www.exemple.com' , $request -> getHost (), '->getHost() from Host Header with port number' );
// Server values.
2011-01-27 03:22:24 +00:00
$request -> initialize ( array (), array (), array (), array (), array (), array ( 'SERVER_NAME' => 'www.exemple.com' ));
2010-10-27 21:56:16 +01:00
$this -> assertEquals ( 'www.exemple.com' , $request -> getHost (), '->getHost() from server name' );
// X_FORWARDED_HOST.
2011-01-27 03:22:24 +00:00
$request -> initialize ( array (), array (), array (), array (), array (), array ( 'HTTP_X_FORWARDED_HOST' => 'www.exemple.com' ));
2010-10-27 21:56:16 +01:00
$this -> assertEquals ( 'www.exemple.com' , $request -> getHost (), '->getHost() from X_FORWARDED_HOST' );
// X_FORWARDED_HOST
2011-01-27 03:22:24 +00:00
$request -> initialize ( array (), array (), array (), array (), array (), array ( 'HTTP_X_FORWARDED_HOST' => 'www.exemple.com, www.second.com' ));
2010-10-27 21:56:16 +01:00
$this -> assertEquals ( 'www.second.com' , $request -> getHost (), '->getHost() value from X_FORWARDED_HOST use last value' );
// X_FORWARDED_HOST with port number
2011-01-27 03:22:24 +00:00
$request -> initialize ( array (), array (), array (), array (), array (), array ( 'HTTP_X_FORWARDED_HOST' => 'www.exemple.com, www.second.com:8080' ));
2010-10-27 21:56:16 +01:00
$this -> assertEquals ( 'www.second.com' , $request -> getHost (), '->getHost() value from X_FORWARDED_HOST with port number' );
2011-01-27 03:22:24 +00:00
$request -> initialize ( array (), array (), array (), array (), array (), array ( 'HTTP_HOST' => 'www.exemple.com' , 'HTTP_X_FORWARDED_HOST' => 'www.forward.com' ));
2010-10-27 21:56:16 +01:00
$this -> assertEquals ( 'www.forward.com' , $request -> getHost (), '->getHost() value from X_FORWARDED_HOST has priority over Host' );
2011-01-27 03:22:24 +00:00
$request -> initialize ( array (), array (), array (), array (), array (), array ( 'SERVER_NAME' => 'www.exemple.com' , 'HTTP_X_FORWARDED_HOST' => 'www.forward.com' ));
2010-10-27 21:56:16 +01:00
$this -> assertEquals ( 'www.forward.com' , $request -> getHost (), '->getHost() value from X_FORWARDED_HOST has priority over SERVER_NAME ' );
2011-01-27 03:22:24 +00:00
$request -> initialize ( array (), array (), array (), array (), array (), array ( 'SERVER_NAME' => 'www.exemple.com' , 'HTTP_HOST' => 'www.host.com' ));
2010-10-27 21:56:16 +01:00
$this -> assertEquals ( 'www.host.com' , $request -> getHost (), '->getHost() value from Host header has priority over SERVER_NAME ' );
2010-12-08 06:24:37 +00:00
}
/**
* @ covers Symfony\Component\HttpFoundation\Request :: setMethod
* @ covers Symfony\Component\HttpFoundation\Request :: getMethod
*/
public function testGetSetMethod ()
{
$request = new Request ();
$this -> assertEquals ( 'GET' , $request -> getMethod (), '->getMethod() returns GET if no method is defined' );
$request -> setMethod ( 'get' );
$this -> assertEquals ( 'GET' , $request -> getMethod (), '->getMethod() returns an uppercased string' );
$request -> setMethod ( 'PURGE' );
$this -> assertEquals ( 'PURGE' , $request -> getMethod (), '->getMethod() returns the method even if it is not a standard one' );
2010-10-27 21:56:16 +01:00
2010-12-08 06:24:37 +00:00
$request -> setMethod ( 'POST' );
$this -> assertEquals ( 'POST' , $request -> getMethod (), '->getMethod() returns the method POST if no _method is defined' );
2010-10-27 21:56:16 +01:00
2010-12-08 06:24:37 +00:00
$request -> setMethod ( 'POST' );
$request -> request -> set ( '_method' , 'purge' );
$this -> assertEquals ( 'PURGE' , $request -> getMethod (), '->getMethod() returns the method from _method if defined and POST' );
2011-06-08 18:56:59 +01:00
2011-05-19 07:59:27 +01:00
$request -> setMethod ( 'POST' );
2011-08-18 11:19:27 +01:00
$request -> headers -> set ( 'X-HTTP-METHOD-OVERRIDE' , 'delete' );
2011-05-19 07:59:27 +01:00
$this -> assertEquals ( 'DELETE' , $request -> getMethod (), '->getMethod() returns the method from X-HTTP-Method-Override even though _method is set if defined and POST' );
2011-06-08 18:56:59 +01:00
2011-05-19 07:59:27 +01:00
$request = new Request ();
$request -> setMethod ( 'POST' );
2011-08-18 11:19:27 +01:00
$request -> headers -> set ( 'X-HTTP-METHOD-OVERRIDE' , 'delete' );
2011-05-19 07:59:27 +01:00
$this -> assertEquals ( 'DELETE' , $request -> getMethod (), '->getMethod() returns the method from X-HTTP-Method-Override if defined and POST' );
2010-10-27 21:56:16 +01:00
}
2011-04-22 14:42:07 +01:00
/**
* @ dataProvider testGetClientIpProvider
*/
public function testGetClientIp ( $expected , $proxy , $remoteAddr , $httpClientIp , $httpForwardedFor )
2011-02-07 01:40:20 +00:00
{
$request = new Request ;
$this -> assertEquals ( '' , $request -> getClientIp ());
$this -> assertEquals ( '' , $request -> getClientIp ( true ));
2011-04-22 14:42:07 +01:00
$server = array ( 'REMOTE_ADDR' => $remoteAddr );
2011-06-03 10:16:32 +01:00
if ( null !== $httpClientIp ) {
2011-04-22 14:42:07 +01:00
$server [ 'HTTP_CLIENT_IP' ] = $httpClientIp ;
}
2011-06-03 10:16:32 +01:00
if ( null !== $httpForwardedFor ) {
2011-04-22 14:42:07 +01:00
$server [ 'HTTP_X_FORWARDED_FOR' ] = $httpForwardedFor ;
}
$request -> initialize ( array (), array (), array (), array (), array (), $server );
$this -> assertEquals ( $expected , $request -> getClientIp ( $proxy ));
}
public function testGetClientIpProvider ()
{
return array (
array ( '88.88.88.88' , false , '88.88.88.88' , null , null ),
array ( '127.0.0.1' , false , '127.0.0.1' , '88.88.88.88' , null ),
array ( '88.88.88.88' , true , '127.0.0.1' , '88.88.88.88' , null ),
array ( '127.0.0.1' , false , '127.0.0.1' , null , '88.88.88.88' ),
array ( '88.88.88.88' , true , '127.0.0.1' , null , '88.88.88.88' ),
2011-04-22 15:28:15 +01:00
array ( '::1' , false , '::1' , null , null ),
array ( '2620:0:1cfe:face:b00c::3' , true , '::1' , '2620:0:1cfe:face:b00c::3' , null ),
2011-11-22 21:28:38 +00:00
array ( '2620:0:1cfe:face:b00c::3' , true , '::1' , null , '2620:0:1cfe:face:b00c::3, ::1' ),
array ( '88.88.88.88' , true , '123.45.67.89' , null , '88.88.88.88, 87.65.43.21, 127.0.0.1' ),
2011-04-22 14:42:07 +01:00
);
2011-02-07 01:40:20 +00:00
}
2010-12-12 23:22:47 +00:00
public function testGetContentWorksTwiceInDefaultMode ()
{
$req = new Request ;
$this -> assertEquals ( '' , $req -> getContent ());
$this -> assertEquals ( '' , $req -> getContent ());
}
public function testGetContentReturnsResource ()
{
$req = new Request ;
$retval = $req -> getContent ( true );
2011-01-02 22:08:16 +00:00
$this -> assertInternalType ( 'resource' , $retval );
2010-12-12 23:22:47 +00:00
$this -> assertEquals ( " " , fread ( $retval , 1 ));
$this -> assertTrue ( feof ( $retval ));
}
/**
* @ expectedException LogicException
* @ dataProvider getContentCantBeCalledTwiceWithResourcesProvider
*/
public function testGetContentCantBeCalledTwiceWithResources ( $first , $second )
{
$req = new Request ;
$req -> getContent ( $first );
$req -> getContent ( $second );
}
public function getContentCantBeCalledTwiceWithResourcesProvider ()
{
return array (
'Resource then fetch' => array ( true , false ),
'Resource then resource' => array ( true , true ),
'Fetch then resource' => array ( false , true ),
);
}
2012-01-25 13:56:27 +00:00
public function provideOverloadedMethods ()
2012-01-24 18:46:37 +00:00
{
return array (
array ( 'PUT' ),
array ( 'DELETE' ),
array ( 'PATCH' ),
);
}
/**
2012-01-25 13:56:27 +00:00
* @ dataProvider provideOverloadedMethods
2012-01-24 18:46:37 +00:00
*/
public function testCreateFromGlobals ( $method )
2010-09-09 13:40:40 +01:00
{
2011-01-27 03:22:24 +00:00
$_GET [ 'foo1' ] = 'bar1' ;
$_POST [ 'foo2' ] = 'bar2' ;
$_COOKIE [ 'foo3' ] = 'bar3' ;
$_FILES [ 'foo4' ] = array ( 'bar4' );
$_SERVER [ 'foo5' ] = 'bar5' ;
2011-01-27 20:20:08 +00:00
$request = Request :: createFromGlobals ();
2011-01-27 03:22:24 +00:00
$this -> assertEquals ( 'bar1' , $request -> query -> get ( 'foo1' ), '::fromGlobals() uses values from $_GET' );
$this -> assertEquals ( 'bar2' , $request -> request -> get ( 'foo2' ), '::fromGlobals() uses values from $_POST' );
$this -> assertEquals ( 'bar3' , $request -> cookies -> get ( 'foo3' ), '::fromGlobals() uses values from $_COOKIE' );
$this -> assertEquals ( array ( 'bar4' ), $request -> files -> get ( 'foo4' ), '::fromGlobals() uses values from $_FILES' );
$this -> assertEquals ( 'bar5' , $request -> server -> get ( 'foo5' ), '::fromGlobals() uses values from $_SERVER' );
unset ( $_GET [ 'foo1' ], $_POST [ 'foo2' ], $_COOKIE [ 'foo3' ], $_FILES [ 'foo4' ], $_SERVER [ 'foo5' ]);
2011-08-18 18:10:51 +01:00
2012-01-24 18:46:37 +00:00
$_SERVER [ 'REQUEST_METHOD' ] = $method ;
2011-08-18 18:10:51 +01:00
$_SERVER [ 'CONTENT_TYPE' ] = 'application/x-www-form-urlencoded' ;
$request = RequestContentProxy :: createFromGlobals ();
2012-01-24 18:46:37 +00:00
$this -> assertEquals ( $method , $request -> getMethod ());
2011-08-18 18:10:51 +01:00
$this -> assertEquals ( 'mycontent' , $request -> request -> get ( 'content' ));
unset ( $_SERVER [ 'REQUEST_METHOD' ], $_SERVER [ 'CONTENT_TYPE' ]);
2012-01-24 18:46:37 +00:00
$_POST [ '_method' ] = $method ;
2011-08-18 18:10:51 +01:00
$_POST [ 'foo6' ] = 'bar6' ;
$_SERVER [ 'REQUEST_METHOD' ] = 'POST' ;
$request = Request :: createFromGlobals ();
2012-01-24 18:46:37 +00:00
$this -> assertEquals ( $method , $request -> getMethod ());
2011-08-18 18:10:51 +01:00
$this -> assertEquals ( 'bar6' , $request -> request -> get ( 'foo6' ));
unset ( $_POST [ '_method' ], $_POST [ 'foo6' ], $_SERVER [ 'REQUEST_METHOD' ]);
2010-09-09 13:40:40 +01:00
}
2011-02-07 01:40:20 +00:00
public function testOverrideGlobals ()
{
$request = new Request ();
$request -> initialize ( array ( 'foo' => 'bar' ));
2011-03-05 10:51:09 +00:00
// as the Request::overrideGlobals really work, it erase $_SERVER, so we must backup it
$server = $_SERVER ;
2011-02-07 01:40:20 +00:00
$request -> overrideGlobals ();
$this -> assertEquals ( array ( 'foo' => 'bar' ), $_GET );
$request -> initialize ( array (), array ( 'foo' => 'bar' ));
$request -> overrideGlobals ();
$this -> assertEquals ( array ( 'foo' => 'bar' ), $_POST );
$this -> assertArrayNotHasKey ( 'HTTP_X_FORWARDED_PROTO' , $_SERVER );
$request -> headers -> set ( 'X_FORWARDED_PROTO' , 'https' );
$this -> assertTrue ( $request -> isSecure ());
$request -> overrideGlobals ();
$this -> assertArrayHasKey ( 'HTTP_X_FORWARDED_PROTO' , $_SERVER );
2011-03-05 10:51:09 +00:00
// restore initial $_SERVER array
$_SERVER = $server ;
2011-02-07 01:40:20 +00:00
}
public function testGetScriptName ()
{
$request = new Request ();
$this -> assertEquals ( '' , $request -> getScriptName ());
$server = array ();
$server [ 'SCRIPT_NAME' ] = '/index.php' ;
$request -> initialize ( array (), array (), array (), array (), array (), $server );
$this -> assertEquals ( '/index.php' , $request -> getScriptName ());
$server = array ();
$server [ 'ORIG_SCRIPT_NAME' ] = '/frontend.php' ;
$request -> initialize ( array (), array (), array (), array (), array (), $server );
$this -> assertEquals ( '/frontend.php' , $request -> getScriptName ());
$server = array ();
$server [ 'SCRIPT_NAME' ] = '/index.php' ;
$server [ 'ORIG_SCRIPT_NAME' ] = '/frontend.php' ;
$request -> initialize ( array (), array (), array (), array (), array (), $server );
$this -> assertEquals ( '/index.php' , $request -> getScriptName ());
}
public function testGetBasePath ()
{
$request = new Request ();
$this -> assertEquals ( '' , $request -> getBasePath ());
$server = array ();
$server [ 'SCRIPT_FILENAME' ] = '/some/where/index.php' ;
$request -> initialize ( array (), array (), array (), array (), array (), $server );
$this -> assertEquals ( '' , $request -> getBasePath ());
$server = array ();
$server [ 'SCRIPT_FILENAME' ] = '/some/where/index.php' ;
$server [ 'SCRIPT_NAME' ] = '/index.php' ;
$request -> initialize ( array (), array (), array (), array (), array (), $server );
$this -> assertEquals ( '' , $request -> getBasePath ());
$server = array ();
$server [ 'SCRIPT_FILENAME' ] = '/some/where/index.php' ;
$server [ 'PHP_SELF' ] = '/index.php' ;
$request -> initialize ( array (), array (), array (), array (), array (), $server );
$this -> assertEquals ( '' , $request -> getBasePath ());
$server = array ();
$server [ 'SCRIPT_FILENAME' ] = '/some/where/index.php' ;
$server [ 'ORIG_SCRIPT_NAME' ] = '/index.php' ;
$request -> initialize ( array (), array (), array (), array (), array (), $server );
$this -> assertEquals ( '' , $request -> getBasePath ());
}
2011-09-28 12:18:44 +01:00
public function testGetPathInfo ()
{
$request = new Request ();
$this -> assertEquals ( '/' , $request -> getPathInfo ());
$server = array ();
$server [ 'REQUEST_URI' ] = '/path/info' ;
$request -> initialize ( array (), array (), array (), array (), array (), $server );
$this -> assertEquals ( '/path/info' , $request -> getPathInfo ());
$server = array ();
$server [ 'REQUEST_URI' ] = '/path test/info' ;
$request -> initialize ( array (), array (), array (), array (), array (), $server );
$this -> assertEquals ( '/path test/info' , $request -> getPathInfo ());
$server = array ();
$server [ 'REQUEST_URI' ] = '/path%20test/info' ;
$request -> initialize ( array (), array (), array (), array (), array (), $server );
$this -> assertEquals ( '/path test/info' , $request -> getPathInfo ());
}
2011-02-07 01:40:20 +00:00
public function testGetPreferredLanguage ()
{
$request = new Request ();
2012-01-09 05:33:53 +00:00
$this -> assertNull ( $request -> getPreferredLanguage ());
$this -> assertNull ( $request -> getPreferredLanguage ( array ()));
2011-02-07 01:40:20 +00:00
$this -> assertEquals ( 'fr' , $request -> getPreferredLanguage ( array ( 'fr' )));
$this -> assertEquals ( 'fr' , $request -> getPreferredLanguage ( array ( 'fr' , 'en' )));
$this -> assertEquals ( 'en' , $request -> getPreferredLanguage ( array ( 'en' , 'fr' )));
$this -> assertEquals ( 'fr-ch' , $request -> getPreferredLanguage ( array ( 'fr-ch' , 'fr-fr' )));
$request = new Request ();
$request -> headers -> set ( 'Accept-language' , 'zh, en-us; q=0.8, en; q=0.6' );
$this -> assertEquals ( 'en' , $request -> getPreferredLanguage ( array ( 'en' , 'en-us' )));
$request = new Request ();
$request -> headers -> set ( 'Accept-language' , 'zh, en-us; q=0.8, en; q=0.6' );
$this -> assertEquals ( 'en' , $request -> getPreferredLanguage ( array ( 'fr' , 'en' )));
}
public function testIsXmlHttpRequest ()
{
$request = new Request ();
$this -> assertFalse ( $request -> isXmlHttpRequest ());
$request -> headers -> set ( 'X-Requested-With' , 'XMLHttpRequest' );
$this -> assertTrue ( $request -> isXmlHttpRequest ());
$request -> headers -> remove ( 'X-Requested-With' );
$this -> assertFalse ( $request -> isXmlHttpRequest ());
}
public function testGetCharsets ()
{
$request = new Request ();
$this -> assertEquals ( array (), $request -> getCharsets ());
$request -> headers -> set ( 'Accept-Charset' , 'ISO-8859-1, US-ASCII, UTF-8; q=0.8, ISO-10646-UCS-2; q=0.6' );
$this -> assertEquals ( array (), $request -> getCharsets ()); // testing caching
$request = new Request ();
$request -> headers -> set ( 'Accept-Charset' , 'ISO-8859-1, US-ASCII, UTF-8; q=0.8, ISO-10646-UCS-2; q=0.6' );
$this -> assertEquals ( array ( 'ISO-8859-1' , 'US-ASCII' , 'UTF-8' , 'ISO-10646-UCS-2' ), $request -> getCharsets ());
2011-04-15 20:12:02 +01:00
2011-02-07 01:40:20 +00:00
$request = new Request ();
$request -> headers -> set ( 'Accept-Charset' , 'ISO-8859-1,utf-8;q=0.7,*;q=0.7' );
$this -> assertEquals ( array ( 'ISO-8859-1' , '*' , 'utf-8' ), $request -> getCharsets ());
}
public function testGetAcceptableContentTypes ()
{
$request = new Request ();
$this -> assertEquals ( array (), $request -> getAcceptableContentTypes ());
$request -> headers -> set ( 'Accept' , 'application/vnd.wap.wmlscriptc, text/vnd.wap.wml, application/vnd.wap.xhtml+xml, application/xhtml+xml, text/html, multipart/mixed, */*' );
$this -> assertEquals ( array (), $request -> getAcceptableContentTypes ()); // testing caching
$request = new Request ();
$request -> headers -> set ( 'Accept' , 'application/vnd.wap.wmlscriptc, text/vnd.wap.wml, application/vnd.wap.xhtml+xml, application/xhtml+xml, text/html, multipart/mixed, */*' );
$this -> assertEquals ( array ( 'multipart/mixed' , '*/*' , 'text/html' , 'application/xhtml+xml' , 'text/vnd.wap.wml' , 'application/vnd.wap.xhtml+xml' , 'application/vnd.wap.wmlscriptc' ), $request -> getAcceptableContentTypes ());
}
public function testGetLanguages ()
{
$request = new Request ();
2011-03-19 11:29:23 +00:00
$this -> assertEquals ( array (), $request -> getLanguages ());
2011-02-07 01:40:20 +00:00
$request = new Request ();
$request -> headers -> set ( 'Accept-language' , 'zh, en-us; q=0.8, en; q=0.6' );
$this -> assertEquals ( array ( 'zh' , 'en_US' , 'en' ), $request -> getLanguages ());
$this -> assertEquals ( array ( 'zh' , 'en_US' , 'en' ), $request -> getLanguages ());
$request = new Request ();
$request -> headers -> set ( 'Accept-language' , 'zh, i-cherokee; q=0.6' );
$this -> assertEquals ( array ( 'zh' , 'cherokee' ), $request -> getLanguages ());
}
2011-04-17 13:37:35 +01:00
public function testGetRequestFormat ()
{
$request = new Request ();
$this -> assertEquals ( 'html' , $request -> getRequestFormat ());
$request = new Request ();
2011-07-29 10:10:42 +01:00
$this -> assertNull ( $request -> getRequestFormat ( null ));
2011-04-17 13:37:35 +01:00
$request = new Request ();
2011-07-29 10:10:42 +01:00
$this -> assertNull ( $request -> setRequestFormat ( 'foo' ));
2011-04-17 13:37:35 +01:00
$this -> assertEquals ( 'foo' , $request -> getRequestFormat ( null ));
}
2011-05-04 17:54:31 +01:00
public function testForwardedSecure ()
{
$request = new Request ();
$request -> headers -> set ( 'X-Forwarded-Proto' , 'https' );
$request -> headers -> set ( 'X-Forwarded-Port' , 443 );
$this -> assertTrue ( $request -> isSecure ());
$this -> assertEquals ( 443 , $request -> getPort ());
}
2011-05-05 08:14:48 +01:00
public function testHasSession ()
{
$request = new Request ;
$this -> assertFalse ( $request -> hasSession ());
2012-02-11 11:04:05 +00:00
$request -> setSession ( new Session ( new MockArraySessionStorage ()));
2011-05-05 08:14:48 +01:00
$this -> assertTrue ( $request -> hasSession ());
}
public function testHasPreviousSession ()
{
$request = new Request ;
$this -> assertFalse ( $request -> hasPreviousSession ());
$request -> cookies -> set ( session_name (), 'foo' );
$this -> assertFalse ( $request -> hasPreviousSession ());
2012-02-11 11:04:05 +00:00
$request -> setSession ( new Session ( new MockArraySessionStorage ()));
2011-05-05 08:14:48 +01:00
$this -> assertTrue ( $request -> hasPreviousSession ());
}
2011-06-14 09:44:38 +01:00
public function testToString ()
{
$request = new Request ();
$request -> headers -> set ( 'Accept-language' , 'zh, en-us; q=0.8, en; q=0.6' );
$this -> assertContains ( 'Accept-Language: zh, en-us; q=0.8, en; q=0.6' , $request -> __toString ());
}
2011-10-09 11:58:45 +01:00
/**
* @ dataProvider splitHttpAcceptHeaderData
*/
public function testSplitHttpAcceptHeader ( $acceptHeader , $expected )
{
$request = new Request ();
$this -> assertEquals ( $expected , $request -> splitHttpAcceptHeader ( $acceptHeader ));
}
public function splitHttpAcceptHeaderData ()
{
return array (
array ( null , array ()),
array ( 'text/html;q=0.8' , array ( 'text/html' => 0.8 )),
array ( 'text/html;foo=bar;q=0.8 ' , array ( 'text/html;foo=bar' => 0.8 )),
array ( 'text/html;charset=utf-8; q=0.8' , array ( 'text/html;charset=utf-8' => 0.8 )),
array ( 'text/html,application/xml;q=0.9,*/*;charset=utf-8; q=0.8' , array ( 'text/html' => 1 , 'application/xml' => 0.9 , '*/*;charset=utf-8' => 0.8 )),
array ( 'text/html,application/xhtml+xml;q=0.9,*/*;q=0.8; foo=bar' , array ( 'text/html' => 1 , 'application/xhtml+xml' => 0.9 , '*/*' => 0.8 )),
array ( 'text/html,application/xhtml+xml;charset=utf-8;q=0.9; foo=bar,*/*' , array ( 'text/html' => 1 , '*/*' => 1 , 'application/xhtml+xml;charset=utf-8' => 0.9 )),
array ( 'text/html,application/xhtml+xml' , array ( 'application/xhtml+xml' => 1 , 'text/html' => 1 )),
);
}
2010-03-25 07:55:50 +00:00
}
2011-08-18 18:10:51 +01:00
class RequestContentProxy extends Request
{
public function getContent ( $asResource = false )
{
return http_build_query ( array ( '_method' => 'PUT' , 'content' => 'mycontent' ));
}
}