HigligterTest.php 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  1. <?php
  2. namespace JakubOnderka\PhpConsoleHighlighter;
  3. class HighlighterTest extends \PHPUnit_Framework_TestCase
  4. {
  5. /** @var Highlighter */
  6. private $uut;
  7. protected function getConsoleColorMock()
  8. {
  9. $mock = method_exists($this, 'createMock')
  10. ? $this->createMock('\JakubOnderka\PhpConsoleColor\ConsoleColor')
  11. : $this->getMock('\JakubOnderka\PhpConsoleColor\ConsoleColor');
  12. $mock->expects($this->any())
  13. ->method('apply')
  14. ->will($this->returnCallback(function ($style, $text) {
  15. return "<$style>$text</$style>";
  16. }));
  17. $mock->expects($this->any())
  18. ->method('hasTheme')
  19. ->will($this->returnValue(true));
  20. return $mock;
  21. }
  22. protected function setUp()
  23. {
  24. $this->uut = new Highlighter($this->getConsoleColorMock());
  25. }
  26. protected function compare($original, $expected)
  27. {
  28. $output = $this->uut->getWholeFile($original);
  29. $this->assertEquals($expected, $output);
  30. }
  31. public function testVariable()
  32. {
  33. $this->compare(
  34. <<<EOL
  35. <?php
  36. echo \$a;
  37. EOL
  38. ,
  39. <<<EOL
  40. <token_default><?php</token_default>
  41. <token_keyword>echo </token_keyword><token_default>\$a</token_default><token_keyword>;</token_keyword>
  42. EOL
  43. );
  44. }
  45. public function testInteger()
  46. {
  47. $this->compare(
  48. <<<EOL
  49. <?php
  50. echo 43;
  51. EOL
  52. ,
  53. <<<EOL
  54. <token_default><?php</token_default>
  55. <token_keyword>echo </token_keyword><token_default>43</token_default><token_keyword>;</token_keyword>
  56. EOL
  57. );
  58. }
  59. public function testFloat()
  60. {
  61. $this->compare(
  62. <<<EOL
  63. <?php
  64. echo 43.3;
  65. EOL
  66. ,
  67. <<<EOL
  68. <token_default><?php</token_default>
  69. <token_keyword>echo </token_keyword><token_default>43.3</token_default><token_keyword>;</token_keyword>
  70. EOL
  71. );
  72. }
  73. public function testHex()
  74. {
  75. $this->compare(
  76. <<<EOL
  77. <?php
  78. echo 0x43;
  79. EOL
  80. ,
  81. <<<EOL
  82. <token_default><?php</token_default>
  83. <token_keyword>echo </token_keyword><token_default>0x43</token_default><token_keyword>;</token_keyword>
  84. EOL
  85. );
  86. }
  87. public function testBasicFunction()
  88. {
  89. $this->compare(
  90. <<<EOL
  91. <?php
  92. function plus(\$a, \$b) {
  93. return \$a + \$b;
  94. }
  95. EOL
  96. ,
  97. <<<EOL
  98. <token_default><?php</token_default>
  99. <token_keyword>function </token_keyword><token_default>plus</token_default><token_keyword>(</token_keyword><token_default>\$a</token_default><token_keyword>, </token_keyword><token_default>\$b</token_default><token_keyword>) {</token_keyword>
  100. <token_keyword> return </token_keyword><token_default>\$a </token_default><token_keyword>+ </token_keyword><token_default>\$b</token_default><token_keyword>;</token_keyword>
  101. <token_keyword>}</token_keyword>
  102. EOL
  103. );
  104. }
  105. public function testStringNormal()
  106. {
  107. $this->compare(
  108. <<<EOL
  109. <?php
  110. echo 'Ahoj světe';
  111. EOL
  112. ,
  113. <<<EOL
  114. <token_default><?php</token_default>
  115. <token_keyword>echo </token_keyword><token_string>'Ahoj světe'</token_string><token_keyword>;</token_keyword>
  116. EOL
  117. );
  118. }
  119. public function testStringDouble()
  120. {
  121. $this->compare(
  122. <<<EOL
  123. <?php
  124. echo "Ahoj světe";
  125. EOL
  126. ,
  127. <<<EOL
  128. <token_default><?php</token_default>
  129. <token_keyword>echo </token_keyword><token_string>"Ahoj světe"</token_string><token_keyword>;</token_keyword>
  130. EOL
  131. );
  132. }
  133. public function testInstanceof()
  134. {
  135. $this->compare(
  136. <<<EOL
  137. <?php
  138. \$a instanceof stdClass;
  139. EOL
  140. ,
  141. <<<EOL
  142. <token_default><?php</token_default>
  143. <token_default>\$a </token_default><token_keyword>instanceof </token_keyword><token_default>stdClass</token_default><token_keyword>;</token_keyword>
  144. EOL
  145. );
  146. }
  147. /*
  148. * Constants
  149. */
  150. public function testConstant()
  151. {
  152. $constants = array(
  153. '__FILE__',
  154. '__LINE__',
  155. '__CLASS__',
  156. '__FUNCTION__',
  157. '__METHOD__',
  158. '__TRAIT__',
  159. '__DIR__',
  160. '__NAMESPACE__'
  161. );
  162. foreach ($constants as $constant) {
  163. $this->compare(
  164. <<<EOL
  165. <?php
  166. $constant;
  167. EOL
  168. ,
  169. <<<EOL
  170. <token_default><?php</token_default>
  171. <token_default>$constant</token_default><token_keyword>;</token_keyword>
  172. EOL
  173. );
  174. }
  175. }
  176. /*
  177. * Comments
  178. */
  179. public function testComment()
  180. {
  181. $this->compare(
  182. <<<EOL
  183. <?php
  184. /* Ahoj */
  185. EOL
  186. ,
  187. <<<EOL
  188. <token_default><?php</token_default>
  189. <token_comment>/* Ahoj */</token_comment>
  190. EOL
  191. );
  192. }
  193. public function testDocComment()
  194. {
  195. $this->compare(
  196. <<<EOL
  197. <?php
  198. /** Ahoj */
  199. EOL
  200. ,
  201. <<<EOL
  202. <token_default><?php</token_default>
  203. <token_comment>/** Ahoj */</token_comment>
  204. EOL
  205. );
  206. }
  207. public function testInlineComment()
  208. {
  209. $this->compare(
  210. <<<EOL
  211. <?php
  212. // Ahoj
  213. EOL
  214. ,
  215. <<<EOL
  216. <token_default><?php</token_default>
  217. <token_comment>// Ahoj</token_comment>
  218. EOL
  219. );
  220. }
  221. public function testHashComment()
  222. {
  223. $this->compare(
  224. <<<EOL
  225. <?php
  226. # Ahoj
  227. EOL
  228. ,
  229. <<<EOL
  230. <token_default><?php</token_default>
  231. <token_comment># Ahoj</token_comment>
  232. EOL
  233. );
  234. }
  235. public function testEmpty()
  236. {
  237. $this->compare(
  238. ''
  239. ,
  240. ''
  241. );
  242. }
  243. public function testWhitespace()
  244. {
  245. $this->compare(
  246. ' '
  247. ,
  248. '<token_html> </token_html>'
  249. );
  250. }
  251. }