Example #1
0
 public function getTests()
 {
     $node = Apishka_Templater_Node_Expression_Name::apishka('foo', 1);
     $self = Apishka_Templater_Node_Expression_Name::apishka('_self', 1);
     $context = Apishka_Templater_Node_Expression_Name::apishka('_context', 1);
     $env = new Apishka_Templater_Environment($this->createMock('Apishka_Templater_LoaderInterface'));
     return array(array($node, "// line 1\n" . '(isset($context["foo"]) ? $context["foo"] : null)', $env), array($node, $this->getVariableGetter('foo', 1), $env), array($self, "// line 1\n\$this->getTemplateName()"), array($context, "// line 1\n\$context"));
 }
Example #2
0
 public function getTests()
 {
     $tests = array();
     $expr = Apishka_Templater_Node_Expression_Name::apishka('foo', 1);
     $attr = Apishka_Templater_Node_Expression_Constant::apishka('bar', 1);
     $args = Apishka_Templater_Node_Expression_Array::apishka(array(), 1);
     $node = Apishka_Templater_Node_Expression_GetAttr::apishka($expr, $attr, $args, Apishka_Templater_TemplateAbstract::ANY_CALL, 1);
     $tests[] = array($node, sprintf('%s%s, "bar", array())', $this->getAttributeGetter(), $this->getVariableGetter('foo', 1)));
     $node = Apishka_Templater_Node_Expression_GetAttr::apishka($expr, $attr, $args, Apishka_Templater_TemplateAbstract::ARRAY_CALL, 1);
     $tests[] = array($node, sprintf('%s%s, "bar", array(), "array")', $this->getAttributeGetter(), $this->getVariableGetter('foo', 1)));
     $args = Apishka_Templater_Node_Expression_Array::apishka(array(), 1);
     $args->addElement(Apishka_Templater_Node_Expression_Name::apishka('foo', 1));
     $args->addElement(Apishka_Templater_Node_Expression_Constant::apishka('bar', 1));
     $node = Apishka_Templater_Node_Expression_GetAttr::apishka($expr, $attr, $args, Apishka_Templater_TemplateAbstract::METHOD_CALL, 1);
     $tests[] = array($node, sprintf('%s%s, "bar", array(0 => %s, 1 => "bar"), "method")', $this->getAttributeGetter(), $this->getVariableGetter('foo', 1), $this->getVariableGetter('foo')));
     return $tests;
 }
Example #3
0
    public function getTests()
    {
        $tests = array();
        $names = Apishka_Templater_Node::apishka(array(Apishka_Templater_Node_Expression_AssignName::apishka('foo', 1)), array(), 1);
        $values = Apishka_Templater_Node::apishka(array(Apishka_Templater_Node_Expression_Constant::apishka('foo', 1)), array(), 1);
        $node = Apishka_Templater_Node_Set::apishka(false, $names, $values, 1);
        $tests[] = array($node, <<<EOF
// line 1
\$context["foo"] = "foo";
EOF
);
        $names = Apishka_Templater_Node::apishka(array(Apishka_Templater_Node_Expression_AssignName::apishka('foo', 1)), array(), 1);
        $values = Apishka_Templater_Node::apishka(array(Apishka_Templater_Node_Print::apishka(Apishka_Templater_Node_Expression_Constant::apishka('foo', 1), 1)), array(), 1);
        $node = Apishka_Templater_Node_Set::apishka(true, $names, $values, 1);
        $tests[] = array($node, <<<EOF
// line 1
ob_start();
echo "foo";
\$context["foo"] = ('' === \$tmp = ob_get_clean()) ? '' : new Apishka_Templater_Markup(\$tmp, \$this->env->getCharset());
EOF
);
        $names = Apishka_Templater_Node::apishka(array(Apishka_Templater_Node_Expression_AssignName::apishka('foo', 1)), array(), 1);
        $values = Apishka_Templater_Node_Text::apishka('foo', 1);
        $node = Apishka_Templater_Node_Set::apishka(true, $names, $values, 1);
        $tests[] = array($node, <<<EOF
// line 1
\$context["foo"] = ('' === \$tmp = "foo") ? '' : new Apishka_Templater_Markup(\$tmp, \$this->env->getCharset());
EOF
);
        $names = Apishka_Templater_Node::apishka(array(Apishka_Templater_Node_Expression_AssignName::apishka('foo', 1), Apishka_Templater_Node_Expression_AssignName::apishka('bar', 1)), array(), 1);
        $values = Apishka_Templater_Node::apishka(array(Apishka_Templater_Node_Expression_Constant::apishka('foo', 1), Apishka_Templater_Node_Expression_Name::apishka('bar', 1)), array(), 1);
        $node = Apishka_Templater_Node_Set::apishka(false, $names, $values, 1);
        $tests[] = array($node, <<<EOF
// line 1
list(\$context["foo"], \$context["bar"]) = array("foo", {$this->getVariableGetter('bar')});
EOF
);
        return $tests;
    }
