class Twig_Tests_ExpressionParserTest

Hierarchy

Expanded class hierarchy of Twig_Tests_ExpressionParserTest

File

drupal/core/vendor/twig/twig/test/Twig/Tests/ExpressionParserTest.php, line 12

View source
class Twig_Tests_ExpressionParserTest extends PHPUnit_Framework_TestCase {

  /**
   * @expectedException Twig_Error_Syntax
   * @dataProvider getFailingTestsForAssignment
   */
  public function testCanOnlyAssignToNames($template) {
    $env = new Twig_Environment(new Twig_Loader_String(), array(
      'cache' => false,
      'autoescape' => false,
    ));
    $parser = new Twig_Parser($env);
    $parser
      ->parse($env
      ->tokenize($template, 'index'));
  }
  public function getFailingTestsForAssignment() {
    return array(
      array(
        '{% set false = "foo" %}',
      ),
      array(
        '{% set true = "foo" %}',
      ),
      array(
        '{% set none = "foo" %}',
      ),
      array(
        '{% set 3 = "foo" %}',
      ),
      array(
        '{% set 1 + 2 = "foo" %}',
      ),
      array(
        '{% set "bar" = "foo" %}',
      ),
      array(
        '{% set %}{% endset %}',
      ),
    );
  }

  /**
   * @dataProvider getTestsForArray
   */
  public function testArrayExpression($template, $expected) {
    $env = new Twig_Environment(new Twig_Loader_String(), array(
      'cache' => false,
      'autoescape' => false,
    ));
    $stream = $env
      ->tokenize($template, 'index');
    $parser = new Twig_Parser($env);
    $this
      ->assertEquals($expected, $parser
      ->parse($stream)
      ->getNode('body')
      ->getNode(0)
      ->getNode('expr'));
  }

  /**
   * @expectedException Twig_Error_Syntax
   * @dataProvider getFailingTestsForArray
   */
  public function testArraySyntaxError($template) {
    $env = new Twig_Environment(new Twig_Loader_String(), array(
      'cache' => false,
      'autoescape' => false,
    ));
    $parser = new Twig_Parser($env);
    $parser
      ->parse($env
      ->tokenize($template, 'index'));
  }
  public function getFailingTestsForArray() {
    return array(
      array(
        '{{ [1, "a": "b"] }}',
      ),
      array(
        '{{ {"a": "b", 2} }}',
      ),
    );
  }
  public function getTestsForArray() {
    return array(
      // simple array
      array(
        '{{ [1, 2] }}',
        new Twig_Node_Expression_Array(array(
          new Twig_Node_Expression_Constant(0, 1),
          new Twig_Node_Expression_Constant(1, 1),
          new Twig_Node_Expression_Constant(1, 1),
          new Twig_Node_Expression_Constant(2, 1),
        ), 1),
      ),
      // array with trailing ,
      array(
        '{{ [1, 2, ] }}',
        new Twig_Node_Expression_Array(array(
          new Twig_Node_Expression_Constant(0, 1),
          new Twig_Node_Expression_Constant(1, 1),
          new Twig_Node_Expression_Constant(1, 1),
          new Twig_Node_Expression_Constant(2, 1),
        ), 1),
      ),
      // simple hash
      array(
        '{{ {"a": "b", "b": "c"} }}',
        new Twig_Node_Expression_Array(array(
          new Twig_Node_Expression_Constant('a', 1),
          new Twig_Node_Expression_Constant('b', 1),
          new Twig_Node_Expression_Constant('b', 1),
          new Twig_Node_Expression_Constant('c', 1),
        ), 1),
      ),
      // hash with trailing ,
      array(
        '{{ {"a": "b", "b": "c", } }}',
        new Twig_Node_Expression_Array(array(
          new Twig_Node_Expression_Constant('a', 1),
          new Twig_Node_Expression_Constant('b', 1),
          new Twig_Node_Expression_Constant('b', 1),
          new Twig_Node_Expression_Constant('c', 1),
        ), 1),
      ),
      // hash in an array
      array(
        '{{ [1, {"a": "b", "b": "c"}] }}',
        new Twig_Node_Expression_Array(array(
          new Twig_Node_Expression_Constant(0, 1),
          new Twig_Node_Expression_Constant(1, 1),
          new Twig_Node_Expression_Constant(1, 1),
          new Twig_Node_Expression_Array(array(
            new Twig_Node_Expression_Constant('a', 1),
            new Twig_Node_Expression_Constant('b', 1),
            new Twig_Node_Expression_Constant('b', 1),
            new Twig_Node_Expression_Constant('c', 1),
          ), 1),
        ), 1),
      ),
      // array in a hash
      array(
        '{{ {"a": [1, 2], "b": "c"} }}',
        new Twig_Node_Expression_Array(array(
          new Twig_Node_Expression_Constant('a', 1),
          new Twig_Node_Expression_Array(array(
            new Twig_Node_Expression_Constant(0, 1),
            new Twig_Node_Expression_Constant(1, 1),
            new Twig_Node_Expression_Constant(1, 1),
            new Twig_Node_Expression_Constant(2, 1),
          ), 1),
          new Twig_Node_Expression_Constant('b', 1),
          new Twig_Node_Expression_Constant('c', 1),
        ), 1),
      ),
    );
  }

