Project

General

Profile

1
<?php
2

    
3
/*
4
 * This file is part of Twig.
5
 *
6
 * (c) Fabien Potencier
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
abstract class Twig_Test_NodeTestCase extends PHPUnit_Framework_TestCase
12
{
13
    abstract public function getTests();
14

    
15
    /**
16
     * @dataProvider getTests
17
     */
18
    public function testCompile($node, $source, $environment = null)
19
    {
20
        $this->assertNodeCompilation($source, $node, $environment);
21
    }
22

    
23
    public function assertNodeCompilation($source, Twig_Node $node, Twig_Environment $environment = null)
24
    {
25
        $compiler = $this->getCompiler($environment);
26
        $compiler->compile($node);
27

    
28
        $this->assertEquals($source, trim($compiler->getSource()));
29
    }
30

    
31
    protected function getCompiler(Twig_Environment $environment = null)
32
    {
33
        return new Twig_Compiler(null === $environment ? $this->getEnvironment() : $environment);
34
    }
35

    
36
    protected function getEnvironment()
37
    {
38
        return new Twig_Environment();
39
    }
40

    
41
    protected function getVariableGetter($name)
42
    {
43
        if (version_compare(phpversion(), '5.4.0RC1', '>=')) {
44
            return sprintf('(isset($context["%s"]) ? $context["%s"] : null)', $name, $name);
45
        }
46

    
47
        return sprintf('$this->getContext($context, "%s")', $name);
48
    }
49

    
50
    protected function getAttributeGetter()
51
    {
52
        if (function_exists('twig_template_get_attributes')) {
53
            return 'twig_template_get_attributes($this, ';
54
        }
55

    
56
        return '$this->getAttribute(';
57
    }
58
}
(5-5/5)