@@ -238,49 +238,53 @@ public function testCreate()
238238$ this ->assertEquals ('http://test.com/foo ' ,$ request ->getUri ());
239239 }
240240
241- public function testCreateWithRequestUri ()
241+ /**
242+ * @dataProvider getRequestUriData
243+ */
244+ public function testGetRequestUri ($ serverRequestUri ,$ expected ,$ message )
242245 {
243- $ request = Request::create ('http://test.com:80/foo ' );
244- $ request ->server ->set ('REQUEST_URI ' ,'http://test.com:80/foo ' );
245- $ this ->assertEquals ('http://test.com/foo ' ,$ request ->getUri ());
246- $ this ->assertEquals ('/foo ' ,$ request ->getPathInfo ());
247- $ this ->assertEquals ('test.com ' ,$ request ->getHost ());
248- $ this ->assertEquals ('test.com ' ,$ request ->getHttpHost ());
249- $ this ->assertEquals (80 ,$ request ->getPort ());
250- $ this ->assertFalse ($ request ->isSecure ());
246+ $ request =new Request ();
247+ $ request ->server ->add (array (
248+ 'REQUEST_URI ' =>$ serverRequestUri ,
251249
252- $ request = Request::create ('http://test.com:8080/foo ' );
253- $ request ->server ->set ('REQUEST_URI ' ,'http://test.com:8080/foo ' );
254- $ this ->assertEquals ('http://test.com:8080/foo ' ,$ request ->getUri ());
255- $ this ->assertEquals ('/foo ' ,$ request ->getPathInfo ());
256- $ this ->assertEquals ('test.com ' ,$ request ->getHost ());
257- $ this ->assertEquals ('test.com:8080 ' ,$ request ->getHttpHost ());
258- $ this ->assertEquals (8080 ,$ request ->getPort ());
259- $ this ->assertFalse ($ request ->isSecure ());
250+ // For having http://test.com
251+ 'SERVER_NAME ' =>'test.com ' ,
252+ 'SERVER_PORT ' =>80 ,
253+ ));
260254
261- $ request = Request::create ('http://test.com/foo?bar=foo ' ,'GET ' ,array ('bar ' =>'baz ' ));
262- $ request ->server ->set ('REQUEST_URI ' ,'http://test.com/foo?bar=foo ' );
263- $ this ->assertEquals ('http://test.com/foo?bar=baz ' ,$ request ->getUri ());
264- $ this ->assertEquals ('/foo ' ,$ request ->getPathInfo ());
265- $ this ->assertEquals ('bar=baz ' ,$ request ->getQueryString ());
266- $ this ->assertEquals ('test.com ' ,$ request ->getHost ());
267- $ this ->assertEquals ('test.com ' ,$ request ->getHttpHost ());
268- $ this ->assertEquals (80 ,$ request ->getPort ());
269- $ this ->assertFalse ($ request ->isSecure ());
255+ $ this ->assertSame ($ expected ,$ request ->getRequestUri (),$ message );
256+ $ this ->assertSame ($ expected ,$ request ->server ->get ('REQUEST_URI ' ),'Normalize the request URI. ' );
257+ }
270258
271- $ request = Request::create ('https://test.com:443/foo ' );
272- $ request ->server ->set ('REQUEST_URI ' ,'https://test.com:443/foo ' );
273- $ this ->assertEquals ('https://test.com/foo ' ,$ request ->getUri ());
274- $ this ->assertEquals ('/foo ' ,$ request ->getPathInfo ());
275- $ this ->assertEquals ('test.com ' ,$ request ->getHost ());
276- $ this ->assertEquals ('test.com ' ,$ request ->getHttpHost ());
277- $ this ->assertEquals (443 ,$ request ->getPort ());
278- $ this ->assertTrue ($ request ->isSecure ());
259+ public function getRequestUriData ()
260+ {
261+ $ message ='Do not modify the path. ' ;
262+ yield array ('/foo ' ,'/foo ' ,$ message );
263+ yield array ('//bar/foo ' ,'//bar/foo ' ,$ message );
264+ yield array ('///bar/foo ' ,'///bar/foo ' ,$ message );
279265
280- // Fragment should not be included in the URI
281- $ request = Request::create ('http://test.com/foo#bar ' );
282- $ request ->server ->set ('REQUEST_URI ' ,'http://test.com/foo#bar ' );
283- $ this ->assertEquals ('http://test.com/foo ' ,$ request ->getUri ());
266+ $ message ='Handle when the scheme, host are on REQUEST_URI. ' ;
267+ yield array ('http://test.com/foo?bar=baz ' ,'/foo?bar=baz ' ,$ message );
268+
269+ $ message ='Handle when the scheme, host and port are on REQUEST_URI. ' ;
270+ yield array ('http://test.com:80/foo ' ,'/foo ' ,$ message );
271+ yield array ('https://test.com:8080/foo ' ,'/foo ' ,$ message );
272+ yield array ('https://test.com:443/foo ' ,'/foo ' ,$ message );
273+
274+ $ message ='Fragment should not be included in the URI ' ;
275+ yield array ('http://test.com/foo#bar ' ,'/foo ' ,$ message );
276+ yield array ('/foo#bar ' ,'/foo ' ,$ message );
277+ }
278+
279+ public function testGetRequestUriWithoutRequiredHeader ()
280+ {
281+ $ expected ='' ;
282+
283+ $ request =new Request ();
284+
285+ $ message ='Fallback to empty URI when headers are missing. ' ;
286+ $ this ->assertSame ($ expected ,$ request ->getRequestUri (),$ message );
287+ $ this ->assertSame ($ expected ,$ request ->server ->get ('REQUEST_URI ' ),'Normalize the request URI. ' );
284288 }
285289
286290public function testCreateCheckPrecedence ()