Example #4
0
    public function getTests()
    {
        $tests = array();
        $t = Apishka_Templater_Node::apishka(array(Apishka_Templater_Node_Expression_Constant::apishka(true, 1), Apishka_Templater_Node_Print::apishka(Apishka_Templater_Node_Expression_Name::apishka('foo', 1), 1)), array(), 1);
        $else = null;
        $node = Apishka_Templater_Node_If::apishka($t, $else, 1);
        $tests[] = array($node, <<<EOF
// line 1
if (true) {
    echo {$this->getVariableGetter('foo')};
}
EOF
);
        $t = Apishka_Templater_Node::apishka(array(Apishka_Templater_Node_Expression_Constant::apishka(true, 1), Apishka_Templater_Node_Print::apishka(Apishka_Templater_Node_Expression_Name::apishka('foo', 1), 1), Apishka_Templater_Node_Expression_Constant::apishka(false, 1), Apishka_Templater_Node_Print::apishka(Apishka_Templater_Node_Expression_Name::apishka('bar', 1), 1)), array(), 1);
        $else = null;
        $node = Apishka_Templater_Node_If::apishka($t, $else, 1);
        $tests[] = array($node, <<<EOF
// line 1
if (true) {
    echo {$this->getVariableGetter('foo')};
} elseif (false) {
    echo {$this->getVariableGetter('bar')};
}
EOF
);
        $t = Apishka_Templater_Node::apishka(array(Apishka_Templater_Node_Expression_Constant::apishka(true, 1), Apishka_Templater_Node_Print::apishka(Apishka_Templater_Node_Expression_Name::apishka('foo', 1), 1)), array(), 1);
        $else = Apishka_Templater_Node_Print::apishka(Apishka_Templater_Node_Expression_Name::apishka('bar', 1), 1);
        $node = Apishka_Templater_Node_If::apishka($t, $else, 1);
        $tests[] = array($node, <<<EOF
// line 1
if (true) {
    echo {$this->getVariableGetter('foo')};
} else {
    echo {$this->getVariableGetter('bar')};
}
EOF
);
        return $tests;
    }
Example #5
0
 /**
  * Parses arguments.
  *
  * @param bool $namedArguments Whether to allow named arguments or not
  * @param bool $definition     Whether we are parsing arguments for a function definition
  * @param bool $firstNoNamed   Whether first argument no named and other has name
  *
  * @throws Apishka_Templater_Error_Syntax
  *
  * @return Apishka_Templater_Node
  */
 public function parseArguments($namedArguments = false, $definition = false, $firstNoNamed = false)
 {
     $args = array();
     $stream = $this->parser->getStream();
     $stream->expect(Apishka_Templater_Token::PUNCTUATION_TYPE, '(', 'A list of arguments must begin with an opening parenthesis');
     while (!$stream->test(Apishka_Templater_Token::PUNCTUATION_TYPE, ')')) {
         if (!empty($args)) {
             $stream->expect(Apishka_Templater_Token::PUNCTUATION_TYPE, ',', 'Arguments must be separated by a comma');
         }
         if ($firstNoNamed && empty($args)) {
             $value = $this->parseExpression();
             $args['__first_arg__'] = $value;
             continue;
         }
         if ($definition) {
             $token = $stream->expect(Apishka_Templater_Token::NAME_TYPE, null, 'An argument must be a name');
             $value = Apishka_Templater_Node_Expression_Name::apishka($token->getValue(), $this->parser->getCurrentToken()->getLine());
         } else {
             $value = $this->parseExpression();
         }
         $name = null;
         if ($namedArguments && ($token = $stream->nextIf(Apishka_Templater_Token::OPERATOR_TYPE, '='))) {
             if (!$value instanceof Apishka_Templater_Node_Expression_Name) {
                 throw new Apishka_Templater_Error_Syntax(sprintf('A parameter name must be a string, "%s" given.', get_class($value)), $token->getLine(), $this->parser->getFilename());
             }
             $name = $value->getAttribute('name');
             if ($definition) {
                 $value = $this->parsePrimaryExpression();
                 if (!$this->checkConstantExpression($value)) {
                     throw new Apishka_Templater_Error_Syntax(sprintf('A default value for an argument must be a constant (a boolean, a string, a number, or an array).'), $token->getLine(), $this->parser->getFilename());
                 }
             } else {
                 $value = $this->parseExpression();
             }
         }
         if ($definition) {
             if (null === $name) {
                 $name = $value->getAttribute('name');
                 $value = Apishka_Templater_Node_Expression_Constant::apishka(null, $this->parser->getCurrentToken()->getLine());
             }
             $args[$name] = $value;
         } else {
             if (null === $name) {
                 $args[] = $value;
             } else {
                 $args[$name] = $value;
             }
         }
     }
     $stream->expect(Apishka_Templater_Token::PUNCTUATION_TYPE, ')', 'A list of arguments must be closed by a parenthesis');
     return Apishka_Templater_Node::apishka($args);
 }
