You are here

public function Twig_Tests_TemplateTest::getGetAttributeTests in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 vendor/twig/twig/test/Twig/Tests/TemplateTest.php \Twig_Tests_TemplateTest::getGetAttributeTests()

File

vendor/twig/twig/test/Twig/Tests/TemplateTest.php, line 281

Class

Twig_Tests_TemplateTest

Code

public function getGetAttributeTests() {
  $array = array(
    'defined' => 'defined',
    'zero' => 0,
    'null' => null,
    '1' => 1,
    'bar' => true,
    '09' => '09',
    '+4' => '+4',
  );
  $objectArray = new Twig_TemplateArrayAccessObject();
  $stdObject = (object) $array;
  $magicPropertyObject = new Twig_TemplateMagicPropertyObject();
  $propertyObject = new Twig_TemplatePropertyObject();
  $propertyObject1 = new Twig_TemplatePropertyObjectAndIterator();
  $propertyObject2 = new Twig_TemplatePropertyObjectAndArrayAccess();
  $propertyObject3 = new Twig_TemplatePropertyObjectDefinedWithUndefinedValue();
  $methodObject = new Twig_TemplateMethodObject();
  $magicMethodObject = new Twig_TemplateMagicMethodObject();
  $anyType = Twig_Template::ANY_CALL;
  $methodType = Twig_Template::METHOD_CALL;
  $arrayType = Twig_Template::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',
    ),
    array(
      true,
      true,
      'bar',
    ),
    array(
      true,
      '09',
      '09',
    ),
    array(
      true,
      '+4',
      '+4',
    ),
  );
  $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,
    ),
    array(
      $propertyObject2,
      $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;
      }
      if ('+4' === $test[2] && $methodObject === $testObject[0]) {
        continue;
      }
      $tests[] = array(
        $test[0],
        $test[1],
        $testObject[0],
        $test[2],
        array(),
        $testObject[1],
      );
    }
  }

  // additional properties tests
  $tests = array_merge($tests, array(
    array(
      true,
      null,
      $propertyObject3,
      'foo',
      array(),
      $anyType,
    ),
  ));

  // 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,
    ),
  ));

  // tests when input is not an array or object
  $tests = array_merge($tests, array(
    array(
      false,
      null,
      42,
      'a',
      array(),
      $anyType,
      false,
      'Impossible to access an attribute ("a") on a integer variable ("42")',
    ),
    array(
      false,
      null,
      'string',
      'a',
      array(),
      $anyType,
      false,
      'Impossible to access an attribute ("a") on a string variable ("string")',
    ),
    array(
      false,
      null,
      array(),
      'a',
      array(),
      $anyType,
      false,
      'Key "a" does not exist as the array is empty',
    ),
  ));

  // add twig_template_get_attributes tests
  if (function_exists('twig_template_get_attributes')) {
    foreach (array_slice($tests, 0) as $test) {
      $test = array_pad($test, 7, null);
      $test[6] = true;
      $tests[] = $test;
    }
  }
  return $tests;
}