* @author Kornel LesiƄski * @license http://www.gnu.org/licenses/lgpl.html GNU Lesser General Public License * @version SVN: $Id: PhpTransformerTest.php 888 2010-06-08 09:48:33Z kornel $ * @link http://phptal.org/ */ class PhpTransformerTest extends PHPTAL_TestCase { function testBooleanOperators() { $this->assertEquals('! $a', PHPTAL_Php_Transformer::transform('not a')); $this->assertEquals('$a || $b', PHPTAL_Php_Transformer::transform('a or b')); $this->assertEquals('($a || $b) && ($z && $x) && (10 < 100)', PHPTAL_Php_Transformer::transform('(a or b) and (z and x) and (10 < 100)')); } function testPathes() { $this->assertEquals('$a', PHPTAL_Php_Transformer::transform('a')); $this->assertEquals('$a->b', PHPTAL_Php_Transformer::transform('a.b')); $this->assertEquals('$a->b->c', PHPTAL_Php_Transformer::transform('a.b.c')); } function testFunctionAndMethod() { $this->assertEquals('a()', PHPTAL_Php_Transformer::transform('a()')); $this->assertEquals('$a->b()', PHPTAL_Php_Transformer::transform('a.b()')); $this->assertEquals('$a->b[$c]()', PHPTAL_Php_Transformer::transform('a.b[c]()')); $this->assertEquals('$a->b[$c]->d()', PHPTAL_Php_Transformer::transform('a.b[c].d()')); } function testArrays() { $this->assertEquals('$a[0]', PHPTAL_Php_Transformer::transform('a[0]')); $this->assertEquals('$a["my key"]', PHPTAL_Php_Transformer::transform('a["my key"]')); $this->assertEquals('$a->b[$c]', PHPTAL_Php_Transformer::transform('a.b[c]')); } function testConcat() { $this->assertEquals('$a . $c . $b', PHPTAL_Php_Transformer::transform('a . c . b')); $this->assertEquals('"". $b', PHPTAL_Php_Transformer::transform('"". b')); $this->assertEquals('\'\'.$b', PHPTAL_Php_Transformer::transform('\'\'.b')); } function testStrings() { $this->assertEquals('"prout"', PHPTAL_Php_Transformer::transform('"prout"')); $this->assertEquals("'prout'", PHPTAL_Php_Transformer::transform("'prout'")); $this->assertEquals('"my string\" still in string"', PHPTAL_Php_Transformer::transform('"my string\" still in string"')); $this->assertEquals("'my string\' still in string'", PHPTAL_Php_Transformer::transform("'my string\' still in string'")); } function testStringParams() { $this->assertEquals('strtolower(\'AAA\')', PHPTAL_Php_Transformer::transform('strtolower(\'AAA\')') ); } function testEvals() { $this->assertEquals('$prefix->{$prefix->a}', trim(PHPTAL_Php_Transformer::transform('$a', '$prefix->'), '()')); $this->assertEquals('$a->{$b}->c', PHPTAL_Php_Transformer::transform('a.$b.c')); $this->assertEquals('$prefix->a->{$prefix->x->y}->z', PHPTAL_Php_Transformer::transform('a.{x.y}.z', '$prefix->')); $this->assertEquals('$a->{$x->y}()', PHPTAL_Php_Transformer::transform('a.{x.y}()')); } function testEvals2() { $this->assertEquals('$prefix->{$prefix->var} + $prefix->{$prefix->var}', trim(PHPTAL_Php_Transformer::transform('${var} + ${var}', '$prefix->'), '()')); $this->assertEquals('$prefix->{MyClass::CONSTANT}', trim(PHPTAL_Php_Transformer::transform('${MyClass::CONSTANT}', '$prefix->'), '()')); } function testOperators() { $this->assertEquals('$a + 100 / $b == $d', PHPTAL_Php_Transformer::transform('a + 100 / b == d')); $this->assertEquals('$a * 10.03', PHPTAL_Php_Transformer::transform('a * 10.03')); } function testStatics() { $this->assertEquals('$prefix->x->{MyClass::CONSTANT_UNDER6}', trim(PHPTAL_Php_Transformer::transform('x.${MyClass::CONSTANT_UNDER6}', '$prefix->'), '()')); $this->assertEquals('MyClass::method()', PHPTAL_Php_Transformer::transform('MyClass::method()')); $this->assertEquals('MyClass::CONSTANT', PHPTAL_Php_Transformer::transform('MyClass::CONSTANT')); $this->assertEquals('MyClass::CONSTANT_UNDER', PHPTAL_Php_Transformer::transform('MyClass::CONSTANT_UNDER')); $this->assertEquals('MyClass::CONSTANT_UNDER6', PHPTAL_Php_Transformer::transform('MyClass::CONSTANT_UNDER6')); $this->assertEquals('MyClass::ConsTant', PHPTAL_Php_Transformer::transform('MyClass::ConsTant')); $this->assertEquals('MyClass::$static', PHPTAL_Php_Transformer::transform('MyClass::$static', '$prefix->')); $this->assertEquals('MyClass::$static->foo()', PHPTAL_Php_Transformer::transform('MyClass::$static.foo()', '$prefix->')); } function testStringEval() { $this->assertEquals('"xxx {$prefix->a->{$prefix->b}->c[$prefix->x]} xxx"', PHPTAL_Php_Transformer::transform('"xxx ${a.$b.c[x]} xxx"', '$prefix->')); } function testDefines() { $this->assertEquals('MY_DEFINE . $a->b', PHPTAL_Php_Transformer::transform('@MY_DEFINE . a.b')); } function testPrefix() { $this->assertEquals('$C->a->b->c[$C->x]', PHPTAL_Php_Transformer::transform('a.b.c[x]', '$C->')); $this->assertEquals('$C->a->{$C->b}->c[$C->x]', PHPTAL_Php_Transformer::transform('a.$b.c[x]', '$C->')); $this->assertEquals('"xxx {$C->a->{$C->b}->c[$C->x]} xxx"', PHPTAL_Php_Transformer::transform('"xxx ${a.$b.c[x]} xxx"', '$C->')); } function testKeywords() { $this->assertEquals('true != false', PHPTAL_Php_Transformer::transform('true ne false')); $this->assertEquals('$test == null', PHPTAL_Php_Transformer::transform('test eq null')); } function testTernaryOperator() { $this->assertEquals('($test)?true:false', PHPTAL_Php_Transformer::transform('(test)?true:false')); } function testinstanceof() { $this->assertEquals('$test instanceof Foo', PHPTAL_Php_Transformer::transform('test instanceof Foo')); } function testTransformInString() { $src = '"do not tranform this ge string lt eq"'; $this->assertEquals($src, PHPTAL_Php_Transformer::transform($src)); $src = "'do not tranform this ge string lt eq'"; $this->assertEquals($src, PHPTAL_Php_Transformer::transform($src)); } /** * @expectedException PHPTAL_ParserException */ function testCatchesInvalidEvaledFieldName() { $tpl = $this->newPHPTAL(); $tpl->setSource('

'); $tpl->execute(); $this->fail(); } /** * @expectedException PHPTAL_ParserException */ function testCatchesInvalidFieldName() { $tpl = $this->newPHPTAL(); $tpl->setSource('

'); $tpl->execute(); $this->fail(); } /** * @expectedException PHPTAL_ParserException */ function testCatchesInvalidVarName() { $tpl = $this->newPHPTAL(); $tpl->setSource('

'); $tpl->execute(); $this->fail(); } /** * @expectedException PHPTAL_ParserException */ function testCatchesInvalidNumber() { $tpl = $this->newPHPTAL(); $tpl->setSource('

'); $tpl->execute(); $this->fail(); } /** * @expectedException PHPTAL_ParserException */ function testCatchesInvalidNumber2() { $tpl = $this->newPHPTAL(); $tpl->setSource('

'); $tpl->execute(); $this->fail(); } }