Skip to content

Commit 4ecce38

Browse files
committed
Merge branch '2.7' into 2.8
* 2.7: Update twig.html.twig [2.7] [FrameworkBundle] minor fix tests added by #17569 fixed CS fixed CS documented the $url parameter better [Form] add test for ArrayChoiceList handling null [Form] fix edge cases with choice placeholder register commands from kernel when accessing list Update FileSystem
2 parents 1529d18 + f21d9f1 commit 4ecce38

File tree

3 files changed

+112
-24
lines changed

3 files changed

+112
-24
lines changed

Console/Application.php

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -69,12 +69,6 @@ public function doRun(InputInterface $input, OutputInterface $output)
6969
{
7070
$this->kernel->boot();
7171

72-
if (!$this->commandsRegistered) {
73-
$this->registerCommands();
74-
75-
$this->commandsRegistered = true;
76-
}
77-
7872
$container = $this->kernel->getContainer();
7973

8074
foreach ($this->all() as $command) {
@@ -98,8 +92,36 @@ public function doRun(InputInterface $input, OutputInterface $output)
9892
return parent::doRun($input, $output);
9993
}
10094

95+
/**
96+
* {@inheritdoc}
97+
*/
98+
public function get($name)
99+
{
100+
$this->registerCommands();
101+
102+
return parent::get($name);
103+
}
104+
105+
/**
106+
* {@inheritdoc}
107+
*/
108+
public function all($namespace = null)
109+
{
110+
$this->registerCommands();
111+
112+
return parent::all($namespace);
113+
}
114+
101115
protected function registerCommands()
102116
{
117+
if ($this->commandsRegistered) {
118+
return;
119+
}
120+
121+
$this->commandsRegistered = true;
122+
123+
$this->kernel->boot();
124+
103125
$container = $this->kernel->getContainer();
104126

105127
foreach ($this->kernel->getBundles() as $bundle) {

Resources/views/Form/choice_widget_collapsed.html.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<select
2-
<?php if ($required && null === $placeholder && $placeholder_in_choices === false && $multiple === false):
2+
<?php if ($required && null === $placeholder && $placeholder_in_choices === false && $multiple === false && (!isset($attr['size']) || $attr['size'] <= 1)):
33
$required = false;
44
endif; ?>
55
<?php echo $view['form']->block($form, 'widget_attributes', array(

Tests/Console/ApplicationTest.php

Lines changed: 83 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@
1111

1212
namespace Symfony\Bundle\FrameworkBundle\Tests\Console;
1313

14-
use Symfony\Bundle\FrameworkBundle\Tests\TestCase;
1514
use Symfony\Bundle\FrameworkBundle\Console\Application;
15+
use Symfony\Bundle\FrameworkBundle\Tests\TestCase;
16+
use Symfony\Component\Console\Command\Command;
1617
use Symfony\Component\Console\Input\ArrayInput;
1718
use Symfony\Component\Console\Output\NullOutput;
1819
use Symfony\Component\Console\Tester\ApplicationTester;
@@ -23,7 +24,7 @@ public function testBundleInterfaceImplementation()
2324
{
2425
$bundle = $this->getMock('Symfony\Component\HttpKernel\Bundle\BundleInterface');
2526

26-
$kernel = $this->getKernel(array($bundle));
27+
$kernel = $this->getKernel(array($bundle), true);
2728

2829
$application = new Application($kernel);
2930
$application->doRun(new ArrayInput(array('list')), new NullOutput());
@@ -34,10 +35,73 @@ public function testBundleCommandsAreRegistered()
3435
$bundle = $this->getMock('Symfony\Component\HttpKernel\Bundle\Bundle');
3536
$bundle->expects($this->once())->method('registerCommands');
3637

37-
$kernel = $this->getKernel(array($bundle));
38+
$kernel = $this->getKernel(array($bundle), true);
3839

3940
$application = new Application($kernel);
4041
$application->doRun(new ArrayInput(array('list')), new NullOutput());
42+
43+
// Calling twice: registration should only be done once.
44+
$application->doRun(new ArrayInput(array('list')), new NullOutput());
45+
}
46+
47+
public function testBundleCommandsAreRetrievable()
48+
{
49+
$bundle = $this->getMock('Symfony\Component\HttpKernel\Bundle\Bundle');
50+
$bundle->expects($this->once())->method('registerCommands');
51+
52+
$kernel = $this->getKernel(array($bundle));
53+
54+
$application = new Application($kernel);
55+
$application->all();
56+
57+
// Calling twice: registration should only be done once.
58+
$application->all();
59+
}
60+
61+
public function testBundleSingleCommandIsRetrievable()
62+
{
63+
$bundle = $this->getMock('Symfony\Component\HttpKernel\Bundle\Bundle');
64+
$bundle->expects($this->once())->method('registerCommands');
65+
66+
$kernel = $this->getKernel(array($bundle));
67+
68+
$application = new Application($kernel);
69+
70+
$command = new Command('example');
71+
$application->add($command);
72+
73+
$this->assertSame($command, $application->get('example'));
74+
}
75+
76+
public function testBundleCommandCanBeFound()
77+
{
78+
$bundle = $this->getMock('Symfony\Component\HttpKernel\Bundle\Bundle');
79+
$bundle->expects($this->once())->method('registerCommands');
80+
81+
$kernel = $this->getKernel(array($bundle));
82+
83+
$application = new Application($kernel);
84+
85+
$command = new Command('example');
86+
$application->add($command);
87+
88+
$this->assertSame($command, $application->find('example'));
89+
}
90+
91+
public function testBundleCommandCanBeFoundByAlias()
92+
{
93+
$bundle = $this->getMock('Symfony\Component\HttpKernel\Bundle\Bundle');
94+
$bundle->expects($this->once())->method('registerCommands');
95+
96+
$kernel = $this->getKernel(array($bundle));
97+
98+
$application = new Application($kernel);
99+
100+
$command = new Command('example');
101+
$command->setAliases(array('alias'));
102+
$application->add($command);
103+
104+
$this->assertSame($command, $application->find('alias'));
41105
}
42106

43107
public function testBundleCommandsHaveRightContainer()
@@ -46,7 +110,7 @@ public function testBundleCommandsHaveRightContainer()
46110
$command->setCode(function () {});
47111
$command->expects($this->exactly(2))->method('setContainer');
48112

49-
$application = new Application($this->getKernel(array()));
113+
$application = new Application($this->getKernel(array(), true));
50114
$application->setAutoExit(false);
51115
$application->setCatchExceptions(false);
52116
$application->add($command);
@@ -59,21 +123,23 @@ public function testBundleCommandsHaveRightContainer()
59123
$tester->run(array('command' => 'foo'));
60124
}
61125

62-
private function getKernel(array $bundles)
126+
private function getKernel(array $bundles, $useDispatcher = false)
63127
{
64-
$dispatcher = $this->getMock('Symfony\Component\EventDispatcher\EventDispatcherInterface');
65-
$dispatcher
66-
->expects($this->atLeastOnce())
67-
->method('dispatch')
68-
;
69-
70128
$container = $this->getMock('Symfony\Component\DependencyInjection\ContainerInterface');
71-
$container
72-
->expects($this->atLeastOnce())
73-
->method('get')
74-
->with($this->equalTo('event_dispatcher'))
75-
->will($this->returnValue($dispatcher))
76-
;
129+
130+
if ($useDispatcher) {
131+
$dispatcher = $this->getMock('Symfony\Component\EventDispatcher\EventDispatcherInterface');
132+
$dispatcher
133+
->expects($this->atLeastOnce())
134+
->method('dispatch')
135+
;
136+
$container
137+
->expects($this->atLeastOnce())
138+
->method('get')
139+
->with($this->equalTo('event_dispatcher'))
140+
->will($this->returnValue($dispatcher));
141+
}
142+
77143
$container
78144
->expects($this->once())
79145
->method('hasParameter')

0 commit comments

Comments
 (0)