Skip to content

Commit b5520be

Browse files
committed
tests: added more tests
1 parent deef643 commit b5520be

File tree

2 files changed

+106
-0
lines changed

2 files changed

+106
-0
lines changed
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
<?php
2+
3+
/**
4+
* Test: UIMacros, n:snippet
5+
*/
6+
7+
declare(strict_types=1);
8+
9+
use Nette\Bridges\ApplicationLatte\SnippetBridge;
10+
use Nette\Bridges\ApplicationLatte\UIMacros;
11+
use Tester\Assert;
12+
13+
14+
require __DIR__ . '/../bootstrap.php';
15+
16+
17+
18+
class TestPresenter extends Nette\Application\UI\Presenter
19+
{
20+
public function render(string $template)
21+
{
22+
$latte = new Latte\Engine;
23+
$latte->setLoader(new Latte\Loaders\StringLoader);
24+
UIMacros::install($latte->getCompiler());
25+
$latte->addProvider('uiControl', $this);
26+
$latte->addProvider('snippetBridge', new SnippetBridge($this));
27+
$latte->render($template, ['presenter' => $this]);
28+
}
29+
}
30+
31+
32+
$presenter = new TestPresenter;
33+
$presenter->snippetMode = true;
34+
$presenter->redrawControl('foo');
35+
$presenter->render('<div n:snippet=foo>Hello</div>');
36+
Assert::same([
37+
'snippets' => [
38+
'snippet--foo' => 'Hello',
39+
],
40+
], (array) $presenter->payload);
41+
42+
43+
$presenter = new TestPresenter;
44+
$presenter->snippetMode = true;
45+
$presenter->redrawControl('foo');
46+
Assert::exception(function () use ($presenter) {
47+
$presenter->render('<div id="x" n:snippet=foo>Hello</div>');
48+
}, Latte\CompileException::class, 'Cannot combine HTML attribute id with n:snippet.');
49+
50+
51+
$presenter = new TestPresenter;
52+
$presenter->snippetMode = true;
53+
$presenter->redrawControl('foo');
54+
Assert::exception(function () use ($presenter) {
55+
$presenter->render('<div n:snippet="$foo">Hello</div>');
56+
}, Latte\CompileException::class, 'Dynamic snippets are allowed only inside static snippet/snippetArea.');
57+
58+
59+
$presenter = new TestPresenter;
60+
$presenter->snippetMode = true;
61+
$presenter->redrawControl('foo');
62+
Assert::exception(function () use ($presenter) {
63+
$presenter->render('<div n:snippet="foo"><div id="x" n:snippet="$foo">Hello</div></div>');
64+
}, Latte\CompileException::class, 'Cannot combine HTML attribute id with n:snippet.');
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?php
2+
3+
/**
4+
* Test: UIMacros and n:snippet and custom HTML attribute.
5+
*/
6+
7+
declare(strict_types=1);
8+
9+
use Nette\Bridges\ApplicationLatte\UIMacros;
10+
use Tester\Assert;
11+
12+
13+
require __DIR__ . '/../bootstrap.php';
14+
15+
16+
class TestPresenter extends Nette\Application\UI\Presenter
17+
{
18+
public function render(string $template)
19+
{
20+
$latte = new Latte\Engine;
21+
$latte->setLoader(new Latte\Loaders\StringLoader);
22+
UIMacros::install($latte->getCompiler());
23+
$latte->addProvider('snippetBridge', new Nette\Bridges\ApplicationLatte\SnippetBridge($this));
24+
$latte->onCompile[] = function ($latte) {
25+
$latte->getCompiler()->getMacros()['snippet'][0]->snippetAttribute = 'data-snippet';
26+
};
27+
$latte->render($template);
28+
}
29+
}
30+
31+
32+
$presenter = new TestPresenter;
33+
ob_start();
34+
$presenter->render('<div n:snippet=test>hello</div>');
35+
$content = ob_get_clean();
36+
Assert::same('<div data-snippet="snippet--test">hello</div>', $content);
37+
38+
39+
$presenter = new TestPresenter;
40+
Assert::exception(function () use ($presenter) {
41+
$presenter->render('<div n:snippet=test data-snippet>hello</div>');
42+
}, Latte\CompileException::class, 'Cannot combine HTML attribute data-snippet with n:snippet.');

0 commit comments

Comments
 (0)