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
*
* ( c ) Fabien Potencier < fabien . potencier @ symfony - project . com >
*
* 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
2010-08-20 22:09:55 +01:00
use Symfony\Component\HttpFoundation\Request ;
2010-09-09 13:40:40 +01:00
use Symfony\Component\HttpFoundation\File\UploadedFile ;
2010-03-25 07:55:50 +00:00
class RequestTest extends \PHPUnit_Framework_TestCase
{
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
2010-05-06 12:25:53 +01:00
$request -> initialize ( null , array ( 'foo' => 'bar' ));
$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
2010-05-06 12:25:53 +01:00
$request -> initialize ( null , null , array ( 'foo' => 'bar' ));
2010-07-21 21:49:49 +01:00
$this -> assertEquals ( 'bar' , $request -> attributes -> get ( 'foo' ), '->initialize() takes an array of attributes as its thrid argument' );
2010-03-25 07:55:50 +00:00
2010-05-06 12:25:53 +01:00
$request -> initialize ( null , null , null , null , null , array ( 'HTTP_FOO' => 'bar' ));
$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-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
2010-05-06 12:25:53 +01:00
*/
public function testGetFormat ()
{
$request = new Request ();
2010-04-04 00:19:07 +01:00
2010-05-06 12:25:53 +01:00
$this -> assertNull ( $request -> getFormat ( null ), '->getFormat() returns null when mime-type is null' );
$this -> assertNull ( $request -> getFormat ( 'unexistant-mime-type' ), '->getFormat() returns null when mime-type is unknown' );
$this -> assertEquals ( 'txt' , $request -> getFormat ( 'text/plain' ), '->getFormat() returns correct format when mime-type have one format only' );
$this -> assertEquals ( 'js' , $request -> getFormat ( 'application/javascript' ), '->getFormat() returns correct format when format have multiple mime-type (first)' );
$this -> assertEquals ( 'js' , $request -> getFormat ( 'application/x-javascript' ), '->getFormat() returns correct format when format have multiple mime-type' );
$this -> assertEquals ( 'js' , $request -> getFormat ( 'text/javascript' ), '->getFormat() returns correct format when format have multiple mime-type (last)' );
}
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' );
$this -> assertEquals ( 'her=Jane+Doe&him=John+Doe' , $request -> getQueryString (), '->getQueryString() normalizes encoding' );
$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
public function testInitializeConvertsUploadedFiles ()
{
$tmpFile = $this -> createTempFile ();
$file = new UploadedFile ( $tmpFile , basename ( $tmpFile ), 'text/plain' , 100 , 0 );
$request = Request :: create ( '' , 'get' , array (), array (), array ( 'file' => array (
'name' => basename ( $tmpFile ),
'type' => 'text/plain' ,
'tmp_name' => $tmpFile ,
'error' => 0 ,
'size' => 100
)));
$this -> assertEquals ( $file , $request -> files -> get ( 'file' ));
}
public function testInitializeConvertsUploadedFilesWithPhpBug ()
{
$tmpFile = $this -> createTempFile ();
$file = new UploadedFile ( $tmpFile , basename ( $tmpFile ), 'text/plain' , 100 , 0 );
$request = Request :: create ( '' , 'get' , array (), array (), array (
'child' => array (
'name' => array (
'file' => basename ( $tmpFile ),
),
'type' => array (
'file' => 'text/plain' ,
),
'tmp_name' => array (
'file' => $tmpFile ,
),
'error' => array (
'file' => 0 ,
),
'size' => array (
'file' => 100 ,
),
)
));
$files = $request -> files -> all ();
$this -> assertEquals ( $file , $files [ 'child' ][ 'file' ]);
}
public function testInitializeConvertsNestedUploadedFilesWithPhpBug ()
{
$tmpFile = $this -> createTempFile ();
$file = new UploadedFile ( $tmpFile , basename ( $tmpFile ), 'text/plain' , 100 , 0 );
$request = Request :: create ( '' , 'get' , array (), array (), array (
'child' => array (
'name' => array (
'sub' => array ( 'file' => basename ( $tmpFile ))
),
'type' => array (
'sub' => array ( 'file' => 'text/plain' )
),
'tmp_name' => array (
'sub' => array ( 'file' => $tmpFile )
),
'error' => array (
'sub' => array ( 'file' => 0 )
),
'size' => array (
'sub' => array ( 'file' => 100 )
),
)
));
$files = $request -> files -> all ();
$this -> assertEquals ( $file , $files [ 'child' ][ 'sub' ][ 'file' ]);
}
protected function createTempFile ()
{
return tempnam ( sys_get_temp_dir (), 'FormTest' );
}
2010-03-25 07:55:50 +00:00
}