Skip to content

Commit

Permalink
Merge branch '3.4' into 4.1
Browse files Browse the repository at this point in the history
* 3.4:
  fix compatibility with Twig >= 2.6.1
  [Form] SA fix
  fix compatibility with PHPUnit 4.8
  remove return type hint for PHP 5 compatibility
  Component CssSelector tests
  [DebugClassLoader] Readd findFile() method
  [Console] Fix composer.json suggest/provide
  Revert "bug #29597 [DI] fix reporting bindings on overriden services as unused (nicolas-grekas)"
  Fixed exception wording
  Fix SwiftMailerHandler to support Monolog's latest reset functionality
  • Loading branch information
xabbuh committed Jan 14, 2019
2 parents 1874369 + facbaa5 commit 00b73da
Show file tree
Hide file tree
Showing 15 changed files with 121 additions and 77 deletions.
8 changes: 8 additions & 0 deletions src/Symfony/Bridge/Monolog/Handler/SwiftMailerHandler.php
Expand Up @@ -59,6 +59,14 @@ protected function send($content, array $records)
}
}

/**
* {@inheritdoc}
*/
public function reset()
{
$this->flushMemorySpool();
}

/**
* Flushes the mail queue if a memory spool is used.
*/
Expand Down
Expand Up @@ -68,7 +68,7 @@ public function parse(Token $token)
$body = $this->parser->subparse(array($this, 'decideTransChoiceFork'), true);

if (!$body instanceof TextNode && !$body instanceof AbstractExpression) {
throw new SyntaxError('A message inside a transchoice tag must be a simple text.', $body->getTemplateLine(), $stream->getSourceContext()->getName());
throw new SyntaxError('A message inside a transchoice tag must be a simple text.', $body->getTemplateLine(), $stream->getSourceContext());
}

$stream->expect(Token::BLOCK_END_TYPE);
Expand Down
4 changes: 2 additions & 2 deletions src/Symfony/Bridge/Twig/TokenParser/TransTokenParser.php
Expand Up @@ -60,7 +60,7 @@ public function parse(Token $token)
$stream->next();
$locale = $this->parser->getExpressionParser()->parseExpression();
} elseif (!$stream->test(Token::BLOCK_END_TYPE)) {
throw new SyntaxError('Unexpected token. Twig was looking for the "with", "from", or "into" keyword.', $stream->getCurrent()->getLine(), $stream->getSourceContext()->getName());
throw new SyntaxError('Unexpected token. Twig was looking for the "with", "from", or "into" keyword.', $stream->getCurrent()->getLine(), $stream->getSourceContext());
}
}

Expand All @@ -69,7 +69,7 @@ public function parse(Token $token)
$body = $this->parser->subparse(array($this, 'decideTransFork'), true);

if (!$body instanceof TextNode && !$body instanceof AbstractExpression) {
throw new SyntaxError('A message inside a trans tag must be a simple text.', $body->getTemplateLine(), $stream->getSourceContext()->getName());
throw new SyntaxError('A message inside a trans tag must be a simple text.', $body->getTemplateLine(), $stream->getSourceContext());
}

