改进变量标签的正则表达式

This commit is contained in:
oldrind
2016-01-28 22:11:51 +08:00
parent 61299c1d9d
commit ef5f8cd348
3 changed files with 101 additions and 20 deletions

View File

@@ -52,7 +52,16 @@ EOF;
<?php endforeach; endif; else: echo "" ;endif; ?>
EOF;
$cx->parseTag($content);
$this->assertEquals($content, $data);
$this->assertEquals($data, $content);
$content = <<<EOF
{volist name=":explode(',','1,2,3,4,5')" id="vo" key="key" offset="1" length="3"}
{\$vo}
{/volist}
EOF;
$template->fetch($content);
$this->expectOutputString('234');
}
public function testForeach()
@@ -74,18 +83,25 @@ EOF;
$this->assertEquals($content, $data);
$content = <<<EOF
{foreach name="list" id="val" key="key"}
{foreach name="list" id="val" key="key" empty="empty"}
{/foreach}
EOF;
$data = <<<EOF
<?php if(is_array(\$list)): foreach(\$list as \$key=>\$val): ?>
<?php endforeach; endif; ?>
<?php endforeach; endif; ?><?php if(empty(\$list)): echo '"empty'; endif; ?>
EOF;
$cx->parseTag($content);
$this->assertEquals($content, $data);
$content = <<<EOF
{foreach name=":explode(',', '1,2,3,4,5')" id="val" key="key" index="index" offset="1" length="3"}
{\$val}
{/foreach}
EOF;
$template->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;
<?php case \$a: ?>
a
<?php break; ?>
<?php case "b": ?>
<?php case "b":case "c": ?>
b
<?php break; ?>
<?php case "d": ?>
d
<?php break; ?>
<?php default: ?>
default
<?php endswitch; ?>
@@ -154,12 +176,12 @@ EOF;
$cx = new Cx($template);
$content = <<<EOF
{eq name="\$var.a" value="0"}
{eq name="\$var.a" value="\$var.b"}
default
{/eq}
EOF;
$data = <<<EOF
<?php if(\$var['a'] == '0'): ?>
<?php if(\$var['a'] == \$var['b']): ?>
default
<?php endif; ?>
EOF;
@@ -315,6 +337,13 @@ default
EOF;
$cx->parseTag($content);
$this->assertEquals($content, $data);
$content = <<<EOF
{between name=":floor(5.1)" value="1,5"}yes{/between}
{notbetween name=":ceil(5.1)" value="1,5"}no{/notbetween}
EOF;
$template->fetch($content);
$this->expectOutputString('yesno');
}
public function testPresent()
@@ -419,10 +448,10 @@ EOF;
$cx = new Cx($template);
$content = <<<EOF
{import file="base" value="\$name.a" /}
{import file="base?ver=1.0" value="\$name.a" /}
EOF;
$data = <<<EOF
<?php if(isset(\$name['a'])): ?><script type="text/javascript" src="__ROOT__/Public/base.js"></script><?php endif; ?>
<?php if(isset(\$name['a'])): ?><script type="text/javascript" src="__ROOT__/Public/base.js?ver=1.0"></script><?php endif; ?>
EOF;
$cx->parseTag($content);
$this->assertEquals($content, $data);
@@ -437,10 +466,10 @@ EOF;
$this->assertEquals($content, $data);
$content = <<<EOF
{import file="base" type="php" /}
{import file="base,common" type="php" /}
EOF;
$data = <<<EOF
<?php import("base"); ?>
<?php import("base"); ?><?php import("common"); ?>
EOF;
$cx->parseTag($content);
$this->assertEquals($content, $data);
@@ -483,6 +512,15 @@ EOF;
EOF;
$data = <<<EOF
<?php \$total = '0'; ?>
EOF;
$cx->parseTag($content);
$this->assertEquals($content, $data);
$content = <<<EOF
{assign name="total" value=":count(\$list)" /}
EOF;
$data = <<<EOF
<?php \$total = count(\$list); ?>
EOF;
$cx->parseTag($content);
$this->assertEquals($content, $data);
@@ -498,6 +536,15 @@ EOF;
EOF;
$data = <<<EOF
<?php define('INFO_NAME', 'test'); ?>
EOF;
$cx->parseTag($content);
$this->assertEquals($content, $data);
$content = <<<EOF
{define name="INFO_NAME" value="\$name" /}
EOF;
$data = <<<EOF
<?php define('INFO_NAME', \$name); ?>
EOF;
$cx->parseTag($content);
$this->assertEquals($content, $data);
@@ -508,8 +555,8 @@ EOF;
$template = new template();
$content = <<<EOF
{for start="1" end="10" comparison="lt" step="1" name="ii" }
{\$ii}
{for start="1" end=":strlen(1000000000)" comparison="lt" step="1" name="i" }
{\$i}
{/for}
EOF;
$template->fetch($content);

View File

@@ -25,10 +25,10 @@ class templateTest extends \PHPUnit_Framework_TestCase
$template = new Template();
$content = <<<EOF
{\$name.a.b|default='test'}
{\$name.a.b}
EOF;
$data = <<<EOF
<?php echo (isset(\$name['a']['b']) && (\$name['a']['b'] !== '')?\$name['a']['b']:'test'); ?>
<?php echo \$name['a']['b']; ?>
EOF;
$template->parse($content);
@@ -125,10 +125,10 @@ EOF;
$this->assertEquals($data, $content);
$content = <<<EOF
{+\$name.a}
{++\$name.a}
EOF;
$data = <<<EOF
<?php echo +\$name['a']; ?>
<?php echo ++\$name['a']; ?>
EOF;
$template->parse($content);
@@ -144,6 +144,41 @@ EOF;
}
public function testVarFunction()
{
$template = new Template();
$content = <<<EOF
{\$name.a.b|default='test'}
EOF;
$data = <<<EOF
<?php echo (isset(\$name['a']['b']) && (\$name['a']['b'] !== '')?\$name['a']['b']:'test'); ?>
EOF;
$template->parse($content);
$this->assertEquals($data, $content);
$content = <<<EOF
{\$create_time|date="y-m-d",###}
EOF;
$data = <<<EOF
<?php echo date("y-m-d",\$create_time); ?>
EOF;
$template->parse($content);
$this->assertEquals($data, $content);
$content = <<<EOF
{\$create_time|trim|substr=0,3}
EOF;
$data = <<<EOF
<?php echo substr(trim(\$create_time),0,3); ?>
EOF;
$template->parse($content);
$this->assertEquals($data, $content);
}
public function testVarIdentify()
{
$config['tpl_begin'] = '<#';
@@ -177,7 +212,6 @@ EOF;
$data = <<<EOF
<?php echo ((is_array(\$info)?\$info['a']:\$info->a) !== ''?(is_array(\$info)?\$info['a']:\$info->a):'test')?'yes':'no'; ?>
EOF;
$template->parse($content);
$this->assertEquals($data, $content);
}