mirror of
https://github.com/twigphp/Twig.git
synced 2026-09-14 11:27:00 +00:00
fixed functions
This commit is contained in:
committed by
Fabien Potencier
parent
a9127329fb
commit
46eb49e7e5
@@ -24,15 +24,21 @@ class Twig_Node_Expression_Function extends Twig_Node_Expression
|
||||
|
||||
$compiler
|
||||
->raw($function->compile().'(')
|
||||
->raw($function->needsEnvironment() ? '$this->env, ' : '')
|
||||
->raw($function->needsContext() ? '$context, ' : '')
|
||||
->raw($function->needsEnvironment() ? '$this->env' : '')
|
||||
;
|
||||
|
||||
if ($function->needsContext()) {
|
||||
$compiler->raw($function->needsEnvironment() ? ', $context' : '$context');
|
||||
}
|
||||
|
||||
$first = true;
|
||||
foreach ($this->getNode('arguments') as $node) {
|
||||
if (!$first) {
|
||||
$compiler->raw(', ');
|
||||
} else {
|
||||
if ($function->needsEnvironment() || $function->needsContext()) {
|
||||
$compiler->raw(', ');
|
||||
}
|
||||
$first = false;
|
||||
}
|
||||
$compiler->subcompile($node);
|
||||
|
||||
@@ -0,0 +1,92 @@
|
||||
<?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.
|
||||
*/
|
||||
|
||||
require_once dirname(__FILE__).'/../TestCase.php';
|
||||
|
||||
class Twig_Tests_Node_Expression_FunctionTest extends Twig_Tests_Node_TestCase
|
||||
{
|
||||
/**
|
||||
* @covers Twig_Node_Expression_Function::__construct
|
||||
*/
|
||||
public function testConstructor()
|
||||
{
|
||||
$name = new Twig_Node_Expression_Name('function', 0);
|
||||
$args = new Twig_Node();
|
||||
$node = new Twig_Node_Expression_Function($name, $args, 0);
|
||||
|
||||
$this->assertEquals($name, $node->getNode('name'));
|
||||
$this->assertEquals($args, $node->getNode('arguments'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Twig_Node_Expression_Function::compile
|
||||
* @dataProvider getTests
|
||||
*/
|
||||
public function testCompile($node, $source, $environment = null)
|
||||
{
|
||||
parent::testCompile($node, $source, $environment);
|
||||
}
|
||||
|
||||
public function testUnknownFunction()
|
||||
{
|
||||
$node = $this->createFunction('unknown', array());
|
||||
try {
|
||||
$node->compile($this->getCompiler());
|
||||
$this->fail();
|
||||
} catch (Exception $e) {
|
||||
$this->assertEquals('Twig_Error_Syntax', get_class($e));
|
||||
}
|
||||
}
|
||||
|
||||
public function getTests()
|
||||
{
|
||||
$environment = new Twig_Environment();
|
||||
$environment->addFunction('foo', new Twig_Function_Function('foo', array()));
|
||||
$environment->addFunction('bar', new Twig_Function_Function('bar', array('needs_environment' => true)));
|
||||
$environment->addFunction('foofoo', new Twig_Function_Function('foofoo', array('needs_context' => true)));
|
||||
$environment->addFunction('foobar', new Twig_Function_Function('foobar', array('needs_environment' => true, 'needs_context' => true)));
|
||||
|
||||
$tests = array();
|
||||
|
||||
$node = $this->createFunction('foo');
|
||||
$tests[] = array($node, 'foo()', $environment);
|
||||
|
||||
$node = $this->createFunction('foo', array(new Twig_Node_Expression_Constant('bar', 0), new Twig_Node_Expression_Constant('foobar', 0)));
|
||||
$tests[] = array($node, 'foo("bar", "foobar")', $environment);
|
||||
|
||||
$node = $this->createFunction('bar');
|
||||
$tests[] = array($node, 'bar($this->env)', $environment);
|
||||
|
||||
$node = $this->createFunction('bar', array(new Twig_Node_Expression_Constant('bar', 0)));
|
||||
$tests[] = array($node, 'bar($this->env, "bar")', $environment);
|
||||
|
||||
$node = $this->createFunction('foofoo');
|
||||
$tests[] = array($node, 'foofoo($context)', $environment);
|
||||
|
||||
$node = $this->createFunction('foofoo', array(new Twig_Node_Expression_Constant('bar', 0)));
|
||||
$tests[] = array($node, 'foofoo($context, "bar")', $environment);
|
||||
|
||||
$node = $this->createFunction('foobar');
|
||||
$tests[] = array($node, 'foobar($this->env, $context)', $environment);
|
||||
|
||||
$node = $this->createFunction('foobar', array(new Twig_Node_Expression_Constant('bar', 0)));
|
||||
$tests[] = array($node, 'foobar($this->env, $context, "bar")', $environment);
|
||||
|
||||
return $tests;
|
||||
}
|
||||
|
||||
protected function createFunction($name, array $arguments = array())
|
||||
{
|
||||
$name = new Twig_Node_Expression_Name($name, 0);
|
||||
$arguments = new Twig_Node($arguments);
|
||||
return new Twig_Node_Expression_Function($name, $arguments, 0);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user