OutputFormatterTest.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. <?php
  2. /*
  3. * This file is part of the Symfony package.
  4. *
  5. * (c) Fabien Potencier <fabien@symfony.com>
  6. *
  7. * For the full copyright and license information, please view the LICENSE
  8. * file that was distributed with this source code.
  9. */
  10. namespace Symfony\Tests\Component\Console\Formatter;
  11. use Symfony\Component\Console\Formatter\OutputFormatter;
  12. class FormatterStyleTest extends \PHPUnit_Framework_TestCase
  13. {
  14. public function testBundledStyles()
  15. {
  16. $formatter = new OutputFormatter(true);
  17. $this->assertTrue($formatter->hasStyle('error'));
  18. $this->assertTrue($formatter->hasStyle('info'));
  19. $this->assertTrue($formatter->hasStyle('comment'));
  20. $this->assertTrue($formatter->hasStyle('question'));
  21. $this->assertEquals(
  22. "\033[37;41msome error\033[0m", $formatter->format('<error>some error</error>')
  23. );
  24. $this->assertEquals(
  25. "\033[32msome info\033[0m", $formatter->format('<info>some info</info>')
  26. );
  27. $this->assertEquals(
  28. "\033[33msome comment\033[0m", $formatter->format('<comment>some comment</comment>')
  29. );
  30. $this->assertEquals(
  31. "\033[30;46msome question\033[0m", $formatter->format('<question>some question</question>')
  32. );
  33. }
  34. public function testNestedStyles()
  35. {
  36. $formatter = new OutputFormatter(true);
  37. $this->assertEquals(
  38. "\033[37;41msome \033[32msome info\033[0m error\033[0m", $formatter->format('<error>some <info>some info</info> error</error>')
  39. );
  40. }
  41. public function testNewStyle()
  42. {
  43. $formatter = new OutputFormatter(true);
  44. $style = $this->getMockBuilder('Symfony\Component\Console\Formatter\OutputFormatterStyleInterface')->getMock();
  45. $formatter->setStyle('test', $style);
  46. $this->assertEquals($style, $formatter->getStyle('test'));
  47. $this->assertNotEquals($style, $formatter->getStyle('info'));
  48. $style
  49. ->expects($this->once())
  50. ->method('apply')
  51. ->will($this->returnValue('[STYLE_BEG]some custom msg[STYLE_END]'));
  52. $this->assertEquals("[STYLE_BEG]some custom msg[STYLE_END]", $formatter->format('<test>some custom msg</test>'));
  53. }
  54. public function testRedefineStyle()
  55. {
  56. $formatter = new OutputFormatter(true);
  57. $style = $this->getMockBuilder('Symfony\Component\Console\Formatter\OutputFormatterStyleInterface')
  58. ->getMock();
  59. $formatter->setStyle('info', $style);
  60. $style
  61. ->expects($this->once())
  62. ->method('apply')
  63. ->will($this->returnValue('[STYLE_BEG]some custom msg[STYLE_END]'));
  64. $this->assertEquals(
  65. "[STYLE_BEG]some custom msg[STYLE_END]", $formatter->format('<info>some custom msg</info>')
  66. );
  67. }
  68. public function testInlineStyle()
  69. {
  70. $formatter = new OutputFormatter(true);
  71. $this->assertEquals("\033[34;41msome text\033[0m", $formatter->format('<fg=blue;bg=red>some text</>'));
  72. $this->assertEquals("\033[34;41msome text\033[0m", $formatter->format('<fg=blue;bg=red>some text</fg=blue;bg=red>'));
  73. }
  74. public function testNotDecoratedFormatter()
  75. {
  76. $formatter = new OutputFormatter(false);
  77. $this->assertTrue($formatter->hasStyle('error'));
  78. $this->assertTrue($formatter->hasStyle('info'));
  79. $this->assertTrue($formatter->hasStyle('comment'));
  80. $this->assertTrue($formatter->hasStyle('question'));
  81. $this->assertEquals(
  82. "some error", $formatter->format('<error>some error</error>')
  83. );
  84. $this->assertEquals(
  85. "some info", $formatter->format('<info>some info</info>')
  86. );
  87. $this->assertEquals(
  88. "some comment", $formatter->format('<comment>some comment</comment>')
  89. );
  90. $this->assertEquals(
  91. "some question", $formatter->format('<question>some question</question>')
  92. );
  93. $formatter->setDecorated(true);
  94. $this->assertEquals(
  95. "\033[37;41msome error\033[0m", $formatter->format('<error>some error</error>')
  96. );
  97. $this->assertEquals(
  98. "\033[32msome info\033[0m", $formatter->format('<info>some info</info>')
  99. );
  100. $this->assertEquals(
  101. "\033[33msome comment\033[0m", $formatter->format('<comment>some comment</comment>')
  102. );
  103. $this->assertEquals(
  104. "\033[30;46msome question\033[0m", $formatter->format('<question>some question</question>')
  105. );
  106. }
  107. public function testContentWithLineBreaks()
  108. {
  109. $formatter = new OutputFormatter(true);
  110. $this->assertEquals(<<<EOF
  111. \033[32m
  112. some text\033[0m
  113. EOF
  114. , $formatter->format(<<<EOF
  115. <info>
  116. some text</info>
  117. EOF
  118. ));
  119. $this->assertEquals(<<<EOF
  120. \033[32msome text
  121. \033[0m
  122. EOF
  123. , $formatter->format(<<<EOF
  124. <info>some text
  125. </info>
  126. EOF
  127. ));
  128. $this->assertEquals(<<<EOF
  129. \033[32m
  130. some text
  131. \033[0m
  132. EOF
  133. , $formatter->format(<<<EOF
  134. <info>
  135. some text
  136. </info>
  137. EOF
  138. ));
  139. $this->assertEquals(<<<EOF
  140. \033[32m
  141. some text
  142. more text
  143. \033[0m
  144. EOF
  145. , $formatter->format(<<<EOF
  146. <info>
  147. some text
  148. more text
  149. </info>
  150. EOF
  151. ));
  152. }
  153. }