Fixed "in" operator for resources and strings

This commit is contained in:
Martin Hasoň
2014-08-04 07:09:00 +02:00
parent 78e59ef25c
commit 8dfeda01c1
2 changed files with 84 additions and 10 deletions
+4 -8
View File
@@ -934,15 +934,11 @@ function twig_sort_filter($array)
function twig_in_filter($value, $compare) function twig_in_filter($value, $compare)
{ {
if (is_array($compare)) { if (is_array($compare)) {
return in_array($value, $compare, is_object($value)); return in_array($value, $compare, is_object($value) || is_resource($value));
} elseif (is_string($compare)) { } elseif (is_string($compare) && (is_string($value) || is_int($value) || is_float($value))) {
if (!strlen($value)) { return '' === $value || false !== strpos($compare, (string) $value);
return empty($compare);
}
return false !== strpos($compare, (string) $value);
} elseif ($compare instanceof Traversable) { } 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; return false;
+80 -2
View File
@@ -18,7 +18,7 @@ TRUE
{% if 'c' not in bar %} {% if 'c' not in bar %}
TRUE TRUE
{% endif %} {% endif %}
{% if '' not in bar %} {% if '' in bar %}
TRUE TRUE
{% endif %} {% endif %}
{% if '' in '' %} {% if '' in '' %}
@@ -33,8 +33,47 @@ TRUE
{% if '0' in '0' %} {% if '0' in '0' %}
TRUE TRUE
{% endif %} {% 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-- --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-- --EXPECT--
TRUE TRUE
TRUE TRUE
@@ -46,3 +85,42 @@ TRUE
TRUE TRUE
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