Skip to content

Commit 843493f

Browse files
f3l1xdg
authored andcommitted
MicroPresenter: fixed using of template API [Closes #57]
1 parent fae0f1b commit 843493f

2 files changed

Lines changed: 185 additions & 6 deletions

File tree

src/Application/MicroPresenter.php

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010
use Nette,
1111
Nette\Application,
1212
Nette\Application\Responses,
13-
Nette\Http;
13+
Nette\Http,
14+
Latte;
1415

1516

1617
/**
@@ -93,12 +94,12 @@ public function run(Application\Request $request)
9394
$response = array($response, array());
9495
}
9596
if (is_array($response)) {
96-
$response = $this->createTemplate()->setParameters($response[1]);
97-
if ($response[0] instanceof \SplFileInfo) {
98-
$response->setFile($response[0]);
99-
} else {
100-
$response->setSource($response[0]);
97+
list($templateSource, $templateParams) = $response;
98+
$response = $this->createTemplate()->setParameters($templateParams);
99+
if (!$templateSource instanceof \SplFileInfo) {
100+
$response->getLatte()->setLoader(new Latte\Loaders\StringLoader);
101101
}
102+
$response->setFile($templateSource);
102103
}
103104
if ($response instanceof Application\UI\ITemplate) {
104105
return new Responses\TextResponse($response);
Lines changed: 178 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,178 @@
1+
<?php
2+
3+
/**
4+
* Test: NetteModule\MicroPresenter
5+
*/
6+
7+
use Nette\Application\Request,
8+
Nette\Http,
9+
Tester\Assert;
10+
11+
12+
require __DIR__ . '/../bootstrap.php';
13+
14+
15+
class LatteFactory implements Nette\Bridges\ApplicationLatte\ILatteFactory
16+
{
17+
private $engine;
18+
19+
public function __construct(Latte\Engine $engine)
20+
{
21+
$this->engine = $engine;
22+
}
23+
24+
public function create()
25+
{
26+
return $this->engine;
27+
}
28+
}
29+
30+
31+
class MicroContainer extends Nette\DI\Container
32+
{
33+
34+
protected $meta = array(
35+
'types' => array(
36+
'nette\\bridges\\applicationlatte\\ilattefactory' => array(1 => array('latte.latteFactory')),
37+
),
38+
);
39+
40+
public static function create()
41+
{
42+
$container = new self();
43+
$container->addService('latte.latteFactory', new LatteFactory(new Latte\Engine()));
44+
return $container;
45+
}
46+
}
47+
48+
49+
class Responder
50+
{
51+
public static function render(Nette\Application\Responses\TextResponse $response)
52+
{
53+
ob_start();
54+
$response->send(new Http\Request(new Http\UrlScript()), new Http\Response(NULL));
55+
return ob_get_clean();
56+
}
57+
}
58+
59+
60+
test(function () {
61+
$presenter = new NetteModule\MicroPresenter(MicroContainer::create());
62+
$response = $presenter->run(new Request('Nette:Micro', 'GET', array(
63+
'callback' => function () {
64+
return 'test';
65+
},
66+
)));
67+
68+
Assert::type('Nette\Application\Responses\TextResponse', $response);
69+
Assert::same('test', Responder::render($response));
70+
});
71+
72+
73+
test(function () {
74+
$presenter = new NetteModule\MicroPresenter(MicroContainer::create());
75+
$response = $presenter->run(new Request('Nette:Micro', 'GET', array(
76+
'callback' => function ($param) {
77+
return $param;
78+
},
79+
'param' => 'test'
80+
)));
81+
82+
Assert::type('Nette\Application\Responses\TextResponse', $response);
83+
Assert::same('test', Responder::render($response));
84+
});
85+
86+
87+
test(function () {
88+
$presenter = new NetteModule\MicroPresenter(MicroContainer::create());
89+
$response = $presenter->run(new Request('Nette:Micro', 'GET', array(
90+
'callback' => function () {
91+
return '{=date(Y)}';
92+
},
93+
)));
94+
95+
Assert::type('Nette\Application\Responses\TextResponse', $response);
96+
Assert::same(date('Y'), Responder::render($response));
97+
});
98+
99+
100+
test(function () {
101+
$presenter = new NetteModule\MicroPresenter(MicroContainer::create());
102+
$response = $presenter->run(new Request('Nette:Micro', 'GET', array(
103+
'callback' => function () {
104+
return array(new SplFileInfo(Tester\FileMock::create('{$param}')), array());
105+
},
106+
'param' => 'test',
107+
)));
108+
109+
Assert::type('Nette\Application\Responses\TextResponse', $response);
110+
Assert::same('test', Responder::render($response));
111+
});
112+
113+
114+
test(function () {
115+
$latteFactory = new LatteFactory(new Latte\Engine());
116+
$presenter = new NetteModule\MicroPresenter;
117+
118+
$response = $presenter->run(new Request('Nette:Micro', 'GET', array(
119+
'callback' => function ($presenter) use ($latteFactory) {
120+
$template = $presenter->createTemplate(NULL, function () use ($latteFactory) {
121+
return $latteFactory->create();
122+
});
123+
$template->getLatte()->setLoader(new Latte\Loaders\StringLoader);
124+
$template->setFile('test');
125+
126+
return $template;
127+
},
128+
)));
129+
130+
Assert::type('Nette\Application\Responses\TextResponse', $response);
131+
Assert::same('test', Responder::render($response));
132+
});
133+
134+
135+
test(function () {
136+
$latteFactory = new LatteFactory(new Latte\Engine());
137+
$presenter = new NetteModule\MicroPresenter;
138+
139+
$response = $presenter->run(new Request('Nette:Micro', 'GET', array(
140+
'callback' => function ($presenter) use ($latteFactory) {
141+
$template = $presenter->createTemplate(NULL, function () use ($latteFactory) {
142+
return $latteFactory->create();
143+
});
144+
$template->getLatte()->setLoader(new Latte\Loaders\FileLoader());
145+
$template->setFile(new SplFileInfo(Tester\FileMock::create('{$param}')));
146+
$template->setParameters(array('param' => 'test'));
147+
148+
return $template;
149+
},
150+
)));
151+
152+
Assert::type('Nette\Application\Responses\TextResponse', $response);
153+
Assert::same('test', Responder::render($response));
154+
});
155+
156+
157+
test(function () {
158+
$filename = 'notfound.latte';
159+
Assert::throws(function () use ($filename) {
160+
$latteFactory = new LatteFactory(new Latte\Engine());
161+
$presenter = new NetteModule\MicroPresenter;
162+
163+
$response = $presenter->run(new Request('Nette:Micro', 'GET', array(
164+
'callback' => function ($presenter) use ($latteFactory, $filename) {
165+
$template = $presenter->createTemplate(NULL, function () use ($latteFactory) {
166+
return $latteFactory->create();
167+
});
168+
$template->getLatte()->setLoader(new Latte\Loaders\FileLoader());
169+
$template->setFile($filename);
170+
$template->setParameters(array('param' => 'test'));
171+
172+
return $template;
173+
},
174+
)));
175+
176+
Responder::render($response);
177+
}, '\RuntimeException', "Missing template file '$filename'.");
178+
});

0 commit comments

Comments
 (0)