bug #17818 [Console] InvalidArgumentException is thrown under wrong condition (robinkanters)

This PR was submitted for the master branch but it was merged into the 2.7 branch instead (closes #17818).

Discussion
----------

[Console] InvalidArgumentException is thrown under wrong condition

| Q             | A
| ------------- | ---
| Bug fix?      | yes
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | N/A
| License       | MIT
| Doc PR        | no

When an object is passed to `setAutocompleterValues` that implements `\Countable` and `\Traversable`, an `InvalidArgumentException` is thrown, even though its message says that the argument should implement both of those interfaces.

Instead, the exception should be thrown if the parameter fails to implement either `\Countable` or `\Traversable`, like the exception message says.

_Disclaimer: I've been looking at this line for 10min, and I've become convinced it should be changed according to my PR, but I could be wrong._

Commits
-------

8eea65e The exception should be thrown if an object doesn't implement Traversable AND doesn't implement Countable, not when it doesn't implement Traversable but DOES implement Countable
This commit is contained in:
Fabien Potencier 2016-02-17 07:13:05 +01:00
commit 2c59be51df

View File

@ -140,7 +140,7 @@ class Question
}
if (null !== $values && !is_array($values)) {
if (!$values instanceof \Traversable || $values instanceof \Countable) {
if (!$values instanceof \Traversable || !$values instanceof \Countable) {
throw new \InvalidArgumentException('Autocompleter values can be either an array, `null` or an object implementing both `Countable` and `Traversable` interfaces.');
}
}