Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 9e78a06

Browse filesBrowse files
committed
Merge branch '2.4'
* 2.4: added missing unit test fixed too greedy replacements fixed protocol-relative URLs added override power to server parameters provided on request method made parsing controllers more robust Fixed YamlFileLoader imports path
2 parents b78d174 + 82cbf69 commit 9e78a06
Copy full SHA for 9e78a06

File tree

Expand file treeCollapse file tree

8 files changed

+172
-36
lines changed
Filter options
Expand file treeCollapse file tree

8 files changed

+172
-36
lines changed

‎src/Symfony/Component/BrowserKit/Client.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/BrowserKit/Client.php
+20-1Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,15 @@ public function request($method, $uri, array $parameters = array(), array $files
295295
}
296296

297297
$uri = $this->getAbsoluteUri($uri);
298+
299+
if (isset($server['HTTP_HOST'])) {
300+
$uri = preg_replace('{^(https?\://)'.parse_url($uri, PHP_URL_HOST).'}', '\\1'.$server['HTTP_HOST'], $uri);
301+
}
302+
303+
if (isset($server['HTTPS'])) {
304+
$uri = preg_replace('{^'.parse_url($uri, PHP_URL_SCHEME).'}', $server['HTTPS'] ? 'https' : 'http', $uri);
305+
}
306+
298307
$server = array_merge($this->server, $server);
299308

300309
if (!$this->history->isEmpty()) {
@@ -509,7 +518,7 @@ public function followRedirect()
509518
}
510519

511520
$server = $request->getServer();
512-
unset($server['HTTP_IF_NONE_MATCH'], $server['HTTP_IF_MODIFIED_SINCE']);
521+
$server = $this->updateServerFromUri($server, $this->redirect);
513522

514523
$this->isMainRequest = false;
515524

@@ -591,4 +600,14 @@ protected function requestFromRequest(Request $request, $changeHistory = true)
591600
{
592601
return $this->request($request->getMethod(), $request->getUri(), $request->getParameters(), $request->getFiles(), $request->getServer(), $request->getContent(), $changeHistory);
593602
}
603+
604+
private function updateServerFromUri($server, $uri)
605+
{
606+
$server['HTTP_HOST'] = parse_url($uri, PHP_URL_HOST);
607+
$scheme = parse_url($uri, PHP_URL_SCHEME);
608+
$server['HTTPS'] = null === $scheme ? $server['HTTPS'] : 'https' == $scheme;
609+
unset($server['HTTP_IF_NONE_MATCH'], $server['HTTP_IF_MODIFIED_SINCE']);
610+
611+
return $server;
612+
}
594613
}

‎src/Symfony/Component/BrowserKit/Tests/ClientTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/BrowserKit/Tests/ClientTest.php
+34Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -549,4 +549,38 @@ public function testSetServerParameter()
549549
$client->setServerParameter('HTTP_USER_AGENT', 'testua');
550550
$this->assertEquals('testua', $client->getServerParameter('HTTP_USER_AGENT'));
551551
}
552+
553+
public function testSetServerParameterInRequest()
554+
{
555+
$client = new TestClient();
556+
557+
$this->assertEquals('localhost', $client->getServerParameter('HTTP_HOST'));
558+
$this->assertEquals('Symfony2 BrowserKit', $client->getServerParameter('HTTP_USER_AGENT'));
559+
560+
$client->request('GET', 'https://www.example.com/https/www.example.com', array(), array(), array(
561+
'HTTP_HOST' => 'testhost',
562+
'HTTP_USER_AGENT' => 'testua',
563+
'HTTPS' => false,
564+
'NEW_SERVER_KEY' => 'new-server-key-value'
565+
));
566+
567+
$this->assertEquals('localhost', $client->getServerParameter('HTTP_HOST'));
568+
$this->assertEquals('Symfony2 BrowserKit', $client->getServerParameter('HTTP_USER_AGENT'));
569+
570+
$this->assertEquals('http://testhost/https/www.example.com', $client->getRequest()->getUri());
571+
572+
$server = $client->getRequest()->getServer();
573+
574+
$this->assertArrayHasKey('HTTP_USER_AGENT', $server);
575+
$this->assertEquals('testua', $server['HTTP_USER_AGENT']);
576+
577+
$this->assertArrayHasKey('HTTP_HOST', $server);
578+
$this->assertEquals('testhost', $server['HTTP_HOST']);
579+
580+
$this->assertArrayHasKey('NEW_SERVER_KEY', $server);
581+
$this->assertEquals('new-server-key-value', $server['NEW_SERVER_KEY']);
582+
583+
$this->assertArrayHasKey('HTTPS', $server);
584+
$this->assertFalse($server['HTTPS']);
585+
}
552586
}

‎src/Symfony/Component/DependencyInjection/Loader/YamlFileLoader.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/DependencyInjection/Loader/YamlFileLoader.php
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public function load($file, $type = null)
5252
}
5353

5454
// imports
55-
$this->parseImports($content, $file);
55+
$this->parseImports($content, $path);
5656

5757
// parameters
5858
if (isset($content['parameters'])) {

‎src/Symfony/Component/DependencyInjection/Tests/ContainerBuilderTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/DependencyInjection/Tests/ContainerBuilderTest.php
+20-1Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
use Symfony\Component\DependencyInjection\ContainerInterface;
2222
use Symfony\Component\DependencyInjection\Definition;
2323
use Symfony\Component\DependencyInjection\Exception\RuntimeException;
24+
use Symfony\Component\DependencyInjection\Exception\InactiveScopeException;
2425
use Symfony\Component\DependencyInjection\Loader\ClosureLoader;
2526
use Symfony\Component\DependencyInjection\Reference;
2627
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag;
@@ -152,6 +153,16 @@ public function testGetReturnsNullOnInactiveScope()
152153
$this->assertNull($builder->get('foo', ContainerInterface::NULL_ON_INVALID_REFERENCE));
153154
}
154155

156+
/**
157+
* @covers Symfony\Component\DependencyInjection\ContainerBuilder::get
158+
*/
159+
public function testGetReturnsNullOnInactiveScopeWhenServiceIsCreatedByAMethod()
160+
{
161+
$builder = new ProjectContainer();
162+
163+
$this->assertNull($builder->get('foobaz', ContainerInterface::NULL_ON_INVALID_REFERENCE));
164+
}
165+
155166
/**
156167
* @covers Symfony\Component\DependencyInjection\ContainerBuilder::getServiceIds
157168
*/
@@ -790,8 +801,16 @@ public function testLazyLoadedService()
790801
}
791802
}
792803

793-
$this->assertEquals(true, $classInList);
804+
$this->assertTrue($classInList);
794805
}
795806
}
796807

797808
class FooClass {}
809+
810+
class ProjectContainer extends ContainerBuilder
811+
{
812+
public function getFoobazService()
813+
{
814+
throw new InactiveScopeException('foo', 'request');
815+
}
816+
}
+1Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
imports:
22
- { resource: services2.yml }
33
- { resource: services3.yml }
4+
- { resource: "../php/simple.php" }
45
- { resource: "../ini/parameters.ini", class: Symfony\Component\DependencyInjection\Loader\IniFileLoader }
56
- { resource: "../ini/parameters2.ini" }
67
- { resource: "../xml/services13.xml" }

‎src/Symfony/Component/DependencyInjection/Tests/Loader/YamlFileLoaderTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/DependencyInjection/Tests/Loader/YamlFileLoaderTest.php
+2Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
1919
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
2020
use Symfony\Component\DependencyInjection\Loader\IniFileLoader;
21+
use Symfony\Component\DependencyInjection\Loader\PhpFileLoader;
2122
use Symfony\Component\Config\Loader\LoaderResolver;
2223
use Symfony\Component\Config\FileLocator;
2324
use Symfony\Component\ExpressionLanguage\Expression;
@@ -83,6 +84,7 @@ public function testLoadImports()
8384
$resolver = new LoaderResolver(array(
8485
new IniFileLoader($container, new FileLocator(self::$fixturesPath.'/yaml')),
8586
new XmlFileLoader($container, new FileLocator(self::$fixturesPath.'/yaml')),
87+
new PhpFileLoader($container, new FileLocator(self::$fixturesPath.'/php')),
8688
$loader = new YamlFileLoader($container, new FileLocator(self::$fixturesPath.'/yaml')),
8789
));
8890
$loader->setResolver($resolver);

‎src/Symfony/Component/HttpKernel/Controller/ControllerResolver.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/HttpKernel/Controller/ControllerResolver.php
+10-2Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,18 @@ public function getController(Request $request)
5757
return false;
5858
}
5959

