Skip to content
This repository was archived by the owner on Apr 13, 2020. It is now read-only.

Commit ef2621d

Browse files
committed
New PHP tests
1 parent 60d83cb commit ef2621d

File tree

62 files changed

+2037
-248
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

62 files changed

+2037
-248
lines changed

UnitTests/TemplateSource/TagTests/Php/CompilePhpTest.php

Lines changed: 86 additions & 248 deletions
Original file line numberDiff line numberDiff line change
@@ -28,162 +28,29 @@ public function testInit()
2828
$this->cleanDirs();
2929
}
3030

31-
/**
32-
* test <?php...\> tag
33-
* PHP_REMOVE
34-
*/
35-
public function testPHP_REMOVE_php()
36-
{
37-
$this->smarty->setPhpHandling(Smarty::PHP_REMOVE);
38-
$content = $this->smarty->fetch("string:a<?php echo 'hello world'; ?>e");
39-
$this->assertEquals("a echo 'hello world'; e", $content, 'remove <?php ?>');
40-
}
4131

4232
/**
43-
* test <%...%> tag
44-
* PHP_REMOVE
45-
*/
46-
public function testPHP_REMOVE_asp()
47-
{
48-
$this->smarty->setPhpHandling(Smarty::PHP_REMOVE);
49-
$content = $this->smarty->fetch("string:a<% echo 'hello world';%>e");
50-
$this->assertEquals("a echo 'hello world';e", $content, 'remove <% %>');
51-
}
52-
/**
53-
* test <script language='php'>...</script> tag
54-
* PHP_REMOVE
55-
*/
56-
public function testPHP_REMOVE_script()
57-
{
58-
$this->smarty->setPhpHandling(Smarty::PHP_REMOVE);
59-
$content = $this->smarty->fetch("string:a<script language='php'> echo 'hello world';</script>e");
60-
$this->assertEquals("a echo 'hello world';e", $content, "remove <script language='php'>");
61-
}
62-
/**
63-
* test <?php...\> tag
64-
* PHP_PASSTHRU
65-
*/
66-
public function testPHP_PASSTHRU_php()
67-
{
68-
$this->smarty->setPhpHandling(Smarty::PHP_PASSTHRU);
69-
$content = $this->smarty->fetch("string:pa<?php echo 'hello world'; ?>pe");
70-
$this->assertEquals("pa<?php echo 'hello world'; ?>pe", $content, 'passthru <?php ?>');
71-
}
72-
/**
73-
* test <%...%> tag
74-
* PHP_PASSTHRU
75-
*/
76-
public function testPHP_PASSTHRU_asp()
77-
{
78-
$this->smarty->setPhpHandling(Smarty::PHP_PASSTHRU);
79-
$content = $this->smarty->fetch("string:pa<% echo 'hello world';%>pe");
80-
$this->assertEquals("pa<% echo 'hello world';%>pe", $content, 'passthru <% %>');
81-
}
82-
/**
83-
* test <script language='php'>...</script> tag
84-
* PHP_PASSTHRU
85-
*/
86-
public function testPHP_PASSTHRU_script()
87-
{
88-
$this->smarty->setPhpHandling(Smarty::PHP_PASSTHRU);
89-
$content = $this->smarty->fetch("string:pa<script language='php'> echo 'hello world';</script>pe");
90-
$this->assertEquals("pa<script language='php'> echo 'hello world';</script>pe", $content, "passthru <script language='php'>");
91-
}
92-
/**
93-
* test <?php...\> tag
94-
* PHP_QUOTE
95-
*/
96-
public function testPHP_QUOTE_php()
97-
{
98-
$this->smarty->setPhpHandling(Smarty::PHP_QUOTE);
99-
$content = $this->smarty->fetch("string:qa<?php echo 'hello world';\necho ' multiline'; ?>qe");
100-
$this->assertEquals("qa&lt;?php echo 'hello world';\necho ' multiline'; ?&gt;qe", $content, 'qoute <?php ?>');
101-
}
102-
/**
103-
* test <%...%> tag
104-
* PHP_QUOTE
105-
*/
106-
public function testPHP_QUOTE_asp()
107-
{
108-
$this->smarty->setPhpHandling(Smarty::PHP_QUOTE);
109-
$content = $this->smarty->fetch("string:qa<% echo 'hello world';%>qe");
110-
$this->assertEquals("qa&lt;% echo 'hello world';%&gt;qe", $content, 'qoute <% %>');
111-
}
112-
/**
113-
* test <script language='php'>...</script> tag
114-
* PHP_QUOTE
115-
*/
116-
public function testPHP_QUOTE_script()
117-
{
118-
$this->smarty->setPhpHandling(Smarty::PHP_QUOTE);
119-
$content = $this->smarty->fetch("string:qa<script language='php'> echo 'hello world';</script>qe");
120-
$this->assertEquals("qa&lt;script language=&#039;php&#039;&gt; echo 'hello world';&lt;/script&gt;qe", $content, "quote <script language='php'>");
121-
}
122-
/**
123-
* test <?php...\> tag
124-
* PHP_ALLOW
125-
*/
126-
public function testPHP_ALLOW_php()
127-
{
128-
$this->smartyBC->setPhpHandling(Smarty::PHP_ALLOW);
129-
$content = $this->smartyBC->fetch("string:aa <?php echo 'hello world'; ?> ae");
130-
}
131-
/**
132-
* test <%...%> tag
133-
* PHP_ALLOW
33+
* Test
34+
* @run inSeparateProcess
35+
* @preserveGlobalState disabled
36+
* @dataProvider data
37+
*
13438
*/
135-
public function testPHP_ALLOW_asp()
39+
public function testPHP($phpHandling, $templateFile, $result, $testName)
13640
{
137-
$this->smartyBC->setPhpHandling(Smarty::PHP_ALLOW);
138-
$content = $this->smartyBC->fetch("string:aa <% echo 'hello world';\n echo ' multiline';%> ae");
139-
if (ini_get('asp_tags')) {
140-
$this->assertEquals('aa hello world multiline ae', $content, 'allow <% %>');
141-
} else {
142-
$this->assertEquals("aa <% echo 'hello world';\n echo ' multiline';%> ae", $content, 'allow asp disabled <% %>');
41+
$result = str_replace("\r", '', $result);
42+
$this->smartyBC->php_handling = $phpHandling;
43+
$this->smartyBC->compile_id = $testName;
44+
$tpl = $this->smartyBC->createTemplate($templateFile);
45+
if ($phpHandling == Smarty::PHP_PASSTHRU || $phpHandling == Smarty::PHP_QUOTE) {
46+
$result = str_replace("\r", '', $tpl->source->content);
14347
}
48+
if ($phpHandling == Smarty::PHP_QUOTE) {
49+
$result = preg_replace_callback('#(<\?(?:php|=)?)|(<%)|(<script\s+language\s*=\s*["\']?\s*php\s*["\']?\s*>)|(\?>)|(%>)|(<\/script>)#i', array($this, 'quote'), $result);
50+
}
51+
$content = $tpl->fetch();
52+
$this->assertEquals($result, $content, $testName);
14453
}
145-
/**
146-
* test <script language='php'>...</script> tag
147-
* PHP_ALLOW
148-
*/
149-
public function testPHP_ALLOW_script()
150-
{
151-
$this->smartyBC->setPhpHandling(Smarty::PHP_ALLOW);
152-
$content = $this->smartyBC->fetch("string:aa <script language='php'> echo 'hello world';\n echo ' multiline';</script> ae");
153-
$this->assertEquals('aa hello world multiline ae', $content, "allow <script language='php'>");
154-
}
155-
/**
156-
* test <?php...\> tag
157-
* PHP_ALLOW
158-
*/
159-
public function testPHP_ALLOW_php2()
160-
{
161-
$this->smartyBC->setPhpHandling(Smarty::PHP_ALLOW);
162-
$content = $this->smartyBC->fetch("string:aa <?php echo '<?php';\necho ' ?>'; ?> ae");
163-
$this->assertEquals('aa <?php ?> ae', $content);
164-
}
165-
/**
166-
* test <?php...\> tag
167-
* PHP_ALLOW
168-
*/
169-
public function testPHP_ALLOW_php3()
170-
{
171-
$this->smartyBC->setPhpHandling(Smarty::PHP_ALLOW);
172-
$content = $this->smartyBC->fetch("string:aa <?php echo '?>'; ?> ae");
173-
$this->assertEquals('aa ?> ae', $content);
174-
}
175-
/**
176-
* test <?php...\> tag
177-
* PHP_ALLOW
178-
*/
179-
public function testPHP_ALLOW_php4()
180-
{
181-
$this->smartyBC->setPhpHandling(Smarty::PHP_ALLOW);
182-
$content = $this->smartyBC->fetch("string:aa <?php /* ?> */ echo '?>'; ?> ae");
183-
$this->assertEquals('aa ?> ae', $content);
184-
}
185-
186-
18754
/**
18855
* @expectedException SmartyCompilerException
18956
* @expectedExceptionMessage $smarty->php_handling PHP_ALLOW not allowed. Use SmartyBC to enable it
@@ -196,84 +63,22 @@ public function testPHP_ALLOW_error()
19663
}
19764

19865
/**
199-
* test <?=...\> shorttag
200-
* default is PASSTHRU
66+
* test {php nocache}{/php} tag
20167
*/
202-
public function testShortTag()
68+
public function testPHP_Tag_Nocache1()
20369
{
204-
$this->smartyBC->assign('foo', 'bar');
205-
$content = $this->smartyBC->fetch('eval:<?=$foo?>');
206-
$this->assertEquals('<?=$foo?>', $content);
70+
$this->smartyBC->caching = 1;
71+
$this->smartyBC->assign('foo', 'foo');
72+
$content = $this->smartyBC->fetch('phptag_nocache.tpl');
73+
$this->assertEquals('-->foo<--', $content);
20774
}
20875

209-
/**
210-
* test unmatched <?php
211-
*
212-
*/
213-
public function testUnmatched_php()
214-
{
215-
$this->smartyBC->setPhpHandling(Smarty::PHP_ALLOW);
216-
$content = $this->smartyBC->fetch('string:aa <?php ee');
217-
$this->assertEquals('aa <?php ee', $content);
218-
}
219-
/**
220-
* test unmatched ?>
221-
*
222-
*/
223-
public function testUnmatched_php_close()
224-
{
225-
$this->smartyBC->setPhpHandling(Smarty::PHP_ALLOW);
226-
$content = $this->smartyBC->fetch('string:aa ?> ee');
227-
$this->assertEquals('aa ?> ee', $content);
228-
}
229-
/**
230-
* test unmatched <%
231-
*
232-
*/
233-
public function testUnmatched_asp()
234-
{
235-
$this->smartyBC->setPhpHandling(Smarty::PHP_ALLOW);
236-
$content = $this->smartyBC->fetch('string:aa <% ee');
237-
$this->assertEquals('aa <% ee', $content);
238-
}
239-
/**
240-
* test unmatched %>
241-
*
242-
*/
243-
public function testUnmatched_asp_close()
244-
{
245-
$this->smartyBC->setPhpHandling(Smarty::PHP_ALLOW);
246-
$content = $this->smartyBC->fetch('string:aa %> ee');
247-
$this->assertEquals('aa %> ee', $content);
248-
}
249-
/**
250-
* test unmatched <script language='php'>
251-
*
252-
*/
253-
public function testUnmatched_script()
254-
{
255-
$this->smartyBC->setPhpHandling(Smarty::PHP_ALLOW);
256-
$content = $this->smartyBC->fetch("string:aa <script language='php'> echo 'hello world'; ae");
257-
$this->assertEquals("aa <script language='php'> echo 'hello world'; ae", $content);
258-
}
259-
/**
260-
* test {php}{/php} tag
261-
* PHP_ALLOW
262-
*/
263-
public function testPHP_Tag()
264-
{
265-
$content = $this->smartyBC->fetch("string:aa {php} echo 'hallo'; {/php} ae");
266-
$this->assertEquals('aa hallo ae', $content);
267-
}
268-
/**
269-
* test {php nocache}{/php} tag
270-
* PHP_ALLOW
271-
*/
272-
public function testPHP_Tag_Nocache()
76+
public function testPHP_Tag_Nocache2()
27377
{
27478
$this->smartyBC->caching = 1;
275-
$content = $this->smartyBC->fetch("string:aa {php nocache} echo 'hallo'; {/php} ae");
276-
$this->assertEquals('aa hallo ae', $content);
79+
$this->smartyBC->assign('foo', 'bar');
80+
$content = $this->smartyBC->fetch('phptag_nocache.tpl');
81+
$this->assertEquals('-->bar<--', $content);
27782
}
27883
/**
27984
* test {php no cache}illegal option
@@ -286,33 +91,66 @@ public function testPHP_Tag_IllegalOption()
28691
$content = $this->smartyBC->fetch("string:aa {php no cache} echo 'hallo'; {/php} ae");
28792
}
28893

289-
/**
290-
* test { php}{/php} tag
291-
* PHP_Tag Literal
292-
*/
293-
public function testPHP_Tag_Literal()
294-
{
295-
$content = $this->smartyBC->fetch("string:aa { php} echo 'hallo'; { /php} ae");
296-
$this->assertEquals('aa { php} echo \'hallo\'; { /php} ae', $content);
297-
}
298-
/**
299-
* test unmatched {php} tag
300-
* @expectedException SmartyCompilerException
301-
* @expectedExceptionMessage Missing {/php} closing tag
302-
*
303-
*/
304-
public function testPHP_Tag_unmatch()
94+
95+
public function data()
30596
{
306-
$content = $this->smartyBC->fetch("string:aa {php} echo 'hallo'; ae");
307-
}
308-
/**
309-
* test unmatched {/php} tag
310-
* @expectedException SmartyCompilerException
311-
* @expectedExceptionMessage Missing {php} open tag
312-
*
313-
*/
314-
public function testPHP_TagOpen_unmatch()
97+
$shortTag = ini_get('short_open_tag') == 1;
98+
$aspTag = ini_get('asp_tags') == 1;
99+
100+
return array(
101+
/*
102+
* php_handling
103+
* template file
104+
* result
105+
* text
106+
*/
107+
array(Smarty::PHP_REMOVE, 'php.tpl', '--><--', 'PHP_REMOVE, \'php.tpl\''),
108+
array(Smarty::PHP_PASSTHRU, 'php.tpl', '', 'PHP_PASSTHRU, \'php.tpl\''),
109+
array(Smarty::PHP_QUOTE, 'php.tpl', '', 'PHP_QUOTE, \'php.tpl\''),
110+
array(Smarty::PHP_ALLOW, 'php.tpl', '--> hello world <?php ?> <--', 'PHP_ALLOW, \'php.tpl\''),
111+
array(Smarty::PHP_REMOVE, 'php_line_comment.tpl', '--><--', 'PHP_REMOVE, \'php_line_comment.tpl\''),
112+
array(Smarty::PHP_PASSTHRU, 'php_line_comment.tpl', '', 'PHP_PASSTHRU, \'php_line_comment.tpl\''),
113+
array(Smarty::PHP_QUOTE, 'php_line_comment.tpl', '', 'PHP_QUOTE, \'php_line_comment.tpl\''),
114+
array(Smarty::PHP_ALLOW, 'php_line_comment.tpl', '--> hello world <?php ?> <--', 'PHP_ALLOW, \'php_line_comment.tpl\''),
115+
array(Smarty::PHP_REMOVE, 'php_block_comment.tpl', '--><--', 'PHP_REMOVE, \'php_block_comment.tpl\''),
116+
array(Smarty::PHP_PASSTHRU, 'php_block_comment.tpl', '', 'PHP_PASSTHRU, \'php_block_comment.tpl\''),
117+
array(Smarty::PHP_QUOTE, 'php_block_comment.tpl', '', 'PHP_QUOTE, \'php_block_comment.tpl\''),
118+
array(Smarty::PHP_ALLOW, 'php_block_comment.tpl', '--> hello world <?php ?> <--', 'PHP_ALLOW, \'php_block_comment.tpl\''),
119+
array(Smarty::PHP_REMOVE, 'php2.tpl', '--><--', 'PHP_REMOVE, \'php2.tpl\''),
120+
array(Smarty::PHP_PASSTHRU, 'php2.tpl', '', 'PHP_PASSTHRU, \'php2.tpl\''),
121+
array(Smarty::PHP_QUOTE, 'php2.tpl', '', 'PHP_QUOTE, \'php2.tpl\''),
122+
array(Smarty::PHP_ALLOW, 'php2.tpl', $shortTag ? '--> hello world <? ?> <--' : '--><? echo \' hello world \';
123+
echo \'<? \';
124+
echo \'?> \';
125+
?><--', 'PHP_ALLOW, \'php2.tpl\''),
126+
array(Smarty::PHP_REMOVE, 'asp.tpl', '--><--', 'PHP_REMOVE, \'asp.tpl\''),
127+
array(Smarty::PHP_PASSTHRU, 'asp.tpl', '', 'PHP_PASSTHRU, \'asp.tpl\''),
128+
array(Smarty::PHP_QUOTE, 'asp.tpl', '', 'PHP_QUOTE, \'asp.tpl\''),
129+
array(Smarty::PHP_ALLOW, 'asp.tpl', $aspTag ? '-->hello world <% %> <--' : '--><% echo \'hello world \';
130+
echo \'<% \';
131+
echo \'%> \';
132+
%><--', 'PHP_ALLOW, \'asp.tpl\''),
133+
array(Smarty::PHP_REMOVE, 'script.tpl', '--><--', 'PHP_REMOVE, \'script.tpl\''),
134+
array(Smarty::PHP_PASSTHRU, 'script.tpl', '', 'PHP_PASSTHRU, \'script.tpl\''),
135+
array(Smarty::PHP_QUOTE, 'script.tpl', '', 'PHP_QUOTE, \'script.tpl\''),
136+
array(Smarty::PHP_ALLOW, 'script.tpl', '--> hello world <script language=\'php\'> </script> <--', 'PHP_ALLOW, \'script.tpl\''),
137+
array(Smarty::PHP_ALLOW, 'phptag.tpl', '--> hello world {php} {/php} <--', 'PHP_ALLOW, \'phptag.tpl\''),
138+
array(Smarty::PHP_ALLOW, 'phptag_line_comment.tpl', '--> hello world {php} {/php} <--', 'PHP_ALLOW, \'phptag_line_comment.tpl\''),
139+
array(Smarty::PHP_ALLOW, 'phptag_block_comment.tpl', '--> hello world {php} {/php} <--', 'PHP_ALLOW, \'phptag_block_comment.tpl\''),
140+
array(Smarty::PHP_ALLOW, 'phptag_literal.tpl', '-->{ php} echo \' hello world \';
141+
echo \'foo \';
142+
echo \'bar \';
143+
$foo = 3;
144+
{ /php}<--', 'PHP_ALLOW, \'phptag_literal.tpl\''),
145+
);
146+
}
147+
/*
148+
* Call back function for $php_handling = PHP_QUOTE
149+
*
150+
*/
151+
private function quote($match)
315152
{
316-
$content = $this->smartyBC->fetch("string:aa {/php} ae");
153+
return htmlspecialchars($match[0], ENT_QUOTES);
317154
}
155+
318156
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?php
2+
/*%%SmartyHeaderCode:256605560a6a41fea39_24766095%%*/
3+
if(!defined('SMARTY_DIR')) exit('no direct access allowed');
4+
$_valid = $_smarty_tpl->decodeProperties(array (
5+
'file_dependency' =>
6+
array (
7+
'258487733f7ac8a0af3ec4397e7d90726fff8d1b' =>
8+
array (
9+
0 => './templates/phptag_nocache.tpl',
10+
1 => 1432394864,
11+
2 => 'file',
12+
),
13+
),
14+
'nocache_hash' => '256605560a6a41fea39_24766095',
15+
'tpl_function' =>
16+
array (
17+
),
18+
'has_nocache_code' => true,
19+
'version' => '3.1.24-dev/7',
20+
'unifunc' => 'content_5560a6a4244152_55149112',
21+
'cache_lifetime' => 3600,
22+
),true);
23+
/*/%%SmartyHeaderCode%%*/
24+
if ($_valid && !is_callable('content_5560a6a4244152_55149112')) {
25+
function content_5560a6a4244152_55149112 ($_smarty_tpl) {
26+
?>
27+
--><?php echo $_smarty_tpl->getTemplateVars('foo');
28+
?><--<?php }
29+
}
30+
?>

0 commit comments

Comments
 (0)