TokenizerTest.php 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. <?php
  2. /*
  3. * This file is part of Mustache.php.
  4. *
  5. * (c) 2010-2014 Justin Hileman
  6. *
  7. * For the full copyright and license information, please view the LICENSE
  8. * file that was distributed with this source code.
  9. */
  10. /**
  11. * @group unit
  12. */
  13. class Mustache_Test_TokenizerTest extends PHPUnit_Framework_TestCase
  14. {
  15. /**
  16. * @dataProvider getTokens
  17. */
  18. public function testScan($text, $delimiters, $expected)
  19. {
  20. $tokenizer = new Mustache_Tokenizer;
  21. $this->assertSame($expected, $tokenizer->scan($text, $delimiters));
  22. }
  23. public function getTokens()
  24. {
  25. return array(
  26. array(
  27. 'text',
  28. null,
  29. array(
  30. array(
  31. Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_TEXT,
  32. Mustache_Tokenizer::LINE => 0,
  33. Mustache_Tokenizer::VALUE => 'text',
  34. ),
  35. ),
  36. ),
  37. array(
  38. 'text',
  39. '<<< >>>',
  40. array(
  41. array(
  42. Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_TEXT,
  43. Mustache_Tokenizer::LINE => 0,
  44. Mustache_Tokenizer::VALUE => 'text',
  45. ),
  46. ),
  47. ),
  48. array(
  49. '{{ name }}',
  50. null,
  51. array(
  52. array(
  53. Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_ESCAPED,
  54. Mustache_Tokenizer::NAME => 'name',
  55. Mustache_Tokenizer::OTAG => '{{',
  56. Mustache_Tokenizer::CTAG => '}}',
  57. Mustache_Tokenizer::LINE => 0,
  58. Mustache_Tokenizer::INDEX => 10,
  59. )
  60. )
  61. ),
  62. array(
  63. '{{ name }}',
  64. '<<< >>>',
  65. array(
  66. array(
  67. Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_TEXT,
  68. Mustache_Tokenizer::LINE => 0,
  69. Mustache_Tokenizer::VALUE => '{{ name }}',
  70. ),
  71. ),
  72. ),
  73. array(
  74. '<<< name >>>',
  75. '<<< >>>',
  76. array(
  77. array(
  78. Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_ESCAPED,
  79. Mustache_Tokenizer::NAME => 'name',
  80. Mustache_Tokenizer::OTAG => '<<<',
  81. Mustache_Tokenizer::CTAG => '>>>',
  82. Mustache_Tokenizer::LINE => 0,
  83. Mustache_Tokenizer::INDEX => 12,
  84. )
  85. )
  86. ),
  87. array(
  88. "{{{ a }}}\n{{# b }} \n{{= | | =}}| c ||/ b |\n|{ d }|",
  89. null,
  90. array(
  91. array(
  92. Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_UNESCAPED,
  93. Mustache_Tokenizer::NAME => 'a',
  94. Mustache_Tokenizer::OTAG => '{{',
  95. Mustache_Tokenizer::CTAG => '}}',
  96. Mustache_Tokenizer::LINE => 0,
  97. Mustache_Tokenizer::INDEX => 8,
  98. ),
  99. array(
  100. Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_TEXT,
  101. Mustache_Tokenizer::LINE => 0,
  102. Mustache_Tokenizer::VALUE => "\n",
  103. ),
  104. array(
  105. Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_SECTION,
  106. Mustache_Tokenizer::NAME => 'b',
  107. Mustache_Tokenizer::OTAG => '{{',
  108. Mustache_Tokenizer::CTAG => '}}',
  109. Mustache_Tokenizer::LINE => 1,
  110. Mustache_Tokenizer::INDEX => 18,
  111. ),
  112. array(
  113. Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_TEXT,
  114. Mustache_Tokenizer::LINE => 1,
  115. Mustache_Tokenizer::VALUE => " \n",
  116. ),
  117. array(
  118. Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_DELIM_CHANGE,
  119. Mustache_Tokenizer::LINE => 2,
  120. ),
  121. array(
  122. Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_ESCAPED,
  123. Mustache_Tokenizer::NAME => 'c',
  124. Mustache_Tokenizer::OTAG => '|',
  125. Mustache_Tokenizer::CTAG => '|',
  126. Mustache_Tokenizer::LINE => 2,
  127. Mustache_Tokenizer::INDEX => 37,
  128. ),
  129. array(
  130. Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_END_SECTION,
  131. Mustache_Tokenizer::NAME => 'b',
  132. Mustache_Tokenizer::OTAG => '|',
  133. Mustache_Tokenizer::CTAG => '|',
  134. Mustache_Tokenizer::LINE => 2,
  135. Mustache_Tokenizer::INDEX => 37,
  136. ),
  137. array(
  138. Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_TEXT,
  139. Mustache_Tokenizer::LINE => 2,
  140. Mustache_Tokenizer::VALUE => "\n",
  141. ),
  142. array(
  143. Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_UNESCAPED,
  144. Mustache_Tokenizer::NAME => 'd',
  145. Mustache_Tokenizer::OTAG => '|',
  146. Mustache_Tokenizer::CTAG => '|',
  147. Mustache_Tokenizer::LINE => 3,
  148. Mustache_Tokenizer::INDEX => 51,
  149. ),
  150. )
  151. ),
  152. // See https://github.com/bobthecow/mustache.php/issues/183
  153. array(
  154. "{{# a }}0{{/ a }}",
  155. null,
  156. array(
  157. array(
  158. Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_SECTION,
  159. Mustache_Tokenizer::NAME => 'a',
  160. Mustache_Tokenizer::OTAG => '{{',
  161. Mustache_Tokenizer::CTAG => '}}',
  162. Mustache_Tokenizer::LINE => 0,
  163. Mustache_Tokenizer::INDEX => 8,
  164. ),
  165. array(
  166. Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_TEXT,
  167. Mustache_Tokenizer::LINE => 0,
  168. Mustache_Tokenizer::VALUE => "0",
  169. ),
  170. array(
  171. Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_END_SECTION,
  172. Mustache_Tokenizer::NAME => 'a',
  173. Mustache_Tokenizer::OTAG => '{{',
  174. Mustache_Tokenizer::CTAG => '}}',
  175. Mustache_Tokenizer::LINE => 0,
  176. Mustache_Tokenizer::INDEX => 9,
  177. ),
  178. )
  179. ),
  180. );
  181. }
  182. }