ParserTest.php 3.5 KB

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