Skip to content

Commit

Permalink
Fixed "in" operator for resources and strings
Browse files Browse the repository at this point in the history
  • Loading branch information
hason committed Oct 22, 2014
1 parent 78e59ef commit 8dfeda0
Show file tree
Hide file tree
Showing 2 changed files with 84 additions and 10 deletions.
12 changes: 4 additions & 8 deletions lib/Twig/Extension/Core.php
Expand Up @@ -934,15 +934,11 @@ function twig_sort_filter($array)
function twig_in_filter($value, $compare)
{
if (is_array($compare)) {
return in_array($value, $compare, is_object($value));
} elseif (is_string($compare)) {
if (!strlen($value)) {
return empty($compare);
}

return false !== strpos($compare, (string) $value);
return in_array($value, $compare, is_object($value) || is_resource($value));
} elseif (is_string($compare) && (is_string($value) || is_int($value) || is_float($value))) {
return '' === $value || false !== strpos($compare, (string) $value);
} elseif ($compare instanceof Traversable) {
return in_array($value, iterator_to_array($compare, false), is_object($value));
return in_array($value, iterator_to_array($compare, false), is_object($value) || is_resource($value));
}

return false;
Expand Down
82 changes: 80 additions & 2 deletions test/Twig/Tests/Fixtures/tests/in.test
Expand Up @@ -18,7 +18,7 @@ TRUE
{% if 'c' not in bar %}
TRUE
{% endif %}
{% if '' not in bar %}
{% if '' in bar %}
TRUE
{% endif %}
{% if '' in '' %}
Expand All @@ -33,8 +33,47 @@ TRUE
{% if '0' in '0' %}
TRUE
{% endif %}

{{ false in [0, 1] ? 'TRUE' : 'FALSE' }}
{{ true in [0, 1] ? 'TRUE' : 'FALSE' }}
{{ '0' in [0, 1] ? 'TRUE' : 'FALSE' }}
{{ '' in [0, 1] ? 'TRUE' : 'FALSE' }}
{{ 0 in ['', 1] ? 'TRUE' : 'FALSE' }}

{{ '' in 'foo' ? 'TRUE' : 'FALSE' }}
{{ 0 in 'foo' ? 'TRUE' : 'FALSE' }}
{{ false in 'foo' ? 'TRUE' : 'FALSE' }}
{{ false in '100' ? 'TRUE' : 'FALSE' }}
{{ true in '100' ? 'TRUE' : 'FALSE' }}

{{ [] in [true, false] ? 'TRUE' : 'FALSE' }}
{{ [] in [true, ''] ? 'TRUE' : 'FALSE' }}
{{ [] in [true, []] ? 'TRUE' : 'FALSE' }}

{{ resource in 'foo'~resource ? 'TRUE' : 'FALSE' }}
{{ object in 'stdClass' ? 'TRUE' : 'FALSE' }}
{{ [] in 'Array' ? 'TRUE' : 'FALSE' }}
{{ dir_object in 'foo'~dir_object ? 'TRUE' : 'FALSE' }}

{{ ''~resource in resource ? 'TRUE' : 'FALSE' }}
{{ 'stdClass' in object ? 'TRUE' : 'FALSE' }}
{{ 'Array' in [] ? 'TRUE' : 'FALSE' }}
{{ ''~dir_object in dir_object ? 'TRUE' : 'FALSE' }}

{{ resource in [''~resource] ? 'TRUE' : 'FALSE' }}
{{ resource in [resource + 1 - 1] ? 'TRUE' : 'FALSE' }}
{{ dir_object in [''~dir_object] ? 'TRUE' : 'FALSE' }}

{{ 5 in 125 ? 'TRUE' : 'FALSE' }}
{{ 5 in '125' ? 'TRUE' : 'FALSE' }}
{{ '5' in 125 ? 'TRUE' : 'FALSE' }}
{{ '5' in '125' ? 'TRUE' : 'FALSE' }}

{{ 5.5 in 125.5 ? 'TRUE' : 'FALSE' }}
{{ 5.5 in '125.5' ? 'TRUE' : 'FALSE' }}
{{ '5.5' in 125.5 ? 'TRUE' : 'FALSE' }}
--DATA--
return array('bar' => 'bar', 'foo' => array('bar' => 'bar'))
return array('bar' => 'bar', 'foo' => array('bar' => 'bar'), 'dir_object' => new SplFileInfo(dirname(__FILE__)), 'object' => new stdClass(), 'resource' => fopen(dirname(__FILE__), 'r'))
--EXPECT--
TRUE
TRUE
Expand All @@ -46,3 +85,42 @@ TRUE
TRUE
TRUE
TRUE

TRUE
TRUE
TRUE
TRUE
TRUE

TRUE
FALSE
FALSE
FALSE
FALSE

TRUE
FALSE
TRUE

FALSE
FALSE
FALSE
FALSE

FALSE
FALSE
FALSE
FALSE

FALSE
FALSE
FALSE

FALSE
TRUE
FALSE
TRUE

FALSE
TRUE
FALSE

0 comments on commit 8dfeda0

Please sign in to comment.