diff --git a/src/Symfony/Bridge/Doctrine/Form/ChoiceList/ORMQueryBuilderLoader.php b/src/Symfony/Bridge/Doctrine/Form/ChoiceList/ORMQueryBuilderLoader.php index 96f5e2f5f1868..9da362a3faf55 100644 --- a/src/Symfony/Bridge/Doctrine/Form/ChoiceList/ORMQueryBuilderLoader.php +++ b/src/Symfony/Bridge/Doctrine/Form/ChoiceList/ORMQueryBuilderLoader.php @@ -89,6 +89,6 @@ public function getEntitiesByIds($identifier, array $values) return $qb->andWhere($where) ->getQuery() ->setParameter($parameter, $values, $parameterType) - ->getResult(); + ->getResult() ?: []; } } diff --git a/src/Symfony/Bridge/Twig/NodeVisitor/TranslationDefaultDomainNodeVisitor.php b/src/Symfony/Bridge/Twig/NodeVisitor/TranslationDefaultDomainNodeVisitor.php index 04b68ef6be199..be08d0d1d1304 100644 --- a/src/Symfony/Bridge/Twig/NodeVisitor/TranslationDefaultDomainNodeVisitor.php +++ b/src/Symfony/Bridge/Twig/NodeVisitor/TranslationDefaultDomainNodeVisitor.php @@ -107,6 +107,8 @@ protected function doLeaveNode(Node $node, Environment $env) /** * {@inheritdoc} + * + * @return int */ public function getPriority() { diff --git a/src/Symfony/Bridge/Twig/NodeVisitor/TranslationNodeVisitor.php b/src/Symfony/Bridge/Twig/NodeVisitor/TranslationNodeVisitor.php index 35e2eb21d0a54..1a399ce8ba3d4 100644 --- a/src/Symfony/Bridge/Twig/NodeVisitor/TranslationNodeVisitor.php +++ b/src/Symfony/Bridge/Twig/NodeVisitor/TranslationNodeVisitor.php @@ -97,6 +97,8 @@ protected function doLeaveNode(Node $node, Environment $env) /** * {@inheritdoc} + * + * @return int */ public function getPriority() { diff --git a/src/Symfony/Bridge/Twig/Translation/TwigExtractor.php b/src/Symfony/Bridge/Twig/Translation/TwigExtractor.php index a921582dbabdb..56427c762ffbd 100644 --- a/src/Symfony/Bridge/Twig/Translation/TwigExtractor.php +++ b/src/Symfony/Bridge/Twig/Translation/TwigExtractor.php @@ -106,9 +106,7 @@ protected function canBeExtracted($file) } /** - * @param string|array $directory - * - * @return array + * {@inheritdoc} */ protected function extractFromDirectory($directory) { diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php index 64cdd3003be6b..a190dba908a01 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php @@ -1743,9 +1743,7 @@ private function getKernelRootHash(ContainerBuilder $container) } /** - * Returns the base path for the XSD files. - * - * @return string The XSD base path + * {@inheritdoc} */ public function getXsdValidationBasePath() { diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/ProfilerTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/ProfilerTest.php index 7ee42cdd17a3e..35c2e63b7e04a 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/ProfilerTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/ProfilerTest.php @@ -24,16 +24,16 @@ public function testProfilerIsDisabled($insulate) } $client->request('GET', '/profiler'); - $this->assertFalse($client->getProfile()); + $this->assertNull($client->getProfile()); // enable the profiler for the next request $client->enableProfiler(); - $this->assertFalse($client->getProfile()); + $this->assertNull($client->getProfile()); $client->request('GET', '/profiler'); $this->assertIsObject($client->getProfile()); $client->request('GET', '/profiler'); - $this->assertFalse($client->getProfile()); + $this->assertNull($client->getProfile()); } public function getConfigs() diff --git a/src/Symfony/Bundle/SecurityBundle/DataCollector/SecurityDataCollector.php b/src/Symfony/Bundle/SecurityBundle/DataCollector/SecurityDataCollector.php index 937b34e42ae4f..8bca2b2c19aa1 100644 --- a/src/Symfony/Bundle/SecurityBundle/DataCollector/SecurityDataCollector.php +++ b/src/Symfony/Bundle/SecurityBundle/DataCollector/SecurityDataCollector.php @@ -231,7 +231,7 @@ public function getUser() /** * Gets the roles of the user. * - * @return array The roles + * @return array|Data */ public function getRoles() { @@ -241,7 +241,7 @@ public function getRoles() /** * Gets the inherited roles of the user. * - * @return array The inherited roles + * @return array|Data */ public function getInheritedRoles() { @@ -269,16 +269,25 @@ public function isAuthenticated() return $this->data['authenticated']; } + /** + * @return bool + */ public function isImpersonated() { return $this->data['impersonated']; } + /** + * @return string|null + */ public function getImpersonatorUser() { return $this->data['impersonator_user']; } + /** + * @return string|null + */ public function getImpersonationExitPath() { return $this->data['impersonation_exit_path']; @@ -287,7 +296,7 @@ public function getImpersonationExitPath() /** * Get the class name of the security token. * - * @return string The token + * @return string|Data|null The token */ public function getTokenClass() { @@ -297,7 +306,7 @@ public function getTokenClass() /** * Get the full security token class as Data object. * - * @return Data + * @return Data|null */ public function getToken() { @@ -307,7 +316,7 @@ public function getToken() /** * Get the logout URL. * - * @return string The logout URL + * @return string|null The logout URL */ public function getLogoutUrl() { @@ -317,7 +326,7 @@ public function getLogoutUrl() /** * Returns the FQCN of the security voters enabled in the application. * - * @return string[] + * @return string[]|Data */ public function getVoters() { @@ -337,7 +346,7 @@ public function getVoterStrategy() /** * Returns the log of the security decisions made by the access decision manager. * - * @return array + * @return array|Data */ public function getAccessDecisionLog() { @@ -347,13 +356,16 @@ public function getAccessDecisionLog() /** * Returns the configuration of the current firewall context. * - * @return array + * @return array|Data */ public function getFirewall() { return $this->data['firewall']; } + /** + * @return array|Data + */ public function getListeners() { return $this->data['listeners']; diff --git a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/AbstractFactory.php b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/AbstractFactory.php index 3f7a515983528..5e07c6303f5a2 100644 --- a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/AbstractFactory.php +++ b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/AbstractFactory.php @@ -130,9 +130,9 @@ abstract protected function getListenerId(); * @param ContainerBuilder $container * @param string $id * @param array $config - * @param string $defaultEntryPointId + * @param string|null $defaultEntryPointId * - * @return string the entry point id + * @return string|null the entry point id */ protected function createEntryPoint($container, $id, $config, $defaultEntryPointId) { diff --git a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/SecurityFactoryInterface.php b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/SecurityFactoryInterface.php index 027fe65868967..533e8d0cfce12 100644 --- a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/SecurityFactoryInterface.php +++ b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/SecurityFactoryInterface.php @@ -24,10 +24,10 @@ interface SecurityFactoryInterface /** * Configures the container services required to use the authentication listener. * - * @param string $id The unique id of the firewall - * @param array $config The options array for the listener - * @param string $userProvider The service id of the user provider - * @param string $defaultEntryPoint + * @param string $id The unique id of the firewall + * @param array $config The options array for the listener + * @param string $userProvider The service id of the user provider + * @param string|null $defaultEntryPoint * * @return array containing three values: * - the provider id diff --git a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php index 8d9ac136b0c42..731ce42d39328 100644 --- a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php +++ b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php @@ -798,9 +798,7 @@ public function addUserProviderFactory(UserProviderFactoryInterface $factory) } /** - * Returns the base path for the XSD files. - * - * @return string The XSD base path + * {@inheritdoc} */ public function getXsdValidationBasePath() { diff --git a/src/Symfony/Bundle/TwigBundle/DependencyInjection/TwigExtension.php b/src/Symfony/Bundle/TwigBundle/DependencyInjection/TwigExtension.php index 58e136a6381d0..a0000afa9047b 100644 --- a/src/Symfony/Bundle/TwigBundle/DependencyInjection/TwigExtension.php +++ b/src/Symfony/Bundle/TwigBundle/DependencyInjection/TwigExtension.php @@ -255,9 +255,7 @@ private function normalizeBundleName($name) } /** - * Returns the base path for the XSD files. - * - * @return string The XSD base path + * {@inheritdoc} */ public function getXsdValidationBasePath() { diff --git a/src/Symfony/Bundle/WebProfilerBundle/DependencyInjection/WebProfilerExtension.php b/src/Symfony/Bundle/WebProfilerBundle/DependencyInjection/WebProfilerExtension.php index 2b2f00bd32bc9..19b75c59ea47e 100644 --- a/src/Symfony/Bundle/WebProfilerBundle/DependencyInjection/WebProfilerExtension.php +++ b/src/Symfony/Bundle/WebProfilerBundle/DependencyInjection/WebProfilerExtension.php @@ -64,9 +64,7 @@ public function load(array $configs, ContainerBuilder $container) } /** - * Returns the base path for the XSD files. - * - * @return string The XSD base path + * {@inheritdoc} */ public function getXsdValidationBasePath() { diff --git a/src/Symfony/Component/BrowserKit/Client.php b/src/Symfony/Component/BrowserKit/Client.php index 59216cd837a7f..4caad676ae0c6 100644 --- a/src/Symfony/Component/BrowserKit/Client.php +++ b/src/Symfony/Component/BrowserKit/Client.php @@ -141,9 +141,9 @@ public function setServerParameter($key, $value) * Gets single server parameter for specified key. * * @param string $key A key of the parameter to get - * @param string $default A default value when key is undefined + * @param mixed $default A default value when key is undefined * - * @return string A value of the parameter + * @return mixed A value of the parameter */ public function getServerParameter($key, $default = '') { diff --git a/src/Symfony/Component/BrowserKit/Request.php b/src/Symfony/Component/BrowserKit/Request.php index 599652bf34b29..6e0cb08ccb43f 100644 --- a/src/Symfony/Component/BrowserKit/Request.php +++ b/src/Symfony/Component/BrowserKit/Request.php @@ -107,7 +107,7 @@ public function getServer() /** * Gets the request raw body data. * - * @return string The request raw body data + * @return string|null The request raw body data */ public function getContent() { diff --git a/src/Symfony/Component/Cache/DoctrineProvider.php b/src/Symfony/Component/Cache/DoctrineProvider.php index cebe95fbc7733..4c5cd0cb1f993 100644 --- a/src/Symfony/Component/Cache/DoctrineProvider.php +++ b/src/Symfony/Component/Cache/DoctrineProvider.php @@ -90,7 +90,7 @@ protected function doDelete($id) */ protected function doFlush() { - $this->pool->clear(); + return $this->pool->clear(); } /** @@ -98,5 +98,6 @@ protected function doFlush() */ protected function doGetStats() { + return null; } } diff --git a/src/Symfony/Component/Cache/Tests/Adapter/MaxIdLengthAdapterTest.php b/src/Symfony/Component/Cache/Tests/Adapter/MaxIdLengthAdapterTest.php index a803988d05bfc..909191960f179 100644 --- a/src/Symfony/Component/Cache/Tests/Adapter/MaxIdLengthAdapterTest.php +++ b/src/Symfony/Component/Cache/Tests/Adapter/MaxIdLengthAdapterTest.php @@ -40,6 +40,10 @@ public function testLongKeyVersioning() ->setConstructorArgs([str_repeat('-', 26)]) ->getMock(); + $cache + ->method('doFetch') + ->willReturn(['2:']); + $reflectionClass = new \ReflectionClass(AbstractAdapter::class); $reflectionMethod = $reflectionClass->getMethod('getId'); @@ -56,7 +60,7 @@ public function testLongKeyVersioning() $reflectionProperty->setValue($cache, true); // Versioning enabled - $this->assertEquals('--------------------------:1:------------', $reflectionMethod->invokeArgs($cache, [str_repeat('-', 12)])); + $this->assertEquals('--------------------------:2:------------', $reflectionMethod->invokeArgs($cache, [str_repeat('-', 12)])); $this->assertLessThanOrEqual(50, \strlen($reflectionMethod->invokeArgs($cache, [str_repeat('-', 12)]))); $this->assertLessThanOrEqual(50, \strlen($reflectionMethod->invokeArgs($cache, [str_repeat('-', 23)]))); $this->assertLessThanOrEqual(50, \strlen($reflectionMethod->invokeArgs($cache, [str_repeat('-', 40)]))); diff --git a/src/Symfony/Component/Config/Definition/ArrayNode.php b/src/Symfony/Component/Config/Definition/ArrayNode.php index 2afa629cdae46..91160ae00963d 100644 --- a/src/Symfony/Component/Config/Definition/ArrayNode.php +++ b/src/Symfony/Component/Config/Definition/ArrayNode.php @@ -38,17 +38,13 @@ public function setNormalizeKeys($normalizeKeys) } /** - * Normalizes keys between the different configuration formats. + * {@inheritdoc} * * Namely, you mostly have foo_bar in YAML while you have foo-bar in XML. * After running this method, all keys are normalized to foo_bar. * * If you have a mixed key like foo-bar_moo, it will not be altered. * The key will also not be altered if the target key already exists. - * - * @param mixed $value - * - * @return array The value with normalized keys */ protected function preNormalize($value) { diff --git a/src/Symfony/Component/Config/Definition/BaseNode.php b/src/Symfony/Component/Config/Definition/BaseNode.php index 2b41efe79e7d7..2b10bffa78694 100644 --- a/src/Symfony/Component/Config/Definition/BaseNode.php +++ b/src/Symfony/Component/Config/Definition/BaseNode.php @@ -49,21 +49,37 @@ public function __construct($name, NodeInterface $parent = null) $this->parent = $parent; } + /** + * @param string $key + */ public function setAttribute($key, $value) { $this->attributes[$key] = $value; } + /** + * @param string $key + * + * @return mixed + */ public function getAttribute($key, $default = null) { return isset($this->attributes[$key]) ? $this->attributes[$key] : $default; } + /** + * @param string $key + * + * @return bool + */ public function hasAttribute($key) { return isset($this->attributes[$key]); } + /** + * @return array + */ public function getAttributes() { return $this->attributes; @@ -74,6 +90,9 @@ public function setAttributes(array $attributes) $this->attributes = $attributes; } + /** + * @param string $key + */ public function removeAttribute($key) { unset($this->attributes[$key]); @@ -92,7 +111,7 @@ public function setInfo($info) /** * Returns info message. * - * @return string The info text + * @return string|null The info text */ public function getInfo() { @@ -112,7 +131,7 @@ public function setExample($example) /** * Retrieves the example configuration for this node. * - * @return string|array The example + * @return string|array|null The example */ public function getExample() { diff --git a/src/Symfony/Component/Config/Definition/PrototypedArrayNode.php b/src/Symfony/Component/Config/Definition/PrototypedArrayNode.php index 9a14449c487e3..7b64d842aa06b 100644 --- a/src/Symfony/Component/Config/Definition/PrototypedArrayNode.php +++ b/src/Symfony/Component/Config/Definition/PrototypedArrayNode.php @@ -78,7 +78,7 @@ public function setKeyAttribute($attribute, $remove = true) /** * Retrieves the name of the attribute which value should be used as key. * - * @return string The name of the attribute + * @return string|null The name of the attribute */ public function getKeyAttribute() { diff --git a/src/Symfony/Component/Config/Util/XmlUtils.php b/src/Symfony/Component/Config/Util/XmlUtils.php index 1775cc25fdc71..d0042af302268 100644 --- a/src/Symfony/Component/Config/Util/XmlUtils.php +++ b/src/Symfony/Component/Config/Util/XmlUtils.php @@ -152,7 +152,7 @@ public static function loadFile($file, $schemaOrCallable = null) * @param \DOMElement $element A \DOMElement instance * @param bool $checkPrefix Check prefix in an element or an attribute name * - * @return array A PHP array + * @return mixed */ public static function convertDomElementToArray(\DOMElement $element, $checkPrefix = true) { diff --git a/src/Symfony/Component/Console/Application.php b/src/Symfony/Component/Console/Application.php index b9699b2bbf237..9bb0746e404cf 100644 --- a/src/Symfony/Component/Console/Application.php +++ b/src/Symfony/Component/Console/Application.php @@ -21,7 +21,6 @@ use Symfony\Component\Console\Event\ConsoleTerminateEvent; use Symfony\Component\Console\Exception\CommandNotFoundException; use Symfony\Component\Console\Exception\ExceptionInterface; -use Symfony\Component\Console\Exception\LogicException; use Symfony\Component\Console\Formatter\OutputFormatter; use Symfony\Component\Console\Helper\DebugFormatterHelper; use Symfony\Component\Console\Helper\FormatterHelper; @@ -457,13 +456,8 @@ public function add(Command $command) return null; } - if (null === $command->getDefinition()) { - throw new LogicException(sprintf('Command class "%s" is not correctly initialized. You probably forgot to call the parent constructor.', \get_class($command))); - } - - if (!$command->getName()) { - throw new LogicException(sprintf('The command defined in "%s" cannot have an empty name.', \get_class($command))); - } + // Will throw if the command is not correctly initialized. + $command->getDefinition(); $this->commands[$command->getName()] = $command; @@ -1023,7 +1017,7 @@ protected function doRunCommand(Command $command, InputInterface $input, OutputI /** * Gets the name of the command based on input. * - * @return string The command name + * @return string|null */ protected function getCommandName(InputInterface $input) { diff --git a/src/Symfony/Component/Console/Command/Command.php b/src/Symfony/Component/Console/Command/Command.php index 3a1ba2e5aa08e..b68c05dedac85 100644 --- a/src/Symfony/Component/Console/Command/Command.php +++ b/src/Symfony/Component/Console/Command/Command.php @@ -40,8 +40,8 @@ class Command private $aliases = []; private $definition; private $hidden = false; - private $help; - private $description; + private $help = ''; + private $description = ''; private $ignoreValidationErrors = false; private $applicationDefinitionMerged = false; private $applicationDefinitionMergedWithArgs = false; @@ -105,7 +105,7 @@ public function setHelperSet(HelperSet $helperSet) /** * Gets the helper set. * - * @return HelperSet A HelperSet instance + * @return HelperSet|null A HelperSet instance */ public function getHelperSet() { @@ -115,7 +115,7 @@ public function getHelperSet() /** * Gets the application instance for this command. * - * @return Application An Application instance + * @return Application|null An Application instance */ public function getApplication() { @@ -347,6 +347,10 @@ public function setDefinition($definition) */ public function getDefinition() { + if (null === $this->definition) { + throw new LogicException(sprintf('Command class "%s" is not correctly initialized. You probably forgot to call the parent constructor.', \get_class($this))); + } + return $this->definition; } @@ -453,6 +457,10 @@ public function setProcessTitle($title) */ public function getName() { + if (!$this->name) { + throw new LogicException(sprintf('The command defined in "%s" cannot have an empty name.', \get_class($this))); + } + return $this->name; } diff --git a/src/Symfony/Component/Console/Question/Question.php b/src/Symfony/Component/Console/Question/Question.php index e340fe9d87fa9..06464e135bae0 100644 --- a/src/Symfony/Component/Console/Question/Question.php +++ b/src/Symfony/Component/Console/Question/Question.php @@ -228,7 +228,7 @@ public function setNormalizer(callable $normalizer) * * The normalizer can ba a callable (a string), a closure or a class implementing __invoke. * - * @return callable + * @return callable|null */ public function getNormalizer() { diff --git a/src/Symfony/Component/DependencyInjection/Container.php b/src/Symfony/Component/DependencyInjection/Container.php index ab69579adb222..ad06c7e245b59 100644 --- a/src/Symfony/Component/DependencyInjection/Container.php +++ b/src/Symfony/Component/DependencyInjection/Container.php @@ -444,8 +444,6 @@ public static function underscore($id) /** * Creates a service by requiring its factory file. - * - * @return object The service created by the file */ protected function load($file) { diff --git a/src/Symfony/Component/DependencyInjection/Definition.php b/src/Symfony/Component/DependencyInjection/Definition.php index 3f820c0c89c16..c7d204948401d 100644 --- a/src/Symfony/Component/DependencyInjection/Definition.php +++ b/src/Symfony/Component/DependencyInjection/Definition.php @@ -796,7 +796,7 @@ public function setConfigurator($configurator) /** * Gets the configurator to call after the service is fully initialized. * - * @return callable|null The PHP callable to call + * @return callable|array|null */ public function getConfigurator() { diff --git a/src/Symfony/Component/DependencyInjection/Dumper/DumperInterface.php b/src/Symfony/Component/DependencyInjection/Dumper/DumperInterface.php index 1ea775ddfe032..8abc19250f70b 100644 --- a/src/Symfony/Component/DependencyInjection/Dumper/DumperInterface.php +++ b/src/Symfony/Component/DependencyInjection/Dumper/DumperInterface.php @@ -21,9 +21,7 @@ interface DumperInterface /** * Dumps the service container. * - * @param array $options An array of options - * - * @return string The representation of the service container + * @return string|array The representation of the service container */ public function dump(array $options = []); } diff --git a/src/Symfony/Component/DependencyInjection/Extension/ExtensionInterface.php b/src/Symfony/Component/DependencyInjection/Extension/ExtensionInterface.php index 18de31272f322..6a7a2cf023819 100644 --- a/src/Symfony/Component/DependencyInjection/Extension/ExtensionInterface.php +++ b/src/Symfony/Component/DependencyInjection/Extension/ExtensionInterface.php @@ -37,7 +37,7 @@ public function getNamespace(); /** * Returns the base path for the XSD files. * - * @return string The XSD base path + * @return string|false */ public function getXsdValidationBasePath(); diff --git a/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php b/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php index 799b60d98e283..c4b9b69a03ca2 100644 --- a/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php +++ b/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php @@ -710,7 +710,7 @@ private function loadFromExtensions(\DOMDocument $xml) * * @param \DOMElement $element A \DOMElement instance * - * @return array A PHP array + * @return mixed */ public static function convertDomElementToArray(\DOMElement $element) { diff --git a/src/Symfony/Component/DependencyInjection/ParameterBag/ParameterBag.php b/src/Symfony/Component/DependencyInjection/ParameterBag/ParameterBag.php index c4e702181fe68..e13d2824f518c 100644 --- a/src/Symfony/Component/DependencyInjection/ParameterBag/ParameterBag.php +++ b/src/Symfony/Component/DependencyInjection/ParameterBag/ParameterBag.php @@ -195,7 +195,7 @@ public function resolveValue($value, array $resolving = []) * @param string $value The string to resolve * @param array $resolving An array of keys that are being resolved (used internally to detect circular references) * - * @return string The resolved string + * @return mixed The resolved string * * @throws ParameterNotFoundException if a placeholder references a parameter that does not exist * @throws ParameterCircularReferenceException if a circular reference if detected diff --git a/src/Symfony/Component/DomCrawler/Crawler.php b/src/Symfony/Component/DomCrawler/Crawler.php index 1e7ba789a1fc4..1cc72cc132d4a 100644 --- a/src/Symfony/Component/DomCrawler/Crawler.php +++ b/src/Symfony/Component/DomCrawler/Crawler.php @@ -43,7 +43,7 @@ class Crawler implements \Countable, \IteratorAggregate private $document; /** - * @var \DOMElement[] + * @var \DOMNode[] */ private $nodes = []; @@ -55,9 +55,7 @@ class Crawler implements \Countable, \IteratorAggregate private $isHtml = true; /** - * @param mixed $node A Node to use as the base for the crawling - * @param string $uri The current URI - * @param string $baseHref The base href value + * @param \DOMNodeList|\DOMNode|\DOMNode[]|string|null $node A Node to use as the base for the crawling */ public function __construct($node = null, $uri = null, $baseHref = null) { @@ -102,7 +100,7 @@ public function clear() * This method uses the appropriate specialized add*() method based * on the type of the argument. * - * @param \DOMNodeList|\DOMNode|array|string|null $node A node + * @param \DOMNodeList|\DOMNode|\DOMNode[]|string|null $node A node * * @throws \InvalidArgumentException when node is not the expected type */ @@ -1049,7 +1047,7 @@ private function relativize($xpath) /** * @param int $position * - * @return \DOMElement|null + * @return \DOMNode|null */ public function getNode($position) { @@ -1065,7 +1063,7 @@ public function count() } /** - * @return \ArrayIterator|\DOMElement[] + * @return \ArrayIterator|\DOMNode[] */ public function getIterator() { @@ -1146,7 +1144,7 @@ private function findNamespacePrefixes($xpath) /** * Creates a crawler for some subnodes. * - * @param \DOMElement|\DOMElement[]|\DOMNodeList|null $nodes + * @param \DOMNodeList|\DOMNode|\DOMNode[]|string|null $nodes * * @return static */ diff --git a/src/Symfony/Component/Form/ButtonBuilder.php b/src/Symfony/Component/Form/ButtonBuilder.php index ed41b2147d2e4..5e1106ad05fd1 100644 --- a/src/Symfony/Component/Form/ButtonBuilder.php +++ b/src/Symfony/Component/Form/ButtonBuilder.php @@ -27,7 +27,7 @@ class ButtonBuilder implements \IteratorAggregate, FormBuilderInterface /** * @var bool */ - private $disabled; + private $disabled = false; /** * @var ResolvedFormTypeInterface diff --git a/src/Symfony/Component/Form/Extension/Core/Type/ButtonType.php b/src/Symfony/Component/Form/Extension/Core/Type/ButtonType.php index b05dcc018dc36..ba2f8dfe0e575 100644 --- a/src/Symfony/Component/Form/Extension/Core/Type/ButtonType.php +++ b/src/Symfony/Component/Form/Extension/Core/Type/ButtonType.php @@ -26,6 +26,7 @@ class ButtonType extends BaseType implements ButtonTypeInterface */ public function getParent() { + return null; } /** diff --git a/src/Symfony/Component/Form/Extension/Core/Type/FormType.php b/src/Symfony/Component/Form/Extension/Core/Type/FormType.php index 72b14035e575c..a31c171f0efd5 100644 --- a/src/Symfony/Component/Form/Extension/Core/Type/FormType.php +++ b/src/Symfony/Component/Form/Extension/Core/Type/FormType.php @@ -190,6 +190,7 @@ public function configureOptions(OptionsResolver $resolver) */ public function getParent() { + return null; } /** diff --git a/src/Symfony/Component/Form/FormError.php b/src/Symfony/Component/Form/FormError.php index 98a1e29a83a82..078060c9f21dd 100644 --- a/src/Symfony/Component/Form/FormError.php +++ b/src/Symfony/Component/Form/FormError.php @@ -127,7 +127,7 @@ public function setOrigin(FormInterface $origin) /** * Returns the form that caused this error. * - * @return FormInterface The form that caused this error + * @return FormInterface|null The form that caused this error */ public function getOrigin() { diff --git a/src/Symfony/Component/Form/FormInterface.php b/src/Symfony/Component/Form/FormInterface.php index 5c55bcd7951dc..f8d5c6ea5b8f1 100644 --- a/src/Symfony/Component/Form/FormInterface.php +++ b/src/Symfony/Component/Form/FormInterface.php @@ -31,7 +31,7 @@ interface FormInterface extends \ArrayAccess, \Traversable, \Countable * @throws Exception\LogicException when trying to set a parent for a form with * an empty name */ - public function setParent(self $parent = null); + public function setParent(FormInterface $parent = null); /** * Returns the parent form. diff --git a/src/Symfony/Component/Form/Test/Traits/ValidatorExtensionTrait.php b/src/Symfony/Component/Form/Test/Traits/ValidatorExtensionTrait.php index 07dd9e0d5559b..46bd8b7e576d4 100644 --- a/src/Symfony/Component/Form/Test/Traits/ValidatorExtensionTrait.php +++ b/src/Symfony/Component/Form/Test/Traits/ValidatorExtensionTrait.php @@ -13,6 +13,7 @@ use Symfony\Component\Form\Extension\Validator\ValidatorExtension; use Symfony\Component\Form\Test\TypeTestCase; +use Symfony\Component\Validator\ConstraintViolationList; use Symfony\Component\Validator\Mapping\ClassMetadata; use Symfony\Component\Validator\Validator\ValidatorInterface; @@ -37,9 +38,9 @@ protected function getValidatorExtension() } $this->validator = $this->getMockBuilder(ValidatorInterface::class)->getMock(); - $metadata = $this->getMockBuilder(ClassMetadata::class)->disableOriginalConstructor()->setMethods(['addPropertyConstraint'])->getMock(); + $metadata = $this->getMockBuilder(ClassMetadata::class)->setConstructorArgs([''])->setMethods(['addPropertyConstraint'])->getMock(); $this->validator->expects($this->any())->method('getMetadataFor')->will($this->returnValue($metadata)); - $this->validator->expects($this->any())->method('validate')->will($this->returnValue([])); + $this->validator->expects($this->any())->method('validate')->will($this->returnValue(new ConstraintViolationList())); return new ValidatorExtension($this->validator); } diff --git a/src/Symfony/Component/Form/Tests/AbstractRequestHandlerTest.php b/src/Symfony/Component/Form/Tests/AbstractRequestHandlerTest.php index f2ee71b3424cd..776c753eca4a9 100644 --- a/src/Symfony/Component/Form/Tests/AbstractRequestHandlerTest.php +++ b/src/Symfony/Component/Form/Tests/AbstractRequestHandlerTest.php @@ -346,7 +346,7 @@ public function getPostMaxSizeFixtures() [1024, '1K', false], [null, '1K', false], [1024, '', false], - [1024, 0, false], + [1024, '0', false], ]; } diff --git a/src/Symfony/Component/Form/Tests/ChoiceList/Factory/CachingFactoryDecoratorTest.php b/src/Symfony/Component/Form/Tests/ChoiceList/Factory/CachingFactoryDecoratorTest.php index b194d65eeea27..ba4ae7cd19add 100644 --- a/src/Symfony/Component/Form/Tests/ChoiceList/Factory/CachingFactoryDecoratorTest.php +++ b/src/Symfony/Component/Form/Tests/ChoiceList/Factory/CachingFactoryDecoratorTest.php @@ -13,7 +13,9 @@ use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; +use Symfony\Component\Form\ChoiceList\ArrayChoiceList; use Symfony\Component\Form\ChoiceList\Factory\CachingFactoryDecorator; +use Symfony\Component\Form\ChoiceList\View\ChoiceListView; /** * @author Bernhard Schussek @@ -38,7 +40,7 @@ protected function setUp() public function testCreateFromChoicesEmpty() { - $list = new \stdClass(); + $list = new ArrayChoiceList([]); $this->decoratedFactory->expects($this->once()) ->method('createListFromChoices') @@ -54,7 +56,7 @@ public function testCreateFromChoicesComparesTraversableChoicesAsArray() // The top-most traversable is converted to an array $choices1 = new \ArrayIterator(['A' => 'a']); $choices2 = ['A' => 'a']; - $list = new \stdClass(); + $list = new ArrayChoiceList([]); $this->decoratedFactory->expects($this->once()) ->method('createListFromChoices') @@ -69,8 +71,8 @@ public function testCreateFromChoicesGroupedChoices() { $choices1 = ['key' => ['A' => 'a']]; $choices2 = ['A' => 'a']; - $list1 = new \stdClass(); - $list2 = new \stdClass(); + $list1 = new ArrayChoiceList([]); + $list2 = new ArrayChoiceList([]); $this->decoratedFactory->expects($this->at(0)) ->method('createListFromChoices') @@ -92,7 +94,7 @@ public function testCreateFromChoicesSameChoices($choice1, $choice2) { $choices1 = [$choice1]; $choices2 = [$choice2]; - $list = new \stdClass(); + $list = new ArrayChoiceList([]); $this->decoratedFactory->expects($this->once()) ->method('createListFromChoices') @@ -110,8 +112,8 @@ public function testCreateFromChoicesDifferentChoices($choice1, $choice2) { $choices1 = [$choice1]; $choices2 = [$choice2]; - $list1 = new \stdClass(); - $list2 = new \stdClass(); + $list1 = new ArrayChoiceList([]); + $list2 = new ArrayChoiceList([]); $this->decoratedFactory->expects($this->at(0)) ->method('createListFromChoices') @@ -129,7 +131,7 @@ public function testCreateFromChoicesDifferentChoices($choice1, $choice2) public function testCreateFromChoicesSameValueClosure() { $choices = [1]; - $list = new \stdClass(); + $list = new ArrayChoiceList([]); $closure = function () {}; $this->decoratedFactory->expects($this->once()) @@ -144,8 +146,8 @@ public function testCreateFromChoicesSameValueClosure() public function testCreateFromChoicesDifferentValueClosure() { $choices = [1]; - $list1 = new \stdClass(); - $list2 = new \stdClass(); + $list1 = new ArrayChoiceList([]); + $list2 = new ArrayChoiceList([]); $closure1 = function () {}; $closure2 = function () {}; @@ -165,7 +167,7 @@ public function testCreateFromChoicesDifferentValueClosure() public function testCreateFromLoaderSameLoader() { $loader = $this->getMockBuilder('Symfony\Component\Form\ChoiceList\Loader\ChoiceLoaderInterface')->getMock(); - $list = new \stdClass(); + $list = new ArrayChoiceList([]); $this->decoratedFactory->expects($this->once()) ->method('createListFromLoader') @@ -180,8 +182,8 @@ public function testCreateFromLoaderDifferentLoader() { $loader1 = $this->getMockBuilder('Symfony\Component\Form\ChoiceList\Loader\ChoiceLoaderInterface')->getMock(); $loader2 = $this->getMockBuilder('Symfony\Component\Form\ChoiceList\Loader\ChoiceLoaderInterface')->getMock(); - $list1 = new \stdClass(); - $list2 = new \stdClass(); + $list1 = new ArrayChoiceList([]); + $list2 = new ArrayChoiceList([]); $this->decoratedFactory->expects($this->at(0)) ->method('createListFromLoader') @@ -199,7 +201,7 @@ public function testCreateFromLoaderDifferentLoader() public function testCreateFromLoaderSameValueClosure() { $loader = $this->getMockBuilder('Symfony\Component\Form\ChoiceList\Loader\ChoiceLoaderInterface')->getMock(); - $list = new \stdClass(); + $list = new ArrayChoiceList([]); $closure = function () {}; $this->decoratedFactory->expects($this->once()) @@ -214,8 +216,8 @@ public function testCreateFromLoaderSameValueClosure() public function testCreateFromLoaderDifferentValueClosure() { $loader = $this->getMockBuilder('Symfony\Component\Form\ChoiceList\Loader\ChoiceLoaderInterface')->getMock(); - $list1 = new \stdClass(); - $list2 = new \stdClass(); + $list1 = new ArrayChoiceList([]); + $list2 = new ArrayChoiceList([]); $closure1 = function () {}; $closure2 = function () {}; @@ -236,7 +238,7 @@ public function testCreateViewSamePreferredChoices() { $preferred = ['a']; $list = $this->getMockBuilder('Symfony\Component\Form\ChoiceList\ChoiceListInterface')->getMock(); - $view = new \stdClass(); + $view = new ChoiceListView(); $this->decoratedFactory->expects($this->once()) ->method('createView') @@ -252,8 +254,8 @@ public function testCreateViewDifferentPreferredChoices() $preferred1 = ['a']; $preferred2 = ['b']; $list = $this->getMockBuilder('Symfony\Component\Form\ChoiceList\ChoiceListInterface')->getMock(); - $view1 = new \stdClass(); - $view2 = new \stdClass(); + $view1 = new ChoiceListView(); + $view2 = new ChoiceListView(); $this->decoratedFactory->expects($this->at(0)) ->method('createView') @@ -272,7 +274,7 @@ public function testCreateViewSamePreferredChoicesClosure() { $preferred = function () {}; $list = $this->getMockBuilder('Symfony\Component\Form\ChoiceList\ChoiceListInterface')->getMock(); - $view = new \stdClass(); + $view = new ChoiceListView(); $this->decoratedFactory->expects($this->once()) ->method('createView') @@ -288,8 +290,8 @@ public function testCreateViewDifferentPreferredChoicesClosure() $preferred1 = function () {}; $preferred2 = function () {}; $list = $this->getMockBuilder('Symfony\Component\Form\ChoiceList\ChoiceListInterface')->getMock(); - $view1 = new \stdClass(); - $view2 = new \stdClass(); + $view1 = new ChoiceListView(); + $view2 = new ChoiceListView(); $this->decoratedFactory->expects($this->at(0)) ->method('createView') @@ -308,7 +310,7 @@ public function testCreateViewSameLabelClosure() { $labels = function () {}; $list = $this->getMockBuilder('Symfony\Component\Form\ChoiceList\ChoiceListInterface')->getMock(); - $view = new \stdClass(); + $view = new ChoiceListView(); $this->decoratedFactory->expects($this->once()) ->method('createView') @@ -324,8 +326,8 @@ public function testCreateViewDifferentLabelClosure() $labels1 = function () {}; $labels2 = function () {}; $list = $this->getMockBuilder('Symfony\Component\Form\ChoiceList\ChoiceListInterface')->getMock(); - $view1 = new \stdClass(); - $view2 = new \stdClass(); + $view1 = new ChoiceListView(); + $view2 = new ChoiceListView(); $this->decoratedFactory->expects($this->at(0)) ->method('createView') @@ -344,7 +346,7 @@ public function testCreateViewSameIndexClosure() { $index = function () {}; $list = $this->getMockBuilder('Symfony\Component\Form\ChoiceList\ChoiceListInterface')->getMock(); - $view = new \stdClass(); + $view = new ChoiceListView(); $this->decoratedFactory->expects($this->once()) ->method('createView') @@ -360,8 +362,8 @@ public function testCreateViewDifferentIndexClosure() $index1 = function () {}; $index2 = function () {}; $list = $this->getMockBuilder('Symfony\Component\Form\ChoiceList\ChoiceListInterface')->getMock(); - $view1 = new \stdClass(); - $view2 = new \stdClass(); + $view1 = new ChoiceListView(); + $view2 = new ChoiceListView(); $this->decoratedFactory->expects($this->at(0)) ->method('createView') @@ -380,7 +382,7 @@ public function testCreateViewSameGroupByClosure() { $groupBy = function () {}; $list = $this->getMockBuilder('Symfony\Component\Form\ChoiceList\ChoiceListInterface')->getMock(); - $view = new \stdClass(); + $view = new ChoiceListView(); $this->decoratedFactory->expects($this->once()) ->method('createView') @@ -396,8 +398,8 @@ public function testCreateViewDifferentGroupByClosure() $groupBy1 = function () {}; $groupBy2 = function () {}; $list = $this->getMockBuilder('Symfony\Component\Form\ChoiceList\ChoiceListInterface')->getMock(); - $view1 = new \stdClass(); - $view2 = new \stdClass(); + $view1 = new ChoiceListView(); + $view2 = new ChoiceListView(); $this->decoratedFactory->expects($this->at(0)) ->method('createView') @@ -416,7 +418,7 @@ public function testCreateViewSameAttributes() { $attr = ['class' => 'foobar']; $list = $this->getMockBuilder('Symfony\Component\Form\ChoiceList\ChoiceListInterface')->getMock(); - $view = new \stdClass(); + $view = new ChoiceListView(); $this->decoratedFactory->expects($this->once()) ->method('createView') @@ -432,8 +434,8 @@ public function testCreateViewDifferentAttributes() $attr1 = ['class' => 'foobar1']; $attr2 = ['class' => 'foobar2']; $list = $this->getMockBuilder('Symfony\Component\Form\ChoiceList\ChoiceListInterface')->getMock(); - $view1 = new \stdClass(); - $view2 = new \stdClass(); + $view1 = new ChoiceListView(); + $view2 = new ChoiceListView(); $this->decoratedFactory->expects($this->at(0)) ->method('createView') @@ -452,7 +454,7 @@ public function testCreateViewSameAttributesClosure() { $attr = function () {}; $list = $this->getMockBuilder('Symfony\Component\Form\ChoiceList\ChoiceListInterface')->getMock(); - $view = new \stdClass(); + $view = new ChoiceListView(); $this->decoratedFactory->expects($this->once()) ->method('createView') @@ -468,8 +470,8 @@ public function testCreateViewDifferentAttributesClosure() $attr1 = function () {}; $attr2 = function () {}; $list = $this->getMockBuilder('Symfony\Component\Form\ChoiceList\ChoiceListInterface')->getMock(); - $view1 = new \stdClass(); - $view2 = new \stdClass(); + $view1 = new ChoiceListView(); + $view2 = new ChoiceListView(); $this->decoratedFactory->expects($this->at(0)) ->method('createView') diff --git a/src/Symfony/Component/Form/Tests/ChoiceList/Factory/PropertyAccessDecoratorTest.php b/src/Symfony/Component/Form/Tests/ChoiceList/Factory/PropertyAccessDecoratorTest.php index 725a09df08a67..043989a9830a9 100644 --- a/src/Symfony/Component/Form/Tests/ChoiceList/Factory/PropertyAccessDecoratorTest.php +++ b/src/Symfony/Component/Form/Tests/ChoiceList/Factory/PropertyAccessDecoratorTest.php @@ -13,7 +13,9 @@ use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; +use Symfony\Component\Form\ChoiceList\ArrayChoiceList; use Symfony\Component\Form\ChoiceList\Factory\PropertyAccessDecorator; +use Symfony\Component\Form\ChoiceList\View\ChoiceListView; use Symfony\Component\PropertyAccess\PropertyPath; /** @@ -45,10 +47,10 @@ public function testCreateFromChoicesPropertyPath() ->method('createListFromChoices') ->with($choices, $this->isInstanceOf('\Closure')) ->willReturnCallback(function ($choices, $callback) { - return array_map($callback, $choices); + return new ArrayChoiceList(array_map($callback, $choices)); }); - $this->assertSame(['value'], $this->factory->createListFromChoices($choices, 'property')); + $this->assertSame(['value' => 'value'], $this->factory->createListFromChoices($choices, 'property')->getChoices()); } public function testCreateFromChoicesPropertyPathInstance() @@ -59,10 +61,10 @@ public function testCreateFromChoicesPropertyPathInstance() ->method('createListFromChoices') ->with($choices, $this->isInstanceOf('\Closure')) ->willReturnCallback(function ($choices, $callback) { - return array_map($callback, $choices); + return new ArrayChoiceList(array_map($callback, $choices)); }); - $this->assertSame(['value'], $this->factory->createListFromChoices($choices, new PropertyPath('property'))); + $this->assertSame(['value' => 'value'], $this->factory->createListFromChoices($choices, new PropertyPath('property'))->getChoices()); } /** @@ -88,10 +90,10 @@ public function testCreateFromLoaderPropertyPath() ->method('createListFromLoader') ->with($loader, $this->isInstanceOf('\Closure')) ->willReturnCallback(function ($loader, $callback) { - return $callback((object) ['property' => 'value']); + return new ArrayChoiceList((array) $callback((object) ['property' => 'value'])); }); - $this->assertSame('value', $this->factory->createListFromLoader($loader, 'property')); + $this->assertSame(['value' => 'value'], $this->factory->createListFromLoader($loader, 'property')->getChoices()); } /** @@ -118,10 +120,10 @@ public function testCreateFromChoicesAssumeNullIfValuePropertyPathUnreadable() ->method('createListFromChoices') ->with($choices, $this->isInstanceOf('\Closure')) ->willReturnCallback(function ($choices, $callback) { - return array_map($callback, $choices); + return new ArrayChoiceList(array_map($callback, $choices)); }); - $this->assertSame([null], $this->factory->createListFromChoices($choices, 'property')); + $this->assertSame([null], $this->factory->createListFromChoices($choices, 'property')->getChoices()); } // https://github.com/symfony/symfony/issues/5494 @@ -133,10 +135,10 @@ public function testCreateFromChoiceLoaderAssumeNullIfValuePropertyPathUnreadabl ->method('createListFromLoader') ->with($loader, $this->isInstanceOf('\Closure')) ->willReturnCallback(function ($loader, $callback) { - return $callback(null); + return new ArrayChoiceList((array) $callback(null)); }); - $this->assertNull($this->factory->createListFromLoader($loader, 'property')); + $this->assertSame([], $this->factory->createListFromLoader($loader, 'property')->getChoices()); } public function testCreateFromLoaderPropertyPathInstance() @@ -147,10 +149,10 @@ public function testCreateFromLoaderPropertyPathInstance() ->method('createListFromLoader') ->with($loader, $this->isInstanceOf('\Closure')) ->willReturnCallback(function ($loader, $callback) { - return $callback((object) ['property' => 'value']); + return new ArrayChoiceList((array) $callback((object) ['property' => 'value'])); }); - $this->assertSame('value', $this->factory->createListFromLoader($loader, new PropertyPath('property'))); + $this->assertSame(['value' => 'value'], $this->factory->createListFromLoader($loader, new PropertyPath('property'))->getChoices()); } public function testCreateViewPreferredChoicesAsPropertyPath() @@ -161,13 +163,10 @@ public function testCreateViewPreferredChoicesAsPropertyPath() ->method('createView') ->with($list, $this->isInstanceOf('\Closure')) ->willReturnCallback(function ($list, $preferred) { - return $preferred((object) ['property' => true]); + return new ChoiceListView((array) $preferred((object) ['property' => true])); }); - $this->assertTrue($this->factory->createView( - $list, - 'property' - )); + $this->assertSame([true], $this->factory->createView($list, 'property')->choices); } /** @@ -196,13 +195,10 @@ public function testCreateViewPreferredChoicesAsPropertyPathInstance() ->method('createView') ->with($list, $this->isInstanceOf('\Closure')) ->willReturnCallback(function ($list, $preferred) { - return $preferred((object) ['property' => true]); + return new ChoiceListView((array) $preferred((object) ['property' => true])); }); - $this->assertTrue($this->factory->createView( - $list, - new PropertyPath('property') - )); + $this->assertSame([true], $this->factory->createView($list, 'property')->choices); } // https://github.com/symfony/symfony/issues/5494 @@ -214,13 +210,10 @@ public function testCreateViewAssumeNullIfPreferredChoicesPropertyPathUnreadable ->method('createView') ->with($list, $this->isInstanceOf('\Closure')) ->willReturnCallback(function ($list, $preferred) { - return $preferred((object) ['category' => null]); + return new ChoiceListView((array) $preferred((object) ['category' => null])); }); - $this->assertFalse($this->factory->createView( - $list, - 'category.preferred' - )); + $this->assertSame([false], $this->factory->createView($list, 'category.preferred')->choices); } public function testCreateViewLabelsAsPropertyPath() @@ -231,14 +224,10 @@ public function testCreateViewLabelsAsPropertyPath() ->method('createView') ->with($list, null, $this->isInstanceOf('\Closure')) ->willReturnCallback(function ($list, $preferred, $label) { - return $label((object) ['property' => 'label']); + return new ChoiceListView((array) $label((object) ['property' => 'label'])); }); - $this->assertSame('label', $this->factory->createView( - $list, - null, // preferred choices - 'property' - )); + $this->assertSame(['label'], $this->factory->createView($list, null, 'property')->choices); } /** @@ -268,14 +257,10 @@ public function testCreateViewLabelsAsPropertyPathInstance() ->method('createView') ->with($list, null, $this->isInstanceOf('\Closure')) ->willReturnCallback(function ($list, $preferred, $label) { - return $label((object) ['property' => 'label']); + return new ChoiceListView((array) $label((object) ['property' => 'label'])); }); - $this->assertSame('label', $this->factory->createView( - $list, - null, // preferred choices - new PropertyPath('property') - )); + $this->assertSame(['label'], $this->factory->createView($list, null, new PropertyPath('property'))->choices); } public function testCreateViewIndicesAsPropertyPath() @@ -286,15 +271,10 @@ public function testCreateViewIndicesAsPropertyPath() ->method('createView') ->with($list, null, null, $this->isInstanceOf('\Closure')) ->willReturnCallback(function ($list, $preferred, $label, $index) { - return $index((object) ['property' => 'index']); + return new ChoiceListView((array) $index((object) ['property' => 'index'])); }); - $this->assertSame('index', $this->factory->createView( - $list, - null, // preferred choices - null, // label - 'property' - )); + $this->assertSame(['index'], $this->factory->createView($list, null, null, 'property')->choices); } /** @@ -325,15 +305,10 @@ public function testCreateViewIndicesAsPropertyPathInstance() ->method('createView') ->with($list, null, null, $this->isInstanceOf('\Closure')) ->willReturnCallback(function ($list, $preferred, $label, $index) { - return $index((object) ['property' => 'index']); + return new ChoiceListView((array) $index((object) ['property' => 'index'])); }); - $this->assertSame('index', $this->factory->createView( - $list, - null, // preferred choices - null, // label - new PropertyPath('property') - )); + $this->assertSame(['index'], $this->factory->createView($list, null, null, new PropertyPath('property'))->choices); } public function testCreateViewGroupsAsPropertyPath() @@ -344,16 +319,10 @@ public function testCreateViewGroupsAsPropertyPath() ->method('createView') ->with($list, null, null, null, $this->isInstanceOf('\Closure')) ->willReturnCallback(function ($list, $preferred, $label, $index, $groupBy) { - return $groupBy((object) ['property' => 'group']); + return new ChoiceListView((array) $groupBy((object) ['property' => 'group'])); }); - $this->assertSame('group', $this->factory->createView( - $list, - null, // preferred choices - null, // label - null, // index - 'property' - )); + $this->assertSame(['group'], $this->factory->createView($list, null, null, null, 'property')->choices); } /** @@ -385,16 +354,10 @@ public function testCreateViewGroupsAsPropertyPathInstance() ->method('createView') ->with($list, null, null, null, $this->isInstanceOf('\Closure')) ->willReturnCallback(function ($list, $preferred, $label, $index, $groupBy) { - return $groupBy((object) ['property' => 'group']); + return new ChoiceListView((array) $groupBy((object) ['property' => 'group'])); }); - $this->assertSame('group', $this->factory->createView( - $list, - null, // preferred choices - null, // label - null, // index - new PropertyPath('property') - )); + $this->assertSame(['group'], $this->factory->createView($list, null, null, null, new PropertyPath('property'))->choices); } // https://github.com/symfony/symfony/issues/5494 @@ -406,16 +369,10 @@ public function testCreateViewAssumeNullIfGroupsPropertyPathUnreadable() ->method('createView') ->with($list, null, null, null, $this->isInstanceOf('\Closure')) ->willReturnCallback(function ($list, $preferred, $label, $index, $groupBy) { - return $groupBy((object) ['group' => null]); + return new ChoiceListView((array) $groupBy((object) ['group' => null])); }); - $this->assertNull($this->factory->createView( - $list, - null, // preferred choices - null, // label - null, // index - 'group.name' - )); + $this->assertSame([], $this->factory->createView($list, null, null, null, 'group.name')->choices); } public function testCreateViewAttrAsPropertyPath() @@ -426,17 +383,10 @@ public function testCreateViewAttrAsPropertyPath() ->method('createView') ->with($list, null, null, null, null, $this->isInstanceOf('\Closure')) ->willReturnCallback(function ($list, $preferred, $label, $index, $groupBy, $attr) { - return $attr((object) ['property' => 'attr']); + return new ChoiceListView((array) $attr((object) ['property' => 'attr'])); }); - $this->assertSame('attr', $this->factory->createView( - $list, - null, // preferred choices - null, // label - null, // index - null, // groups - 'property' - )); + $this->assertSame(['attr'], $this->factory->createView($list, null, null, null, null, 'property')->choices); } /** @@ -469,16 +419,9 @@ public function testCreateViewAttrAsPropertyPathInstance() ->method('createView') ->with($list, null, null, null, null, $this->isInstanceOf('\Closure')) ->willReturnCallback(function ($list, $preferred, $label, $index, $groupBy, $attr) { - return $attr((object) ['property' => 'attr']); + return new ChoiceListView((array) $attr((object) ['property' => 'attr'])); }); - $this->assertSame('attr', $this->factory->createView( - $list, - null, // preferred choices - null, // label - null, // index - null, // groups - new PropertyPath('property') - )); + $this->assertSame(['attr'], $this->factory->createView($list, null, null, null, null, new PropertyPath('property'))->choices); } } diff --git a/src/Symfony/Component/Form/Tests/ChoiceList/LazyChoiceListTest.php b/src/Symfony/Component/Form/Tests/ChoiceList/LazyChoiceListTest.php index 5888038370b59..aa6b6b5d493c4 100644 --- a/src/Symfony/Component/Form/Tests/ChoiceList/LazyChoiceListTest.php +++ b/src/Symfony/Component/Form/Tests/ChoiceList/LazyChoiceListTest.php @@ -56,10 +56,10 @@ public function testGetChoiceLoadersLoadsLoadedListOnFirstCall() // The same list is returned by the loader $this->loadedList->expects($this->exactly(2)) ->method('getChoices') - ->willReturn('RESULT'); + ->willReturn(['RESULT']); - $this->assertSame('RESULT', $this->list->getChoices()); - $this->assertSame('RESULT', $this->list->getChoices()); + $this->assertSame(['RESULT'], $this->list->getChoices()); + $this->assertSame(['RESULT'], $this->list->getChoices()); } /** @@ -96,10 +96,10 @@ public function testGetValuesLoadsLoadedListOnFirstCall() // The same list is returned by the loader $this->loadedList->expects($this->exactly(2)) ->method('getValues') - ->willReturn('RESULT'); + ->willReturn(['RESULT']); - $this->assertSame('RESULT', $this->list->getValues()); - $this->assertSame('RESULT', $this->list->getValues()); + $this->assertSame(['RESULT'], $this->list->getValues()); + $this->assertSame(['RESULT'], $this->list->getValues()); } public function testGetStructuredValuesLoadsLoadedListOnFirstCall() @@ -112,10 +112,10 @@ public function testGetStructuredValuesLoadsLoadedListOnFirstCall() // The same list is returned by the loader $this->loadedList->expects($this->exactly(2)) ->method('getStructuredValues') - ->willReturn('RESULT'); + ->willReturn(['RESULT']); - $this->assertSame('RESULT', $this->list->getStructuredValues()); - $this->assertSame('RESULT', $this->list->getStructuredValues()); + $this->assertSame(['RESULT'], $this->list->getStructuredValues()); + $this->assertSame(['RESULT'], $this->list->getStructuredValues()); } public function testGetOriginalKeysLoadsLoadedListOnFirstCall() @@ -128,10 +128,10 @@ public function testGetOriginalKeysLoadsLoadedListOnFirstCall() // The same list is returned by the loader $this->loadedList->expects($this->exactly(2)) ->method('getOriginalKeys') - ->willReturn('RESULT'); + ->willReturn(['RESULT']); - $this->assertSame('RESULT', $this->list->getOriginalKeys()); - $this->assertSame('RESULT', $this->list->getOriginalKeys()); + $this->assertSame(['RESULT'], $this->list->getOriginalKeys()); + $this->assertSame(['RESULT'], $this->list->getOriginalKeys()); } public function testGetChoicesForValuesForwardsCallIfListNotLoaded() @@ -139,10 +139,10 @@ public function testGetChoicesForValuesForwardsCallIfListNotLoaded() $this->loader->expects($this->exactly(2)) ->method('loadChoicesForValues') ->with(['a', 'b']) - ->willReturn('RESULT'); + ->willReturn(['RESULT']); - $this->assertSame('RESULT', $this->list->getChoicesForValues(['a', 'b'])); - $this->assertSame('RESULT', $this->list->getChoicesForValues(['a', 'b'])); + $this->assertSame(['RESULT'], $this->list->getChoicesForValues(['a', 'b'])); + $this->assertSame(['RESULT'], $this->list->getChoicesForValues(['a', 'b'])); } public function testGetChoicesForValuesUsesLoadedList() @@ -160,13 +160,13 @@ public function testGetChoicesForValuesUsesLoadedList() $this->loadedList->expects($this->exactly(2)) ->method('getChoicesForValues') ->with(['a', 'b']) - ->willReturn('RESULT'); + ->willReturn(['RESULT']); // load choice list $this->list->getChoices(); - $this->assertSame('RESULT', $this->list->getChoicesForValues(['a', 'b'])); - $this->assertSame('RESULT', $this->list->getChoicesForValues(['a', 'b'])); + $this->assertSame(['RESULT'], $this->list->getChoicesForValues(['a', 'b'])); + $this->assertSame(['RESULT'], $this->list->getChoicesForValues(['a', 'b'])); } /** @@ -198,12 +198,12 @@ public function testGetValuesForChoicesUsesLoadedList() $this->loadedList->expects($this->exactly(2)) ->method('getValuesForChoices') ->with(['a', 'b']) - ->willReturn('RESULT'); + ->willReturn(['RESULT']); // load choice list $this->list->getChoices(); - $this->assertSame('RESULT', $this->list->getValuesForChoices(['a', 'b'])); - $this->assertSame('RESULT', $this->list->getValuesForChoices(['a', 'b'])); + $this->assertSame(['RESULT'], $this->list->getValuesForChoices(['a', 'b'])); + $this->assertSame(['RESULT'], $this->list->getValuesForChoices(['a', 'b'])); } } diff --git a/src/Symfony/Component/Form/Tests/Extension/Csrf/Type/FormTypeCsrfExtensionTest.php b/src/Symfony/Component/Form/Tests/Extension/Csrf/Type/FormTypeCsrfExtensionTest.php index 232fd52b46614..ea7fc5ff50b93 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Csrf/Type/FormTypeCsrfExtensionTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Csrf/Type/FormTypeCsrfExtensionTest.php @@ -142,7 +142,7 @@ public function testGenerateCsrfTokenUsesFormNameAsIntentionByDefault() $this->tokenManager->expects($this->once()) ->method('getToken') ->with('FORM_NAME') - ->willReturn('token'); + ->willReturn(new CsrfToken('TOKEN_ID', 'token')); $view = $this->factory ->createNamed('FORM_NAME', 'Symfony\Component\Form\Extension\Core\Type\FormType', null, [ @@ -160,7 +160,7 @@ public function testGenerateCsrfTokenUsesTypeClassAsIntentionIfEmptyFormName() $this->tokenManager->expects($this->once()) ->method('getToken') ->with('Symfony\Component\Form\Extension\Core\Type\FormType') - ->willReturn('token'); + ->willReturn(new CsrfToken('TOKEN_ID', 'token')); $view = $this->factory ->createNamed('', 'Symfony\Component\Form\Extension\Core\Type\FormType', null, [ diff --git a/src/Symfony/Component/Form/Tests/Extension/DataCollector/FormDataExtractorTest.php b/src/Symfony/Component/Form/Tests/Extension/DataCollector/FormDataExtractorTest.php index 6d897c711f107..4b61223773532 100644 --- a/src/Symfony/Component/Form/Tests/Extension/DataCollector/FormDataExtractorTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/DataCollector/FormDataExtractorTest.php @@ -16,6 +16,7 @@ use Symfony\Component\Form\CallbackTransformer; use Symfony\Component\Form\Exception\TransformationFailedException; use Symfony\Component\Form\Extension\DataCollector\FormDataExtractor; +use Symfony\Component\Form\Extension\Core\Type\HiddenType; use Symfony\Component\Form\FormBuilder; use Symfony\Component\Form\FormError; use Symfony\Component\Form\FormView; @@ -57,7 +58,7 @@ public function testExtractConfiguration() $type = $this->getMockBuilder('Symfony\Component\Form\ResolvedFormTypeInterface')->getMock(); $type->expects($this->any()) ->method('getInnerType') - ->willReturn(new \stdClass()); + ->willReturn(new HiddenType()); $form = $this->createBuilder('name') ->setType($type) @@ -66,7 +67,7 @@ public function testExtractConfiguration() $this->assertSame([ 'id' => 'name', 'name' => 'name', - 'type_class' => 'stdClass', + 'type_class' => HiddenType::class, 'synchronized' => true, 'passed_options' => [], 'resolved_options' => [], @@ -78,7 +79,7 @@ public function testExtractConfigurationSortsPassedOptions() $type = $this->getMockBuilder('Symfony\Component\Form\ResolvedFormTypeInterface')->getMock(); $type->expects($this->any()) ->method('getInnerType') - ->willReturn(new \stdClass()); + ->willReturn(new HiddenType()); $options = [ 'b' => 'foo', @@ -96,7 +97,7 @@ public function testExtractConfigurationSortsPassedOptions() $this->assertSame([ 'id' => 'name', 'name' => 'name', - 'type_class' => 'stdClass', + 'type_class' => HiddenType::class, 'synchronized' => true, 'passed_options' => [ 'a' => 'bar', @@ -112,7 +113,7 @@ public function testExtractConfigurationSortsResolvedOptions() $type = $this->getMockBuilder('Symfony\Component\Form\ResolvedFormTypeInterface')->getMock(); $type->expects($this->any()) ->method('getInnerType') - ->willReturn(new \stdClass()); + ->willReturn(new HiddenType()); $options = [ 'b' => 'foo', @@ -127,7 +128,7 @@ public function testExtractConfigurationSortsResolvedOptions() $this->assertSame([ 'id' => 'name', 'name' => 'name', - 'type_class' => 'stdClass', + 'type_class' => HiddenType::class, 'synchronized' => true, 'passed_options' => [], 'resolved_options' => [ @@ -143,7 +144,7 @@ public function testExtractConfigurationBuildsIdRecursively() $type = $this->getMockBuilder('Symfony\Component\Form\ResolvedFormTypeInterface')->getMock(); $type->expects($this->any()) ->method('getInnerType') - ->willReturn(new \stdClass()); + ->willReturn(new HiddenType()); $grandParent = $this->createBuilder('grandParent') ->setCompound(true) @@ -163,7 +164,7 @@ public function testExtractConfigurationBuildsIdRecursively() $this->assertSame([ 'id' => 'grandParent_parent_name', 'name' => 'name', - 'type_class' => 'stdClass', + 'type_class' => HiddenType::class, 'synchronized' => true, 'passed_options' => [], 'resolved_options' => [], diff --git a/src/Symfony/Component/Form/Tests/FormFactoryTest.php b/src/Symfony/Component/Form/Tests/FormFactoryTest.php index ddd5b4bb72e4a..79421be6353e5 100644 --- a/src/Symfony/Component/Form/Tests/FormFactoryTest.php +++ b/src/Symfony/Component/Form/Tests/FormFactoryTest.php @@ -14,6 +14,7 @@ use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\Form\FormFactory; +use Symfony\Component\Form\FormInterface; use Symfony\Component\Form\FormTypeGuesserChain; use Symfony\Component\Form\Guess\Guess; use Symfony\Component\Form\Guess\TypeGuess; @@ -193,11 +194,13 @@ public function testCreateUsesBlockPrefixIfTypeGivenAsString() ->method('buildForm') ->with($this->builder, $resolvedOptions); + $form = $this->createMock(FormInterface::class); + $this->builder->expects($this->once()) ->method('getForm') - ->willReturn('FORM'); + ->willReturn($form); - $this->assertSame('FORM', $this->factory->create('TYPE', null, $options)); + $this->assertSame($form, $this->factory->create('TYPE', null, $options)); } public function testCreateNamed() @@ -224,11 +227,13 @@ public function testCreateNamed() ->method('buildForm') ->with($this->builder, $resolvedOptions); + $form = $this->createMock(FormInterface::class); + $this->builder->expects($this->once()) ->method('getForm') - ->willReturn('FORM'); + ->willReturn($form); - $this->assertSame('FORM', $this->factory->createNamed('name', 'type', null, $options)); + $this->assertSame($form, $this->factory->createNamed('name', 'type', null, $options)); } public function testCreateBuilderForPropertyWithoutTypeGuesser() @@ -242,11 +247,11 @@ public function testCreateBuilderForPropertyWithoutTypeGuesser() $factory->expects($this->once()) ->method('createNamedBuilder') ->with('firstName', 'Symfony\Component\Form\Extension\Core\Type\TextType', null, []) - ->willReturn('builderInstance'); + ->willReturn($this->builder); $this->builder = $factory->createBuilderForProperty('Application\Author', 'firstName'); - $this->assertEquals('builderInstance', $this->builder); + $this->assertSame($this->builder, $this->builder); } public function testCreateBuilderForPropertyCreatesFormWithHighestConfidence() @@ -274,11 +279,11 @@ public function testCreateBuilderForPropertyCreatesFormWithHighestConfidence() $factory->expects($this->once()) ->method('createNamedBuilder') ->with('firstName', 'Symfony\Component\Form\Extension\Core\Type\PasswordType', null, ['attr' => ['maxlength' => 7]]) - ->willReturn('builderInstance'); + ->willReturn($this->builder); $this->builder = $factory->createBuilderForProperty('Application\Author', 'firstName'); - $this->assertEquals('builderInstance', $this->builder); + $this->assertSame($this->builder, $this->builder); } public function testCreateBuilderCreatesTextFormIfNoGuess() @@ -293,11 +298,11 @@ public function testCreateBuilderCreatesTextFormIfNoGuess() $factory->expects($this->once()) ->method('createNamedBuilder') ->with('firstName', 'Symfony\Component\Form\Extension\Core\Type\TextType') - ->willReturn('builderInstance'); + ->willReturn($this->builder); $this->builder = $factory->createBuilderForProperty('Application\Author', 'firstName'); - $this->assertEquals('builderInstance', $this->builder); + $this->assertSame($this->builder, $this->builder); } public function testOptionsCanBeOverridden() @@ -316,7 +321,7 @@ public function testOptionsCanBeOverridden() $factory->expects($this->once()) ->method('createNamedBuilder') ->with('firstName', 'Symfony\Component\Form\Extension\Core\Type\TextType', null, ['attr' => ['class' => 'foo', 'maxlength' => 11]]) - ->willReturn('builderInstance'); + ->willReturn($this->builder); $this->builder = $factory->createBuilderForProperty( 'Application\Author', @@ -325,7 +330,7 @@ public function testOptionsCanBeOverridden() ['attr' => ['maxlength' => 11]] ); - $this->assertEquals('builderInstance', $this->builder); + $this->assertSame($this->builder, $this->builder); } public function testCreateBuilderUsesMaxLengthIfFound() @@ -351,14 +356,14 @@ public function testCreateBuilderUsesMaxLengthIfFound() $factory->expects($this->once()) ->method('createNamedBuilder') ->with('firstName', 'Symfony\Component\Form\Extension\Core\Type\TextType', null, ['attr' => ['maxlength' => 20]]) - ->willReturn('builderInstance'); + ->willReturn($this->builder); $this->builder = $factory->createBuilderForProperty( 'Application\Author', 'firstName' ); - $this->assertEquals('builderInstance', $this->builder); + $this->assertSame($this->builder, $this->builder); } public function testCreateBuilderUsesMaxLengthAndPattern() @@ -384,7 +389,7 @@ public function testCreateBuilderUsesMaxLengthAndPattern() $factory->expects($this->once()) ->method('createNamedBuilder') ->with('firstName', 'Symfony\Component\Form\Extension\Core\Type\TextType', null, ['attr' => ['maxlength' => 20, 'pattern' => '.{5,}', 'class' => 'tinymce']]) - ->willReturn('builderInstance'); + ->willReturn($this->builder); $this->builder = $factory->createBuilderForProperty( 'Application\Author', @@ -393,7 +398,7 @@ public function testCreateBuilderUsesMaxLengthAndPattern() ['attr' => ['class' => 'tinymce']] ); - $this->assertEquals('builderInstance', $this->builder); + $this->assertSame($this->builder, $this->builder); } public function testCreateBuilderUsesRequiredSettingWithHighestConfidence() @@ -419,14 +424,14 @@ public function testCreateBuilderUsesRequiredSettingWithHighestConfidence() $factory->expects($this->once()) ->method('createNamedBuilder') ->with('firstName', 'Symfony\Component\Form\Extension\Core\Type\TextType', null, ['required' => false]) - ->willReturn('builderInstance'); + ->willReturn($this->builder); $this->builder = $factory->createBuilderForProperty( 'Application\Author', 'firstName' ); - $this->assertEquals('builderInstance', $this->builder); + $this->assertSame($this->builder, $this->builder); } public function testCreateBuilderUsesPatternIfFound() @@ -452,14 +457,14 @@ public function testCreateBuilderUsesPatternIfFound() $factory->expects($this->once()) ->method('createNamedBuilder') ->with('firstName', 'Symfony\Component\Form\Extension\Core\Type\TextType', null, ['attr' => ['pattern' => '[a-zA-Z]']]) - ->willReturn('builderInstance'); + ->willReturn($this->builder); $this->builder = $factory->createBuilderForProperty( 'Application\Author', 'firstName' ); - $this->assertEquals('builderInstance', $this->builder); + $this->assertSame($this->builder, $this->builder); } private function getMockFactory(array $methods = []) diff --git a/src/Symfony/Component/HttpFoundation/BinaryFileResponse.php b/src/Symfony/Component/HttpFoundation/BinaryFileResponse.php index 6c9a995e9a316..f43114111b076 100644 --- a/src/Symfony/Component/HttpFoundation/BinaryFileResponse.php +++ b/src/Symfony/Component/HttpFoundation/BinaryFileResponse.php @@ -327,12 +327,12 @@ public function setContent($content) if (null !== $content) { throw new \LogicException('The content cannot be set on a BinaryFileResponse instance.'); } + + return $this; } /** * {@inheritdoc} - * - * @return false */ public function getContent() { diff --git a/src/Symfony/Component/HttpFoundation/FileBag.php b/src/Symfony/Component/HttpFoundation/FileBag.php index ca849b3d7baf5..024fadf203226 100644 --- a/src/Symfony/Component/HttpFoundation/FileBag.php +++ b/src/Symfony/Component/HttpFoundation/FileBag.php @@ -75,8 +75,8 @@ protected function convertFileInformation($file) return $file; } - $file = $this->fixPhpFilesArray($file); if (\is_array($file)) { + $file = $this->fixPhpFilesArray($file); $keys = array_keys($file); sort($keys); @@ -109,14 +109,12 @@ protected function convertFileInformation($file) * It's safe to pass an already converted array, in which case this method * just returns the original array unmodified. * + * @param array $data + * * @return array */ protected function fixPhpFilesArray($data) { - if (!\is_array($data)) { - return $data; - } - $keys = array_keys($data); sort($keys); diff --git a/src/Symfony/Component/HttpFoundation/HeaderBag.php b/src/Symfony/Component/HttpFoundation/HeaderBag.php index 9798173e649bf..08299977cace9 100644 --- a/src/Symfony/Component/HttpFoundation/HeaderBag.php +++ b/src/Symfony/Component/HttpFoundation/HeaderBag.php @@ -121,7 +121,7 @@ public function get($key, $default = null, $first = true) } if ($first) { - return \count($headers[$key]) ? $headers[$key][0] : $default; + return \count($headers[$key]) ? (string) $headers[$key][0] : $default; } return $headers[$key]; diff --git a/src/Symfony/Component/HttpFoundation/Request.php b/src/Symfony/Component/HttpFoundation/Request.php index 3b9bf2f49e2f9..3fc7b71e6ed79 100644 --- a/src/Symfony/Component/HttpFoundation/Request.php +++ b/src/Symfony/Component/HttpFoundation/Request.php @@ -528,6 +528,10 @@ public function __toString() try { $content = $this->getContent(); } catch (\LogicException $e) { + if (\PHP_VERSION_ID >= 70400) { + throw $e; + } + return trigger_error($e, E_USER_ERROR); } @@ -912,7 +916,7 @@ public function getClientIps() * ("Client-Ip" for instance), configure it via the $trustedHeaderSet * argument of the Request::setTrustedProxies() method instead. * - * @return string The client IP address + * @return string|null The client IP address * * @see getClientIps() * @see https://wikipedia.org/wiki/X-Forwarded-For diff --git a/src/Symfony/Component/HttpFoundation/Response.php b/src/Symfony/Component/HttpFoundation/Response.php index eae9b78414684..8a17acdd5fc79 100644 --- a/src/Symfony/Component/HttpFoundation/Response.php +++ b/src/Symfony/Component/HttpFoundation/Response.php @@ -407,7 +407,7 @@ public function setContent($content) /** * Gets the current response content. * - * @return string Content + * @return string|false */ public function getContent() { diff --git a/src/Symfony/Component/HttpFoundation/Session/Attribute/NamespacedAttributeBag.php b/src/Symfony/Component/HttpFoundation/Session/Attribute/NamespacedAttributeBag.php index bbf2e39c81059..07885e7fbfce2 100644 --- a/src/Symfony/Component/HttpFoundation/Session/Attribute/NamespacedAttributeBag.php +++ b/src/Symfony/Component/HttpFoundation/Session/Attribute/NamespacedAttributeBag.php @@ -97,7 +97,7 @@ public function remove($name) * @param string $name Key name * @param bool $writeContext Write context, default false * - * @return array + * @return array|null */ protected function &resolveAttributePath($name, $writeContext = false) { diff --git a/src/Symfony/Component/HttpFoundation/Session/Storage/Handler/MemcachedSessionHandler.php b/src/Symfony/Component/HttpFoundation/Session/Storage/Handler/MemcachedSessionHandler.php index 8965c089c15de..a399be5fd8ee7 100644 --- a/src/Symfony/Component/HttpFoundation/Session/Storage/Handler/MemcachedSessionHandler.php +++ b/src/Symfony/Component/HttpFoundation/Session/Storage/Handler/MemcachedSessionHandler.php @@ -40,9 +40,6 @@ class MemcachedSessionHandler extends AbstractSessionHandler * * prefix: The prefix to use for the memcached keys in order to avoid collision * * expiretime: The time to live in seconds. * - * @param \Memcached $memcached A \Memcached instance - * @param array $options An associative array of Memcached options - * * @throws \InvalidArgumentException When unsupported options are passed */ public function __construct(\Memcached $memcached, array $options = []) @@ -58,7 +55,7 @@ public function __construct(\Memcached $memcached, array $options = []) } /** - * {@inheritdoc} + * @return bool */ public function close() { @@ -74,7 +71,7 @@ protected function doRead($sessionId) } /** - * {@inheritdoc} + * @return bool */ public function updateTimestamp($sessionId, $data) { @@ -102,7 +99,7 @@ protected function doDestroy($sessionId) } /** - * {@inheritdoc} + * @return bool */ public function gc($maxlifetime) { diff --git a/src/Symfony/Component/HttpFoundation/Session/Storage/Handler/NullSessionHandler.php b/src/Symfony/Component/HttpFoundation/Session/Storage/Handler/NullSessionHandler.php index 8d193155b090f..3ba9378ca7aed 100644 --- a/src/Symfony/Component/HttpFoundation/Session/Storage/Handler/NullSessionHandler.php +++ b/src/Symfony/Component/HttpFoundation/Session/Storage/Handler/NullSessionHandler.php @@ -67,7 +67,7 @@ protected function doDestroy($sessionId) } /** - * {@inheritdoc} + * @return bool */ public function gc($maxlifetime) { diff --git a/src/Symfony/Component/HttpFoundation/Session/Storage/Handler/PdoSessionHandler.php b/src/Symfony/Component/HttpFoundation/Session/Storage/Handler/PdoSessionHandler.php index 9a50377bcb0d1..f9e5d1e8f04d8 100644 --- a/src/Symfony/Component/HttpFoundation/Session/Storage/Handler/PdoSessionHandler.php +++ b/src/Symfony/Component/HttpFoundation/Session/Storage/Handler/PdoSessionHandler.php @@ -286,7 +286,7 @@ public function read($sessionId) } /** - * {@inheritdoc} + * @return bool */ public function gc($maxlifetime) { diff --git a/src/Symfony/Component/HttpFoundation/Session/Storage/Handler/StrictSessionHandler.php b/src/Symfony/Component/HttpFoundation/Session/Storage/Handler/StrictSessionHandler.php index 83a1f2c063c05..fab8e9a16d8d9 100644 --- a/src/Symfony/Component/HttpFoundation/Session/Storage/Handler/StrictSessionHandler.php +++ b/src/Symfony/Component/HttpFoundation/Session/Storage/Handler/StrictSessionHandler.php @@ -94,7 +94,7 @@ public function close() } /** - * {@inheritdoc} + * @return bool */ public function gc($maxlifetime) { diff --git a/src/Symfony/Component/HttpFoundation/Session/Storage/Proxy/AbstractProxy.php b/src/Symfony/Component/HttpFoundation/Session/Storage/Proxy/AbstractProxy.php index 09c92483c7575..0303729e7b387 100644 --- a/src/Symfony/Component/HttpFoundation/Session/Storage/Proxy/AbstractProxy.php +++ b/src/Symfony/Component/HttpFoundation/Session/Storage/Proxy/AbstractProxy.php @@ -31,7 +31,7 @@ abstract class AbstractProxy /** * Gets the session.save_handler name. * - * @return string + * @return string|null */ public function getSaveHandlerName() { diff --git a/src/Symfony/Component/HttpFoundation/Session/Storage/Proxy/SessionHandlerProxy.php b/src/Symfony/Component/HttpFoundation/Session/Storage/Proxy/SessionHandlerProxy.php index b11cc397a0973..e40712d93f637 100644 --- a/src/Symfony/Component/HttpFoundation/Session/Storage/Proxy/SessionHandlerProxy.php +++ b/src/Symfony/Component/HttpFoundation/Session/Storage/Proxy/SessionHandlerProxy.php @@ -76,7 +76,7 @@ public function destroy($sessionId) } /** - * {@inheritdoc} + * @return bool */ public function gc($maxlifetime) { diff --git a/src/Symfony/Component/HttpFoundation/StreamedResponse.php b/src/Symfony/Component/HttpFoundation/StreamedResponse.php index 8bc5fc91a5c18..b9148ea8726a6 100644 --- a/src/Symfony/Component/HttpFoundation/StreamedResponse.php +++ b/src/Symfony/Component/HttpFoundation/StreamedResponse.php @@ -136,8 +136,6 @@ public function setContent($content) /** * {@inheritdoc} - * - * @return false */ public function getContent() { diff --git a/src/Symfony/Component/HttpFoundation/Tests/BinaryFileResponseTest.php b/src/Symfony/Component/HttpFoundation/Tests/BinaryFileResponseTest.php index 3df96f393bb10..fcad11defa58b 100644 --- a/src/Symfony/Component/HttpFoundation/Tests/BinaryFileResponseTest.php +++ b/src/Symfony/Component/HttpFoundation/Tests/BinaryFileResponseTest.php @@ -107,7 +107,7 @@ public function testRequests($requestRange, $offset, $length, $responseRange) $this->assertEquals(206, $response->getStatusCode()); $this->assertEquals($responseRange, $response->headers->get('Content-Range')); - $this->assertSame($length, $response->headers->get('Content-Length')); + $this->assertSame((string) $length, $response->headers->get('Content-Length')); } /** diff --git a/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/Proxy/SessionHandlerProxyTest.php b/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/Proxy/SessionHandlerProxyTest.php index ec9029c7dac2e..1457ebd70d1c4 100644 --- a/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/Proxy/SessionHandlerProxyTest.php +++ b/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/Proxy/SessionHandlerProxyTest.php @@ -144,7 +144,8 @@ public function testUpdateTimestamp() { $mock = $this->getMockBuilder(['SessionHandlerInterface', 'SessionUpdateTimestampHandlerInterface'])->getMock(); $mock->expects($this->once()) - ->method('updateTimestamp'); + ->method('updateTimestamp') + ->willReturn(false); $proxy = new SessionHandlerProxy($mock); $proxy->updateTimestamp('id', 'data'); diff --git a/src/Symfony/Component/HttpKernel/Controller/ControllerResolver.php b/src/Symfony/Component/HttpKernel/Controller/ControllerResolver.php index bce2f8df70e84..c981642fee4f0 100644 --- a/src/Symfony/Component/HttpKernel/Controller/ControllerResolver.php +++ b/src/Symfony/Component/HttpKernel/Controller/ControllerResolver.php @@ -85,10 +85,10 @@ public function getController(Request $request) } } - $callable = $this->createController($controller); - - if (!\is_callable($callable)) { - throw new \InvalidArgumentException(sprintf('The controller for URI "%s" is not callable. %s', $request->getPathInfo(), $this->getControllerError($callable))); + try { + $callable = $this->createController($controller); + } catch (\InvalidArgumentException $e) { + throw new \InvalidArgumentException(sprintf('The controller for URI "%s" is not callable. %s', $request->getPathInfo(), $e->getMessage())); } return $callable; @@ -165,7 +165,7 @@ protected function doGetArguments(Request $request, $controller, array $paramete * * @return callable A PHP callable * - * @throws \InvalidArgumentException + * @throws \InvalidArgumentException When the controller cannot be created */ protected function createController($controller) { @@ -179,7 +179,13 @@ protected function createController($controller) throw new \InvalidArgumentException(sprintf('Class "%s" does not exist.', $class)); } - return [$this->instantiateController($class), $method]; + $controller = [$this->instantiateController($class), $method]; + + if (!\is_callable($controller)) { + throw new \InvalidArgumentException($this->getControllerError($controller)); + } + + return $controller; } /** diff --git a/src/Symfony/Component/HttpKernel/ControllerMetadata/ArgumentMetadata.php b/src/Symfony/Component/HttpKernel/ControllerMetadata/ArgumentMetadata.php index 32316a8d519e7..520e83b5fe727 100644 --- a/src/Symfony/Component/HttpKernel/ControllerMetadata/ArgumentMetadata.php +++ b/src/Symfony/Component/HttpKernel/ControllerMetadata/ArgumentMetadata.php @@ -58,7 +58,7 @@ public function getName() * * The type is the PHP class in 5.5+ and additionally the basic type in PHP 7.0+. * - * @return string + * @return string|null */ public function getType() { diff --git a/src/Symfony/Component/HttpKernel/DataCollector/ConfigDataCollector.php b/src/Symfony/Component/HttpKernel/DataCollector/ConfigDataCollector.php index 626c1cc695271..96d60c003fbb9 100644 --- a/src/Symfony/Component/HttpKernel/DataCollector/ConfigDataCollector.php +++ b/src/Symfony/Component/HttpKernel/DataCollector/ConfigDataCollector.php @@ -119,7 +119,7 @@ public function getApplicationVersion() /** * Gets the token. * - * @return string The token + * @return string|null The token */ public function getToken() { diff --git a/src/Symfony/Component/HttpKernel/DataCollector/ExceptionDataCollector.php b/src/Symfony/Component/HttpKernel/DataCollector/ExceptionDataCollector.php index c76e7f45bdf10..f9be5bddfff1f 100644 --- a/src/Symfony/Component/HttpKernel/DataCollector/ExceptionDataCollector.php +++ b/src/Symfony/Component/HttpKernel/DataCollector/ExceptionDataCollector.php @@ -55,7 +55,7 @@ public function hasException() /** * Gets the exception. * - * @return \Exception The exception + * @return \Exception|FlattenException */ public function getException() { diff --git a/src/Symfony/Component/HttpKernel/DataCollector/LoggerDataCollector.php b/src/Symfony/Component/HttpKernel/DataCollector/LoggerDataCollector.php index a8dda9f671d17..99a9cf23e8398 100644 --- a/src/Symfony/Component/HttpKernel/DataCollector/LoggerDataCollector.php +++ b/src/Symfony/Component/HttpKernel/DataCollector/LoggerDataCollector.php @@ -72,11 +72,6 @@ public function lateCollect() } } - /** - * Gets the logs. - * - * @return array An array of logs - */ public function getLogs() { return isset($this->data['logs']) ? $this->data['logs'] : []; diff --git a/src/Symfony/Component/HttpKernel/DataCollector/TimeDataCollector.php b/src/Symfony/Component/HttpKernel/DataCollector/TimeDataCollector.php index d070e838685d4..cb490c2bb37d0 100644 --- a/src/Symfony/Component/HttpKernel/DataCollector/TimeDataCollector.php +++ b/src/Symfony/Component/HttpKernel/DataCollector/TimeDataCollector.php @@ -132,7 +132,7 @@ public function getInitTime() /** * Gets the request time. * - * @return int The time + * @return float */ public function getStartTime() { diff --git a/src/Symfony/Component/HttpKernel/HttpCache/AbstractSurrogate.php b/src/Symfony/Component/HttpKernel/HttpCache/AbstractSurrogate.php index 1d62f32e67fb0..9b4541793f05f 100644 --- a/src/Symfony/Component/HttpKernel/HttpCache/AbstractSurrogate.php +++ b/src/Symfony/Component/HttpKernel/HttpCache/AbstractSurrogate.php @@ -110,7 +110,7 @@ public function handle(HttpCache $cache, $uri, $alt, $ignoreErrors) } } - return null; + return ''; } /** diff --git a/src/Symfony/Component/HttpKernel/HttpCache/Ssi.php b/src/Symfony/Component/HttpKernel/HttpCache/Ssi.php index 707abca5eb7ac..40aac64f2a132 100644 --- a/src/Symfony/Component/HttpKernel/HttpCache/Ssi.php +++ b/src/Symfony/Component/HttpKernel/HttpCache/Ssi.php @@ -95,6 +95,6 @@ public function process(Request $request, Response $response) // remove SSI/1.0 from the Surrogate-Control header $this->removeFromControl($response); - return null; + return $response; } } diff --git a/src/Symfony/Component/HttpKernel/Kernel.php b/src/Symfony/Component/HttpKernel/Kernel.php index a7d7977db460c..80c0e8cceb9f9 100644 --- a/src/Symfony/Component/HttpKernel/Kernel.php +++ b/src/Symfony/Component/HttpKernel/Kernel.php @@ -206,7 +206,7 @@ public function handle(Request $request, $type = HttpKernelInterface::MASTER_REQ /** * Gets a HTTP kernel from the container. * - * @return HttpKernel + * @return HttpKernelInterface */ protected function getHttpKernel() { @@ -425,7 +425,7 @@ public function setAnnotatedClassCache(array $annotatedClasses) */ public function getStartTime() { - return $this->debug ? $this->startTime : -INF; + return $this->debug && null !== $this->startTime ? $this->startTime : -INF; } /** diff --git a/src/Symfony/Component/HttpKernel/KernelInterface.php b/src/Symfony/Component/HttpKernel/KernelInterface.php index d624d1219d0f7..2445bbb43a4ca 100644 --- a/src/Symfony/Component/HttpKernel/KernelInterface.php +++ b/src/Symfony/Component/HttpKernel/KernelInterface.php @@ -138,7 +138,7 @@ public function getContainer(); /** * Gets the request start time (not available if debug is disabled). * - * @return int The request start timestamp + * @return float The request start timestamp */ public function getStartTime(); diff --git a/src/Symfony/Component/HttpKernel/Profiler/Profile.php b/src/Symfony/Component/HttpKernel/Profiler/Profile.php index c4490bc7a6929..3665545d234d5 100644 --- a/src/Symfony/Component/HttpKernel/Profiler/Profile.php +++ b/src/Symfony/Component/HttpKernel/Profiler/Profile.php @@ -102,7 +102,7 @@ public function getParentToken() /** * Returns the IP. * - * @return string The IP + * @return string|null The IP */ public function getIp() { @@ -122,7 +122,7 @@ public function setIp($ip) /** * Returns the request method. * - * @return string The request method + * @return string|null The request method */ public function getMethod() { @@ -137,13 +137,16 @@ public function setMethod($method) /** * Returns the URL. * - * @return string The URL + * @return string|null The URL */ public function getUrl() { return $this->url; } + /** + * @param string $url + */ public function setUrl($url) { $this->url = $url; @@ -180,7 +183,7 @@ public function setStatusCode($statusCode) } /** - * @return int + * @return int|null */ public function getStatusCode() { diff --git a/src/Symfony/Component/HttpKernel/Profiler/Profiler.php b/src/Symfony/Component/HttpKernel/Profiler/Profiler.php index 0a078e7b98686..c510afa3e0a6a 100644 --- a/src/Symfony/Component/HttpKernel/Profiler/Profiler.php +++ b/src/Symfony/Component/HttpKernel/Profiler/Profiler.php @@ -65,12 +65,12 @@ public function enable() /** * Loads the Profile for the given Response. * - * @return Profile|false A Profile instance + * @return Profile|null A Profile instance */ public function loadProfileFromResponse(Response $response) { if (!$token = $response->headers->get('X-Debug-Token')) { - return false; + return null; } return $this->loadProfile($token); @@ -81,7 +81,7 @@ public function loadProfileFromResponse(Response $response) * * @param string $token A token * - * @return Profile A Profile instance + * @return Profile|null A Profile instance */ public function loadProfile($token) { diff --git a/src/Symfony/Component/HttpKernel/Tests/Bundle/BundleTest.php b/src/Symfony/Component/HttpKernel/Tests/Bundle/BundleTest.php index a9ad235c3ae34..6803579c61a4a 100644 --- a/src/Symfony/Component/HttpKernel/Tests/Bundle/BundleTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/Bundle/BundleTest.php @@ -49,6 +49,9 @@ public function testRegisterCommands() $this->assertNull($bundle2->registerCommands($app)); } + /** + * @group legacy + */ public function testGetContainerExtensionWithInvalidClass() { $this->expectException('LogicException'); diff --git a/src/Symfony/Component/HttpKernel/Tests/DataCollector/LoggerDataCollectorTest.php b/src/Symfony/Component/HttpKernel/Tests/DataCollector/LoggerDataCollectorTest.php index ace4628e09f93..8b7fbe2a19ea6 100644 --- a/src/Symfony/Component/HttpKernel/Tests/DataCollector/LoggerDataCollectorTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/DataCollector/LoggerDataCollectorTest.php @@ -23,7 +23,7 @@ public function testCollectWithUnexpectedFormat() ->getMockBuilder('Symfony\Component\HttpKernel\Log\DebugLoggerInterface') ->setMethods(['countErrors', 'getLogs', 'clear']) ->getMock(); - $logger->expects($this->once())->method('countErrors')->willReturn('foo'); + $logger->expects($this->once())->method('countErrors')->willReturn(123); $logger->expects($this->exactly(2))->method('getLogs')->willReturn([]); $c = new LoggerDataCollector($logger, __DIR__.'/'); diff --git a/src/Symfony/Component/HttpKernel/Tests/DataCollector/TimeDataCollectorTest.php b/src/Symfony/Component/HttpKernel/Tests/DataCollector/TimeDataCollectorTest.php index e044e5e1add53..9de9eb599ad61 100644 --- a/src/Symfony/Component/HttpKernel/Tests/DataCollector/TimeDataCollectorTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/DataCollector/TimeDataCollectorTest.php @@ -44,7 +44,7 @@ public function testCollect() $this->assertEquals(0, $c->getStartTime()); $kernel = $this->getMockBuilder('Symfony\Component\HttpKernel\KernelInterface')->getMock(); - $kernel->expects($this->once())->method('getStartTime')->willReturn(123456); + $kernel->expects($this->once())->method('getStartTime')->willReturn(123456.0); $c = new TimeDataCollector($kernel); $request = new Request(); diff --git a/src/Symfony/Component/HttpKernel/Tests/KernelTest.php b/src/Symfony/Component/HttpKernel/Tests/KernelTest.php index a5a1919d54cc1..10acb00a9654a 100644 --- a/src/Symfony/Component/HttpKernel/Tests/KernelTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/KernelTest.php @@ -22,6 +22,7 @@ use Symfony\Component\HttpKernel\Config\EnvParametersResource; use Symfony\Component\HttpKernel\DependencyInjection\ResettableServicePass; use Symfony\Component\HttpKernel\DependencyInjection\ServicesResetter; +use Symfony\Component\HttpKernel\HttpKernel; use Symfony\Component\HttpKernel\HttpKernelInterface; use Symfony\Component\HttpKernel\Kernel; use Symfony\Component\HttpKernel\Tests\Fixtures\KernelForOverrideName; @@ -720,8 +721,8 @@ public function testInitializeBundleThrowsExceptionWhenRegisteringTwoBundlesWith { $this->expectException('LogicException'); $this->expectExceptionMessage('Trying to register two bundles with the same name "DuplicateName"'); - $fooBundle = $this->getBundle(null, null, 'FooBundle', 'DuplicateName'); - $barBundle = $this->getBundle(null, null, 'BarBundle', 'DuplicateName'); + $fooBundle = $this->getBundle(__DIR__.'/Fixtures/FooBundle', null, 'FooBundle', 'DuplicateName'); + $barBundle = $this->getBundle(__DIR__.'/Fixtures/BarBundle', null, 'BarBundle', 'DuplicateName'); $kernel = $this->getKernel([], [$fooBundle, $barBundle]); $kernel->boot(); diff --git a/src/Symfony/Component/HttpKernel/Tests/Logger.php b/src/Symfony/Component/HttpKernel/Tests/Logger.php index 8ae756132cc4d..47529a2d34854 100644 --- a/src/Symfony/Component/HttpKernel/Tests/Logger.php +++ b/src/Symfony/Component/HttpKernel/Tests/Logger.php @@ -22,6 +22,9 @@ public function __construct() $this->clear(); } + /** + * @return array + */ public function getLogs($level = false) { return false === $level ? $this->logs : $this->logs[$level]; diff --git a/src/Symfony/Component/Intl/DateFormatter/IntlDateFormatter.php b/src/Symfony/Component/Intl/DateFormatter/IntlDateFormatter.php index 57a4d99120d8b..59b0db05fd605 100644 --- a/src/Symfony/Component/Intl/DateFormatter/IntlDateFormatter.php +++ b/src/Symfony/Component/Intl/DateFormatter/IntlDateFormatter.php @@ -415,7 +415,7 @@ public function localtime($value, &$position = 0) * contain -1 otherwise it will contain the position at which parsing * ended. If $parse_pos > strlen($value), the parse fails immediately. * - * @return int Parsed value as a timestamp + * @return int|false Parsed value as a timestamp * * @see https://php.net/intldateformatter.parse * diff --git a/src/Symfony/Component/Process/Process.php b/src/Symfony/Component/Process/Process.php index 9da1acefa4432..3b45bd8c5e5e4 100644 --- a/src/Symfony/Component/Process/Process.php +++ b/src/Symfony/Component/Process/Process.php @@ -71,7 +71,7 @@ class Process implements \IteratorAggregate private $status = self::STATUS_READY; private $incrementalOutputOffset = 0; private $incrementalErrorOutputOffset = 0; - private $tty; + private $tty = false; private $pty; private $inheritEnv = false; @@ -864,7 +864,7 @@ public function getStatus() * @param int|float $timeout The timeout in seconds * @param int $signal A POSIX signal to send in case the process has not stop at timeout, default is SIGKILL (9) * - * @return int The exit-code of the process + * @return int|null The exit-code of the process or null if it's not running */ public function stop($timeout = 10, $signal = null) { diff --git a/src/Symfony/Component/PropertyAccess/PropertyPathBuilder.php b/src/Symfony/Component/PropertyAccess/PropertyPathBuilder.php index b25d70b12e862..d09a14b3fc408 100644 --- a/src/Symfony/Component/PropertyAccess/PropertyPathBuilder.php +++ b/src/Symfony/Component/PropertyAccess/PropertyPathBuilder.php @@ -193,7 +193,7 @@ public function getLength() /** * Returns the current property path. * - * @return PropertyPathInterface The constructed property path + * @return PropertyPathInterface|null The constructed property path */ public function getPropertyPath() { diff --git a/src/Symfony/Component/PropertyAccess/PropertyPathInterface.php b/src/Symfony/Component/PropertyAccess/PropertyPathInterface.php index ecaffac79a8de..56d70aa5294f4 100644 --- a/src/Symfony/Component/PropertyAccess/PropertyPathInterface.php +++ b/src/Symfony/Component/PropertyAccess/PropertyPathInterface.php @@ -40,7 +40,7 @@ public function getLength(); * * If this property path only contains one item, null is returned. * - * @return PropertyPath|null The parent path or null + * @return self|null The parent path or null */ public function getParent(); diff --git a/src/Symfony/Component/PropertyInfo/Tests/Fixtures/NullExtractor.php b/src/Symfony/Component/PropertyInfo/Tests/Fixtures/NullExtractor.php index c6a1785f4925e..e9fa800133ec3 100644 --- a/src/Symfony/Component/PropertyInfo/Tests/Fixtures/NullExtractor.php +++ b/src/Symfony/Component/PropertyInfo/Tests/Fixtures/NullExtractor.php @@ -30,6 +30,8 @@ public function getShortDescription($class, $property, array $context = []) { $this->assertIsString($class); $this->assertIsString($property); + + return null; } /** @@ -39,6 +41,8 @@ public function getLongDescription($class, $property, array $context = []) { $this->assertIsString($class); $this->assertIsString($property); + + return null; } /** @@ -48,6 +52,8 @@ public function getTypes($class, $property, array $context = []) { $this->assertIsString($class); $this->assertIsString($property); + + return null; } /** @@ -57,6 +63,8 @@ public function isReadable($class, $property, array $context = []) { $this->assertIsString($class); $this->assertIsString($property); + + return null; } /** @@ -66,6 +74,8 @@ public function isWritable($class, $property, array $context = []) { $this->assertIsString($class); $this->assertIsString($property); + + return null; } /** @@ -74,6 +84,8 @@ public function isWritable($class, $property, array $context = []) public function getProperties($class, array $context = []) { $this->assertIsString($class); + + return null; } private function assertIsString($string) diff --git a/src/Symfony/Component/Routing/Router.php b/src/Symfony/Component/Routing/Router.php index 27c32e14ae8c6..a85fa6d765a7f 100644 --- a/src/Symfony/Component/Routing/Router.php +++ b/src/Symfony/Component/Routing/Router.php @@ -263,9 +263,9 @@ public function matchRequest(Request $request) } /** - * Gets the UrlMatcher instance associated with this Router. + * Gets the UrlMatcher or RequestMatcher instance associated with this Router. * - * @return UrlMatcherInterface A UrlMatcherInterface instance + * @return UrlMatcherInterface|RequestMatcherInterface */ public function getMatcher() { diff --git a/src/Symfony/Component/Security/Core/Tests/Authentication/Provider/DaoAuthenticationProviderTest.php b/src/Symfony/Component/Security/Core/Tests/Authentication/Provider/DaoAuthenticationProviderTest.php index d9f8a54a75453..bb0576fb4c1a2 100644 --- a/src/Symfony/Component/Security/Core/Tests/Authentication/Provider/DaoAuthenticationProviderTest.php +++ b/src/Symfony/Component/Security/Core/Tests/Authentication/Provider/DaoAuthenticationProviderTest.php @@ -18,6 +18,9 @@ class DaoAuthenticationProviderTest extends TestCase { + /** + * @group legacy + */ public function testRetrieveUserWhenProviderDoesNotReturnAnUserInterface() { $this->expectException('Symfony\Component\Security\Core\Exception\AuthenticationServiceException'); diff --git a/src/Symfony/Component/Security/Core/Tests/Authentication/Provider/UserAuthenticationProviderTest.php b/src/Symfony/Component/Security/Core/Tests/Authentication/Provider/UserAuthenticationProviderTest.php index 9329e2441adb2..7b984e304d814 100644 --- a/src/Symfony/Component/Security/Core/Tests/Authentication/Provider/UserAuthenticationProviderTest.php +++ b/src/Symfony/Component/Security/Core/Tests/Authentication/Provider/UserAuthenticationProviderTest.php @@ -62,6 +62,9 @@ public function testAuthenticateWhenUsernameIsNotFoundAndHideIsTrue() $provider->authenticate($this->getSupportedToken()); } + /** + * @group legacy + */ public function testAuthenticateWhenProviderDoesNotReturnAnUserInterface() { $this->expectException('Symfony\Component\Security\Core\Exception\AuthenticationServiceException'); diff --git a/src/Symfony/Component/Security/Guard/Tests/Provider/GuardAuthenticationProviderTest.php b/src/Symfony/Component/Security/Guard/Tests/Provider/GuardAuthenticationProviderTest.php index bc7c69b6b3d20..2c4faaa31a90b 100644 --- a/src/Symfony/Component/Security/Guard/Tests/Provider/GuardAuthenticationProviderTest.php +++ b/src/Symfony/Component/Security/Guard/Tests/Provider/GuardAuthenticationProviderTest.php @@ -12,10 +12,10 @@ namespace Symfony\Component\Security\Guard\Tests\Provider; use PHPUnit\Framework\TestCase; -use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\User\UserInterface; use Symfony\Component\Security\Guard\AuthenticatorInterface; use Symfony\Component\Security\Guard\Provider\GuardAuthenticationProvider; +use Symfony\Component\Security\Guard\Token\GuardTokenInterface; use Symfony\Component\Security\Guard\Token\PostAuthenticationGuardToken; use Symfony\Component\Security\Guard\Token\PreAuthenticationGuardToken; @@ -68,7 +68,7 @@ public function testAuthenticate() ->with($enteredCredentials, $mockedUser) // authentication works! ->willReturn(true); - $authedToken = $this->getMockBuilder(TokenInterface::class)->getMock(); + $authedToken = $this->getMockBuilder(GuardTokenInterface::class)->getMock(); $authenticatorB->expects($this->once()) ->method('createAuthenticatedToken') ->with($mockedUser, $providerKey) @@ -130,7 +130,7 @@ public function testLegacyAuthenticate() ->with($enteredCredentials, $mockedUser) // authentication works! ->willReturn(true); - $authedToken = $this->getMockBuilder('Symfony\Component\Security\Core\Authentication\Token\TokenInterface')->getMock(); + $authedToken = $this->getMockBuilder(GuardTokenInterface::class)->getMock(); $authenticatorB->expects($this->once()) ->method('createAuthenticatedToken') ->with($mockedUser, $providerKey) diff --git a/src/Symfony/Component/Security/Http/Authentication/AuthenticationSuccessHandlerInterface.php b/src/Symfony/Component/Security/Http/Authentication/AuthenticationSuccessHandlerInterface.php index ce8c27ba7db37..b1e6e27186951 100644 --- a/src/Symfony/Component/Security/Http/Authentication/AuthenticationSuccessHandlerInterface.php +++ b/src/Symfony/Component/Security/Http/Authentication/AuthenticationSuccessHandlerInterface.php @@ -31,7 +31,7 @@ interface AuthenticationSuccessHandlerInterface * is called by authentication listeners inheriting from * AbstractAuthenticationListener. * - * @return Response never null + * @return Response */ public function onAuthenticationSuccess(Request $request, TokenInterface $token); } diff --git a/src/Symfony/Component/Security/Http/RememberMe/RememberMeServicesInterface.php b/src/Symfony/Component/Security/Http/RememberMe/RememberMeServicesInterface.php index fe8b0faee5452..ae52591da0ad1 100644 --- a/src/Symfony/Component/Security/Http/RememberMe/RememberMeServicesInterface.php +++ b/src/Symfony/Component/Security/Http/RememberMe/RememberMeServicesInterface.php @@ -46,7 +46,7 @@ interface RememberMeServicesInterface * make sure to throw an AuthenticationException as this will consequentially * result in a call to loginFail() and therefore an invalidation of the cookie. * - * @return TokenInterface + * @return TokenInterface|null */ public function autoLogin(Request $request); diff --git a/src/Symfony/Component/Security/Http/Tests/Authentication/DefaultAuthenticationFailureHandlerTest.php b/src/Symfony/Component/Security/Http/Tests/Authentication/DefaultAuthenticationFailureHandlerTest.php index a71ad179a3551..6f1332344fa78 100644 --- a/src/Symfony/Component/Security/Http/Tests/Authentication/DefaultAuthenticationFailureHandlerTest.php +++ b/src/Symfony/Component/Security/Http/Tests/Authentication/DefaultAuthenticationFailureHandlerTest.php @@ -12,6 +12,7 @@ namespace Symfony\Component\Security\Http\Tests\Authentication; use PHPUnit\Framework\TestCase; +use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\HttpKernelInterface; use Symfony\Component\Security\Core\Security; @@ -62,7 +63,7 @@ public function testForward() public function testRedirect() { - $response = new Response(); + $response = new RedirectResponse('/login'); $this->httpUtils->expects($this->once()) ->method('createRedirectResponse')->with($this->request, '/login') ->willReturn($response); diff --git a/src/Symfony/Component/Security/Http/Tests/EntryPoint/FormAuthenticationEntryPointTest.php b/src/Symfony/Component/Security/Http/Tests/EntryPoint/FormAuthenticationEntryPointTest.php index 999ff728bf461..05c5930ec8d79 100644 --- a/src/Symfony/Component/Security/Http/Tests/EntryPoint/FormAuthenticationEntryPointTest.php +++ b/src/Symfony/Component/Security/Http/Tests/EntryPoint/FormAuthenticationEntryPointTest.php @@ -12,6 +12,7 @@ namespace Symfony\Component\Security\Http\Tests\EntryPoint; use PHPUnit\Framework\TestCase; +use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\HttpKernelInterface; use Symfony\Component\Security\Http\EntryPoint\FormAuthenticationEntryPoint; @@ -21,7 +22,7 @@ class FormAuthenticationEntryPointTest extends TestCase public function testStart() { $request = $this->getMockBuilder('Symfony\Component\HttpFoundation\Request')->disableOriginalConstructor()->disableOriginalClone()->getMock(); - $response = new Response(); + $response = new RedirectResponse('/the/login/path'); $httpKernel = $this->getMockBuilder('Symfony\Component\HttpKernel\HttpKernelInterface')->getMock(); $httpUtils = $this->getMockBuilder('Symfony\Component\Security\Http\HttpUtils')->getMock(); diff --git a/src/Symfony/Component/Security/Http/Tests/Firewall/ExceptionListenerTest.php b/src/Symfony/Component/Security/Http/Tests/Firewall/ExceptionListenerTest.php index 1dda0ab968c78..aff73429ae4ba 100644 --- a/src/Symfony/Component/Security/Http/Tests/Firewall/ExceptionListenerTest.php +++ b/src/Symfony/Component/Security/Http/Tests/Firewall/ExceptionListenerTest.php @@ -72,6 +72,9 @@ public function getAuthenticationExceptionProvider() ]; } + /** + * @group legacy + */ public function testExceptionWhenEntryPointReturnsBadValue() { $event = $this->createEvent(new AuthenticationException()); diff --git a/src/Symfony/Component/Security/Http/Tests/Firewall/LogoutListenerTest.php b/src/Symfony/Component/Security/Http/Tests/Firewall/LogoutListenerTest.php index ad630c552eefb..2b6e662700da3 100644 --- a/src/Symfony/Component/Security/Http/Tests/Firewall/LogoutListenerTest.php +++ b/src/Symfony/Component/Security/Http/Tests/Firewall/LogoutListenerTest.php @@ -122,6 +122,9 @@ public function testHandleMatchedPathWithoutSuccessHandlerAndCsrfValidation() $listener->handle($event); } + /** + * @group legacy + */ public function testSuccessHandlerReturnsNonResponse() { $this->expectException('RuntimeException'); diff --git a/src/Symfony/Component/Security/Http/Tests/Firewall/UsernamePasswordFormAuthenticationListenerTest.php b/src/Symfony/Component/Security/Http/Tests/Firewall/UsernamePasswordFormAuthenticationListenerTest.php index dc75a8efd75bd..c5a23be27cb7e 100644 --- a/src/Symfony/Component/Security/Http/Tests/Firewall/UsernamePasswordFormAuthenticationListenerTest.php +++ b/src/Symfony/Component/Security/Http/Tests/Firewall/UsernamePasswordFormAuthenticationListenerTest.php @@ -12,6 +12,7 @@ namespace Symfony\Component\Security\Tests\Http\Firewall; use PHPUnit\Framework\TestCase; +use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Event\GetResponseEvent; @@ -40,6 +41,10 @@ public function testHandleWhenUsernameLength($username, $ok) ->method('checkRequestPath') ->willReturn(true) ; + $httpUtils + ->method('createRedirectResponse') + ->willReturn(new RedirectResponse('/hello')) + ; $failureHandler = $this->getMockBuilder('Symfony\Component\Security\Http\Authentication\AuthenticationFailureHandlerInterface')->getMock(); $failureHandler @@ -52,7 +57,7 @@ public function testHandleWhenUsernameLength($username, $ok) $authenticationManager ->expects($ok ? $this->once() : $this->never()) ->method('authenticate') - ->willReturn(new Response()) + ->willReturnArgument(0) ; $listener = new UsernamePasswordFormAuthenticationListener( @@ -61,7 +66,7 @@ public function testHandleWhenUsernameLength($username, $ok) $this->getMockBuilder('Symfony\Component\Security\Http\Session\SessionAuthenticationStrategyInterface')->getMock(), $httpUtils, 'TheProviderKey', - $this->getMockBuilder('Symfony\Component\Security\Http\Authentication\AuthenticationSuccessHandlerInterface')->getMock(), + new DefaultAuthenticationSuccessHandler($httpUtils), $failureHandler, ['require_previous_session' => false] ); diff --git a/src/Symfony/Component/Security/Http/Tests/Logout/DefaultLogoutSuccessHandlerTest.php b/src/Symfony/Component/Security/Http/Tests/Logout/DefaultLogoutSuccessHandlerTest.php index 926f8cc4b23af..d0c6383236805 100644 --- a/src/Symfony/Component/Security/Http/Tests/Logout/DefaultLogoutSuccessHandlerTest.php +++ b/src/Symfony/Component/Security/Http/Tests/Logout/DefaultLogoutSuccessHandlerTest.php @@ -12,7 +12,7 @@ namespace Symfony\Component\Security\Http\Tests\Logout; use PHPUnit\Framework\TestCase; -use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\Security\Http\Logout\DefaultLogoutSuccessHandler; class DefaultLogoutSuccessHandlerTest extends TestCase @@ -20,7 +20,7 @@ class DefaultLogoutSuccessHandlerTest extends TestCase public function testLogout() { $request = $this->getMockBuilder('Symfony\Component\HttpFoundation\Request')->getMock(); - $response = new Response(); + $response = new RedirectResponse('/dashboard'); $httpUtils = $this->getMockBuilder('Symfony\Component\Security\Http\HttpUtils')->getMock(); $httpUtils->expects($this->once()) diff --git a/src/Symfony/Component/Security/Http/Tests/RememberMe/AbstractRememberMeServicesTest.php b/src/Symfony/Component/Security/Http/Tests/RememberMe/AbstractRememberMeServicesTest.php index c476e65403c2e..8dc2042f12c09 100644 --- a/src/Symfony/Component/Security/Http/Tests/RememberMe/AbstractRememberMeServicesTest.php +++ b/src/Symfony/Component/Security/Http/Tests/RememberMe/AbstractRememberMeServicesTest.php @@ -39,6 +39,9 @@ public function testAutoLoginReturnsNullWhenNoCookie() $this->assertNull($service->autoLogin(new Request())); } + /** + * @group legacy + */ public function testAutoLoginThrowsExceptionWhenImplementationDoesNotReturnUserInterface() { $this->expectException('RuntimeException'); diff --git a/src/Symfony/Component/Serializer/SerializerInterface.php b/src/Symfony/Component/Serializer/SerializerInterface.php index aca146c156a07..aa00f2222b847 100644 --- a/src/Symfony/Component/Serializer/SerializerInterface.php +++ b/src/Symfony/Component/Serializer/SerializerInterface.php @@ -36,7 +36,7 @@ public function serialize($data, $format, array $context = []); * @param string $type * @param string $format * - * @return object + * @return object|array */ public function deserialize($data, $type, $format, array $context = []); } diff --git a/src/Symfony/Component/Templating/PhpEngine.php b/src/Symfony/Component/Templating/PhpEngine.php index f67c29d074b3c..3049212bdcd6e 100644 --- a/src/Symfony/Component/Templating/PhpEngine.php +++ b/src/Symfony/Component/Templating/PhpEngine.php @@ -301,7 +301,7 @@ public function extend($template) * @param mixed $value A variable to escape * @param string $context The context name * - * @return string The escaped value + * @return mixed The escaped value */ public function escape($value, $context = 'html') { diff --git a/src/Symfony/Component/Translation/DataCollector/TranslationDataCollector.php b/src/Symfony/Component/Translation/DataCollector/TranslationDataCollector.php index 7aabcb24d5591..fc713463a0bc3 100644 --- a/src/Symfony/Component/Translation/DataCollector/TranslationDataCollector.php +++ b/src/Symfony/Component/Translation/DataCollector/TranslationDataCollector.php @@ -61,7 +61,7 @@ public function reset() } /** - * @return array + * @return array|Data */ public function getMessages() { diff --git a/src/Symfony/Component/Translation/Extractor/AbstractFileExtractor.php b/src/Symfony/Component/Translation/Extractor/AbstractFileExtractor.php index 08a27fb07c980..2da1fff6e6249 100644 --- a/src/Symfony/Component/Translation/Extractor/AbstractFileExtractor.php +++ b/src/Symfony/Component/Translation/Extractor/AbstractFileExtractor.php @@ -21,9 +21,9 @@ abstract class AbstractFileExtractor { /** - * @param string|array $resource Files, a file or a directory + * @param string|iterable $resource Files, a file or a directory * - * @return array + * @return iterable */ protected function extractFiles($resource) { @@ -79,7 +79,7 @@ abstract protected function canBeExtracted($file); /** * @param string|array $resource Files, a file or a directory * - * @return array files to be extracted + * @return iterable files to be extracted */ abstract protected function extractFromDirectory($resource); } diff --git a/src/Symfony/Component/Translation/Extractor/PhpExtractor.php b/src/Symfony/Component/Translation/Extractor/PhpExtractor.php index 539f78ec85857..ec2445d951901 100644 --- a/src/Symfony/Component/Translation/Extractor/PhpExtractor.php +++ b/src/Symfony/Component/Translation/Extractor/PhpExtractor.php @@ -103,7 +103,7 @@ public function setPrefix($prefix) * * @param mixed $token * - * @return string + * @return string|null */ protected function normalizeToken($token) { @@ -257,9 +257,7 @@ protected function canBeExtracted($file) } /** - * @param string|array $directory - * - * @return array + * {@inheritdoc} */ protected function extractFromDirectory($directory) { diff --git a/src/Symfony/Component/Translation/Loader/YamlFileLoader.php b/src/Symfony/Component/Translation/Loader/YamlFileLoader.php index 771e6e7b7b29b..8d9aa6f72ae5c 100644 --- a/src/Symfony/Component/Translation/Loader/YamlFileLoader.php +++ b/src/Symfony/Component/Translation/Loader/YamlFileLoader.php @@ -52,6 +52,10 @@ protected function loadResource($resource) restore_error_handler(); } - return $messages; + if (null !== $messages && !\is_array($messages)) { + throw new InvalidResourceException(sprintf('Unable to load file "%s".', $resource)); + } + + return $messages ?: []; } } diff --git a/src/Symfony/Component/Validator/Context/ExecutionContextInterface.php b/src/Symfony/Component/Validator/Context/ExecutionContextInterface.php index 2ab625b1561a1..09137f8511afa 100644 --- a/src/Symfony/Component/Validator/Context/ExecutionContextInterface.php +++ b/src/Symfony/Component/Validator/Context/ExecutionContextInterface.php @@ -283,7 +283,7 @@ public function getMetadata(); /** * Returns the validation group that is currently being validated. * - * @return string The current validation group + * @return string|null The current validation group */ public function getGroup(); diff --git a/src/Symfony/Component/VarDumper/Dumper/AbstractDumper.php b/src/Symfony/Component/VarDumper/Dumper/AbstractDumper.php index 4eb8e6f0c1b6d..87195bb6a1b12 100644 --- a/src/Symfony/Component/VarDumper/Dumper/AbstractDumper.php +++ b/src/Symfony/Component/VarDumper/Dumper/AbstractDumper.php @@ -35,7 +35,7 @@ abstract class AbstractDumper implements DataDumperInterface, DumperInterface protected $indentPad = ' '; protected $flags; - private $charset; + private $charset = ''; /** * @param callable|resource|string|null $output A line dumper callable, an opened stream or an output path, defaults to static::$defaultOutput diff --git a/src/Symfony/Component/Workflow/Tests/EventListener/GuardListenerTest.php b/src/Symfony/Component/Workflow/Tests/EventListener/GuardListenerTest.php index d27c63e5275c7..f2c65192d65eb 100644 --- a/src/Symfony/Component/Workflow/Tests/EventListener/GuardListenerTest.php +++ b/src/Symfony/Component/Workflow/Tests/EventListener/GuardListenerTest.php @@ -8,6 +8,9 @@ use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface; use Symfony\Component\Security\Core\Role\Role; +use Symfony\Component\Security\Core\Role\RoleHierarchy; +use Symfony\Component\Validator\ConstraintViolation; +use Symfony\Component\Validator\ConstraintViolationList; use Symfony\Component\Validator\Validator\ValidatorInterface; use Symfony\Component\Workflow\Event\GuardEvent; use Symfony\Component\Workflow\EventListener\ExpressionLanguage; @@ -41,7 +44,8 @@ protected function setUp() $this->authenticationChecker = $this->getMockBuilder(AuthorizationCheckerInterface::class)->getMock(); $trustResolver = $this->getMockBuilder(AuthenticationTrustResolverInterface::class)->getMock(); $this->validator = $this->getMockBuilder(ValidatorInterface::class)->getMock(); - $this->listener = new GuardListener($this->configuration, $expressionLanguage, $tokenStorage, $this->authenticationChecker, $trustResolver, null, $this->validator); + $roleHierarchy = new RoleHierarchy([]); + $this->listener = new GuardListener($this->configuration, $expressionLanguage, $tokenStorage, $this->authenticationChecker, $trustResolver, $roleHierarchy, $this->validator); } protected function tearDown() @@ -170,7 +174,7 @@ private function configureValidator($isUsed, $valid = true) $this->validator ->expects($this->once()) ->method('validate') - ->willReturn($valid ? [] : ['a violation']) + ->willReturn(new ConstraintViolationList($valid ? [] : [new ConstraintViolation('a violation', null, [], '', null, '')])) ; } } pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy