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 .
*/
2012-03-28 14:43:52 +01:00
namespace Symfony\Component\HttpFoundation\Tests ;
2010-03-25 07:55:50 +00: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
{
2012-12-03 20:43:03 +00:00
public function deprecationErrorHandler ( $errorNumber , $message , $file , $line , $context )
{
if ( $errorNumber & E_USER_DEPRECATED ) {
return true ;
}
2012-12-03 21:04:34 +00:00
return \PHPUnit_Util_ErrorHandler :: handleError ( $errorNumber , $message , $file , $line );
2012-12-03 20:43:03 +00:00
}
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
2012-09-11 17:36:43 +01:00
public function testGetLocale ()
{
$request = new Request ();
$request -> setLocale ( 'pl' );
$locale = $request -> getLocale ();
$this -> assertEquals ( 'pl' , $locale );
}
public function testGetUser ()
{
$request = Request :: create ( 'http://user_test:password_test@test.com/' );
$user = $request -> getUser ();
$this -> assertEquals ( 'user_test' , $user );
}
public function testGetPassword ()
{
$request = Request :: create ( 'http://user_test:password_test@test.com/' );
$password = $request -> getPassword ();
$this -> assertEquals ( 'password_test' , $password );
}
public function testIsNoCache ()
{
$request = new Request ();
$isNoCache = $request -> isNoCache ();
$this -> assertFalse ( $isNoCache );
}
public function testGetContentType ()
{
$request = new Request ();
$contentType = $request -> getContentType ();
$this -> assertNull ( $contentType );
}
public function testSetDefaultLocale ()
{
$request = new Request ();
$request -> setDefaultLocale ( 'pl' );
$locale = $request -> getLocale ();
$this -> assertEquals ( 'pl' , $locale );
}
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
2012-10-11 14:19:35 +01:00
$request = Request :: create ( 'http://test.com?test=1' );
$this -> assertEquals ( 'http://test.com/?test=1' , $request -> getUri ());
$this -> assertEquals ( '/' , $request -> getPathInfo ());
$this -> assertEquals ( 'test=1' , $request -> getQueryString ());
$this -> assertEquals ( 80 , $request -> getPort ());
$this -> assertEquals ( 'test.com' , $request -> getHttpHost ());
$this -> assertFalse ( $request -> isSecure ());
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' );
2012-09-25 13:32:56 +01:00
$this -> assertEquals ( 'http://test.com/' , $request -> getUri ());
2011-09-12 12:01:04 +01:00
$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' );
2012-09-25 13:32:56 +01:00
$this -> assertEquals ( 'http://test.com/' , $request -> getUri ());
2011-09-12 12:01:04 +01:00
$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' );
2012-03-19 14:59:52 +00:00
// With encoded characters
$server = array (
'HTTP_HOST' => 'hostname:8080' ,
'SERVER_NAME' => 'servername' ,
'SERVER_PORT' => '8080' ,
'QUERY_STRING' => 'query=string' ,
'REQUEST_URI' => '/ba%20se/index_dev.php/foo%20bar/in+fo?query=string' ,
'SCRIPT_NAME' => '/ba se/index_dev.php' ,
'PATH_TRANSLATED' => 'redirect:/index.php/foo bar/in+fo' ,
'PHP_SELF' => '/ba se/index_dev.php/path/info' ,
'SCRIPT_FILENAME' => '/some/where/ba se/index_dev.php' ,
);
$request -> initialize ( array (), array (), array (), array (), array (), $server );
$this -> assertEquals (
'http://hostname:8080/ba%20se/index_dev.php/foo%20bar/in+fo?query=string' ,
$request -> getUri ()
);
2012-06-28 16:12:08 +01:00
// with user info
$server [ 'PHP_AUTH_USER' ] = 'fabien' ;
$request -> initialize ( array (), array (), array (), array (), array (), $server );
2012-09-25 13:32:56 +01:00
$this -> assertEquals ( 'http://hostname:8080/ba%20se/index_dev.php/foo%20bar/in+fo?query=string' , $request -> getUri ());
2012-06-28 16:12:08 +01:00
$server [ 'PHP_AUTH_PW' ] = 'symfony' ;
$request -> initialize ( array (), array (), array (), array (), array (), $server );
2012-09-25 13:32:56 +01:00
$this -> assertEquals ( 'http://hostname:8080/ba%20se/index_dev.php/foo%20bar/in+fo?query=string' , $request -> getUri ());
2012-06-28 16:12:08 +01:00
}
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 ());
2012-06-28 16:12:08 +01:00
// with user info
$server [ 'PHP_AUTH_USER' ] = 'fabien' ;
$request -> initialize ( array (), array (), array (), array (), array (), $server );
2012-09-25 13:32:56 +01:00
$this -> assertEquals ( 'http://servername/some/path' , $request -> getUriForPath ( '/some/path' ));
2012-06-28 16:12:08 +01:00
$server [ 'PHP_AUTH_PW' ] = 'symfony' ;
$request -> initialize ( array (), array (), array (), array (), array (), $server );
2012-09-25 13:32:56 +01:00
$this -> assertEquals ( 'http://servername/some/path' , $request -> getUriForPath ( '/some/path' ));
2012-06-28 16:12:08 +01:00
}
/**
* @ covers Symfony\Component\HttpFoundation\Request :: getUserInfo
*/
public function testGetUserInfo ()
{
$request = new Request ();
$server [ 'PHP_AUTH_USER' ] = 'fabien' ;
$request -> initialize ( array (), array (), array (), array (), array (), $server );
$this -> assertEquals ( 'fabien' , $request -> getUserInfo ());
$server [ 'PHP_AUTH_USER' ] = '0' ;
$request -> initialize ( array (), array (), array (), array (), array (), $server );
$this -> assertEquals ( '0' , $request -> getUserInfo ());
$server [ 'PHP_AUTH_PW' ] = '0' ;
$request -> initialize ( array (), array (), array (), array (), array (), $server );
$this -> assertEquals ( '0:0' , $request -> getUserInfo ());
}
/**
* @ covers Symfony\Component\HttpFoundation\Request :: getSchemeAndHttpHost
*/
public function testGetSchemeAndHttpHost ()
{
$request = new Request ();
$server [ 'SERVER_NAME' ] = 'servername' ;
$server [ 'SERVER_PORT' ] = '90' ;
$request -> initialize ( array (), array (), array (), array (), array (), $server );
$this -> assertEquals ( 'http://servername:90' , $request -> getSchemeAndHttpHost ());
$server [ 'PHP_AUTH_USER' ] = 'fabien' ;
$request -> initialize ( array (), array (), array (), array (), array (), $server );
2012-09-25 13:32:56 +01:00
$this -> assertEquals ( 'http://servername:90' , $request -> getSchemeAndHttpHost ());
2012-06-28 16:12:08 +01:00
$server [ 'PHP_AUTH_USER' ] = '0' ;
$request -> initialize ( array (), array (), array (), array (), array (), $server );
2012-09-25 13:32:56 +01:00
$this -> assertEquals ( 'http://servername:90' , $request -> getSchemeAndHttpHost ());
2012-06-28 16:12:08 +01:00
$server [ 'PHP_AUTH_PW' ] = '0' ;
$request -> initialize ( array (), array (), array (), array (), array (), $server );
2012-09-25 13:32:56 +01:00
$this -> assertEquals ( 'http://servername:90' , $request -> getSchemeAndHttpHost ());
2010-05-06 12:25:53 +01:00
}
2010-09-03 19:42:46 +01:00
/**
* @ covers Symfony\Component\HttpFoundation\Request :: getQueryString
2012-07-04 02:05:07 +01:00
* @ covers Symfony\Component\HttpFoundation\Request :: normalizeQueryString
* @ dataProvider getQueryStringNormalizationData
2010-09-03 19:42:46 +01:00
*/
2012-07-04 02:05:07 +01:00
public function testGetQueryString ( $query , $expectedQuery , $msg )
2010-09-03 19:42:46 +01:00
{
$request = new Request ();
2012-07-04 02:05:07 +01:00
$request -> server -> set ( 'QUERY_STRING' , $query );
$this -> assertSame ( $expectedQuery , $request -> getQueryString (), $msg );
}
2012-07-04 01:38:41 +01:00
2012-07-04 02:05:07 +01:00
public function getQueryStringNormalizationData ()
{
return array (
array ( 'foo' , 'foo' , 'works with valueless parameters' ),
array ( 'foo=' , 'foo=' , 'includes a dangling equal sign' ),
array ( 'bar=&foo=bar' , 'bar=&foo=bar' , '->works with empty parameters' ),
array ( 'foo=bar&bar=' , 'bar=&foo=bar' , 'sorts keys alphabetically' ),
// GET parameters, that are submitted from a HTML form, encode spaces as "+" by default (as defined in enctype application/x-www-form-urlencoded).
// PHP also converts "+" to spaces when filling the global _GET or when using the function parse_str.
array ( 'him=John%20Doe&her=Jane+Doe' , 'her=Jane%20Doe&him=John%20Doe' , 'normalizes spaces in both encodings "%20" and "+"' ),
array ( 'foo[]=1&foo[]=2' , 'foo%5B%5D=1&foo%5B%5D=2' , 'allows array notation' ),
array ( 'foo=1&foo=2' , 'foo=1&foo=2' , 'allows repeated parameters' ),
array ( 'pa%3Dram=foo%26bar%3Dbaz&test=test' , 'pa%3Dram=foo%26bar%3Dbaz&test=test' , 'works with encoded delimiters' ),
array ( '0' , '0' , 'allows "0"' ),
array ( 'Jane Doe&John%20Doe' , 'Jane%20Doe&John%20Doe' , 'normalizes encoding in keys' ),
array ( 'her=Jane Doe&him=John%20Doe' , 'her=Jane%20Doe&him=John%20Doe' , 'normalizes encoding in values' ),
array ( 'foo=bar&&&test&&' , 'foo=bar&test' , 'removes unneeded delimiters' ),
array ( 'formula=e=m*c^2' , 'formula=e%3Dm%2Ac%5E2' , 'correctly treats only the first "=" as delimiter and the next as value' ),
// Ignore pairs with empty key, even if there was a value, e.g. "=value", as such nameless values cannot be retrieved anyway.
// PHP also does not include them when building _GET.
array ( 'foo=bar&=a=b&=x=y' , 'foo=bar' , 'removes params with empty key' ),
);
}
2012-07-04 01:38:41 +01:00
2012-07-04 02:05:07 +01:00
public function testGetQueryStringReturnsNull ()
{
$request = new Request ();
2012-07-04 01:38:41 +01:00
2012-07-04 02:05:07 +01:00
$this -> assertNull ( $request -> getQueryString (), '->getQueryString() returns null for non-existent query string' );
2012-07-04 01:38:41 +01:00
2012-07-04 02:05:07 +01:00
$request -> server -> set ( 'QUERY_STRING' , '' );
$this -> assertNull ( $request -> getQueryString (), '->getQueryString() returns null for empty query string' );
2010-09-03 19:42:46 +01:00
}
2010-09-09 13:40:40 +01:00
2010-10-27 21:56:16 +01:00
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' );
2012-11-27 21:21:23 +00:00
// 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' );
2012-11-27 21:21:23 +00:00
// 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' );
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 ' );
2012-03-07 15:11:42 +00:00
$this -> stopTrustingProxyData ();
2010-12-08 06:24:37 +00:00
}
2012-12-06 12:50:59 +00:00
/**
* @ expectedException RuntimeException
*/
public function testGetHostWithFakeHttpHostValue ()
{
$request = new Request ();
$request -> initialize ( array (), array (), array (), array (), array (), array ( 'HTTP_HOST' => 'www.host.com?query=string' ));
$request -> getHost ();
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' );
2012-11-28 09:31:19 +00:00
$this -> assertEquals ( 'POST' , $request -> getMethod (), '->getMethod() does not return the method from _method if defined and POST but support not enabled' );
$request = new Request ();
$request -> setMethod ( 'POST' );
$request -> request -> set ( '_method' , 'purge' );
Request :: enableHttpMethodParameterOverride ();
2010-12-08 06:24:37 +00:00
$this -> assertEquals ( 'PURGE' , $request -> getMethod (), '->getMethod() returns the method from _method if defined and POST' );
2012-11-28 09:31:19 +00:00
$this -> disableHttpMethodParameterOverride ();
2012-07-10 21:17:24 +01:00
2012-11-28 09:31:19 +00:00
$request = new Request ();
$request -> setMethod ( 'POST' );
$request -> query -> set ( '_method' , 'purge' );
$this -> assertEquals ( 'POST' , $request -> getMethod (), '->getMethod() does not return the method from _method if defined and POST but support not enabled' );
$request = new Request ();
2012-07-10 21:17:24 +01:00
$request -> setMethod ( 'POST' );
$request -> query -> set ( '_method' , 'purge' );
2012-11-28 09:31:19 +00:00
Request :: enableHttpMethodParameterOverride ();
2012-07-10 21:17:24 +01:00
$this -> assertEquals ( 'PURGE' , $request -> getMethod (), '->getMethod() returns the method from _method if defined and POST' );
2012-11-28 09:31:19 +00:00
$this -> disableHttpMethodParameterOverride ();
2011-06-08 18:56:59 +01:00
2012-11-28 09:31:19 +00:00
$request = new Request ();
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
*/
2012-11-27 21:21:23 +00:00
public function testGetClientIp ( $expected , $proxy , $remoteAddr , $httpForwardedFor , $trustedProxies )
2011-02-07 01:40:20 +00:00
{
2012-03-07 15:11:42 +00:00
$request = new Request ();
2011-04-22 14:42:07 +01:00
$server = array ( 'REMOTE_ADDR' => $remoteAddr );
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 ;
}
2012-11-27 21:21:23 +00:00
if ( $proxy || $trustedProxies ) {
Request :: setTrustedProxies ( null === $trustedProxies ? array ( $remoteAddr ) : $trustedProxies );
}
2011-04-22 14:42:07 +01:00
$request -> initialize ( array (), array (), array (), array (), array (), $server );
2012-03-07 15:11:42 +00:00
if ( $proxy ) {
2012-12-03 20:43:03 +00:00
set_error_handler ( array ( $this , " deprecationErrorHandler " ));
2012-03-07 15:11:42 +00:00
$this -> startTrustingProxyData ();
2012-12-03 20:43:03 +00:00
restore_error_handler ();
2012-03-07 15:11:42 +00:00
}
2011-04-22 14:42:07 +01:00
$this -> assertEquals ( $expected , $request -> getClientIp ( $proxy ));
2012-11-28 07:25:47 +00:00
Request :: setTrustedProxies ( array ());
2011-04-22 14:42:07 +01:00
}
public function testGetClientIpProvider ()
{
return array (
2012-11-27 21:21:23 +00:00
array ( '88.88.88.88' , false , '88.88.88.88' , null , null ),
array ( '127.0.0.1' , false , '127.0.0.1' , null , null ),
array ( '::1' , false , '::1' , 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 ( '2620:0:1cfe:face:b00c::3' , true , '::1' , '2620:0:1cfe:face:b00c::3' , null ),
array ( '88.88.88.88' , true , '123.45.67.89' , '127.0.0.1, 87.65.43.21, 88.88.88.88' , null ),
array ( '87.65.43.21' , true , '123.45.67.89' , '127.0.0.1, 87.65.43.21, 88.88.88.88' , array ( '123.45.67.89' , '88.88.88.88' )),
array ( '87.65.43.21' , false , '123.45.67.89' , '127.0.0.1, 87.65.43.21, 88.88.88.88' , array ( '123.45.67.89' , '88.88.88.88' )),
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-11-30 22:41:06 +00:00
array ( 'put' ),
array ( 'delete' ),
array ( 'patch' ),
2012-01-24 18:46:37 +00:00
);
}
/**
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
{
2012-11-30 22:41:06 +00:00
$normalizedMethod = strtoupper ( $method );
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-11-30 22:41:06 +00:00
$this -> assertEquals ( $normalizedMethod , $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-11-30 22:41:06 +00:00
Request :: createFromGlobals ();
2012-11-28 09:31:19 +00:00
Request :: enableHttpMethodParameterOverride ();
2012-01-24 18:46:37 +00:00
$_POST [ '_method' ] = $method ;
2011-08-18 18:10:51 +01:00
$_POST [ 'foo6' ] = 'bar6' ;
2012-11-30 22:41:06 +00:00
$_SERVER [ 'REQUEST_METHOD' ] = 'PoSt' ;
2011-08-18 18:10:51 +01:00
$request = Request :: createFromGlobals ();
2012-11-30 22:41:06 +00:00
$this -> assertEquals ( $normalizedMethod , $request -> getMethod ());
$this -> assertEquals ( 'POST' , $request -> getRealMethod ());
2011-08-18 18:10:51 +01:00
$this -> assertEquals ( 'bar6' , $request -> request -> get ( 'foo6' ));
unset ( $_POST [ '_method' ], $_POST [ 'foo6' ], $_SERVER [ 'REQUEST_METHOD' ]);
2012-11-28 09:31:19 +00:00
$this -> disableHttpMethodParameterOverride ();
2010-09-09 13:40:40 +01:00
}
2011-02-07 01:40:20 +00:00
public function testOverrideGlobals ()
{
2012-12-03 20:43:03 +00:00
set_error_handler ( array ( $this , " deprecationErrorHandler " ));
2011-02-07 01:40:20 +00:00
$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 );
2012-03-07 15:11:42 +00:00
$this -> startTrustingProxyData ();
2011-02-07 01:40:20 +00:00
$request -> headers -> set ( 'X_FORWARDED_PROTO' , 'https' );
2012-11-28 07:25:47 +00:00
Request :: setTrustedProxies ( array ( '1.1.1.1' ));
2011-02-07 01:40:20 +00:00
$this -> assertTrue ( $request -> isSecure ());
2012-11-28 07:25:47 +00:00
Request :: setTrustedProxies ( array ());
2011-02-07 01:40:20 +00:00
$request -> overrideGlobals ();
$this -> assertArrayHasKey ( 'HTTP_X_FORWARDED_PROTO' , $_SERVER );
2011-03-05 10:51:09 +00:00
// restore initial $_SERVER array
$_SERVER = $server ;
2012-12-03 20:43:03 +00:00
restore_error_handler ();
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%20test/info' ;
$request -> initialize ( array (), array (), array (), array (), array (), $server );
2012-03-19 14:57:24 +00:00
$this -> assertEquals ( '/path%20test/info' , $request -> getPathInfo ());
2011-09-28 12:18:44 +01:00
}
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 ());
}
2012-10-11 10:48:40 +01:00
public function testIntlLocale ()
{
if ( ! extension_loaded ( 'intl' )) {
$this -> markTestSkipped ( 'The intl extension is needed to run this test.' );
}
$request = new Request ();
$request -> setDefaultLocale ( 'fr' );
$this -> assertEquals ( 'fr' , $request -> getLocale ());
$this -> assertEquals ( 'fr' , \Locale :: getDefault ());
$request -> setLocale ( 'en' );
$this -> assertEquals ( 'en' , $request -> getLocale ());
$this -> assertEquals ( 'en' , \Locale :: getDefault ());
$request -> setDefaultLocale ( 'de' );
$this -> assertEquals ( 'en' , $request -> getLocale ());
$this -> assertEquals ( 'en' , \Locale :: getDefault ());
}
2011-02-07 01:40:20 +00:00
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' );
2012-09-27 05:03:58 +01:00
$this -> assertEquals ( array ( 'ISO-8859-1' , 'utf-8' , '*' ), $request -> getCharsets ());
2011-02-07 01:40:20 +00:00
}
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, */*' );
2012-09-27 05:03:58 +01:00
$this -> assertEquals ( array ( 'application/vnd.wap.wmlscriptc' , 'text/vnd.wap.wml' , 'application/vnd.wap.xhtml+xml' , 'application/xhtml+xml' , 'text/html' , 'multipart/mixed' , '*/*' ), $request -> getAcceptableContentTypes ());
2011-02-07 01:40:20 +00:00
}
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 ());
2012-09-27 05:03:58 +01:00
$request = new Request ();
$request -> headers -> set ( 'Accept-language' , 'zh, en-us; q=0.6, en; q=0.8' );
$this -> assertEquals ( array ( 'zh' , 'en' , 'en_US' ), $request -> getLanguages ()); // Test out of order qvalues
$request = new Request ();
$request -> headers -> set ( 'Accept-language' , 'zh, en, en-us' );
$this -> assertEquals ( array ( 'zh' , 'en' , 'en_US' ), $request -> getLanguages ()); // Test equal weighting without qvalues
$request = new Request ();
$request -> headers -> set ( 'Accept-language' , 'zh; q=0.6, en, en-us; q=0.6' );
$this -> assertEquals ( array ( 'en' , 'zh' , 'en_US' ), $request -> getLanguages ()); // Test equal weighting with qvalues
2011-02-07 01:40:20 +00:00
$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
2011-05-05 08:14:48 +01:00
public function testHasSession ()
{
2012-03-14 11:53:34 +00:00
$request = new Request ();
2011-05-05 08:14:48 +01:00
$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 ());
}
2012-09-11 17:36:43 +01:00
public function testGetSession ()
{
$request = new Request ();
$request -> setSession ( new Session ( new MockArraySessionStorage ()));
$this -> assertTrue ( $request -> hasSession ());
$session = $request -> getSession ();
$this -> assertObjectHasAttribute ( 'storage' , $session );
$this -> assertObjectHasAttribute ( 'flashName' , $session );
$this -> assertObjectHasAttribute ( 'attributeName' , $session );
}
2011-05-05 08:14:48 +01:00
public function testHasPreviousSession ()
{
2012-03-14 11:53:34 +00:00
$request = new Request ();
2011-05-05 08:14:48 +01:00
$this -> assertFalse ( $request -> hasPreviousSession ());
2012-03-14 11:53:34 +00:00
$request -> cookies -> set ( 'MOCKSESSID' , 'foo' );
2011-05-05 08:14:48 +01:00
$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 ();
2012-12-03 20:43:03 +00:00
set_error_handler ( array ( $this , " deprecationErrorHandler " ));
2011-10-09 11:58:45 +01:00
$this -> assertEquals ( $expected , $request -> splitHttpAcceptHeader ( $acceptHeader ));
2012-12-03 20:43:03 +00:00
restore_error_handler ();
2011-10-09 11:58:45 +01:00
}
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 )),
2012-10-24 17:03:38 +01:00
array ( 'text/html,application/xml;q=0.9,*/*;charset=utf-8; q=0.8' , array ( 'text/html' => 1.0 , '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.0 , 'application/xhtml+xml' => 0.9 , '*/*;foo=bar' => 0.8 )),
array ( 'text/html,application/xhtml+xml;charset=utf-8;q=0.9; foo=bar,*/*' , array ( 'text/html' => 1.0 , '*/*' => 1.0 , 'application/xhtml+xml;charset=utf-8;foo=bar' => 0.9 )),
array ( 'text/html,application/xhtml+xml' , array ( 'text/html' => 1.0 , 'application/xhtml+xml' => 1.0 )),
2011-10-09 11:58:45 +01:00
);
}
2012-03-07 15:11:42 +00:00
2012-04-06 07:48:49 +01:00
public function testIsMethod ()
{
$request = new Request ();
$request -> setMethod ( 'POST' );
$this -> assertTrue ( $request -> isMethod ( 'POST' ));
2012-04-06 12:25:55 +01:00
$this -> assertTrue ( $request -> isMethod ( 'post' ));
2012-04-06 07:48:49 +01:00
$this -> assertFalse ( $request -> isMethod ( 'GET' ));
2012-04-06 12:25:55 +01:00
$this -> assertFalse ( $request -> isMethod ( 'get' ));
2012-04-06 07:48:49 +01:00
$request -> setMethod ( 'GET' );
$this -> assertTrue ( $request -> isMethod ( 'GET' ));
2012-04-06 12:25:55 +01:00
$this -> assertTrue ( $request -> isMethod ( 'get' ));
2012-04-06 07:48:49 +01:00
$this -> assertFalse ( $request -> isMethod ( 'POST' ));
2012-04-06 12:25:55 +01:00
$this -> assertFalse ( $request -> isMethod ( 'post' ));
2012-04-06 07:48:49 +01:00
}
2012-03-07 15:11:42 +00:00
private function startTrustingProxyData ()
{
Request :: trustProxyData ();
}
2012-03-19 14:57:24 +00:00
/**
* @ dataProvider getBaseUrlData
*/
public function testGetBaseUrl ( $uri , $server , $expectedBaseUrl , $expectedPathInfo )
{
$request = Request :: create ( $uri , 'GET' , array (), array (), array (), $server );
$this -> assertSame ( $expectedBaseUrl , $request -> getBaseUrl (), 'baseUrl' );
$this -> assertSame ( $expectedPathInfo , $request -> getPathInfo (), 'pathInfo' );
}
public function getBaseUrlData ()
{
return array (
array (
'/foo%20bar' ,
array (
'SCRIPT_FILENAME' => '/home/John Doe/public_html/foo bar/app.php' ,
'SCRIPT_NAME' => '/foo bar/app.php' ,
'PHP_SELF' => '/foo bar/app.php' ,
),
'/foo%20bar' ,
'/' ,
),
array (
'/foo%20bar/home' ,
array (
'SCRIPT_FILENAME' => '/home/John Doe/public_html/foo bar/app.php' ,
'SCRIPT_NAME' => '/foo bar/app.php' ,
'PHP_SELF' => '/foo bar/app.php' ,
),
'/foo%20bar' ,
'/home' ,
),
array (
'/foo%20bar/app.php/home' ,
array (
'SCRIPT_FILENAME' => '/home/John Doe/public_html/foo bar/app.php' ,
'SCRIPT_NAME' => '/foo bar/app.php' ,
'PHP_SELF' => '/foo bar/app.php' ,
),
'/foo%20bar/app.php' ,
'/home' ,
),
array (
2012-03-19 14:59:52 +00:00
'/foo%20bar/app.php/home%3Dbaz' ,
2012-03-19 14:57:24 +00:00
array (
'SCRIPT_FILENAME' => '/home/John Doe/public_html/foo bar/app.php' ,
'SCRIPT_NAME' => '/foo bar/app.php' ,
'PHP_SELF' => '/foo bar/app.php' ,
),
'/foo%20bar/app.php' ,
2012-03-19 14:59:52 +00:00
'/home%3Dbaz' ,
2012-03-19 14:57:24 +00:00
),
array (
'/foo/bar+baz' ,
array (
'SCRIPT_FILENAME' => '/home/John Doe/public_html/foo/app.php' ,
'SCRIPT_NAME' => '/foo/app.php' ,
'PHP_SELF' => '/foo/app.php' ,
),
'/foo' ,
'/bar+baz' ,
),
);
}
/**
* @ dataProvider urlencodedStringPrefixData
*/
public function testUrlencodedStringPrefix ( $string , $prefix , $expect )
{
$request = new Request ;
$me = new \ReflectionMethod ( $request , 'getUrlencodedPrefix' );
$me -> setAccessible ( true );
$this -> assertSame ( $expect , $me -> invoke ( $request , $string , $prefix ));
}
public function urlencodedStringPrefixData ()
{
return array (
array ( 'foo' , 'foo' , 'foo' ),
array ( 'fo%6f' , 'foo' , 'fo%6f' ),
array ( 'foo/bar' , 'foo' , 'foo' ),
array ( 'fo%6f/bar' , 'foo' , 'fo%6f' ),
array ( 'f%6f%6f/bar' , 'foo' , 'f%6f%6f' ),
array ( '%66%6F%6F/bar' , 'foo' , '%66%6F%6F' ),
array ( 'fo+o/bar' , 'fo+o' , 'fo+o' ),
array ( 'fo%2Bo/bar' , 'fo+o' , 'fo%2Bo' ),
);
}
2012-05-01 13:46:26 +01:00
2012-03-07 15:11:42 +00:00
private function stopTrustingProxyData ()
{
$class = new \ReflectionClass ( 'Symfony\\Component\\HttpFoundation\\Request' );
2012-11-29 11:32:05 +00:00
$property = $class -> getProperty ( 'trustProxy' );
2012-03-07 15:11:42 +00:00
$property -> setAccessible ( true );
$property -> setValue ( false );
}
2012-11-28 09:31:19 +00:00
private function disableHttpMethodParameterOverride ()
{
$class = new \ReflectionClass ( 'Symfony\\Component\\HttpFoundation\\Request' );
$property = $class -> getProperty ( 'httpMethodParameterOverride' );
$property -> setAccessible ( true );
$property -> setValue ( false );
}
2012-11-29 11:29:12 +00:00
2012-11-28 10:49:12 +00:00
public function testTrustedProxies ()
{
$request = Request :: create ( 'http://example.com/' );
$request -> server -> set ( 'REMOTE_ADDR' , '3.3.3.3' );
$request -> headers -> set ( 'X_FORWARDED_FOR' , '1.1.1.1, 2.2.2.2' );
$request -> headers -> set ( 'X_FORWARDED_HOST' , 'foo.example.com, real.example.com:8080' );
$request -> headers -> set ( 'X_FORWARDED_PROTO' , 'https' );
$request -> headers -> set ( 'X_FORWARDED_PORT' , 443 );
$request -> headers -> set ( 'X_MY_FOR' , '3.3.3.3, 4.4.4.4' );
$request -> headers -> set ( 'X_MY_HOST' , 'my.example.com' );
$request -> headers -> set ( 'X_MY_PROTO' , 'http' );
$request -> headers -> set ( 'X_MY_PORT' , 81 );
// no trusted proxies
$this -> assertEquals ( '3.3.3.3' , $request -> getClientIp ());
$this -> assertEquals ( 'example.com' , $request -> getHost ());
$this -> assertEquals ( 80 , $request -> getPort ());
$this -> assertFalse ( $request -> isSecure ());
// trusted proxy via deprecated trustProxyData()
2012-12-03 20:43:03 +00:00
set_error_handler ( array ( $this , " deprecationErrorHandler " ));
2012-11-28 10:49:12 +00:00
Request :: trustProxyData ();
$this -> assertEquals ( '2.2.2.2' , $request -> getClientIp ());
$this -> assertEquals ( 'real.example.com' , $request -> getHost ());
$this -> assertEquals ( 443 , $request -> getPort ());
$this -> assertTrue ( $request -> isSecure ());
2012-12-03 20:43:03 +00:00
restore_error_handler ();
2012-11-28 10:49:12 +00:00
// disabling proxy trusting
Request :: setTrustedProxies ( array ());
$this -> assertEquals ( '3.3.3.3' , $request -> getClientIp ());
$this -> assertEquals ( 'example.com' , $request -> getHost ());
$this -> assertEquals ( 80 , $request -> getPort ());
$this -> assertFalse ( $request -> isSecure ());
// trusted proxy via setTrustedProxies()
Request :: setTrustedProxies ( array ( '3.3.3.3' , '2.2.2.2' ));
$this -> assertEquals ( '1.1.1.1' , $request -> getClientIp ());
$this -> assertEquals ( 'real.example.com' , $request -> getHost ());
$this -> assertEquals ( 443 , $request -> getPort ());
$this -> assertTrue ( $request -> isSecure ());
// custom header names
2012-11-28 10:53:55 +00:00
Request :: setTrustedHeaderName ( Request :: HEADER_CLIENT_IP , 'X_MY_FOR' );
Request :: setTrustedHeaderName ( Request :: HEADER_CLIENT_HOST , 'X_MY_HOST' );
Request :: setTrustedHeaderName ( Request :: HEADER_CLIENT_PORT , 'X_MY_PORT' );
Request :: setTrustedHeaderName ( Request :: HEADER_CLIENT_PROTO , 'X_MY_PROTO' );
2012-11-28 10:49:12 +00:00
$this -> assertEquals ( '4.4.4.4' , $request -> getClientIp ());
$this -> assertEquals ( 'my.example.com' , $request -> getHost ());
$this -> assertEquals ( 81 , $request -> getPort ());
$this -> assertFalse ( $request -> isSecure ());
// disabling via empty header names
2012-11-28 10:53:55 +00:00
Request :: setTrustedHeaderName ( Request :: HEADER_CLIENT_IP , null );
Request :: setTrustedHeaderName ( Request :: HEADER_CLIENT_HOST , null );
Request :: setTrustedHeaderName ( Request :: HEADER_CLIENT_PORT , null );
Request :: setTrustedHeaderName ( Request :: HEADER_CLIENT_PROTO , null );
2012-11-28 10:49:12 +00:00
$this -> assertEquals ( '3.3.3.3' , $request -> getClientIp ());
$this -> assertEquals ( 'example.com' , $request -> getHost ());
$this -> assertEquals ( 80 , $request -> getPort ());
$this -> assertFalse ( $request -> isSecure ());
// reset
Request :: setTrustedProxies ( array ());
}
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' ));
}
}