$stream->expect(Token::BLOCK_END_TYPE);
Expand Down
5 changes: 4 additions & 1 deletion src/Symfony/Component/Console/composer.json
Expand Up @@ -27,11 +27,14 @@
"symfony/process": "~3.4|~4.0",
"psr/log": "~1.0"
},
"provide": {
"psr/log-implementation": "1.0"
},
"suggest": {
"symfony/event-dispatcher": "",
"symfony/lock": "",
"symfony/process": "",
"psr/log-implementation": "For using the console logger"
"psr/log": "For using the console logger"
},
"conflict": {
"symfony/dependency-injection": "<3.4",
Expand Down
71 changes: 71 additions & 0 deletions src/Symfony/Component/CssSelector/Tests/XPath/TranslatorTest.php
Expand Up @@ -12,8 +12,12 @@
namespace Symfony\Component\CssSelector\Tests\XPath;

use PHPUnit\Framework\TestCase;
use Symfony\Component\CssSelector\Node\ElementNode;
use Symfony\Component\CssSelector\Node\FunctionNode;
use Symfony\Component\CssSelector\Parser\Parser;
use Symfony\Component\CssSelector\XPath\Extension\HtmlExtension;
use Symfony\Component\CssSelector\XPath\Translator;
use Symfony\Component\CssSelector\XPath\XPathExpr;

class TranslatorTest extends TestCase
{
Expand All @@ -31,6 +35,73 @@ public function testCssToXPath($css, $xpath)
$this->assertEquals($xpath, $translator->cssToXPath($css, ''));
}

/**
* @expectedException \Symfony\Component\CssSelector\Exception\ExpressionErrorException
*/
public function testCssToXPathPseudoElement()
{
$translator = new Translator();
$translator->registerExtension(new HtmlExtension($translator));
$translator->cssToXPath('e::first-line');
}

/**
* @expectedException \Symfony\Component\CssSelector\Exception\ExpressionErrorException
*/
public function testGetExtensionNotExistsExtension()
{
$translator = new Translator();
$translator->registerExtension(new HtmlExtension($translator));
$translator->getExtension('fake');
}

/**
* @expectedException \Symfony\Component\CssSelector\Exception\ExpressionErrorException
*/
public function testAddCombinationNotExistsExtension()
{
$translator = new Translator();
$translator->registerExtension(new HtmlExtension($translator));
$parser = new Parser();
$xpath = $parser->parse('*')[0];
$combinedXpath = $parser->parse('*')[0];
$translator->addCombination('fake', $xpath, $combinedXpath);
}

/**
* @expectedException \Symfony\Component\CssSelector\Exception\ExpressionErrorException
*/
public function testAddFunctionNotExistsFunction()
{
$translator = new Translator();
$translator->registerExtension(new HtmlExtension($translator));
$xpath = new XPathExpr();
$function = new FunctionNode(new ElementNode(), 'fake');
$translator->addFunction($xpath, $function);
}

/**
* @expectedException \Symfony\Component\CssSelector\Exception\ExpressionErrorException
*/
public function testAddPseudoClassNotExistsClass()
{
$translator = new Translator();
$translator->registerExtension(new HtmlExtension($translator));
$xpath = new XPathExpr();
$translator->addPseudoClass($xpath, 'fake');
}

/**
* @expectedException \Symfony\Component\CssSelector\Exception\ExpressionErrorException
*/
public function testAddAttributeMatchingClassNotExistsClass()
{
$translator = new Translator();
$translator->registerExtension(new HtmlExtension($translator));
$xpath = new XPathExpr();
$translator->addAttributeMatching($xpath, '', '', '');
}

/** @dataProvider getXmlLangTestData */
public function testXmlLang($css, array $elementsId)
{
Expand Down
8 changes: 8 additions & 0 deletions src/Symfony/Component/Debug/DebugClassLoader.php
Expand Up @@ -123,6 +123,14 @@ public static function disable()
}
}

/**
* @return string|null
*/
public function findFile($class)
{
return $this->isFinder ? $this->classLoader[0]->findFile($class) ?: null : null;
}

/**
* Loads the given class or interface.
*
Expand Down
Expand Up @@ -34,8 +34,6 @@ class ResolveBindingsPass extends AbstractRecursivePass
*/
public function process(ContainerBuilder $container)
{
$this->usedBindings = $container->getRemovedBindingIds();

try {
parent::process($container);

Expand Down
46 changes: 7 additions & 39 deletions src/Symfony/Component/DependencyInjection/ContainerBuilder.php
Expand Up @@ -122,8 +122,6 @@ class ContainerBuilder extends Container implements TaggedContainerInterface

private $removedIds = array();

private $removedBindingIds = array();

private static $internalTypes = array(
'int' => true,
'float' => true,
Expand Down Expand Up @@ -500,8 +498,7 @@ public function set($id, $service)
throw new BadMethodCallException(sprintf('Setting service "%s" for an unknown or non-synthetic service definition on a compiled container is not allowed.', $id));
}

$this->removeId($id);
unset($this->removedIds[$id]);
unset($this->definitions[$id], $this->aliasDefinitions[$id], $this->removedIds[$id]);

parent::set($id, $service);
}
Expand All @@ -514,7 +511,8 @@ public function set($id, $service)
public function removeDefinition($id)
{
if (isset($this->definitions[$id = (string) $id])) {
$this->removeId($id);
unset($this->definitions[$id]);
$this->removedIds[$id] = true;
}
}

Expand Down Expand Up @@ -836,8 +834,7 @@ public function setAlias($alias, $id)
throw new InvalidArgumentException(sprintf('An alias can not reference itself, got a circular reference on "%s".', $alias));
}

$this->removeId($alias);
unset($this->removedIds[$alias]);
unset($this->definitions[$alias], $this->removedIds[$alias]);

return $this->aliasDefinitions[$alias] = $id;
}
Expand All @@ -850,7 +847,8 @@ public function setAlias($alias, $id)
public function removeAlias($alias)
{
if (isset($this->aliasDefinitions[$alias = (string) $alias])) {
$this->removeId($alias);
unset($this->aliasDefinitions[$alias]);
$this->removedIds[$alias] = true;
}
}

Expand Down Expand Up @@ -979,8 +977,7 @@ public function setDefinition($id, Definition $definition)

$id = (string) $id;

$this->removeId($id);
unset($this->removedIds[$id]);
unset($this->aliasDefinitions[$id], $this->removedIds[$id]);

return $this->definitions[$id] = $definition;
}
Expand Down Expand Up @@ -1482,18 +1479,6 @@ public static function getInitializedConditionals($value)
return $services;
}

/**
* Gets removed binding ids.
*
* @return array
*
* @internal
*/
public function getRemovedBindingIds()
{
return $this->removedBindingIds;
}

/**
* Computes a reasonably unique hash of a value.
*
Expand Down Expand Up @@ -1598,21 +1583,4 @@ private function inVendors($path)

return false;
}

private function removeId($id)
{
$this->removedIds[$id] = true;
unset($this->aliasDefinitions[$id]);

if (!isset($this->definitions[$id])) {
return;
}

foreach ($this->definitions[$id]->getBindings() as $binding) {
list(, $identifier) = $binding->getValues();
$this->removedBindingIds[$identifier] = true;
}

unset($this->definitions[$id]);
}
}
Expand Up @@ -111,22 +111,4 @@ public function testScalarSetter()

$this->assertEquals(array(array('setDefaultLocale', array('fr'))), $definition->getMethodCalls());
}

public function testOverriddenBindings()
{
$container = new ContainerBuilder();

$binding = new BoundArgument('bar');

$container->register('foo', 'stdClass')
->setBindings(array('$foo' => clone $binding));
$container->register('bar', 'stdClass')
->setBindings(array('$foo' => clone $binding));

$container->register('foo', 'stdClass');

(new ResolveBindingsPass())->process($container);

$this->assertInstanceOf('stdClass', $container->get('foo'));
}
}
Expand Up @@ -399,7 +399,7 @@ protected function process(ContainerBuilder $container)

/**
* @expectedException \Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException
* @expectedExceptionMessageRegExp /^Circular reference detected for service "a", path: "a -> c -> b -> a"./
* @expectedExceptionMessageRegExp /^Circular reference detected for service "c", path: "c -> b -> a -> c"./
*/
public function testProcessDetectsChildDefinitionIndirectCircularReference()
{
Expand Down
Expand Up @@ -559,7 +559,7 @@ public function testMerge()
$config->setDefinition('baz', new Definition('BazClass'));
$config->setAlias('alias_for_foo', 'foo');
$container->merge($config);
$this->assertEquals(array('foo', 'bar', 'service_container', 'baz'), array_keys($container->getDefinitions()), '->merge() merges definitions already defined ones');
$this->assertEquals(array('service_container', 'foo', 'bar', 'baz'), array_keys($container->getDefinitions()), '->merge() merges definitions already defined ones');

$aliases = $container->getAliases();
$this->assertArrayHasKey('alias_for_foo', $aliases);
Expand Down
Expand Up @@ -4,9 +4,6 @@ services:
class: Symfony\Component\DependencyInjection\ContainerInterface
public: true
synthetic: true
foo:
class: App\FooService
public: true
Symfony\Component\DependencyInjection\Tests\Fixtures\Prototype\Foo:
class: Symfony\Component\DependencyInjection\Tests\Fixtures\Prototype\Foo
public: true
Expand All @@ -19,3 +16,6 @@ services:

shared: false
configurator: c
foo:
class: App\FooService
public: true
Expand Up @@ -4,22 +4,22 @@ services:
class: Symfony\Component\DependencyInjection\ContainerInterface
public: true
synthetic: true
Symfony\Component\DependencyInjection\Tests\Fixtures\Prototype\Sub\Bar:
class: Symfony\Component\DependencyInjection\Tests\Fixtures\Prototype\Sub\Bar
Symfony\Component\DependencyInjection\Tests\Fixtures\Prototype\Foo:
class: Symfony\Component\DependencyInjection\Tests\Fixtures\Prototype\Foo
public: true
tags:
- { name: foo }
- { name: baz }
deprecated: '%service_id%'
lazy: true
arguments: [1]
factory: f
Symfony\Component\DependencyInjection\Tests\Fixtures\Prototype\Foo:
class: Symfony\Component\DependencyInjection\Tests\Fixtures\Prototype\Foo
Symfony\Component\DependencyInjection\Tests\Fixtures\Prototype\Sub\Bar:
class: Symfony\Component\DependencyInjection\Tests\Fixtures\Prototype\Sub\Bar
public: true
tags:
- { name: foo }
- { name: baz }
deprecated: '%service_id%'
lazy: true
arguments: [1]
factory: f
Expand Up @@ -18,8 +18,14 @@

trait ValidatorExtensionTrait
{
/**
* @var ValidatorInterface|null
*/
protected $validator;

/**
* @return ValidatorExtension
*/
protected function getValidatorExtension()
{
if (!interface_exists(ValidatorInterface::class)) {
Expand All @@ -31,9 +37,9 @@ protected function getValidatorExtension()
}

$this->validator = $this->getMockBuilder(ValidatorInterface::class)->getMock();
$metadata = $this->getMockBuilder(ClassMetadata::class)->disableOriginalConstructor()->setMethods(array('addPropertyConstraint'))->getMock();
$metadata = $this->getMockBuilder(ClassMetadata::class)->disableOriginalConstructor()->setMethods(['addPropertyConstraint'])->getMock();
$this->validator->expects($this->any())->method('getMetadataFor')->will($this->returnValue($metadata));
$this->validator->expects($this->any())->method('validate')->will($this->returnValue(array()));
$this->validator->expects($this->any())->method('validate')->will($this->returnValue([]));

return new ValidatorExtension($this->validator);
}
Expand Down
Expand Up @@ -28,7 +28,7 @@ class ContainerConstraintValidatorFactory implements ConstraintValidatorFactoryI
public function __construct(ContainerInterface $container)
{
$this->container = $container;
$this->validators = array();
$this->validators = [];
}

/**
Expand All @@ -46,7 +46,7 @@ public function getInstance(Constraint $constraint)
$this->validators[$name] = $this->container->get($name);
} else {
if (!class_exists($name)) {
throw new ValidatorException(sprintf('Constraint validator "%s" does not exist or it is not enabled. Check the "validatedBy" method in your constraint class "%s".', $name, \get_class($constraint)));
throw new ValidatorException(sprintf('Constraint validator "%s" does not exist or is not enabled. Check the "validatedBy" method in your constraint class "%s".', $name, \get_class($constraint)));
}

$this->validators[$name] = new $name();
Expand Down

0 comments on commit 00b73da

Please sign in to comment.