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
12use Twig\Environment;
13use Twig\Loader\ArrayLoader;
14
15class Twig_Tests_TemplateWrapperTest extends \PHPUnit\Framework\TestCase
16{
17    public function testHasGetBlocks()
18    {
19        $twig = new Environment(new ArrayLoader([
20            'index' => '{% block foo %}{% endblock %}',
21            'index_with_use' => '{% use "imported" %}{% block foo %}{% endblock %}',
22            'index_with_extends' => '{% extends "extended" %}{% block foo %}{% endblock %}',
23            'imported' => '{% block imported %}{% endblock %}',
24            'extended' => '{% block extended %}{% endblock %}',
25        ]));
26
27        $wrapper = $twig->load('index');
28        $this->assertTrue($wrapper->hasBlock('foo'));
29        $this->assertFalse($wrapper->hasBlock('bar'));
30        $this->assertEquals(['foo'], $wrapper->getBlockNames());
31
32        $wrapper = $twig->load('index_with_use');
33        $this->assertTrue($wrapper->hasBlock('foo'));
34        $this->assertTrue($wrapper->hasBlock('imported'));
35        $this->assertEquals(['imported', 'foo'], $wrapper->getBlockNames());
36
37        $wrapper = $twig->load('index_with_extends');
38        $this->assertTrue($wrapper->hasBlock('foo'));
39        $this->assertTrue($wrapper->hasBlock('extended'));
40        $this->assertEquals(['foo', 'extended'], $wrapper->getBlockNames());
41    }
42
43    public function testRenderBlock()
44    {
45        $twig = new Environment(new ArrayLoader([
46            'index' => '{% block foo %}{{ foo }}{{ bar }}{% endblock %}',
47        ]));
48        $twig->addGlobal('bar', 'BAR');
49
50        $wrapper = $twig->load('index');
51        $this->assertEquals('FOOBAR', $wrapper->renderBlock('foo', ['foo' => 'FOO']));
52    }
53
54    public function testDisplayBlock()
55    {
56        $twig = new Environment(new ArrayLoader([
57            'index' => '{% block foo %}{{ foo }}{{ bar }}{% endblock %}',
58        ]));
59        $twig->addGlobal('bar', 'BAR');
60
61        $wrapper = $twig->load('index');
62
63        ob_start();
64        $wrapper->displayBlock('foo', ['foo' => 'FOO']);
65
66        $this->assertEquals('FOOBAR', ob_get_clean());
67    }
68}
69