2013-01-25 18:36:16 +04:00
< ? php
2013-06-28 11:53:53 +04:00
use Fenom\Render ,
Fenom\Provider as FS ;
2013-01-25 18:36:16 +04:00
2013-07-29 14:58:14 +04:00
class FenomTest extends \Fenom\TestCase
{
2013-01-25 18:36:16 +04:00
2013-07-29 14:58:14 +04:00
public static function providerOptions ()
{
2013-07-23 11:32:31 +04:00
return array (
2013-07-29 14:58:14 +04:00
array ( " disable_methods " , Fenom :: DENY_METHODS ),
2013-09-14 11:24:23 +04:00
array ( " disable_native_funcs " , Fenom :: DENY_NATIVE_FUNCS ),
2013-07-29 14:58:14 +04:00
array ( " disable_cache " , Fenom :: DISABLE_CACHE ),
array ( " force_compile " , Fenom :: FORCE_COMPILE ),
array ( " auto_reload " , Fenom :: AUTO_RELOAD ),
array ( " force_include " , Fenom :: FORCE_INCLUDE ),
array ( " auto_escape " , Fenom :: AUTO_ESCAPE ),
array ( " force_verify " , Fenom :: FORCE_VERIFY )
2013-07-23 11:32:31 +04:00
);
}
2013-09-14 11:24:23 +04:00
public function testCreating () {
$time = $this -> tpl ( 'temp.tpl' , 'Template 1 a' );
$fenom = new Fenom ( $provider = new \Fenom\Provider ( FENOM_RESOURCES . '/template' ));
$fenom -> setCompileDir ( FENOM_RESOURCES . '/compile' );
$this -> assertInstanceOf ( 'Fenom\Template' , $tpl = $fenom -> getTemplate ( 'temp.tpl' ));
$this -> assertSame ( $provider , $tpl -> getProvider ());
$this -> assertSame ( 'temp.tpl' , $tpl -> getBaseName ());
$this -> assertSame ( 'temp.tpl' , $tpl -> getName ());
$this -> assertSame ( $time , $tpl -> getTime ());
$fenom -> clearAllCompiles ();
}
2013-09-15 16:05:18 +04:00
public function testFactory () {
$time = $this -> tpl ( 'temp.tpl' , 'Template 1 a' );
$fenom = Fenom :: factory ( $provider = new \Fenom\Provider ( FENOM_RESOURCES . '/template' ), FENOM_RESOURCES . '/compile' , Fenom :: AUTO_ESCAPE );
$this -> assertInstanceOf ( 'Fenom\Template' , $tpl = $fenom -> getTemplate ( 'temp.tpl' ));
$this -> assertSame ( $provider , $tpl -> getProvider ());
$this -> assertSame ( 'temp.tpl' , $tpl -> getBaseName ());
$this -> assertSame ( 'temp.tpl' , $tpl -> getName ());
$this -> assertSame ( $time , $tpl -> getTime ());
$fenom -> clearAllCompiles ();
}
2013-07-29 14:58:14 +04:00
public function testCompileFile ()
{
2013-01-25 18:36:16 +04:00
$a = array (
" a " => " a " ,
" b " => " b "
);
2013-02-22 00:05:20 +04:00
$this -> tpl ( 'template1.tpl' , 'Template 1 a' );
$this -> tpl ( 'template2.tpl' , 'Template 2 b' );
2013-06-28 11:53:53 +04:00
$this -> assertSame ( " Template 1 a " , $this -> fenom -> fetch ( 'template1.tpl' , $a ));
$this -> assertSame ( " Template 2 b " , $this -> fenom -> fetch ( 'template2.tpl' , $a ));
$this -> assertInstanceOf ( 'Fenom\Render' , $this -> fenom -> getTemplate ( 'template1.tpl' ));
$this -> assertInstanceOf ( 'Fenom\Render' , $this -> fenom -> getTemplate ( 'template2.tpl' ));
2013-07-29 14:58:14 +04:00
$this -> assertSame ( 3 , iterator_count ( new FilesystemIterator ( FENOM_RESOURCES . '/compile' )));
2013-01-25 18:36:16 +04:00
}
2013-07-29 14:58:14 +04:00
public function testStorage ()
{
2013-02-22 00:05:20 +04:00
$this -> tpl ( 'custom.tpl' , 'Custom template' );
2013-06-28 11:53:53 +04:00
$this -> assertSame ( " Custom template " , $this -> fenom -> fetch ( 'custom.tpl' , array ()));
2013-02-22 00:05:20 +04:00
$this -> tpl ( 'custom.tpl' , 'Custom template 2' );
2013-06-28 11:53:53 +04:00
$this -> assertSame ( " Custom template " , $this -> fenom -> fetch ( 'custom.tpl' , array ()));
2013-01-25 18:36:16 +04:00
}
2013-09-14 11:24:23 +04:00
/**
* @ group testCheckMTime
*/
2013-07-29 14:58:14 +04:00
public function testCheckMTime ()
{
2013-06-28 11:53:53 +04:00
$this -> fenom -> setOptions ( Fenom :: FORCE_COMPILE );
2013-02-22 00:05:20 +04:00
$this -> tpl ( 'custom.tpl' , 'Custom template' );
2013-06-28 11:53:53 +04:00
$this -> assertSame ( " Custom template " , $this -> fenom -> fetch ( 'custom.tpl' , array ()));
2013-09-14 11:24:23 +04:00
$tpl = $this -> fenom -> getTemplate ( 'custom.tpl' );
$this -> assertTrue ( $tpl -> isValid ());
usleep ( 1.5e6 );
2013-02-22 00:05:20 +04:00
$this -> tpl ( 'custom.tpl' , 'Custom template (new)' );
2013-09-14 11:24:23 +04:00
$this -> assertFalse ( $tpl -> isValid ());
2013-06-28 11:53:53 +04:00
$this -> assertSame ( " Custom template (new) " , $this -> fenom -> fetch ( 'custom.tpl' , array ()));
2013-01-25 18:36:16 +04:00
}
2013-07-29 14:58:14 +04:00
public function testForceCompile ()
{
2013-06-28 11:53:53 +04:00
$this -> fenom -> setOptions ( Fenom :: FORCE_COMPILE );
2013-02-22 00:05:20 +04:00
$this -> tpl ( 'custom.tpl' , 'Custom template' );
2013-06-28 11:53:53 +04:00
$this -> assertSame ( " Custom template " , $this -> fenom -> fetch ( 'custom.tpl' , array ()));
2013-02-22 00:05:20 +04:00
$this -> tpl ( 'custom.tpl' , 'Custom template (new)' );
2013-06-28 11:53:53 +04:00
$this -> assertSame ( " Custom template (new) " , $this -> fenom -> fetch ( 'custom.tpl' , array ()));
2013-01-25 18:36:16 +04:00
}
2013-07-29 14:58:14 +04:00
public function testSetModifier ()
{
2013-06-28 11:53:53 +04:00
$this -> fenom -> addModifier ( " mymod " , " myMod " );
2013-02-22 00:05:20 +04:00
$this -> tpl ( 'custom.tpl' , 'Custom modifier {$a|mymod}' );
2013-06-28 11:53:53 +04:00
$this -> assertSame ( " Custom modifier (myMod)Custom(/myMod) " , $this -> fenom -> fetch ( 'custom.tpl' , array ( " a " => " Custom " )));
2013-01-25 18:36:16 +04:00
}
2013-03-14 21:45:00 +04:00
/**
* @ group add_functions
*/
2013-07-29 14:58:14 +04:00
public function testSetFunctions ()
{
2013-06-28 11:53:53 +04:00
$this -> fenom -> setOptions ( Fenom :: FORCE_COMPILE );
$this -> fenom -> addFunction ( " myfunc " , " myFunc " );
$this -> fenom -> addBlockFunction ( " myblockfunc " , " myBlockFunc " );
2013-02-22 00:05:20 +04:00
$this -> tpl ( 'custom.tpl' , 'Custom function {myfunc name="foo"}' );
2013-06-28 11:53:53 +04:00
$this -> assertSame ( " Custom function MyFunc:foo " , $this -> fenom -> fetch ( 'custom.tpl' , array ()));
2013-02-22 00:05:20 +04:00
$this -> tpl ( 'custom.tpl' , 'Custom function {myblockfunc name="foo"} this block1 {/myblockfunc}' );
2013-06-28 11:53:53 +04:00
$this -> assertSame ( " Custom function Block:foo:this block1:Block " , $this -> fenom -> fetch ( 'custom.tpl' , array ()));
2013-01-25 18:36:16 +04:00
}
2013-07-29 14:58:14 +04:00
public function testSetCompilers ()
{
2013-06-28 11:53:53 +04:00
$this -> fenom -> setOptions ( Fenom :: FORCE_COMPILE );
$this -> fenom -> addCompiler ( " mycompiler " , 'myCompiler' );
$this -> fenom -> addBlockCompiler ( " myblockcompiler " , 'myBlockCompilerOpen' , 'myBlockCompilerClose' , array (
2013-01-25 18:36:16 +04:00
'tag' => 'myBlockCompilerTag'
));
2013-02-22 00:05:20 +04:00
$this -> tpl ( 'custom.tpl' , 'Custom compiler {mycompiler name="bar"}' );
2013-07-29 14:58:14 +04:00
$this -> assertSame ( " Custom compiler PHP_VERSION: " . PHP_VERSION . " (for bar) " , $this -> fenom -> fetch ( 'custom.tpl' , array ()));
2013-02-22 00:05:20 +04:00
$this -> tpl ( 'custom.tpl' , 'Custom compiler {myblockcompiler name="bar"} block1 {tag name="baz"} block2 {/myblockcompiler}' );
2013-07-29 14:58:14 +04:00
$this -> assertSame ( " Custom compiler PHP_VERSION: " . PHP_VERSION . " (for bar) block1 Tag baz of compiler block2 End of compiler " , $this -> fenom -> fetch ( 'custom.tpl' , array ()));
2013-01-25 18:36:16 +04:00
}
2013-07-23 11:32:31 +04:00
/**
* @ dataProvider providerOptions
*/
2013-07-29 14:58:14 +04:00
public function testOptions ( $code , $option )
{
2013-07-23 11:32:31 +04:00
static $options = array ();
static $flags = 0 ;
$options [ $code ] = true ;
$flags |= $option ;
$this -> fenom -> setOptions ( $options );
$this -> assertSame ( $this -> fenom -> getOptions (), $flags );
2013-08-07 10:27:20 +04:00
$this -> fenom -> setOptions ( array ( $code => false ));
$this -> assertSame ( $this -> fenom -> getOptions (), $flags & ~ $option );
2013-07-23 11:32:31 +04:00
}
2013-08-01 01:05:19 +04:00
2013-08-02 21:50:04 +04:00
public function testFilter ()
{
2013-08-01 01:05:19 +04:00
$punit = $this ;
$this -> fenom -> addPreFilter ( function ( $src , $tpl ) use ( $punit ) {
2013-08-05 19:29:11 +04:00
$punit -> assertInstanceOf ( 'Fenom\Template' , $tpl );
2013-08-01 01:05:19 +04:00
return " == $src == " ;
});
$this -> fenom -> addPostFilter ( function ( $code , $tpl ) use ( $punit ) {
2013-08-05 19:29:11 +04:00
$punit -> assertInstanceOf ( 'Fenom\Template' , $tpl );
2013-08-01 01:05:19 +04:00
return " +++ $code +++ " ;
});
$this -> fenom -> addFilter ( function ( $text , $tpl ) use ( $punit ) {
2013-08-05 19:29:11 +04:00
$punit -> assertInstanceOf ( 'Fenom\Template' , $tpl );
2013-08-01 01:05:19 +04:00
return " |--- $text ---| " ;
});
2013-09-15 16:05:18 +04:00
$this -> assertSame ( '+++ |--- == hello ---||--- world == ---| +++' , $this -> fenom -> compileCode ( 'hello {var $user} misterio {/var} world' ) -> fetch ( array ()));
$this -> assertSame ( '+++ |--- == hello ---||--- world == ---| +++' , $this -> fenom -> compileCode ( 'hello {var $user} <?php misterio ?> {/var} world' ) -> fetch ( array ()));
2013-08-01 01:05:19 +04:00
}
2013-09-14 11:24:23 +04:00
2013-10-08 17:48:23 +04:00
/**
* @ group tag - filter
*/
public function testTagFilter () {
$tags = array ();
$punit = $this ;
$this -> fenom -> addTagFilter ( function ( $text , $tpl ) use ( & $tags , $punit ) {
$punit -> assertInstanceOf ( 'Fenom\Template' , $tpl );
$tags [] = $text ;
return $text ;
});
$this -> fenom -> compileCode ( 'hello {var $a} misterio {/var} world, {$b}!' );
$this -> assertSame ( array ( 'var $a' , '/var' , '$b' ), $tags );
}
2013-09-14 11:24:23 +04:00
public function testAddInlineCompilerSmart () {
$this -> fenom -> addCompilerSmart ( 'SayA' , 'TestTags' );
$this -> tpl ( 'inline_compiler.tpl' , 'I just {SayA}.' );
$this -> assertSame ( 'I just Say A.' , $this -> fenom -> fetch ( 'inline_compiler.tpl' , array ()));
}
public function testAddBlockCompilerSmart () {
$this -> fenom -> addBlockCompilerSmart ( 'SayBlock' , 'TestTags' , array ( 'SaySomething' ), array ( 'SaySomething' ));
$this -> tpl ( 'block_compiler.tpl' , '{SayBlock} and {SaySomething}. It is all, {/SayBlock}' );
$this -> assertSame ( 'Start saying and say blah-blah-blah. It is all, Stop saying' ,
$this -> fenom -> fetch ( 'block_compiler.tpl' , array ()));
}
public function testAddFunctions () {
$this -> fenom -> setOptions ( Fenom :: DENY_NATIVE_FUNCS );
$this -> assertFalse ( $this -> fenom -> isAllowedFunction ( 'substr' ));
$this -> fenom -> addAllowedFunctions ( array ( 'substr' ));
$this -> assertTrue ( $this -> fenom -> isAllowedFunction ( 'substr' ));
}
}
class TestTags {
public static function tagSayA () {
return 'echo "Say A"' ;
}
public static function SayBlockOpen () {
return 'echo "Start saying"' ;
}
public static function tagSaySomething () {
return 'echo "say blah-blah-blah"' ;
}
public static function SayBlockClose () {
return 'echo "Stop saying"' ;
}
}