25        self::$templates = array(
 
   26            '1_basic1' => 
'{{ obj.foo }}',
 
   27            '1_basic2' => 
'{{ name|upper }}',
 
   28            '1_basic3' => 
'{% if name %}foo{% endif %}',
 
   29            '1_basic4' => 
'{{ obj.bar }}',
 
   30            '1_basic5' => 
'{{ obj }}',
 
   31            '1_basic6' => 
'{{ arr.obj }}',
 
   32            '1_basic7' => 
'{{ cycle(["foo","bar"], 1) }}',
 
   33            '1_basic8' => 
'{{ obj.getfoobar }}{{ obj.getFooBar }}',
 
   34            '1_basic9' => 
'{{ obj.foobar }}{{ obj.fooBar }}',
 
   35            '1_basic' => 
'{% if obj.foo %}{{ obj.foo|upper }}{% endif %}',
 
   36            '1_layout' => 
'{% block content %}{% endblock %}',
 
   37            '1_child' => 
"{% extends \"1_layout\" %}\n{% block content %}\n{{ \"a\"|json_encode }}\n{% endblock %}",
 
   38            '1_include' => 
'{{ include("1_basic1", sandboxed=true) }}',
 
   39            '1_range_operator' => 
'{{ (1..2)[0] }}',
 
   49        $twig = $this->
getEnvironment(
true, array(), self::$templates, array(
'block'));
 
   50        $twig->loadTemplate(
'1_child')->render(array());
 
   56        $this->assertEquals(
'FOO', $twig->loadTemplate(
'1_basic')->render(
self::$params), 
'Sandbox does nothing if it is disabled globally');
 
   64            $this->fail(
'Sandbox throws a SecurityError exception if an unallowed method is called');
 
   66            $this->assertInstanceOf(
'Twig_Sandbox_SecurityNotAllowedMethodError', $e, 
'Exception should be an instance of Twig_Sandbox_SecurityNotAllowedMethodError');
 
   67            $this->assertEquals(
'FooObject', $e->getClassName(), 
'Exception should be raised on the "FooObject" class');
 
   68            $this->assertEquals(
'foo', $e->getMethodName(), 
'Exception should be raised on the "foo" method');
 
   77            $this->fail(
'Sandbox throws a SecurityError exception if an unallowed filter is called');
 
   79            $this->assertInstanceOf(
'Twig_Sandbox_SecurityNotAllowedFilterError', $e, 
'Exception should be an instance of Twig_Sandbox_SecurityNotAllowedFilterError');
 
   80            $this->assertEquals(
'upper', $e->getFilterName(), 
'Exception should be raised on the "upper" filter');
 
   89            $this->fail(
'Sandbox throws a SecurityError exception if an unallowed tag is used in the template');
 
   91            $this->assertInstanceOf(
'Twig_Sandbox_SecurityNotAllowedTagError', $e, 
'Exception should be an instance of Twig_Sandbox_SecurityNotAllowedTagError');
 
   92            $this->assertEquals(
'if', $e->getTagName(), 
'Exception should be raised on the "if" tag');
 
  101            $this->fail(
'Sandbox throws a SecurityError exception if an unallowed property is called in the template');
 
  103            $this->assertInstanceOf(
'Twig_Sandbox_SecurityNotAllowedPropertyError', $e, 
'Exception should be an instance of Twig_Sandbox_SecurityNotAllowedPropertyError');
 
  104            $this->assertEquals(
'FooObject', $e->getClassName(), 
'Exception should be raised on the "FooObject" class');
 
  105            $this->assertEquals(
'bar', $e->getPropertyName(), 
'Exception should be raised on the "bar" property');
 
  114            $this->fail(
'Sandbox throws a SecurityError exception if an unallowed method (__toString()) is called in the template');
 
  116            $this->assertInstanceOf(
'Twig_Sandbox_SecurityNotAllowedMethodError', $e, 
'Exception should be an instance of Twig_Sandbox_SecurityNotAllowedMethodError');
 
  117            $this->assertEquals(
'FooObject', $e->getClassName(), 
'Exception should be raised on the "FooObject" class');
 
  118            $this->assertEquals(
'__tostring', $e->getMethodName(), 
'Exception should be raised on the "__toString" method');
 
  127            $this->fail(
'Sandbox throws a SecurityError exception if an unallowed method (__toString()) is called in the template');
 
  129            $this->assertInstanceOf(
'Twig_Sandbox_SecurityNotAllowedMethodError', $e, 
'Exception should be an instance of Twig_Sandbox_SecurityNotAllowedMethodError');
 
  130            $this->assertEquals(
'FooObject', $e->getClassName(), 
'Exception should be raised on the "FooObject" class');
 
  131            $this->assertEquals(
'__tostring', $e->getMethodName(), 
'Exception should be raised on the "__toString" method');
 
  140            $this->fail(
'Sandbox throws a SecurityError exception if an unallowed function is called in the template');
 
  142            $this->assertInstanceOf(
'Twig_Sandbox_SecurityNotAllowedFunctionError', $e, 
'Exception should be an instance of Twig_Sandbox_SecurityNotAllowedFunctionError');
 
  143            $this->assertEquals(
'cycle', $e->getFunctionName(), 
'Exception should be raised on the "cycle" function');
 
  151            $twig->loadTemplate(
'1_range_operator')->render(
self::$params);
 
  152            $this->fail(
'Sandbox throws a SecurityError exception if the unallowed range operator is called');
 
  154            $this->assertInstanceOf(
'Twig_Sandbox_SecurityNotAllowedFunctionError', $e, 
'Exception should be an instance of Twig_Sandbox_SecurityNotAllowedFunctionError');
 
  155            $this->assertEquals(
'range', $e->getFunctionName(), 
'Exception should be raised on the "range" function');
 
  161        $twig = $this->
getEnvironment(
true, array(), self::$templates, array(), array(), array(
'FooObject' => 
'foo'));
 
  163        $this->assertEquals(
'foo', $twig->loadTemplate(
'1_basic1')->render(
self::$params), 
'Sandbox allow some methods');
 
  169        $twig = $this->
getEnvironment(
true, array(), self::$templates, array(), array(), array(
'FooObject' => 
'__toString'));
 
  171        $this->assertEquals(
'foo', $twig->loadTemplate(
'1_basic5')->render(
self::$params), 
'Sandbox allow some methods');
 
  172        $this->assertEquals(1, 
FooObject::$called[
'__toString'], 
'Sandbox only calls method once');
 
  179        $this->assertEquals(
'foo', $twig->loadTemplate(
'1_basic5')->render(
self::$params), 
'Sandbox allows __toString when sandbox disabled');
 
  180        $this->assertEquals(1, 
FooObject::$called[
'__toString'], 
'Sandbox only calls method once');
 
  185        $twig = $this->
getEnvironment(
true, array(), self::$templates, array(), array(
'upper'));
 
  186        $this->assertEquals(
'FABIEN', $twig->loadTemplate(
'1_basic2')->render(
self::$params), 
'Sandbox allow some filters');
 
  191        $twig = $this->
getEnvironment(
true, array(), self::$templates, array(
'if'));
 
  192        $this->assertEquals(
'foo', $twig->loadTemplate(
'1_basic3')->render(
self::$params), 
'Sandbox allow some tags');
 
  197        $twig = $this->
getEnvironment(
true, array(), self::$templates, array(), array(), array(), array(
'FooObject' => 
'bar'));
 
  198        $this->assertEquals(
'bar', $twig->loadTemplate(
'1_basic4')->render(
self::$params), 
'Sandbox allow some properties');
 
  203        $twig = $this->
getEnvironment(
true, array(), self::$templates, array(), array(), array(), array(), array(
'cycle'));
 
  204        $this->assertEquals(
'bar', $twig->loadTemplate(
'1_basic7')->render(
self::$params), 
'Sandbox allow some functions');
 
  209        $twig = $this->
getEnvironment(
true, array(), self::$templates, array(), array(), array(), array(), array(
'range'));
 
  210        $this->assertEquals(
'1', $twig->loadTemplate(
'1_range_operator')->render(
self::$params), 
'Sandbox allow the range operator');
 
  215        foreach (array(
'getfoobar', 
'getFoobar', 
'getFooBar') as 
$name) {
 
  216            $twig = $this->
getEnvironment(
true, array(), self::$templates, array(), array(), array(
'FooObject' => 
$name));
 
  218            $this->assertEquals(
'foobarfoobar', $twig->loadTemplate(
'1_basic8')->render(
self::$params), 
'Sandbox allow methods in a case-insensitive way');
 
  219            $this->assertEquals(2, 
FooObject::$called[
'getFooBar'], 
'Sandbox only calls method once');
 
  221            $this->assertEquals(
'foobarfoobar', $twig->loadTemplate(
'1_basic9')->render(
self::$params), 
'Sandbox allow methods via shortcut names (ie. without get/set)');
 
  227        self::$templates = array(
 
  228            '2_basic' => 
'{{ obj.foo }}{% include "2_included" %}{{ obj.foo }}',
 
  229            '2_included' => 
'{% if obj.foo %}{{ obj.foo|upper }}{% endif %}',
 
  233        $this->assertEquals(
'fooFOOfoo', $twig->loadTemplate(
'2_basic')->render(
self::$params), 
'Sandbox does nothing if disabled globally and sandboxed not used for the include');
 
  235        self::$templates = array(
 
  236            '3_basic' => 
'{{ obj.foo }}{% sandbox %}{% include "3_included" %}{% endsandbox %}{{ obj.foo }}',
 
  237            '3_included' => 
'{% if obj.foo %}{{ obj.foo|upper }}{% endif %}',
 
  243            $this->fail(
'Sandbox throws a SecurityError exception when the included file is sandboxed');
 
  245            $this->assertInstanceOf(
'Twig_Sandbox_SecurityNotAllowedTagError', $e, 
'Exception should be an instance of Twig_Sandbox_SecurityNotAllowedTagError');
 
  246            $this->assertEquals(
'sandbox', $e->getTagName());
 
  252        $twig = $this->
getEnvironment(
true, array(
'autoescape' => 
'html'), array(
'index' => <<<
EOF 
  253{%- 
import _self as macros %}
 
  255{%- macro 
test(text) %}<
p>{{ text }}</
p>{% endmacro %}
 
  257{{- macros.test(
'username') }}
 
  259        ), array(
'macro', 
'import'), array(
'escape'));
 
  261        $this->assertEquals(
'<p>username</p>', $twig->loadTemplate(
'index')->render(array()));
 
  271        } 
catch (Throwable $e) {
 
  272        } 
catch (Exception $e) {
 
  275            $this->fail(
'An exception should be thrown for this test to be valid.');
 
  278        $this->assertFalse($twig->getExtension(
'Twig_Extension_Sandbox')->isSandboxed(), 
'Sandboxed include() function call should not leave Sandbox enabled when an error occurs.');
 
  284        $twig = 
new Twig_Environment($loader, array_merge(array(
'debug' => 
true, 
'cache' => 
false, 
'autoescape' => 
false), 
$options));
 
  294    public static $called = array(
'__toString' => 0, 
'foo' => 0, 
'getFooBar' => 0);
 
  300        self::$called = array(
'__toString' => 0, 
'foo' => 0, 
'getFooBar' => 0);
 
  305        ++self::$called[
'__toString'];
 
  312        ++self::$called[
'foo'];
 
  319        ++self::$called[
'getFooBar'];
 
const EOF
How fgetc() reports an End Of File.
An exception for terminatinating execution or to throw for unit testing.
Stores the Twig configuration.
Loads a template from an array.
Exception thrown when a security error occurs at runtime.
Represents a security policy which need to be enforced when sandbox mode is enabled.
testSandboxAllowProperty()
testSandboxLocallySetForAnInclude()
testSandboxAllowMethodFoo()
testSandboxUnallowedTag()
testSandboxUnallowedFilter()
testSandboxAllowMethodToStringDisabled()
testSandboxAllowRangeOperator()
testSandboxAllowMethodToString()
testSandboxUnallowedRangeOperator()
testSandboxWithInheritance()
@expectedException Twig_Sandbox_SecurityError @expectedExceptionMessage Filter "json_encode" is not a...
testSandboxUnallowedMethodAccessor()
testSandboxUnallowedFunction()
testSandboxUnallowedToStringArray()
testSandboxAllowFunctionsCaseInsensitive()
testSandboxAllowFunction()
testSandboxDisabledAfterIncludeFunctionError()
testSandboxUnallowedProperty()
getEnvironment($sandboxed, $options, $templates, $tags=array(), $filters=array(), $methods=array(), $properties=array(), $functions=array())
testSandboxUnallowedToString()