  /**
   * @expectedException Twig_Error_Syntax
   */
  public function testStringExpressionDoesNotConcatenateTwoConsecutiveStrings() {
    $env = new Twig_Environment(new Twig_Loader_String(), array(
      'cache' => false,
      'autoescape' => false,
      'optimizations' => 0,
    ));
    $stream = $env
      ->tokenize('{{ "a" "b" }}', 'index');
    $parser = new Twig_Parser($env);
    $parser
      ->parse($stream);
  }

  /**
   * @dataProvider getTestsForString
   */
  public function testStringExpression($template, $expected) {
    $env = new Twig_Environment(new Twig_Loader_String(), array(
      'cache' => false,
      'autoescape' => false,
      'optimizations' => 0,
    ));
    $stream = $env
      ->tokenize($template, 'index');
    $parser = new Twig_Parser($env);
    $this
      ->assertEquals($expected, $parser
      ->parse($stream)
      ->getNode('body')
      ->getNode(0)
      ->getNode('expr'));
  }
  public function getTestsForString() {
    return array(
      array(
        '{{ "foo" }}',
        new Twig_Node_Expression_Constant('foo', 1),
      ),
      array(
        '{{ "foo #{bar}" }}',
        new Twig_Node_Expression_Binary_Concat(new Twig_Node_Expression_Constant('foo ', 1), new Twig_Node_Expression_Name('bar', 1), 1),
      ),
      array(
        '{{ "foo #{bar} baz" }}',
        new Twig_Node_Expression_Binary_Concat(new Twig_Node_Expression_Binary_Concat(new Twig_Node_Expression_Constant('foo ', 1), new Twig_Node_Expression_Name('bar', 1), 1), new Twig_Node_Expression_Constant(' baz', 1), 1),
      ),
      array(
        '{{ "foo #{"foo #{bar} baz"} baz" }}',
        new Twig_Node_Expression_Binary_Concat(new Twig_Node_Expression_Binary_Concat(new Twig_Node_Expression_Constant('foo ', 1), new Twig_Node_Expression_Binary_Concat(new Twig_Node_Expression_Binary_Concat(new Twig_Node_Expression_Constant('foo ', 1), new Twig_Node_Expression_Name('bar', 1), 1), new Twig_Node_Expression_Constant(' baz', 1), 1), 1), new Twig_Node_Expression_Constant(' baz', 1), 1),
      ),
    );
  }

}

Members

Namesort descending Modifiers Type Description Overrides
Twig_Tests_ExpressionParserTest::getFailingTestsForArray public function
Twig_Tests_ExpressionParserTest::getFailingTestsForAssignment public function
Twig_Tests_ExpressionParserTest::getTestsForArray public function
Twig_Tests_ExpressionParserTest::getTestsForString public function
Twig_Tests_ExpressionParserTest::testArrayExpression public function @dataProvider getTestsForArray
Twig_Tests_ExpressionParserTest::testArraySyntaxError public function @expectedException Twig_Error_Syntax @dataProvider getFailingTestsForArray
Twig_Tests_ExpressionParserTest::testCanOnlyAssignToNames public function @expectedException Twig_Error_Syntax @dataProvider getFailingTestsForAssignment
Twig_Tests_ExpressionParserTest::testStringExpression public function @dataProvider getTestsForString
Twig_Tests_ExpressionParserTest::testStringExpressionDoesNotConcatenateTwoConsecutiveStrings public function @expectedException Twig_Error_Syntax