123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347 |
- <?php
-
- /*
- * This file is part of Twig.
- *
- * (c) Fabien Potencier
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
- class Twig_Tests_TemplateTest extends PHPUnit_Framework_TestCase
- {
- /**
- * @dataProvider getGetAttributeTests
- */
- public function testGetAttribute($defined, $value, $object, $item, $arguments, $type, $useExt = false)
- {
- $template = new Twig_TemplateTest(
- new Twig_Environment(),
- $useExt
- );
-
- $this->assertEquals($value, $template->getAttribute($object, $item, $arguments, $type));
- }
-
- /**
- * @dataProvider getGetAttributeTests
- */
- public function testGetAttributeStrict($defined, $value, $object, $item, $arguments, $type, $useExt = false)
- {
- $template = new Twig_TemplateTest(
- new Twig_Environment(null, array('strict_variables' => true)),
- $useExt
- );
-
- if ($defined) {
- $this->assertEquals($value, $template->getAttribute($object, $item, $arguments, $type));
- } else {
- try {
- $this->assertEquals($value, $template->getAttribute($object, $item, $arguments, $type));
-
- throw new Exception('Expected Twig_Error_Runtime exception.');
- } catch (Twig_Error_Runtime $e) { }
- }
- }
-
- /**
- * @dataProvider getGetAttributeTests
- */
- public function testGetAttributeDefined($defined, $value, $object, $item, $arguments, $type, $useExt = false)
- {
- $template = new Twig_TemplateTest(
- new Twig_Environment(),
- $useExt
- );
-
- $this->assertEquals($defined, $template->getAttribute($object, $item, $arguments, $type, true));
- }
-
- /**
- * @dataProvider getGetAttributeTests
- */
- public function testGetAttributeDefinedStrict($defined, $value, $object, $item, $arguments, $type, $useExt = false)
- {
- $template = new Twig_TemplateTest(
- new Twig_Environment(null, array('strict_variables' => true)),
- $useExt
- );
-
- $this->assertEquals($defined, $template->getAttribute($object, $item, $arguments, $type, true));
- }
-
- public function getGetAttributeTests()
- {
- $array = array(
- 'defined' => 'defined',
- 'zero' => 0,
- 'null' => null,
- '1' => 1,
- );
-
- $objectArray = new Twig_TemplateArrayAccessObject();
- $stdObject = (object) $array;
- $magicPropertyObject = new Twig_TemplateMagicPropertyObject();
- $propertyObject = new Twig_TemplatePropertyObject();
- $propertyObject1 = new Twig_TemplatePropertyObjectAndIterator();
- $methodObject = new Twig_TemplateMethodObject();
- $magicMethodObject = new Twig_TemplateMagicMethodObject();
-
- $anyType = Twig_TemplateInterface::ANY_CALL;
- $methodType = Twig_TemplateInterface::METHOD_CALL;
- $arrayType = Twig_TemplateInterface::ARRAY_CALL;
-
- $basicTests = array(
- // array(defined, value, property to fetch)
- array(true, 'defined', 'defined'),
- array(false, null, 'undefined'),
- array(false, null, 'protected'),
- array(true, 0, 'zero'),
- array(true, 1, 1),
- array(true, 1, 1.0),
- array(true, null, 'null'),
- );
- $testObjects = array(
- // array(object, type of fetch)
- array($array, $arrayType),
- array($objectArray, $arrayType),
- array($stdObject, $anyType),
- array($magicPropertyObject, $anyType),
- array($methodObject, $methodType),
- array($methodObject, $anyType),
- array($propertyObject, $anyType),
- array($propertyObject1, $anyType),
- );
-
- $tests = array();
- foreach ($testObjects as $testObject) {
- foreach ($basicTests as $test) {
- // properties cannot be numbers
- if (($testObject[0] instanceof stdClass || $testObject[0] instanceof Twig_TemplatePropertyObject) && is_numeric($test[2])) {
- continue;
- }
-
- $tests[] = array($test[0], $test[1], $testObject[0], $test[2], array(), $testObject[1]);
- }
- }
-
- // additional method tests
- $tests = array_merge($tests, array(
- array(true, 'defined', $methodObject, 'defined', array(), $methodType),
- array(true, 'defined', $methodObject, 'DEFINED', array(), $methodType),
- array(true, 'defined', $methodObject, 'getDefined', array(), $methodType),
- array(true, 'defined', $methodObject, 'GETDEFINED', array(), $methodType),
- array(true, 'static', $methodObject, 'static', array(), $methodType),
- array(true, 'static', $methodObject, 'getStatic', array(), $methodType),
-
- array(true, '__call_undefined', $magicMethodObject, 'undefined', array(), $methodType),
- array(true, '__call_UNDEFINED', $magicMethodObject, 'UNDEFINED', array(), $methodType),
- ));
-
- // add the same tests for the any type
- foreach ($tests as $test) {
- if ($anyType !== $test[5]) {
- $test[5] = $anyType;
- $tests[] = $test;
- }
- }
-
- $methodAndPropObject = new Twig_TemplateMethodAndPropObject;
-
- // additional method tests
- $tests = array_merge($tests, array(
- array(true, 'a', $methodAndPropObject, 'a', array(), $anyType),
- array(true, 'a', $methodAndPropObject, 'a', array(), $methodType),
- array(false, null, $methodAndPropObject, 'a', array(), $arrayType),
-
- array(true, 'b_prop', $methodAndPropObject, 'b', array(), $anyType),
- array(true, 'b', $methodAndPropObject, 'B', array(), $anyType),
- array(true, 'b', $methodAndPropObject, 'b', array(), $methodType),
- array(true, 'b', $methodAndPropObject, 'B', array(), $methodType),
- array(false, null, $methodAndPropObject, 'b', array(), $arrayType),
-
- array(false, null, $methodAndPropObject, 'c', array(), $anyType),
- array(false, null, $methodAndPropObject, 'c', array(), $methodType),
- array(false, null, $methodAndPropObject, 'c', array(), $arrayType),
-
- ));
-
- // add twig_template_get_attributes tests
-
- if (function_exists('twig_template_get_attributes')) {
- foreach(array_slice($tests, 0) as $test) {
- $test[] = true;
- $tests[] = $test;
- }
- }
-
- return $tests;
- }
-
- public function useExtGetAttribute()
- {
- return false;
- }
- }
-
- class Twig_TemplateTest extends Twig_Template
- {
- protected $useExtGetAttribute = false;
-
- public function __construct(Twig_Environment $env, $useExtGetAttribute = false)
- {
- parent::__construct($env);
- $this->useExtGetAttribute = $useExtGetAttribute;
- Twig_Template::clearCache();
- }
-
- public function getTemplateName()
- {
- }
-
- protected function doGetParent(array $context)
- {
- }
-
- protected function doDisplay(array $context, array $blocks = array())
- {
- }
-
- public function getAttribute($object, $item, array $arguments = array(), $type = Twig_TemplateInterface::ANY_CALL, $isDefinedTest = false, $ignoreStrictCheck = false)
- {
- if ($this->useExtGetAttribute) {
- return twig_template_get_attributes($this, $object, $item, $arguments, $type, $isDefinedTest, $ignoreStrictCheck);
- } else {
- return parent::getAttribute($object, $item, $arguments, $type, $isDefinedTest, $ignoreStrictCheck);
- }
- }
- }
-
- class Twig_TemplateArrayAccessObject implements ArrayAccess
- {
- protected $protected = 'protected';
-
- public $attributes = array(
- 'defined' => 'defined',
- 'zero' => 0,
- 'null' => null,
- '1' => 1,
- );
-
- public function offsetExists($name)
- {
- return array_key_exists($name, $this->attributes);
- }
-
- public function offsetGet($name)
- {
- return array_key_exists($name, $this->attributes) ? $this->attributes[$name] : null;
- }
-
- public function offsetSet($name, $value)
- {
- }
-
- public function offsetUnset($name)
- {
- }
- }
-
- class Twig_TemplateMagicPropertyObject
- {
- public $defined = 'defined';
-
- public $attributes = array(
- 'zero' => 0,
- 'null' => null,
- '1' => 1,
- );
-
- protected $protected = 'protected';
-
- public function __isset($name)
- {
- return array_key_exists($name, $this->attributes);
- }
-
- public function __get($name)
- {
- return array_key_exists($name, $this->attributes) ? $this->attributes[$name] : null;
- }
- }
-
- class Twig_TemplatePropertyObject
- {
- public $defined = 'defined';
- public $zero = 0;
- public $null = null;
-
- protected $protected = 'protected';
- }
-
- class Twig_TemplatePropertyObjectAndIterator extends Twig_TemplatePropertyObject implements IteratorAggregate
- {
- public function getIterator()
- {
- return new ArrayIterator(array('foo', 'bar'));
- }
- }
-
- class Twig_TemplateMethodObject
- {
- public function getDefined()
- {
- return 'defined';
- }
-
- public function get1()
- {
- return 1;
- }
-
- public function getZero()
- {
- return 0;
- }
-
- public function getNull()
- {
- return null;
- }
-
- protected function getProtected()
- {
- return 'protected';
- }
-
- static public function getStatic()
- {
- return 'static';
- }
- }
-
- class Twig_TemplateMethodAndPropObject
- {
- private $a = 'a_prop';
- public function getA() {
- return 'a';
- }
-
- public $b = 'b_prop';
- public function getB() {
- return 'b';
- }
-
- private $c = 'c_prop';
- private function getC() {
- return 'c';
- }
- }
-
- class Twig_TemplateMagicMethodObject
- {
- public function __call($method, $arguments) {
- return '__call_'.$method;
- }
- }
|