60-
if (is_array($controller) || (is_object($controller) && method_exists($controller, '__invoke'))) {
60+
if (is_array($controller)) {
6161
return $controller;
6262
}
6363

64+
if (is_object($controller)) {
65+
if (method_exists($controller, '__invoke')) {
66+
return $controller;
67+
}
68+
69+
throw new \InvalidArgumentException(sprintf('Controller "%s" for URI "%s" is not callable.', get_class($controller), $request->getPathInfo()));
70+
}
71+
6472
if (false === strpos($controller, ':')) {
6573
if (method_exists($controller, '__invoke')) {
6674
return new $controller();
@@ -72,7 +80,7 @@ public function getController(Request $request)
7280
$callable = $this->createController($controller);
7381

7482
if (!is_callable($callable)) {
75-
throw new \InvalidArgumentException(sprintf('The controller for URI "%s" is not callable.', $request->getPathInfo()));
83+
throw new \InvalidArgumentException(sprintf('Controller "%s" for URI "%s" is not callable.', $controller, $request->getPathInfo()));
7684
}
7785

7886
return $callable;

‎src/Symfony/Component/HttpKernel/Tests/Controller/ControllerResolverTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/HttpKernel/Tests/Controller/ControllerResolverTest.php
+84-31Lines changed: 84 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -17,66 +17,119 @@
1717

1818
class ControllerResolverTest extends \PHPUnit_Framework_TestCase
1919
{
20-
public function testGetController()
20+
public function testGetControllerWithoutControllerParameter()
2121
{
22-
$logger = new Logger();
22+
$logger = $this->getMock('Psr\Log\LoggerInterface');
23+
$logger->expects($this->once())->method('warning')->with('Unable to look for the controller as the "_controller" parameter is missing');
2324
$resolver = new ControllerResolver($logger);
2425

2526
$request = Request::create('/');
2627
$this->assertFalse($resolver->getController($request), '->getController() returns false when the request has no _controller attribute');
27-
$this->assertEquals(array('Unable to look for the controller as the "_controller" parameter is missing'), $logger->getLogs('warning'));
28+
}
2829

29-
$request->attributes->set('_controller', 'Symfony\Component\HttpKernel\Tests\Controller\ControllerResolverTest::testGetController');
30-
$controller = $resolver->getController($request);
31-
$this->assertInstanceOf('Symfony\Component\HttpKernel\Tests\Controller\ControllerResolverTest', $controller[0], '->getController() returns a PHP callable');
30+
public function testGetControllerWithLambda()
31+
{
32+
$resolver = new ControllerResolver();
3233

34+
$request = Request::create('/');
3335
$request->attributes->set('_controller', $lambda = function () {});
3436
$controller = $resolver->getController($request);
3537
$this->assertSame($lambda, $controller);
38+
}
3639

40+
public function testGetControllerWithObjectAndInvokeMethod()
41+
{
42+
$resolver = new ControllerResolver();
43+
44+
$request = Request::create('/');
3745
$request->attributes->set('_controller', $this);
3846
$controller = $resolver->getController($request);
3947
$this->assertSame($this, $controller);
48+
}
4049

41-
$request->attributes->set('_controller', 'Symfony\Component\HttpKernel\Tests\Controller\ControllerResolverTest');
42-
$controller = $resolver->getController($request);
43-
$this->assertInstanceOf('Symfony\Component\HttpKernel\Tests\Controller\ControllerResolverTest', $controller);
50+
public function testGetControllerWithObjectAndMethod()
51+
{
52+
$resolver = new ControllerResolver();
4453

54+
$request = Request::create('/');
4555
$request->attributes->set('_controller', array($this, 'controllerMethod1'));
4656
$controller = $resolver->getController($request);
4757
$this->assertSame(array($this, 'controllerMethod1'), $controller);
58+
}
4859

60+
public function testGetControllerWithClassAndMethod()
61+
{
62+
$resolver = new ControllerResolver();
63+
64+
$request = Request::create('/');
4965
$request->attributes->set('_controller', array('Symfony\Component\HttpKernel\Tests\Controller\ControllerResolverTest', 'controllerMethod4'));
5066
$controller = $resolver->getController($request);
5167
$this->assertSame(array('Symfony\Component\HttpKernel\Tests\Controller\ControllerResolverTest', 'controllerMethod4'), $controller);
68+
}
69+
70+
public function testGetControllerWithObjectAndMethodAsString()
71+
{
72+
$resolver = new ControllerResolver();
73+
74+
$request = Request::create('/');
75+
$request->attributes->set('_controller', 'Symfony\Component\HttpKernel\Tests\Controller\ControllerResolverTest::controllerMethod1');
76+
$controller = $resolver->getController($request);
77+
$this->assertInstanceOf('Symfony\Component\HttpKernel\Tests\Controller\ControllerResolverTest', $controller[0], '->getController() returns a PHP callable');
78+
}
79+
80+
public function testGetControllerWithClassAndInvokeMethod()
81+
{
82+
$resolver = new ControllerResolver();
83+
84+
$request = Request::create('/');
85+
$request->attributes->set('_controller', 'Symfony\Component\HttpKernel\Tests\Controller\ControllerResolverTest');
86+
$controller = $resolver->getController($request);
87+
$this->assertInstanceOf('Symfony\Component\HttpKernel\Tests\Controller\ControllerResolverTest', $controller);
88+
}
89+
90+
/**
91+
* @expectedException \InvalidArgumentException
92+
*/
93+
public function testGetControllerOnObjectWithoutInvokeMethod()
94+
{
95+
$resolver = new ControllerResolver();
96+
97+
$request = Request::create('/');
98+
$request->attributes->set('_controller', new \stdClass());
99+
$resolver->getController($request);
100+
}
101+
102+
public function testGetControllerWithFunction()
103+
{
104+
$resolver = new ControllerResolver();
52105

106+
$request = Request::create('/');
53107
$request->attributes->set('_controller', 'Symfony\Component\HttpKernel\Tests\Controller\some_controller_function');
54108
$controller = $resolver->getController($request);
55109
$this->assertSame('Symfony\Component\HttpKernel\Tests\Controller\some_controller_function', $controller);
110+
}
56111

57-
$request->attributes->set('_controller', 'foo');
58-
try {
59-
$resolver->getController($request);
60-
$this->fail('->getController() throws an \InvalidArgumentException if the _controller attribute is not well-formatted');
61-
} catch (\Exception $e) {
62-
$this->assertInstanceOf('\InvalidArgumentException', $e, '->getController() throws an \InvalidArgumentException if the _controller attribute is not well-formatted');
63-
}
112+
/**
113+
* @dataProvider getUndefinedControllers
114+
* @expectedException \InvalidArgumentException
115+
*/
116+
public function testGetControllerOnNonUndefinedFunction($controller)
117+
{
118+
$resolver = new ControllerResolver();
64119

65-
$request->attributes->set('_controller', 'foo::bar');
66-
try {
67-
$resolver->getController($request);
68-
$this->fail('->getController() throws an \InvalidArgumentException if the _controller attribute contains a non-existent class');
69-
} catch (\Exception $e) {
70-
$this->assertInstanceOf('\InvalidArgumentException', $e, '->getController() throws an \InvalidArgumentException if the _controller attribute contains a non-existent class');
71-
}
120+
$request = Request::create('/');
121+
$request->attributes->set('_controller', $controller);
122+
$resolver->getController($request);
123+
}
72124

73-
$request->attributes->set('_controller', 'Symfony\Component\HttpKernel\Tests\Controller\ControllerResolverTest::bar');
74-
try {
75-
$resolver->getController($request);
76-
$this->fail('->getController() throws an \InvalidArgumentException if the _controller attribute contains a non-existent method');
77-
} catch (\Exception $e) {
78-
$this->assertInstanceOf('\InvalidArgumentException', $e, '->getController() throws an \InvalidArgumentException if the _controller attribute contains a non-existent method');
79-
}
125+
public function getUndefinedControllers()
126+
{
127+
return array(
128+
array('foo'),
129+
array('foo::bar'),
130+
array('stdClass'),
131+
array('Symfony\Component\HttpKernel\Tests\Controller\ControllerResolverTest::bar'),
132+
);
80133
}
81134

82135
public function testGetArguments()
@@ -158,7 +211,7 @@ public function __invoke($foo, $bar = null)
158211
{
159212
}
160213

161-
protected function controllerMethod1($foo)
214+
public function controllerMethod1($foo)
162215
{
163216
}
164217

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.