--- /dev/null
+<?php
+/**\r
+ * this file contains tests for the template engine\r
+ *\r
+ * @package test.util\r
+ */\r
+\r
+/** required, it is the file under test */\r
+require_once('include/template_processor.php');
+require_once('include/text.php');
+
+class TemplateMockApp {
+ public $theme_info=array();
+}
+
+if(!function_exists('current_theme')) {
+function current_theme() {\r
+ return 'clean';\r
+}
+}
+
+if(!function_exists('x')) {
+function x($s,$k = NULL) {
+ return false;
+}
+}
+
+if(!function_exists('get_app')) {
+function get_app() {
+ return new TemplateMockApp();
+}
+}
+
+/**\r
+ * TestCase for the template engine\r
+ *\r
+ * @author Alexander Kampmann\r
+ * @package test.util\r
+ */\r
+class TemplateTest extends PHPUnit_Framework_TestCase {
+
+ public function setUp() {
+ global $t;
+ $t=new Template;
+ }
+
+ public function testListToShort() {
+ @list($first, $second)=array('first');
+
+ $this->assertTrue(is_null($second));
+ }
+
+ public function testSimpleVariableString() {
+ $tpl='Hello $name!';
+
+ $text=replace_macros($tpl, array('$name'=>'Anna'));
+
+ $this->assertEquals('Hello Anna!', $text);
+ }
+
+ public function testSimpleVariableInt() {\r
+ $tpl='There are $num new messages!';\r
+\r
+ $text=replace_macros($tpl, array('$num'=>172));\r
+\r
+ $this->assertEquals('There are 172 new messages!', $text);\r
+ }
+
+ public function testConditionalElse() {\r
+ $tpl='There{{ if $num!=1 }} are $num new messages{{ else }} is 1 new message{{ endif }}!';\r
+\r
+ $text1=replace_macros($tpl, array('$num'=>1));
+ $text22=replace_macros($tpl, array('$num'=>22));\r
+\r
+ $this->assertEquals('There is 1 new message!', $text1);
+ $this->assertEquals('There are 22 new messages!', $text22);\r
+ }
+
+ public function testConditionalNoElse() {\r
+ $tpl='{{ if $num!=0 }}There are $num new messages!{{ endif }}';\r
+\r
+ $text0=replace_macros($tpl, array('$num'=>0));\r
+ $text22=replace_macros($tpl, array('$num'=>22));\r
+\r
+ $this->assertEquals('', $text0);\r
+ $this->assertEquals('There are 22 new messages!', $text22);\r
+ }
+
+ public function testConditionalFail() {\r
+ $tpl='There {{ if $num!=1 }} are $num new messages{{ else }} is 1 new message{{ endif }}!';\r
+\r
+ $text1=replace_macros($tpl, array());\r
+\r
+ //$this->assertEquals('There is 1 new message!', $text1);\r
+ }
+
+ public function testSimpleFor() {\r
+ $tpl='{{ for $messages as $message }} $message {{ endfor }}';\r
+\r
+ $text=replace_macros($tpl, array('$messages'=>array('message 1', 'message 2')));\r
+\r
+ $this->assertEquals(' message 1 message 2 ', $text);\r
+ }
+
+ public function testFor() {\r
+ $tpl='{{ for $messages as $message }} from: $message.from to $message.to {{ endfor }}';\r
+\r
+ $text=replace_macros($tpl, array('$messages'=>array(array('from'=>'Mike', 'to'=>'Alex'), array('from'=>'Alex', 'to'=>'Mike'))));\r
+\r
+ $this->assertEquals(' from: Mike to Alex from: Alex to Mike ', $text);\r
+ }
+
+ public function testKeyedFor() {\r
+ $tpl='{{ for $messages as $from=>$to }} from: $from to $to {{ endfor }}';\r
+ \r
+ $text=replace_macros($tpl, array('$messages'=>array('Mike'=>'Alex', 'Sven'=>'Mike')));\r
+ \r
+ $this->assertEquals(' from: Mike to Alex from: Sven to Mike ', $text);\r
+ }
+
+ public function testForEmpty() {\r
+ $tpl='messages: {{for $messages as $message}} from: $message.from to $message.to {{ endfor }}';\r
+\r
+ $text=replace_macros($tpl, array('$messages'=>array()));\r
+\r
+ $this->assertEquals('messages: ', $text);\r
+ }
+
+ public function testForWrongType() {\r
+ $tpl='messages: {{for $messages as $message}} from: $message.from to $message.to {{ endfor }}';\r
+\r
+ $text=replace_macros($tpl, array('$messages'=>11));\r
+\r
+ $this->assertEquals('messages: ', $text);\r
+ }
+
+ public function testForConditional() {\r
+ $tpl='new messages: {{for $messages as $message}}{{ if $message.new }} $message.text{{endif}}{{ endfor }}';\r
+\r
+ $text=replace_macros($tpl, array('$messages'=>array(
+ array('new'=>true, 'text'=>'new message'),
+ array('new'=>false, 'text'=>'old message'))));\r
+\r
+ $this->assertEquals('new messages: new message', $text);\r
+ }
+
+ public function testConditionalFor() {\r
+ $tpl='{{ if $enabled }}new messages:{{for $messages as $message}} $message.text{{ endfor }}{{endif}}';\r
+ \r
+ $text=replace_macros($tpl, array('$enabled'=>true,
+ '$messages'=>array(\r
+ array('new'=>true, 'text'=>'new message'),\r
+ array('new'=>false, 'text'=>'old message'))));\r
+ \r
+ $this->assertEquals('new messages: new message old message', $text);\r
+ }
+
+ public function testFantasy() {\r
+ $tpl='Fantasy: {{fantasy $messages}}';\r
+\r
+ $text=replace_macros($tpl, array('$messages'=>'no no'));\r
+\r
+ $this->assertEquals('Fantasy: {{fantasy no no}}', $text);\r
+ }
+
+ public function testInc() {\r
+ $tpl='{{inc field_input.tpl with $field=$myvar}}{{ endinc }}';\r
+\r
+ $text=replace_macros($tpl, array('$myvar'=>array('myfield', 'label', 'value', 'help')));\r
+\r
+ $this->assertEquals(" \n"
+ ." <div class='field input'>\n"
+ ." <label for='id_myfield'>label</label>\n"
+ ." <input name='myfield' id='id_myfield' value=\"value\">\n"
+ ." <span class='field_help'>help</span>\n"
+ ." </div>\n", $text);\r
+ }
+
+ public function testIncNoVar() {\r
+ $tpl='{{inc field_input.tpl }}{{ endinc }}';\r
+\r
+ $text=replace_macros($tpl, array('$field'=>array('myfield', 'label', 'value', 'help')));\r
+\r
+ $this->assertEquals(" \n <div class='field input'>\n <label for='id_myfield'>label</label>\n"\r
+ ." <input name='myfield' id='id_myfield' value=\"value\">\n"\r
+ ." <span class='field_help'>help</span>\n"\r
+ ." </div>\n", $text);\r
+ }
+
+ public function testDoubleUse() {\r
+ $tpl='Hello $name! {{ if $enabled }} I love you! {{ endif }}';\r
+ \r
+ $text=replace_macros($tpl, array('$name'=>'Anna', '$enabled'=>false));\r
+ \r
+ $this->assertEquals('Hello Anna! ', $text);
+
+ $tpl='Hey $name! {{ if $enabled }} I hate you! {{ endif }}';\r
+ \r
+ $text=replace_macros($tpl, array('$name'=>'Max', '$enabled'=>true));\r
+ \r
+ $this->assertEquals('Hey Max! I hate you! ', $text);\r
+ }
+
+ public function testIncDouble() {\r
+ $tpl='{{inc field_input.tpl with $field=$var1}}{{ endinc }}'
+ .'{{inc field_input.tpl with $field=$var2}}{{ endinc }}';\r
+ \r
+ $text=replace_macros($tpl, array('$var1'=>array('myfield', 'label', 'value', 'help'),
+ '$var2'=>array('myfield2', 'label2', 'value2', 'help2')));\r
+ \r
+ $this->assertEquals(" \n"\r
+ ." <div class='field input'>\n"\r
+ ." <label for='id_myfield'>label</label>\n"\r
+ ." <input name='myfield' id='id_myfield' value=\"value\">\n"\r
+ ." <span class='field_help'>help</span>\n"\r
+ ." </div>\n"
+ ." \n"
+ ." <div class='field input'>\n"
+ ." <label for='id_myfield2'>label2</label>\n"
+ ." <input name='myfield2' id='id_myfield2' value=\"value2\">\n"
+ ." <span class='field_help'>help2</span>\n"
+ ." </div>\n", $text);\r
+ }
+}
\ No newline at end of file