PageRenderTime 27ms CodeModel.GetById 18ms RepoModel.GetById 1ms app.codeStats 0ms

/testapp/tests-jelix/jelix/tpl/jtpl_pluginsTest.php

http://github.com/jelix/jelix
PHP | 291 lines | 248 code | 27 blank | 16 comment | 2 complexity | 39d36b12bcd168df53e2a2dc64b96996 MD5 | raw file
Possible License(s): BSD-3-Clause, JSON, GPL-3.0, LGPL-3.0, LGPL-2.1, GPL-2.0
  1. <?php
  2. /**
  3. * @package testapp
  4. * @subpackage jelix_tests module
  5. * @author Laurent Jouanneau
  6. * @contributor Thibault Piront (nuKs)
  7. * @copyright 2007-2012 Laurent Jouanneau
  8. * @copyright 2007 Thibault Piront
  9. * @link http://www.jelix.org
  10. * @licence GNU Lesser General Public Licence see LICENCE file or http://www.gnu.org/licenses/lgpl.html
  11. */
  12. class jtpl_pluginsTest extends \Jelix\UnitTests\UnitTestCase {
  13. public function setUp() : void {
  14. self::initClassicRequest(TESTAPP_URL.'index.php');
  15. jApp::pushCurrentModule('jelix_tests');
  16. parent::setUp();
  17. }
  18. function tearDown() : void {
  19. jApp::popCurrentModule();
  20. }
  21. protected $templates = array(
  22. 0=>array(
  23. 'test_plugin_jurl', // template selector
  24. '<p><a href="%BASEPATH%index.php/jelix_tests/urlsig/url1">aaa</a></p>', // generated content
  25. ),
  26. 1=>array(
  27. 'test_plugin_counter',
  28. '1-2-3-4-5,1-2-3-4-5,6-7-8-9-10,----,11-12-13-14-15',
  29. ),
  30. 2=>array(
  31. 'test_plugin_counter_reset',
  32. '1-2-3-4-5,1-2-3-4-5,1-2-3-4-5,1-2-3-4-5',
  33. ),
  34. 3=>array(
  35. 'test_plugin_counter_reset_all',
  36. '1-2-3-4-5,1-2-3-4-5,1-2-3-4-5,1-2-3-4-5',
  37. ),
  38. 4=>array(
  39. 'test_plugin_counter_init_allarg_noexeption',
  40. '2-0--2--4--6,03-06-09-12-15,g-f-e-d-c,E-J-O-T-Y',
  41. ),
  42. 5=>array(
  43. 'test_plugin_counter_init_noexeption',
  44. '1-2-3-4-5,01-02-03-04-05,e-f-g-h-i',
  45. ),
  46. 6=>array(
  47. 'test_plugin_counter_init_exeption',
  48. 'y-z-1-2-3',
  49. ),
  50. 7=>array(
  51. 'test_plugin_jrooturl',
  52. 'http://www.junittest.com/',
  53. )
  54. );
  55. protected $truncateHTMLAssigns = array(
  56. 0=>array(
  57. '33', //Where do we cut?
  58. '<p>Lorem &nbsp; ipsum <strong>sit...</strong></p>', //What are we expecting to see
  59. false //Do we add other etcPattern
  60. ),
  61. 1=>array( //Cutting in the middle of a tag
  62. '27',
  63. '<p>Lorem &nbsp; ipsum...</p>',
  64. false
  65. ),
  66. 2=>array(
  67. '47', //Cutting in the middle of an auto closing tag
  68. '<p>Lorem &nbsp; ipsum <strong>sit dolor...</strong></p>',
  69. false
  70. ),
  71. 3=>array(
  72. '53', //Including auto closing tags and not try to close it
  73. '<p>Lorem &nbsp; ipsum <strong>sit dolor<br /><br />...</strong></p>',
  74. false
  75. ),
  76. 4=>array(
  77. '50', //Testing cutting in midlle of an image
  78. '<p>Lorem &nbsp; ipsum <strong>sit dolor<br />...</strong></p>',
  79. false
  80. ),
  81. 5=>array(
  82. '31', //Testing etc pattern
  83. '<p>Lorem &nbsp; ipsum<strong>This is not the entire text</strong></p>',
  84. '<strong>This is not the entire text</strong>'
  85. ),
  86. 6=>array(
  87. '15', //Trying to break an XML entity
  88. '<p>Lorem &nbsp;...</p>',
  89. false
  90. ),
  91. 7=>array(
  92. '14', //Trying to break an XML entity
  93. '<p>Lorem...</p>',
  94. false
  95. ),
  96. 8=>array(
  97. '120', //breaking in the middle of a comment
  98. '<p>Lorem &nbsp; ipsum <strong>sit dolor<br /><br /> &nbsp; <img src="#longReference" alt="image" title="image" />...</strong></p>',
  99. false
  100. ),
  101. 9=>array(
  102. '0', //too short cut
  103. '',
  104. false
  105. ), //too long get the same, without comments;
  106. 10=>array(
  107. '1000',
  108. '<p>Lorem &nbsp; ipsum <strong>sit dolor<br /><br /> &nbsp; <img src="#longReference" alt="image" title="image" /><div class="emphase">youhou ca marche</div></strong></p>',
  109. false
  110. ),
  111. 11=>array(
  112. '150',
  113. '<p>Lorem &nbsp; ipsum <strong>sit dolor<br /><br /> &nbsp; <img src="#longReference" alt="image" title="image" /><div class="emphase">youhou ca...</div></strong></p>',
  114. false
  115. )
  116. );
  117. function testPlugin() {
  118. foreach($this->templates as $k=>$t) {
  119. // we delete the cache because it won't be updated
  120. // if changes are made in jTpl itself or plugins
  121. $sel = new jSelectorTpl($t[0]); //, $outputtype='', $trusted = true
  122. $cache = $sel->getCompiledFilePath();
  123. if(file_exists($cache))
  124. unlink($cache);
  125. $tpl = new jTpl();
  126. $tpl->assign('i', 0); // Pour les boucles for.
  127. $output = $tpl->fetch ($t[0]); //, $outputtype='', $trusted = true, $callMeta=true
  128. $expected = $t[1];
  129. if(strpos($t[1],'%BASEPATH%') !== false){
  130. $expected = str_replace('%BASEPATH%', jApp::urlBasePath(), $expected);
  131. }
  132. $this->assertEquals($expected, $output, 'testplugin['.$k.'], %s');
  133. }
  134. }
  135. function testTruncateHTML(){
  136. $sentence = '<p>Lorem &nbsp; ipsum <strong>sit dolor<br /><br /> &nbsp; <img src="#longReference" alt="image" title="image" /><!-- This is a comment, it should not be included neither evaluated in the number of word we use for truncate --><div class="emphase">youhou ca marche</div></strong></p>';
  137. foreach ( $this->truncateHTMLAssigns as $key=>$chars ) {
  138. $tpl = new jTpl();
  139. $tpl->assign('cut',$chars[0]);
  140. $tpl->assign('etc',$chars[2] ? $chars[2] : '...');
  141. $tpl->assign('sentence',$sentence);
  142. $this->assertEquals('test => '.$key .'(cut '.$chars[0].' ) : '.$chars[1],
  143. 'test => '.$key .'(cut '.$chars[0].' ) :'.$tpl->fetch('test_truncate_html'),
  144. 'testplugin['.$key.'], %s');
  145. }
  146. }
  147. function testPageLinks() {
  148. $tpl = new jTpl();
  149. $output = $tpl->fetch ('test_plugin_pagelinks'); //, $outputtype='', $trusted = true, $callMeta=true
  150. $basePath = jApp::urlBasePath();
  151. $expected =
  152. '1: <ul class="pagelinks"><li class="pagelinks-start pagelinks-disabled">|&lt;</li>
  153. <li class="pagelinks-prev pagelinks-disabled">&lt;</li>
  154. <li class="pagelinks-current">1</li>
  155. <li><a href="'.$basePath.'index.php/jelix_tests/urlsig/url1?offset=10">2</a></li>
  156. <li><a href="'.$basePath.'index.php/jelix_tests/urlsig/url1?offset=20">3</a></li>
  157. <li><a href="'.$basePath.'index.php/jelix_tests/urlsig/url1?offset=30">4</a></li>
  158. <li><a href="'.$basePath.'index.php/jelix_tests/urlsig/url1?offset=40">5</a></li>
  159. <li class="pagelinks-next"><a href="'.$basePath.'index.php/jelix_tests/urlsig/url1?offset=10">&gt;</a></li>
  160. <li class="pagelinks-end"><a href="'.$basePath.'index.php/jelix_tests/urlsig/url1?offset=40">&gt;|</a></li>
  161. </ul>
  162. 2: <ul class="pagelinks"><li class="pagelinks-start pagelinks-disabled">|&lt;</li>
  163. <li class="pagelinks-prev pagelinks-disabled">&lt;</li>
  164. <li class="pagelinks-current">1</li>
  165. <li><a href="'.$basePath.'index.php/jelix_tests/urlsig/url1?offset=10">2</a></li>
  166. <li><a href="'.$basePath.'index.php/jelix_tests/urlsig/url1?offset=20">3</a></li>
  167. <li><a href="'.$basePath.'index.php/jelix_tests/urlsig/url1?offset=30">4</a></li>
  168. <li><a href="'.$basePath.'index.php/jelix_tests/urlsig/url1?offset=40">5</a></li>
  169. <li class="pagelinks-next"><a href="'.$basePath.'index.php/jelix_tests/urlsig/url1?offset=10">&gt;</a></li>
  170. <li class="pagelinks-end"><a href="'.$basePath.'index.php/jelix_tests/urlsig/url1?offset=40">&gt;|</a></li>
  171. </ul>
  172. 3: <ul class="pagelinks"><li class="pagelinks-start pagelinks-disabled">|&lt;</li>
  173. <li class="pagelinks-prev pagelinks-disabled">&lt;</li>
  174. <li class="pagelinks-current">1</li>
  175. <li><a href="'.$basePath.'index.php/jelix_tests/urlsig/url1?offset=10">2</a></li>
  176. <li><a href="'.$basePath.'index.php/jelix_tests/urlsig/url1?offset=20">3</a></li>
  177. <li><a href="'.$basePath.'index.php/jelix_tests/urlsig/url1?offset=30">4</a></li>
  178. <li><a href="'.$basePath.'index.php/jelix_tests/urlsig/url1?offset=40">5</a></li>
  179. <li class="pagelinks-next"><a href="'.$basePath.'index.php/jelix_tests/urlsig/url1?offset=10">&gt;</a></li>
  180. <li class="pagelinks-end"><a href="'.$basePath.'index.php/jelix_tests/urlsig/url1?offset=40">&gt;|</a></li>
  181. </ul>
  182. 4: <ul class="pagelinks"><li class="pagelinks-start"><a href="'.$basePath.'index.php/jelix_tests/urlsig/url1?offset=0">|&lt;</a></li>
  183. <li class="pagelinks-prev"><a href="'.$basePath.'index.php/jelix_tests/urlsig/url1?offset=0">&lt;</a></li>
  184. <li><a href="'.$basePath.'index.php/jelix_tests/urlsig/url1?offset=0">1</a></li>
  185. <li class="pagelinks-current">2</li>
  186. <li><a href="'.$basePath.'index.php/jelix_tests/urlsig/url1?offset=20">3</a></li>
  187. <li><a href="'.$basePath.'index.php/jelix_tests/urlsig/url1?offset=30">4</a></li>
  188. <li><a href="'.$basePath.'index.php/jelix_tests/urlsig/url1?offset=40">5</a></li>
  189. <li class="pagelinks-next"><a href="'.$basePath.'index.php/jelix_tests/urlsig/url1?offset=20">&gt;</a></li>
  190. <li class="pagelinks-end"><a href="'.$basePath.'index.php/jelix_tests/urlsig/url1?offset=40">&gt;|</a></li>
  191. </ul>
  192. 5: <ul class="pagelinks"><li class="pagelinks-start pagelinks-disabled">|&lt;</li>
  193. <li class="pagelinks-prev pagelinks-disabled">&lt;</li>
  194. <li class="pagelinks-current">1</li>
  195. <li><a href="'.$basePath.'index.php/jelix_tests/urlsig/url1?offset=5">2</a></li>
  196. <li><a href="'.$basePath.'index.php/jelix_tests/urlsig/url1?offset=10">3</a></li>
  197. <li><a href="'.$basePath.'index.php/jelix_tests/urlsig/url1?offset=15">4</a></li>
  198. <li class="pagelinks-next"><a href="'.$basePath.'index.php/jelix_tests/urlsig/url1?offset=5">&gt;</a></li>
  199. <li class="pagelinks-end"><a href="'.$basePath.'index.php/jelix_tests/urlsig/url1?offset=15">&gt;|</a></li>
  200. </ul>
  201. 6: <ul class="pagelinks"><li class="pagelinks-start"><a href="'.$basePath.'index.php/jelix_tests/urlsig/url1?offset=0">|&lt;</a></li>
  202. <li class="pagelinks-prev"><a href="'.$basePath.'index.php/jelix_tests/urlsig/url1?offset=0">&lt;</a></li>
  203. <li><a href="'.$basePath.'index.php/jelix_tests/urlsig/url1?offset=0">1</a></li>
  204. <li class="pagelinks-current">2</li>
  205. <li><a href="'.$basePath.'index.php/jelix_tests/urlsig/url1?offset=10">3</a></li>
  206. <li><a href="'.$basePath.'index.php/jelix_tests/urlsig/url1?offset=15">4</a></li>
  207. <li class="pagelinks-next"><a href="'.$basePath.'index.php/jelix_tests/urlsig/url1?offset=10">&gt;</a></li>
  208. <li class="pagelinks-end"><a href="'.$basePath.'index.php/jelix_tests/urlsig/url1?offset=15">&gt;|</a></li>
  209. </ul>
  210. 7: <ul class="pagelinks"><li class="pagelinks-start"><a href="'.$basePath.'index.php/jelix_tests/urlsig/url1?offset=0">|&lt;</a></li>
  211. <li class="pagelinks-prev"><a href="'.$basePath.'index.php/jelix_tests/urlsig/url1?offset=5">&lt;</a></li>
  212. <li><a href="'.$basePath.'index.php/jelix_tests/urlsig/url1?offset=0">1</a></li>
  213. <li><a href="'.$basePath.'index.php/jelix_tests/urlsig/url1?offset=5">2</a></li>
  214. <li class="pagelinks-current">3</li>
  215. <li><a href="'.$basePath.'index.php/jelix_tests/urlsig/url1?offset=15">4</a></li>
  216. <li class="pagelinks-next"><a href="'.$basePath.'index.php/jelix_tests/urlsig/url1?offset=15">&gt;</a></li>
  217. <li class="pagelinks-end"><a href="'.$basePath.'index.php/jelix_tests/urlsig/url1?offset=15">&gt;|</a></li>
  218. </ul>
  219. 8: <ul class="pagelinks"><li class="pagelinks-start"><a href="'.$basePath.'index.php/jelix_tests/urlsig/url1?offset=0">|&lt;</a></li>
  220. <li class="pagelinks-prev"><a href="'.$basePath.'index.php/jelix_tests/urlsig/url1?offset=10">&lt;</a></li>
  221. <li><a href="'.$basePath.'index.php/jelix_tests/urlsig/url1?offset=0">1</a></li>
  222. <li><a href="'.$basePath.'index.php/jelix_tests/urlsig/url1?offset=5">2</a></li>
  223. <li><a href="'.$basePath.'index.php/jelix_tests/urlsig/url1?offset=10">3</a></li>
  224. <li class="pagelinks-current">4</li>
  225. <li class="pagelinks-next pagelinks-disabled">&gt;</li>
  226. <li class="pagelinks-end pagelinks-disabled">&gt;|</li>
  227. </ul>';
  228. $this->assertEquals($expected, $output);
  229. }
  230. function testInclude() {
  231. $tpl = new jTpl();
  232. $tpl->assign ('aaa', 'first');
  233. $tpl->assign ('bbb', 'second');
  234. $meta = $tpl->meta('test_include');
  235. $content = $tpl->fetch('test_include');
  236. $this->assertEquals(array('main'=>'main template','subtpl'=>'sub template'), $meta);
  237. $this->assertEquals("
  238. <h1>Main template</h1>
  239. <p>first</p>
  240. <p>Hello, here the sub template</p>
  241. <p>first and second</p>
  242. <p>end of template</p>
  243. <p>End</p>
  244. ", $content);
  245. }
  246. function testIncludeRecursive() {
  247. // when a template includes itself, meta should be retrieved only one time
  248. // to avoid infinite loop
  249. $tpl = new jTpl();
  250. $tpl->assign('items', array(1,2));
  251. $meta = $tpl->meta('test_include_recursive');
  252. $content = $tpl->fetch('test_include_recursive');
  253. $this->assertEquals(array('main'=>'2', 'counter'=>1), $meta);
  254. $this->assertEquals("c=2\nx=2\nc=1\nx=1\n" , $content);
  255. // if a template includes an other template more than one time,
  256. // meta should be retrieved only one time
  257. $tpl = new jTpl();
  258. $tpl->assign('items', array());
  259. $meta = $tpl->meta('test_include_recursive2');
  260. $content = $tpl->fetch('test_include_recursive2');
  261. $this->assertEquals(array('main'=>'0', 'counter'=>1), $meta);
  262. $this->assertEquals("c=2\nx=2\nc=1\nx=1\nc=2\nx=4\nc=1\nx=3\n\n", $content);
  263. }
  264. }