Newer
Older
<?php
namespace Syna\Test\View;
use Syna\Factory;
use Syna\Test\TestCase;
use Mockery as m;
use Syna\View;
use Syna\ViewLocator;
/**
* Class UsingHelpersTest
*
* @package Syna\Test\View
* @author Thomas Flori <thflori@gmail.com>
* @covers \Syna\View
*/
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
class UsingHelpersTest extends TestCase
{
/** @var m\Mock|Factory */
protected $factory;
protected function setUp()
{
parent::setUp();
$this->factory = m::mock(Factory::class, [new ViewLocator($this->templatePath)])->makePartial();
}
/** @test */
public function callsHelperForUndefinedMethods()
{
$this->createTemplate('test.php', '<?= $v->upper($input) ?>');
$this->factory->getHelperLocator()->add('upper', 'strtoupper');
$result = $this->factory->render('test', ['input' => 'Hello World!']);
self::assertSame('HELLO WORLD!', $result);
$this->factory->shouldHaveReceived('helper')->with(m::type(View::class), 'upper', 'Hello World!')->once();
}
/** @test */
public function batchProcessingHelpers()
{
$this->factory->getHelperLocator()->add('lower', 'strtolower');
$this->factory->getHelperLocator()->add('ucwords', 'ucwords'); // not needed
$this->createTemplate('title.php', '<?= $v->batch($title, \'lower|ucwords\') ?>');
$view = $this->factory->view('title', ['title' => 'welcome to SYNA']);
$this->factory->shouldReceive('helper')->with($view, 'lower', 'welcome to SYNA')
->once()->ordered()->passthru();
$this->factory->shouldReceive('helper')->with($view, 'ucwords', 'welcome to syna')
->once()->ordered()->passthru();
$result = $view->render();
self::assertSame('Welcome To Syna', $result);
}
/** @test */
public function escapingHelpersOutput()
{
$var = (object) ['id' => 23, 'name' => 'John Doe'];
$this->factory->getHelperLocator()->add('dump', function ($var) {
return print_r($var, true);
});
$this->createTemplate('dump.php', '<?= $e($var, \'dump\') ?>');
$view = $this->factory->view('dump', ['var' => $var]);
$this->factory->shouldReceive('helper')->with($view, 'dump', $var)
->once()->passthru();
$result = $view->render();
self::assertSame(
'stdClass Object' . PHP_EOL .
'(' . PHP_EOL .
' [id] => 23' . PHP_EOL .
' [name] => John Doe' . PHP_EOL .
')',
$result
);
}
}