ParserTest.php 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. <?php
  2. /*
  3. * This file is part of Mustache.php.
  4. *
  5. * (c) 2012 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_ParserTest extends PHPUnit_Framework_TestCase
  14. {
  15. /**
  16. * @dataProvider getTokenSets
  17. */
  18. public function testParse($tokens, $expected)
  19. {
  20. $parser = new Mustache_Parser;
  21. $this->assertEquals($expected, $parser->parse($tokens));
  22. }
  23. public function getTokenSets()
  24. {
  25. return array(
  26. array(
  27. array(),
  28. array()
  29. ),
  30. array(
  31. array(array(
  32. Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_TEXT,
  33. Mustache_Tokenizer::VALUE => 'text'
  34. )),
  35. array(array(
  36. Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_TEXT,
  37. Mustache_Tokenizer::VALUE => 'text'
  38. )),
  39. ),
  40. array(
  41. array(array(
  42. Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_ESCAPED,
  43. Mustache_Tokenizer::NAME => 'name'
  44. )),
  45. array(array(
  46. Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_ESCAPED,
  47. Mustache_Tokenizer::NAME => 'name'
  48. )),
  49. ),
  50. array(
  51. array(
  52. array(
  53. Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_TEXT,
  54. Mustache_Tokenizer::VALUE => 'foo'
  55. ),
  56. array(
  57. Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_INVERTED,
  58. Mustache_Tokenizer::INDEX => 123,
  59. Mustache_Tokenizer::NAME => 'parent'
  60. ),
  61. array(
  62. Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_ESCAPED,
  63. Mustache_Tokenizer::NAME => 'name'
  64. ),
  65. array(
  66. Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_END_SECTION,
  67. Mustache_Tokenizer::INDEX => 456,
  68. Mustache_Tokenizer::NAME => 'parent'
  69. ),
  70. array(
  71. Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_TEXT,
  72. Mustache_Tokenizer::VALUE => 'bar'
  73. ),
  74. ),
  75. array(
  76. array(
  77. Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_TEXT,
  78. Mustache_Tokenizer::VALUE => 'foo'
  79. ),
  80. array(
  81. Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_INVERTED,
  82. Mustache_Tokenizer::NAME => 'parent',
  83. Mustache_Tokenizer::INDEX => 123,
  84. Mustache_Tokenizer::END => 456,
  85. Mustache_Tokenizer::NODES => array(
  86. array(
  87. Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_ESCAPED,
  88. Mustache_Tokenizer::NAME => 'name'
  89. ),
  90. ),
  91. ),
  92. array(
  93. Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_TEXT,
  94. Mustache_Tokenizer::VALUE => 'bar'
  95. ),
  96. ),
  97. ),
  98. );
  99. }
  100. /**
  101. * @dataProvider getBadParseTrees
  102. * @expectedException LogicException
  103. */
  104. public function testParserThrowsExceptions($tokens)
  105. {
  106. $parser = new Mustache_Parser;
  107. $parser->parse($tokens);
  108. }
  109. public function getBadParseTrees()
  110. {
  111. return array(
  112. // no close
  113. array(
  114. array(
  115. array(
  116. Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_SECTION,
  117. Mustache_Tokenizer::NAME => 'parent',
  118. Mustache_Tokenizer::INDEX => 123,
  119. ),
  120. ),
  121. ),
  122. // no close inverted
  123. array(
  124. array(
  125. array(
  126. Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_INVERTED,
  127. Mustache_Tokenizer::NAME => 'parent',
  128. Mustache_Tokenizer::INDEX => 123,
  129. ),
  130. ),
  131. ),
  132. // no opening inverted
  133. array(
  134. array(
  135. array(
  136. Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_END_SECTION,
  137. Mustache_Tokenizer::NAME => 'parent',
  138. Mustache_Tokenizer::INDEX => 123,
  139. ),
  140. ),
  141. ),
  142. // weird nesting
  143. array(
  144. array(
  145. array(
  146. Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_SECTION,
  147. Mustache_Tokenizer::NAME => 'parent',
  148. Mustache_Tokenizer::INDEX => 123,
  149. ),
  150. array(
  151. Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_SECTION,
  152. Mustache_Tokenizer::NAME => 'child',
  153. Mustache_Tokenizer::INDEX => 123,
  154. ),
  155. array(
  156. Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_END_SECTION,
  157. Mustache_Tokenizer::NAME => 'parent',
  158. Mustache_Tokenizer::INDEX => 123,
  159. ),
  160. array(
  161. Mustache_Tokenizer::TYPE => Mustache_Tokenizer::T_END_SECTION,
  162. Mustache_Tokenizer::NAME => 'child',
  163. Mustache_Tokenizer::INDEX => 123,
  164. ),
  165. ),
  166. ),
  167. );
  168. }
  169. }