diff --git a/library/think/Template.php b/library/think/Template.php index 82f5c83b..e967429d 100644 --- a/library/think/Template.php +++ b/library/think/Template.php @@ -976,9 +976,9 @@ class Template $begin = $this->config['tpl_begin']; $end = $this->config['tpl_end']; if (strlen(ltrim($begin, '\\')) == 1 && strlen(ltrim($end, '\\')) == 1) { - $regex = $begin . '((?:[\$\:\-\+~][\$a-wA-w_][\w\.\:\[\(\*\/\-\+\%_]|\/[\*\/])(?>[^' . $end . ']*))' . $end; + $regex = $begin . '((?:(?:[\$]{1,2}|[\:\~][\$a-wA-w_]|[+]{2}[\$]|[-]{2}[\$])[\w\.\:\[\(\*\/\-\+\%_]|\/[\*\/])(?>[^' . $end . ']*))' . $end; } else { - $regex = $begin . '((?:[\$\:\-\+~][\$a-wA-w_][\w\.\:\[\(\*\/\-\+\%_]|\/[\*\/])(?>(?:(?!' . $end . ').)*))' . $end; + $regex = $begin . '((?:(?:[\$]{1,2}|[\:\~][\$a-wA-w_]|[+]{2}[\$]|[-]{2}[\$])[\w\.\:\[\(\*\/\-\+\%_]|\/[\*\/])(?>(?:(?!' . $end . ').)*))' . $end; } break; } diff --git a/tests/thinkphp/library/think/template/taglib/cxTest.php b/tests/thinkphp/library/think/template/taglib/cxTest.php index 4adbc074..be421efc 100644 --- a/tests/thinkphp/library/think/template/taglib/cxTest.php +++ b/tests/thinkphp/library/think/template/taglib/cxTest.php @@ -52,7 +52,16 @@ EOF; EOF; $cx->parseTag($content); - $this->assertEquals($content, $data); + $this->assertEquals($data, $content); + + $content = <<fetch($content); + $this->expectOutputString('234'); } public function testForeach() @@ -74,18 +83,25 @@ EOF; $this->assertEquals($content, $data); $content = <<\$val): ?> - + EOF; $cx->parseTag($content); $this->assertEquals($content, $data); + $content = <<fetch($content); + $this->expectOutputString('234'); } public function testIf() @@ -125,9 +141,12 @@ EOF; {case \$a /} a {/case} -{case b} +{case b|c} b {/case} +{case d} +d +{/case} {default /} default {/switch} @@ -137,9 +156,12 @@ EOF; a - + b + +d + default @@ -154,12 +176,12 @@ EOF; $cx = new Cx($template); $content = << + default EOF; @@ -315,6 +337,13 @@ default EOF; $cx->parseTag($content); $this->assertEquals($content, $data); + + $content = <<fetch($content); + $this->expectOutputString('yesno'); } public function testPresent() @@ -419,10 +448,10 @@ EOF; $cx = new Cx($template); $content = << + EOF; $cx->parseTag($content); $this->assertEquals($content, $data); @@ -437,10 +466,10 @@ EOF; $this->assertEquals($content, $data); $content = << + EOF; $cx->parseTag($content); $this->assertEquals($content, $data); @@ -483,6 +512,15 @@ EOF; EOF; $data = << +EOF; + $cx->parseTag($content); + $this->assertEquals($content, $data); + + $content = << EOF; $cx->parseTag($content); $this->assertEquals($content, $data); @@ -498,6 +536,15 @@ EOF; EOF; $data = << +EOF; + $cx->parseTag($content); + $this->assertEquals($content, $data); + + $content = << EOF; $cx->parseTag($content); $this->assertEquals($content, $data); @@ -508,8 +555,8 @@ EOF; $template = new template(); $content = <<fetch($content); diff --git a/tests/thinkphp/library/think/templateTest.php b/tests/thinkphp/library/think/templateTest.php index 53b2b629..b3486714 100644 --- a/tests/thinkphp/library/think/templateTest.php +++ b/tests/thinkphp/library/think/templateTest.php @@ -25,10 +25,10 @@ class templateTest extends \PHPUnit_Framework_TestCase $template = new Template(); $content = << + EOF; $template->parse($content); @@ -125,10 +125,10 @@ EOF; $this->assertEquals($data, $content); $content = << + EOF; $template->parse($content); @@ -144,6 +144,41 @@ EOF; } + public function testVarFunction() + { + $template = new Template(); + + $content = << +EOF; + + $template->parse($content); + $this->assertEquals($data, $content); + + $content = << +EOF; + + $template->parse($content); + $this->assertEquals($data, $content); + + $content = << +EOF; + + $template->parse($content); + $this->assertEquals($data, $content); + } + public function testVarIdentify() { $config['tpl_begin'] = '<#'; @@ -177,7 +212,6 @@ EOF; $data = <<a) !== ''?(is_array(\$info)?\$info['a']:\$info->a):'test')?'yes':'no'; ?> EOF; - $template->parse($content); $this->assertEquals($data, $content); }