Example #6
0
    public function getTests()
    {
        $tests = array();
        $keyTarget = Apishka_Templater_Node_Expression_AssignName::apishka('key', 1);
        $valueTarget = Apishka_Templater_Node_Expression_AssignName::apishka('item', 1);
        $seq = Apishka_Templater_Node_Expression_Name::apishka('items', 1);
        $ifexpr = null;
        $body = Apishka_Templater_Node::apishka(array(Apishka_Templater_Node_Print::apishka(Apishka_Templater_Node_Expression_Name::apishka('foo', 1), 1)), array(), 1);
        $else = null;
        $node = Apishka_Templater_Node_For::apishka($keyTarget, $valueTarget, $seq, $ifexpr, $body, $else, 1);
        $node->setAttribute('with_loop', false);
        $tests[] = array($node, <<<EOF
// line 1
\$context['_parent'] = \$context;
\$context['_seq'] = twig_ensure_traversable({$this->getVariableGetter('items')});
foreach (\$context['_seq'] as \$context["key"] => \$context["item"]) {
    echo {$this->getVariableGetter('foo')};
}
\$_parent = \$context['_parent'];
unset(\$context['_seq'], \$context['_iterated'], \$context['key'], \$context['item'], \$context['_parent'], \$context['loop']);
\$context = array_intersect_key(\$context, \$_parent) + \$_parent;
EOF
);
        $keyTarget = Apishka_Templater_Node_Expression_AssignName::apishka('k', 1);
        $valueTarget = Apishka_Templater_Node_Expression_AssignName::apishka('v', 1);
        $seq = Apishka_Templater_Node_Expression_Name::apishka('values', 1);
        $ifexpr = null;
        $body = Apishka_Templater_Node::apishka(array(Apishka_Templater_Node_Print::apishka(Apishka_Templater_Node_Expression_Name::apishka('foo', 1), 1)), array(), 1);
        $else = null;
        $node = Apishka_Templater_Node_For::apishka($keyTarget, $valueTarget, $seq, $ifexpr, $body, $else, 1);
        $node->setAttribute('with_loop', true);
        $tests[] = array($node, <<<EOF
// line 1
\$context['_parent'] = \$context;
\$context['_seq'] = twig_ensure_traversable({$this->getVariableGetter('values')});
\$context['loop'] = array(
  'parent' => \$context['_parent'],
  'index0' => 0,
  'index'  => 1,
  'first'  => true,
);
if (is_array(\$context['_seq']) || (is_object(\$context['_seq']) && \$context['_seq'] instanceof Countable)) {
    \$length = count(\$context['_seq']);
    \$context['loop']['revindex0'] = \$length - 1;
    \$context['loop']['revindex'] = \$length;
    \$context['loop']['length'] = \$length;
    \$context['loop']['last'] = 1 === \$length;
}
foreach (\$context['_seq'] as \$context["k"] => \$context["v"]) {
    echo {$this->getVariableGetter('foo')};
    ++\$context['loop']['index0'];
    ++\$context['loop']['index'];
    \$context['loop']['first'] = false;
    if (isset(\$context['loop']['length'])) {
        --\$context['loop']['revindex0'];
        --\$context['loop']['revindex'];
        \$context['loop']['last'] = 0 === \$context['loop']['revindex0'];
    }
}
\$_parent = \$context['_parent'];
unset(\$context['_seq'], \$context['_iterated'], \$context['k'], \$context['v'], \$context['_parent'], \$context['loop']);
\$context = array_intersect_key(\$context, \$_parent) + \$_parent;
EOF
);
        $keyTarget = Apishka_Templater_Node_Expression_AssignName::apishka('k', 1);
        $valueTarget = Apishka_Templater_Node_Expression_AssignName::apishka('v', 1);
        $seq = Apishka_Templater_Node_Expression_Name::apishka('values', 1);
        $ifexpr = Apishka_Templater_Node_Expression_Constant::apishka(true, 1);
        $body = Apishka_Templater_Node::apishka(array(Apishka_Templater_Node_Print::apishka(Apishka_Templater_Node_Expression_Name::apishka('foo', 1), 1)), array(), 1);
        $else = null;
        $node = Apishka_Templater_Node_For::apishka($keyTarget, $valueTarget, $seq, $ifexpr, $body, $else, 1);
        $node->setAttribute('with_loop', true);
        $tests[] = array($node, <<<EOF
// line 1
\$context['_parent'] = \$context;
\$context['_seq'] = twig_ensure_traversable({$this->getVariableGetter('values')});
\$context['loop'] = array(
  'parent' => \$context['_parent'],
  'index0' => 0,
  'index'  => 1,
  'first'  => true,
);
foreach (\$context['_seq'] as \$context["k"] => \$context["v"]) {
    if (true) {
        echo {$this->getVariableGetter('foo')};
        ++\$context['loop']['index0'];
        ++\$context['loop']['index'];
        \$context['loop']['first'] = false;
    }
}
\$_parent = \$context['_parent'];
unset(\$context['_seq'], \$context['_iterated'], \$context['k'], \$context['v'], \$context['_parent'], \$context['loop']);
\$context = array_intersect_key(\$context, \$_parent) + \$_parent;
EOF
);
        $keyTarget = Apishka_Templater_Node_Expression_AssignName::apishka('k', 1);
        $valueTarget = Apishka_Templater_Node_Expression_AssignName::apishka('v', 1);
        $seq = Apishka_Templater_Node_Expression_Name::apishka('values', 1);
        $ifexpr = null;
        $body = Apishka_Templater_Node::apishka(array(Apishka_Templater_Node_Print::apishka(Apishka_Templater_Node_Expression_Name::apishka('foo', 1), 1)), array(), 1);
        $else = Apishka_Templater_Node_Print::apishka(Apishka_Templater_Node_Expression_Name::apishka('foo', 1), 1);
        $node = Apishka_Templater_Node_For::apishka($keyTarget, $valueTarget, $seq, $ifexpr, $body, $else, 1);
        $node->setAttribute('with_loop', true);
        $tests[] = array($node, <<<EOF
// line 1
\$context['_parent'] = \$context;
\$context['_seq'] = twig_ensure_traversable({$this->getVariableGetter('values')});
\$context['_iterated'] = false;
\$context['loop'] = array(
  'parent' => \$context['_parent'],
  'index0' => 0,
  'index'  => 1,
  'first'  => true,
);
if (is_array(\$context['_seq']) || (is_object(\$context['_seq']) && \$context['_seq'] instanceof Countable)) {
    \$length = count(\$context['_seq']);
    \$context['loop']['revindex0'] = \$length - 1;
    \$context['loop']['revindex'] = \$length;
    \$context['loop']['length'] = \$length;
    \$context['loop']['last'] = 1 === \$length;
}
foreach (\$context['_seq'] as \$context["k"] => \$context["v"]) {
    echo {$this->getVariableGetter('foo')};
    \$context['_iterated'] = true;
    ++\$context['loop']['index0'];
    ++\$context['loop']['index'];
    \$context['loop']['first'] = false;
    if (isset(\$context['loop']['length'])) {
        --\$context['loop']['revindex0'];
        --\$context['loop']['revindex'];
        \$context['loop']['last'] = 0 === \$context['loop']['revindex0'];
    }
}
if (!\$context['_iterated']) {
    echo {$this->getVariableGetter('foo')};
}
\$_parent = \$context['_parent'];
unset(\$context['_seq'], \$context['_iterated'], \$context['k'], \$context['v'], \$context['_parent'], \$context['loop']);
\$context = array_intersect_key(\$context, \$_parent) + \$_parent;
EOF
);
        return $tests;
    }
 public function getTestsForString()
 {
     return array(array('{{ "foo" }}', Apishka_Templater_Node_Expression_Constant::apishka('foo', 1)), array('{{ "foo #{bar}" }}', Apishka_Templater_Node_Expression_Binary_Concat::apishka(Apishka_Templater_Node_Expression_Constant::apishka('foo ', 1), Apishka_Templater_Node_Expression_Name::apishka('bar', 1), 1)), array('{{ "foo #{bar} baz" }}', Apishka_Templater_Node_Expression_Binary_Concat::apishka(Apishka_Templater_Node_Expression_Binary_Concat::apishka(Apishka_Templater_Node_Expression_Constant::apishka('foo ', 1), Apishka_Templater_Node_Expression_Name::apishka('bar', 1), 1), Apishka_Templater_Node_Expression_Constant::apishka(' baz', 1), 1)), array('{{ "foo #{"foo #{bar} baz"} baz" }}', Apishka_Templater_Node_Expression_Binary_Concat::apishka(Apishka_Templater_Node_Expression_Binary_Concat::apishka(Apishka_Templater_Node_Expression_Constant::apishka('foo ', 1), Apishka_Templater_Node_Expression_Binary_Concat::apishka(Apishka_Templater_Node_Expression_Binary_Concat::apishka(Apishka_Templater_Node_Expression_Constant::apishka('foo ', 1), Apishka_Templater_Node_Expression_Name::apishka('bar', 1), 1), Apishka_Templater_Node_Expression_Constant::apishka(' baz', 1), 1), 1), Apishka_Templater_Node_Expression_Constant::apishka(' baz', 1), 1)));
 }