Merge branch '2.7' into 2.8
* 2.7: Lighten tests output by removing composer suggestions CS: Remove invisible chars Disable resource tracking if the config component is missing [EventDispatcher] Remove unneded count() Fix tests expecting a valid date [Console] Fix table cell styling [Console] Revised exception rendering [WebProfilerBundle] Normalize whitespace in exceptions passed in headers Disable color support detection for tests [Form] Improve the exceptions when trying to get the data in a PRE_SET_DATA listener and the data has not already been set
This commit is contained in:
commit
d49005a651
@ -79,7 +79,7 @@ install:
|
|||||||
- export COMPOSER_ROOT_VERSION=$SYMFONY_VERSION.x-dev
|
- export COMPOSER_ROOT_VERSION=$SYMFONY_VERSION.x-dev
|
||||||
- if [[ ! $skip && $deps ]]; then export SYMFONY_DEPRECATIONS_HELPER=weak; fi
|
- if [[ ! $skip && $deps ]]; then export SYMFONY_DEPRECATIONS_HELPER=weak; fi
|
||||||
- if [[ ! $skip && $deps ]]; then mv composer.json.phpunit composer.json; fi
|
- if [[ ! $skip && $deps ]]; then mv composer.json.phpunit composer.json; fi
|
||||||
- if [[ ! $skip ]]; then composer update; fi
|
- if [[ ! $skip ]]; then composer update --no-suggest; fi
|
||||||
- if [[ ! $skip ]]; then ./phpunit install; fi
|
- if [[ ! $skip ]]; then ./phpunit install; fi
|
||||||
- if [[ ! $skip && ! $PHP = hhvm* ]]; then php -i; else hhvm --php -r 'print_r($_SERVER);print_r(ini_get_all());'; fi
|
- if [[ ! $skip && ! $PHP = hhvm* ]]; then php -i; else hhvm --php -r 'print_r($_SERVER);print_r(ini_get_all());'; fi
|
||||||
|
|
||||||
@ -90,5 +90,5 @@ script:
|
|||||||
- if [[ ! $deps && ! $PHP = hhvm* ]]; then echo -e "\\nRunning tests requiring tty"; $PHPUNIT --group tty; fi
|
- if [[ ! $deps && ! $PHP = hhvm* ]]; then echo -e "\\nRunning tests requiring tty"; $PHPUNIT --group tty; fi
|
||||||
- if [[ ! $deps && $PHP = hhvm* ]]; then $PHPUNIT --exclude-group benchmark,intl-data; fi
|
- if [[ ! $deps && $PHP = hhvm* ]]; then $PHPUNIT --exclude-group benchmark,intl-data; fi
|
||||||
- if [[ ! $deps && $PHP = ${MIN_PHP%.*} ]]; then echo -e "1\\n0" | xargs -I{} sh -c 'echo "\\nPHP --enable-sigchild enhanced={}" && ENHANCE_SIGCHLD={} php-$MIN_PHP/sapi/cli/php .phpunit/phpunit-4.8/phpunit --colors=always src/Symfony/Component/Process/'; fi
|
- if [[ ! $deps && $PHP = ${MIN_PHP%.*} ]]; then echo -e "1\\n0" | xargs -I{} sh -c 'echo "\\nPHP --enable-sigchild enhanced={}" && ENHANCE_SIGCHLD={} php-$MIN_PHP/sapi/cli/php .phpunit/phpunit-4.8/phpunit --colors=always src/Symfony/Component/Process/'; fi
|
||||||
- if [[ $deps = high ]]; then echo "$COMPONENTS" | parallel --gnu -j10% 'cd {}; composer update --no-progress --ansi; $PHPUNIT --exclude-group tty,benchmark,intl-data'$LEGACY"$REPORT"; fi
|
- if [[ $deps = high ]]; then echo "$COMPONENTS" | parallel --gnu -j10% 'cd {}; composer update --no-progress --no-suggest --ansi; $PHPUNIT --exclude-group tty,benchmark,intl-data'$LEGACY"$REPORT"; fi
|
||||||
- if [[ $deps = low ]]; then echo "$COMPONENTS" | parallel --gnu -j10% 'cd {}; composer update --no-progress --ansi --prefer-lowest --prefer-stable; $PHPUNIT --exclude-group tty,benchmark,intl-data'"$REPORT"; fi
|
- if [[ $deps = low ]]; then echo "$COMPONENTS" | parallel --gnu -j10% 'cd {}; composer update --no-progress --no-suggest --ansi --prefer-lowest --prefer-stable; $PHPUNIT --exclude-group tty,benchmark,intl-data'"$REPORT"; fi
|
||||||
|
@ -54,7 +54,7 @@ install:
|
|||||||
- copy /Y .composer\* %APPDATA%\Composer\
|
- copy /Y .composer\* %APPDATA%\Composer\
|
||||||
- php .github/build-packages.php "HEAD^" src\Symfony\Bridge\PhpUnit
|
- php .github/build-packages.php "HEAD^" src\Symfony\Bridge\PhpUnit
|
||||||
- IF %APPVEYOR_REPO_BRANCH%==master (SET COMPOSER_ROOT_VERSION=dev-master) ELSE (SET COMPOSER_ROOT_VERSION=%APPVEYOR_REPO_BRANCH%.x-dev)
|
- IF %APPVEYOR_REPO_BRANCH%==master (SET COMPOSER_ROOT_VERSION=dev-master) ELSE (SET COMPOSER_ROOT_VERSION=%APPVEYOR_REPO_BRANCH%.x-dev)
|
||||||
- php composer.phar update --no-progress --ansi
|
- php composer.phar update --no-progress --no-suggest --ansi
|
||||||
- php phpunit install
|
- php phpunit install
|
||||||
|
|
||||||
test_script:
|
test_script:
|
||||||
|
@ -68,7 +68,7 @@ class WebDebugToolbarListener implements EventSubscriberInterface
|
|||||||
$this->urlGenerator->generate('_profiler', array('token' => $response->headers->get('X-Debug-Token')), UrlGeneratorInterface::ABSOLUTE_URL)
|
$this->urlGenerator->generate('_profiler', array('token' => $response->headers->get('X-Debug-Token')), UrlGeneratorInterface::ABSOLUTE_URL)
|
||||||
);
|
);
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
$response->headers->set('X-Debug-Error', get_class($e).': '.$e->getMessage());
|
$response->headers->set('X-Debug-Error', get_class($e).': '.preg_replace('/\s+/', ' ', $e->getMessage()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -245,6 +245,27 @@ class WebDebugToolbarListenerTest extends TestCase
|
|||||||
$this->assertEquals('Exception: foo', $response->headers->get('X-Debug-Error'));
|
$this->assertEquals('Exception: foo', $response->headers->get('X-Debug-Error'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testThrowingErrorCleanup()
|
||||||
|
{
|
||||||
|
$response = new Response();
|
||||||
|
$response->headers->set('X-Debug-Token', 'xxxxxxxx');
|
||||||
|
|
||||||
|
$urlGenerator = $this->getUrlGeneratorMock();
|
||||||
|
$urlGenerator
|
||||||
|
->expects($this->once())
|
||||||
|
->method('generate')
|
||||||
|
->with('_profiler', array('token' => 'xxxxxxxx'))
|
||||||
|
->will($this->throwException(new \Exception("This\nmultiline\r\ntabbed text should\tcome out\r on\n \ta single plain\r\nline")))
|
||||||
|
;
|
||||||
|
|
||||||
|
$event = new FilterResponseEvent($this->getKernelMock(), $this->getRequestMock(), HttpKernelInterface::MASTER_REQUEST, $response);
|
||||||
|
|
||||||
|
$listener = new WebDebugToolbarListener($this->getTwigMock(), false, WebDebugToolbarListener::ENABLED, 'bottom', $urlGenerator);
|
||||||
|
$listener->onKernelResponse($event);
|
||||||
|
|
||||||
|
$this->assertEquals('Exception: This multiline tabbed text should come out on a single plain line', $response->headers->get('X-Debug-Error'));
|
||||||
|
}
|
||||||
|
|
||||||
protected function getRequestMock($isXmlHttpRequest = false, $requestFormat = 'html', $hasSession = true)
|
protected function getRequestMock($isXmlHttpRequest = false, $requestFormat = 'html', $hasSession = true)
|
||||||
{
|
{
|
||||||
$request = $this->getMockBuilder('Symfony\Component\HttpFoundation\Request')->setMethods(array('getSession', 'isXmlHttpRequest', 'getRequestFormat'))->disableOriginalConstructor()->getMock();
|
$request = $this->getMockBuilder('Symfony\Component\HttpFoundation\Request')->setMethods(array('getSession', 'isXmlHttpRequest', 'getRequestFormat'))->disableOriginalConstructor()->getMock();
|
||||||
|
@ -653,12 +653,11 @@ class Application
|
|||||||
if (defined('HHVM_VERSION') && $width > 1 << 31) {
|
if (defined('HHVM_VERSION') && $width > 1 << 31) {
|
||||||
$width = 1 << 31;
|
$width = 1 << 31;
|
||||||
}
|
}
|
||||||
$formatter = $output->getFormatter();
|
|
||||||
$lines = array();
|
$lines = array();
|
||||||
foreach (preg_split('/\r?\n/', OutputFormatter::escape($e->getMessage())) as $line) {
|
foreach (preg_split('/\r?\n/', $e->getMessage()) as $line) {
|
||||||
foreach ($this->splitStringByWidth($line, $width - 4) as $line) {
|
foreach ($this->splitStringByWidth($line, $width - 4) as $line) {
|
||||||
// pre-format lines to get the right string length
|
// pre-format lines to get the right string length
|
||||||
$lineLength = $this->stringWidth(preg_replace('/\[[^m]*m/', '', $formatter->format($line))) + 4;
|
$lineLength = $this->stringWidth($line) + 4;
|
||||||
$lines[] = array($line, $lineLength);
|
$lines[] = array($line, $lineLength);
|
||||||
|
|
||||||
$len = max($lineLength, $len);
|
$len = max($lineLength, $len);
|
||||||
@ -666,15 +665,15 @@ class Application
|
|||||||
}
|
}
|
||||||
|
|
||||||
$messages = array();
|
$messages = array();
|
||||||
$messages[] = $emptyLine = $formatter->format(sprintf('<error>%s</error>', str_repeat(' ', $len)));
|
$messages[] = $emptyLine = sprintf('<error>%s</error>', str_repeat(' ', $len));
|
||||||
$messages[] = $formatter->format(sprintf('<error>%s%s</error>', $title, str_repeat(' ', max(0, $len - $this->stringWidth($title)))));
|
$messages[] = sprintf('<error>%s%s</error>', $title, str_repeat(' ', max(0, $len - $this->stringWidth($title))));
|
||||||
foreach ($lines as $line) {
|
foreach ($lines as $line) {
|
||||||
$messages[] = $formatter->format(sprintf('<error> %s %s</error>', $line[0], str_repeat(' ', $len - $line[1])));
|
$messages[] = sprintf('<error> %s %s</error>', OutputFormatter::escape($line[0]), str_repeat(' ', $len - $line[1]));
|
||||||
}
|
}
|
||||||
$messages[] = $emptyLine;
|
$messages[] = $emptyLine;
|
||||||
$messages[] = '';
|
$messages[] = '';
|
||||||
|
|
||||||
$output->writeln($messages, OutputInterface::OUTPUT_RAW | OutputInterface::VERBOSITY_QUIET);
|
$output->writeln($messages, OutputInterface::VERBOSITY_QUIET);
|
||||||
|
|
||||||
if (OutputInterface::VERBOSITY_VERBOSE <= $output->getVerbosity()) {
|
if (OutputInterface::VERBOSITY_VERBOSE <= $output->getVerbosity()) {
|
||||||
$output->writeln('<comment>Exception trace:</comment>', OutputInterface::VERBOSITY_QUIET);
|
$output->writeln('<comment>Exception trace:</comment>', OutputInterface::VERBOSITY_QUIET);
|
||||||
|
@ -105,6 +105,11 @@ abstract class Helper implements HelperInterface
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static function strlenWithoutDecoration(OutputFormatterInterface $formatter, $string)
|
public static function strlenWithoutDecoration(OutputFormatterInterface $formatter, $string)
|
||||||
|
{
|
||||||
|
return self::strlen(self::removeDecoration($formatter, $string));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function removeDecoration(OutputFormatterInterface $formatter, $string)
|
||||||
{
|
{
|
||||||
$isDecorated = $formatter->isDecorated();
|
$isDecorated = $formatter->isDecorated();
|
||||||
$formatter->setDecorated(false);
|
$formatter->setDecorated(false);
|
||||||
@ -114,6 +119,6 @@ abstract class Helper implements HelperInterface
|
|||||||
$string = preg_replace("/\033\[[^m]*m/", '', $string);
|
$string = preg_replace("/\033\[[^m]*m/", '', $string);
|
||||||
$formatter->setDecorated($isDecorated);
|
$formatter->setDecorated($isDecorated);
|
||||||
|
|
||||||
return self::strlen($string);
|
return $string;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -387,7 +387,7 @@ class Table
|
|||||||
if (!strstr($cell, "\n")) {
|
if (!strstr($cell, "\n")) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
$lines = explode("\n", $cell);
|
$lines = explode("\n", str_replace("\n", "<fg=default;bg=default>\n</>", $cell));
|
||||||
foreach ($lines as $lineKey => $line) {
|
foreach ($lines as $lineKey => $line) {
|
||||||
if ($cell instanceof TableCell) {
|
if ($cell instanceof TableCell) {
|
||||||
$line = new TableCell($line, array('colspan' => $cell->getColspan()));
|
$line = new TableCell($line, array('colspan' => $cell->getColspan()));
|
||||||
@ -428,7 +428,7 @@ class Table
|
|||||||
$nbLines = $cell->getRowspan() - 1;
|
$nbLines = $cell->getRowspan() - 1;
|
||||||
$lines = array($cell);
|
$lines = array($cell);
|
||||||
if (strstr($cell, "\n")) {
|
if (strstr($cell, "\n")) {
|
||||||
$lines = explode("\n", $cell);
|
$lines = explode("\n", str_replace("\n", "<fg=default;bg=default>\n</>", $cell));
|
||||||
$nbLines = count($lines) > $nbLines ? substr_count($cell, "\n") : $nbLines;
|
$nbLines = count($lines) > $nbLines ? substr_count($cell, "\n") : $nbLines;
|
||||||
|
|
||||||
$rows[$line][$column] = new TableCell($lines[0], array('colspan' => $cell->getColspan()));
|
$rows[$line][$column] = new TableCell($lines[0], array('colspan' => $cell->getColspan()));
|
||||||
@ -563,9 +563,10 @@ class Table
|
|||||||
|
|
||||||
foreach ($row as $i => $cell) {
|
foreach ($row as $i => $cell) {
|
||||||
if ($cell instanceof TableCell) {
|
if ($cell instanceof TableCell) {
|
||||||
$textLength = Helper::strlenWithoutDecoration($this->output->getFormatter(), $cell);
|
$textContent = Helper::removeDecoration($this->output->getFormatter(), $cell);
|
||||||
|
$textLength = Helper::strlen($textContent);
|
||||||
if ($textLength > 0) {
|
if ($textLength > 0) {
|
||||||
$contentColumns = str_split($cell, ceil($textLength / $cell->getColspan()));
|
$contentColumns = str_split($textContent, ceil($textLength / $cell->getColspan()));
|
||||||
foreach ($contentColumns as $position => $content) {
|
foreach ($contentColumns as $position => $content) {
|
||||||
$row[$i + $position] = $content;
|
$row[$i + $position] = $content;
|
||||||
}
|
}
|
||||||
|
@ -70,9 +70,7 @@ class CommandTester
|
|||||||
}
|
}
|
||||||
|
|
||||||
$this->output = new StreamOutput(fopen('php://memory', 'w', false));
|
$this->output = new StreamOutput(fopen('php://memory', 'w', false));
|
||||||
if (isset($options['decorated'])) {
|
$this->output->setDecorated(isset($options['decorated']) ? $options['decorated'] : false);
|
||||||
$this->output->setDecorated($options['decorated']);
|
|
||||||
}
|
|
||||||
if (isset($options['verbosity'])) {
|
if (isset($options['verbosity'])) {
|
||||||
$this->output->setVerbosity($options['verbosity']);
|
$this->output->setVerbosity($options['verbosity']);
|
||||||
}
|
}
|
||||||
|
@ -595,6 +595,22 @@ class ApplicationTest extends TestCase
|
|||||||
$this->assertStringEqualsFile(self::$fixturesPath.'/application_renderexception_doublewidth2.txt', $tester->getDisplay(true), '->renderException() wraps messages when they are bigger than the terminal');
|
$this->assertStringEqualsFile(self::$fixturesPath.'/application_renderexception_doublewidth2.txt', $tester->getDisplay(true), '->renderException() wraps messages when they are bigger than the terminal');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testRenderExceptionEscapesLines()
|
||||||
|
{
|
||||||
|
$application = $this->getMockBuilder('Symfony\Component\Console\Application')->setMethods(array('getTerminalWidth'))->getMock();
|
||||||
|
$application->setAutoExit(false);
|
||||||
|
$application->expects($this->any())
|
||||||
|
->method('getTerminalWidth')
|
||||||
|
->will($this->returnValue(22));
|
||||||
|
$application->register('foo')->setCode(function () {
|
||||||
|
throw new \Exception('dont break here <info>!</info>');
|
||||||
|
});
|
||||||
|
$tester = new ApplicationTester($application);
|
||||||
|
|
||||||
|
$tester->run(array('command' => 'foo'), array('decorated' => false));
|
||||||
|
$this->assertStringEqualsFile(self::$fixturesPath.'/application_renderexception_escapeslines.txt', $tester->getDisplay(true), '->renderException() escapes lines containing formatting');
|
||||||
|
}
|
||||||
|
|
||||||
public function testRun()
|
public function testRun()
|
||||||
{
|
{
|
||||||
$application = new Application();
|
$application = new Application();
|
||||||
|
@ -0,0 +1,9 @@
|
|||||||
|
|
||||||
|
|
||||||
|
[Exception]
|
||||||
|
dont break here <
|
||||||
|
info>!</info>
|
||||||
|
|
||||||
|
|
||||||
|
foo
|
||||||
|
|
@ -511,6 +511,35 @@ TABLE
|
|||||||
| Dante Alighieri | J. R. R. Tolkien | J. R. R |
|
| Dante Alighieri | J. R. R. Tolkien | J. R. R |
|
||||||
+-----------------+------------------+---------+
|
+-----------------+------------------+---------+
|
||||||
|
|
||||||
|
TABLE
|
||||||
|
,
|
||||||
|
true,
|
||||||
|
),
|
||||||
|
'Row with formatted cells containing a newline' => array(
|
||||||
|
array(),
|
||||||
|
array(
|
||||||
|
array(
|
||||||
|
new TableCell('<error>Dont break'."\n".'here</error>', array('colspan' => 2)),
|
||||||
|
),
|
||||||
|
new TableSeparator(),
|
||||||
|
array(
|
||||||
|
'foo',
|
||||||
|
new TableCell('<error>Dont break'."\n".'here</error>', array('rowspan' => 2)),
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'bar',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
'default',
|
||||||
|
<<<'TABLE'
|
||||||
|
+-------+------------+
|
||||||
|
[39;49m| [39;49m[37;41mDont break[39;49m[39;49m |[39;49m
|
||||||
|
[39;49m| [39;49m[37;41mhere[39;49m |
|
||||||
|
+-------+------------+
|
||||||
|
[39;49m| foo | [39;49m[37;41mDont break[39;49m[39;49m |[39;49m
|
||||||
|
[39;49m| bar | [39;49m[37;41mhere[39;49m |
|
||||||
|
+-------+------------+
|
||||||
|
|
||||||
TABLE
|
TABLE
|
||||||
,
|
,
|
||||||
true,
|
true,
|
||||||
|
@ -26,6 +26,7 @@ use Symfony\Component\Config\Resource\FileResource;
|
|||||||
use Symfony\Component\Config\Resource\ResourceInterface;
|
use Symfony\Component\Config\Resource\ResourceInterface;
|
||||||
use Symfony\Component\DependencyInjection\LazyProxy\Instantiator\InstantiatorInterface;
|
use Symfony\Component\DependencyInjection\LazyProxy\Instantiator\InstantiatorInterface;
|
||||||
use Symfony\Component\DependencyInjection\LazyProxy\Instantiator\RealServiceInstantiator;
|
use Symfony\Component\DependencyInjection\LazyProxy\Instantiator\RealServiceInstantiator;
|
||||||
|
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
|
||||||
use Symfony\Component\ExpressionLanguage\Expression;
|
use Symfony\Component\ExpressionLanguage\Expression;
|
||||||
use Symfony\Component\ExpressionLanguage\ExpressionFunctionProviderInterface;
|
use Symfony\Component\ExpressionLanguage\ExpressionFunctionProviderInterface;
|
||||||
|
|
||||||
@ -73,7 +74,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface
|
|||||||
*/
|
*/
|
||||||
private $compiler;
|
private $compiler;
|
||||||
|
|
||||||
private $trackResources = true;
|
private $trackResources;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var InstantiatorInterface|null
|
* @var InstantiatorInterface|null
|
||||||
@ -90,6 +91,13 @@ class ContainerBuilder extends Container implements TaggedContainerInterface
|
|||||||
*/
|
*/
|
||||||
private $expressionLanguageProviders = array();
|
private $expressionLanguageProviders = array();
|
||||||
|
|
||||||
|
public function __construct(ParameterBagInterface $parameterBag = null)
|
||||||
|
{
|
||||||
|
parent::__construct($parameterBag);
|
||||||
|
|
||||||
|
$this->trackResources = interface_exists('Symfony\Component\Config\Resource\ResourceInterface');
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var string[] with tag names used by findTaggedServiceIds
|
* @var string[] with tag names used by findTaggedServiceIds
|
||||||
*/
|
*/
|
||||||
|
@ -103,7 +103,7 @@ class EventDispatcher implements EventDispatcherInterface
|
|||||||
*/
|
*/
|
||||||
public function hasListeners($eventName = null)
|
public function hasListeners($eventName = null)
|
||||||
{
|
{
|
||||||
return (bool) count($this->getListeners($eventName));
|
return (bool) $this->getListeners($eventName);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -120,7 +120,7 @@ class PercentToLocalizedStringTransformer implements DataTransformerInterface
|
|||||||
|
|
||||||
$formatter = $this->getNumberFormatter();
|
$formatter = $this->getNumberFormatter();
|
||||||
// replace normal spaces so that the formatter can read them
|
// replace normal spaces so that the formatter can read them
|
||||||
$value = $formatter->parse(str_replace(' ', ' ', $value));
|
$value = $formatter->parse(str_replace(' ', "\xc2\xa0", $value));
|
||||||
|
|
||||||
if (intl_is_failure($formatter->getErrorCode())) {
|
if (intl_is_failure($formatter->getErrorCode())) {
|
||||||
throw new TransformationFailedException($formatter->getErrorMessage());
|
throw new TransformationFailedException($formatter->getErrorMessage());
|
||||||
|
@ -60,7 +60,7 @@ class ValidatorExtension extends AbstractExtension
|
|||||||
|
|
||||||
public function loadTypeGuesser()
|
public function loadTypeGuesser()
|
||||||
{
|
{
|
||||||
// 2.5 API
|
// 2.5 API
|
||||||
if ($this->validator instanceof ValidatorInterface) {
|
if ($this->validator instanceof ValidatorInterface) {
|
||||||
return new ValidatorTypeGuesser($this->validator);
|
return new ValidatorTypeGuesser($this->validator);
|
||||||
}
|
}
|
||||||
|
@ -408,6 +408,10 @@ class Form implements \IteratorAggregate, FormInterface
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!$this->defaultDataSet) {
|
if (!$this->defaultDataSet) {
|
||||||
|
if ($this->lockSetData) {
|
||||||
|
throw new RuntimeException('A cycle was detected. Listeners to the PRE_SET_DATA event must not call getData() if the form data has not already been set. You should call getData() on the FormEvent object instead.');
|
||||||
|
}
|
||||||
|
|
||||||
$this->setData($this->config->getData());
|
$this->setData($this->config->getData());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -428,6 +432,10 @@ class Form implements \IteratorAggregate, FormInterface
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!$this->defaultDataSet) {
|
if (!$this->defaultDataSet) {
|
||||||
|
if ($this->lockSetData) {
|
||||||
|
throw new RuntimeException('A cycle was detected. Listeners to the PRE_SET_DATA event must not call getNormData() if the form data has not already been set.');
|
||||||
|
}
|
||||||
|
|
||||||
$this->setData($this->config->getData());
|
$this->setData($this->config->getData());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -448,6 +456,10 @@ class Form implements \IteratorAggregate, FormInterface
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!$this->defaultDataSet) {
|
if (!$this->defaultDataSet) {
|
||||||
|
if ($this->lockSetData) {
|
||||||
|
throw new RuntimeException('A cycle was detected. Listeners to the PRE_SET_DATA event must not call getViewData() if the form data has not already been set.');
|
||||||
|
}
|
||||||
|
|
||||||
$this->setData($this->config->getData());
|
$this->setData($this->config->getData());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -608,7 +608,7 @@ class DateTypeTest extends BaseTypeTest
|
|||||||
));
|
));
|
||||||
|
|
||||||
$form->submit(array(
|
$form->submit(array(
|
||||||
'day' => '0',
|
'day' => '1',
|
||||||
'month' => '6',
|
'month' => '6',
|
||||||
'year' => '2010',
|
'year' => '2010',
|
||||||
));
|
));
|
||||||
|
@ -903,6 +903,7 @@ class SimpleFormTest extends AbstractFormTest
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @expectedException \Symfony\Component\Form\Exception\RuntimeException
|
* @expectedException \Symfony\Component\Form\Exception\RuntimeException
|
||||||
|
* @expectedExceptionMessage A cycle was detected. Listeners to the PRE_SET_DATA event must not call setData(). You should call setData() on the FormEvent object instead.
|
||||||
*/
|
*/
|
||||||
public function testSetDataCannotInvokeItself()
|
public function testSetDataCannotInvokeItself()
|
||||||
{
|
{
|
||||||
@ -1084,6 +1085,51 @@ class SimpleFormTest extends AbstractFormTest
|
|||||||
$fooType->setDefaultOptions($resolver);
|
$fooType->setDefaultOptions($resolver);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @expectedException \Symfony\Component\Form\Exception\RuntimeException
|
||||||
|
* @expectedExceptionMessage A cycle was detected. Listeners to the PRE_SET_DATA event must not call getData() if the form data has not already been set. You should call getData() on the FormEvent object instead.
|
||||||
|
*/
|
||||||
|
public function testCannotCallGetDataInPreSetDataListenerIfDataHasNotAlreadyBeenSet()
|
||||||
|
{
|
||||||
|
$config = new FormConfigBuilder('name', 'stdClass', $this->dispatcher);
|
||||||
|
$config->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
|
||||||
|
$event->getForm()->getData();
|
||||||
|
});
|
||||||
|
$form = new Form($config);
|
||||||
|
|
||||||
|
$form->setData('foo');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @expectedException \Symfony\Component\Form\Exception\RuntimeException
|
||||||
|
* @expectedExceptionMessage A cycle was detected. Listeners to the PRE_SET_DATA event must not call getNormData() if the form data has not already been set.
|
||||||
|
*/
|
||||||
|
public function testCannotCallGetNormDataInPreSetDataListener()
|
||||||
|
{
|
||||||
|
$config = new FormConfigBuilder('name', 'stdClass', $this->dispatcher);
|
||||||
|
$config->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
|
||||||
|
$event->getForm()->getNormData();
|
||||||
|
});
|
||||||
|
$form = new Form($config);
|
||||||
|
|
||||||
|
$form->setData('foo');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @expectedException \Symfony\Component\Form\Exception\RuntimeException
|
||||||
|
* @expectedExceptionMessage A cycle was detected. Listeners to the PRE_SET_DATA event must not call getViewData() if the form data has not already been set.
|
||||||
|
*/
|
||||||
|
public function testCannotCallGetViewDataInPreSetDataListener()
|
||||||
|
{
|
||||||
|
$config = new FormConfigBuilder('name', 'stdClass', $this->dispatcher);
|
||||||
|
$config->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
|
||||||
|
$event->getForm()->getViewData();
|
||||||
|
});
|
||||||
|
$form = new Form($config);
|
||||||
|
|
||||||
|
$form->setData('foo');
|
||||||
|
}
|
||||||
|
|
||||||
protected function createForm()
|
protected function createForm()
|
||||||
{
|
{
|
||||||
return $this->getBuilder()->getForm();
|
return $this->getBuilder()->getForm();
|
||||||
|
Reference in New Issue
Block a user