TYPO3  7.6
OutputFormatterTest.php
Go to the documentation of this file.
1 <?php
2 
3 /*
4  * This file is part of the Symfony package.
5  *
6  * (c) Fabien Potencier <fabien@symfony.com>
7  *
8  * For the full copyright and license information, please view the LICENSE
9  * file that was distributed with this source code.
10  */
11 
12 namespace Symfony\Component\Console\Tests\Formatter;
13 
16 
17 class OutputFormatterTest extends \PHPUnit_Framework_TestCase
18 {
19  public function testEmptyTag()
20  {
21  $formatter = new OutputFormatter(true);
22  $this->assertEquals('foo<>bar', $formatter->format('foo<>bar'));
23  }
24 
25  public function testLGCharEscaping()
26  {
27  $formatter = new OutputFormatter(true);
28 
29  $this->assertEquals('foo<bar', $formatter->format('foo\\<bar'));
30  $this->assertEquals('<info>some info</info>', $formatter->format('\\<info>some info\\</info>'));
31  $this->assertEquals('\\<info>some info\\</info>', OutputFormatter::escape('<info>some info</info>'));
32 
33  $this->assertEquals(
34  "\033[33mSymfony\\Component\\Console does work very well!\033[39m",
35  $formatter->format('<comment>Symfony\Component\Console does work very well!</comment>')
36  );
37  }
38 
39  public function testBundledStyles()
40  {
41  $formatter = new OutputFormatter(true);
42 
43  $this->assertTrue($formatter->hasStyle('error'));
44  $this->assertTrue($formatter->hasStyle('info'));
45  $this->assertTrue($formatter->hasStyle('comment'));
46  $this->assertTrue($formatter->hasStyle('question'));
47 
48  $this->assertEquals(
49  "\033[37;41msome error\033[39;49m",
50  $formatter->format('<error>some error</error>')
51  );
52  $this->assertEquals(
53  "\033[32msome info\033[39m",
54  $formatter->format('<info>some info</info>')
55  );
56  $this->assertEquals(
57  "\033[33msome comment\033[39m",
58  $formatter->format('<comment>some comment</comment>')
59  );
60  $this->assertEquals(
61  "\033[30;46msome question\033[39;49m",
62  $formatter->format('<question>some question</question>')
63  );
64  }
65 
66  public function testNestedStyles()
67  {
68  $formatter = new OutputFormatter(true);
69 
70  $this->assertEquals(
71  "\033[37;41msome \033[39;49m\033[32msome info\033[39m\033[37;41m error\033[39;49m",
72  $formatter->format('<error>some <info>some info</info> error</error>')
73  );
74  }
75 
76  public function testAdjacentStyles()
77  {
78  $formatter = new OutputFormatter(true);
79 
80  $this->assertEquals(
81  "\033[37;41msome error\033[39;49m\033[32msome info\033[39m",
82  $formatter->format('<error>some error</error><info>some info</info>')
83  );
84  }
85 
86  public function testStyleMatchingNotGreedy()
87  {
88  $formatter = new OutputFormatter(true);
89 
90  $this->assertEquals(
91  "(\033[32m>=2.0,<2.3\033[39m)",
92  $formatter->format('(<info>>=2.0,<2.3</info>)')
93  );
94  }
95 
96  public function testStyleEscaping()
97  {
98  $formatter = new OutputFormatter(true);
99 
100  $this->assertEquals(
101  "(\033[32mz>=2.0,<a2.3\033[39m)",
102  $formatter->format('(<info>'.$formatter->escape('z>=2.0,<a2.3').'</info>)')
103  );
104 
105  $this->assertEquals(
106  "\033[32m<error>some error</error>\033[39m",
107  $formatter->format('<info>'.$formatter->escape('<error>some error</error>').'</info>')
108  );
109  }
110 
111  public function testDeepNestedStyles()
112  {
113  $formatter = new OutputFormatter(true);
114 
115  $this->assertEquals(
116  "\033[37;41merror\033[39;49m\033[32minfo\033[39m\033[33mcomment\033[39m\033[37;41merror\033[39;49m",
117  $formatter->format('<error>error<info>info<comment>comment</info>error</error>')
118  );
119  }
120 
121  public function testNewStyle()
122  {
123  $formatter = new OutputFormatter(true);
124 
125  $style = new OutputFormatterStyle('blue', 'white');
126  $formatter->setStyle('test', $style);
127 
128  $this->assertEquals($style, $formatter->getStyle('test'));
129  $this->assertNotEquals($style, $formatter->getStyle('info'));
130 
131  $style = new OutputFormatterStyle('blue', 'white');
132  $formatter->setStyle('b', $style);
133 
134  $this->assertEquals("\033[34;47msome \033[39;49m\033[34;47mcustom\033[39;49m\033[34;47m msg\033[39;49m", $formatter->format('<test>some <b>custom</b> msg</test>'));
135  }
136 
137  public function testRedefineStyle()
138  {
139  $formatter = new OutputFormatter(true);
140 
141  $style = new OutputFormatterStyle('blue', 'white');
142  $formatter->setStyle('info', $style);
143 
144  $this->assertEquals("\033[34;47msome custom msg\033[39;49m", $formatter->format('<info>some custom msg</info>'));
145  }
146 
147  public function testInlineStyle()
148  {
149  $formatter = new OutputFormatter(true);
150 
151  $this->assertEquals("\033[34;41msome text\033[39;49m", $formatter->format('<fg=blue;bg=red>some text</>'));
152  $this->assertEquals("\033[34;41msome text\033[39;49m", $formatter->format('<fg=blue;bg=red>some text</fg=blue;bg=red>'));
153  }
154 
155  public function testNonStyleTag()
156  {
157  $formatter = new OutputFormatter(true);
158 
159  $this->assertEquals("\033[32msome \033[39m\033[32m<tag>\033[39m\033[32m \033[39m\033[32m<setting=value>\033[39m\033[32m styled \033[39m\033[32m<p>\033[39m\033[32msingle-char tag\033[39m\033[32m</p>\033[39m", $formatter->format('<info>some <tag> <setting=value> styled <p>single-char tag</p></info>'));
160  }
161 
162  public function testFormatLongString()
163  {
164  $formatter = new OutputFormatter(true);
165  $long = str_repeat('\\', 14000);
166  $this->assertEquals("\033[37;41msome error\033[39;49m".$long, $formatter->format('<error>some error</error>'.$long));
167  }
168 
169  public function testFormatToStringObject()
170  {
171  $formatter = new OutputFormatter(false);
172  $this->assertEquals(
173  'some info', $formatter->format(new TableCell())
174  );
175  }
176 
177  public function testNotDecoratedFormatter()
178  {
179  $formatter = new OutputFormatter(false);
180 
181  $this->assertTrue($formatter->hasStyle('error'));
182  $this->assertTrue($formatter->hasStyle('info'));
183  $this->assertTrue($formatter->hasStyle('comment'));
184  $this->assertTrue($formatter->hasStyle('question'));
185 
186  $this->assertEquals(
187  'some error', $formatter->format('<error>some error</error>')
188  );
189  $this->assertEquals(
190  'some info', $formatter->format('<info>some info</info>')
191  );
192  $this->assertEquals(
193  'some comment', $formatter->format('<comment>some comment</comment>')
194  );
195  $this->assertEquals(
196  'some question', $formatter->format('<question>some question</question>')
197  );
198 
199  $formatter->setDecorated(true);
200 
201  $this->assertEquals(
202  "\033[37;41msome error\033[39;49m", $formatter->format('<error>some error</error>')
203  );
204  $this->assertEquals(
205  "\033[32msome info\033[39m", $formatter->format('<info>some info</info>')
206  );
207  $this->assertEquals(
208  "\033[33msome comment\033[39m", $formatter->format('<comment>some comment</comment>')
209  );
210  $this->assertEquals(
211  "\033[30;46msome question\033[39;49m", $formatter->format('<question>some question</question>')
212  );
213  }
214 
215  public function testContentWithLineBreaks()
216  {
217  $formatter = new OutputFormatter(true);
218 
219  $this->assertEquals(<<<EOF
220 \033[32m
221 some text\033[39m
222 EOF
223  , $formatter->format(<<<EOF
224 <info>
225 some text</info>
226 EOF
227  ));
228 
229  $this->assertEquals(<<<EOF
230 \033[32msome text
231 \033[39m
232 EOF
233  , $formatter->format(<<<EOF
234 <info>some text
235 </info>
236 EOF
237  ));
238 
239  $this->assertEquals(<<<EOF
240 \033[32m
241 some text
242 \033[39m
243 EOF
244  , $formatter->format(<<<EOF
245 <info>
246 some text
247 </info>
248 EOF
249  ));
250 
251  $this->assertEquals(<<<EOF
252 \033[32m
253 some text
254 more text
255 \033[39m
256 EOF
257  , $formatter->format(<<<EOF
258 <info>
259 some text
260 more text
261 </info>
262 EOF
263  ));
264  }
265 }
266 
267 class TableCell
268 {
269  public function __toString()
270  {
271  return '<info>some info</info>';
272  }
273 }