2012-12-15 15:08:23 +00:00
< ? php
/*
* This file is part of the Symfony package .
*
* ( c ) Fabien Potencier < fabien @ symfony . com >
*
* For the full copyright and license information , please view the LICENSE
* file that was distributed with this source code .
*/
namespace Symfony\Component\Console\Tests\Helper ;
use Symfony\Component\Console\Helper\TableHelper ;
use Symfony\Component\Console\Output\StreamOutput ;
class TableHelperTest extends \PHPUnit_Framework_TestCase
{
protected $stream ;
protected function setUp ()
{
$this -> stream = fopen ( 'php://memory' , 'r+' );
}
protected function tearDown ()
{
fclose ( $this -> stream );
$this -> stream = null ;
}
/**
* @ dataProvider testRenderProvider
*/
public function testRender ( $headers , $rows , $layout , $expected )
{
$table = new TableHelper ();
$table
-> setHeaders ( $headers )
-> setRows ( $rows )
-> setLayout ( $layout )
;
$table -> render ( $output = $this -> getOutputStream ());
$this -> assertEquals ( $expected , $this -> getOutputContent ( $output ));
}
/**
* @ dataProvider testRenderProvider
*/
public function testRenderAddRows ( $headers , $rows , $layout , $expected )
{
$table = new TableHelper ();
$table
-> setHeaders ( $headers )
-> addRows ( $rows )
-> setLayout ( $layout )
;
$table -> render ( $output = $this -> getOutputStream ());
$this -> assertEquals ( $expected , $this -> getOutputContent ( $output ));
}
/**
* @ dataProvider testRenderProvider
*/
public function testRenderAddRowsOneByOne ( $headers , $rows , $layout , $expected )
{
$table = new TableHelper ();
$table
-> setHeaders ( $headers )
-> setLayout ( $layout )
;
foreach ( $rows as $row ) {
$table -> addRow ( $row );
}
$table -> render ( $output = $this -> getOutputStream ());
$this -> assertEquals ( $expected , $this -> getOutputContent ( $output ));
}
public function testRenderProvider ()
{
return array (
array (
array ( 'ISBN' , 'Title' , 'Author' ),
array (
array ( '99921-58-10-7' , 'Divine Comedy' , 'Dante Alighieri' ),
array ( '9971-5-0210-0' , 'A Tale of Two Cities' , 'Charles Dickens' ),
array ( '960-425-059-0' , 'The Lord of the Rings' , 'J. R. R. Tolkien' ),
array ( '80-902734-1-6' , 'And Then There Were None' , 'Agatha Christie' ),
),
TableHelper :: LAYOUT_DEFAULT ,
<<< TABLE
+---------------+--------------------------+------------------+
| ISBN | Title | Author |
+---------------+--------------------------+------------------+
| 99921 - 58 - 10 - 7 | Divine Comedy | Dante Alighieri |
| 9971 - 5 - 0210 - 0 | A Tale of Two Cities | Charles Dickens |
| 960 - 425 - 05 9 - 0 | The Lord of the Rings | J . R . R . Tolkien |
| 80 - 902734 - 1 - 6 | And Then There Were None | Agatha Christie |
+---------------+--------------------------+------------------+
TABLE
),
array (
array ( 'ISBN' , 'Title' , 'Author' ),
array (
array ( '99921-58-10-7' , 'Divine Comedy' , 'Dante Alighieri' ),
array ( '9971-5-0210-0' , 'A Tale of Two Cities' , 'Charles Dickens' ),
array ( '960-425-059-0' , 'The Lord of the Rings' , 'J. R. R. Tolkien' ),
array ( '80-902734-1-6' , 'And Then There Were None' , 'Agatha Christie' ),
),
TableHelper :: LAYOUT_BORDERLESS ,
" =============== ========================== ================== \n ISBN Title Author \n =============== ========================== ================== \n 99921-58-10-7 Divine Comedy Dante Alighieri \n 9971-5-0210-0 A Tale of Two Cities Charles Dickens \n 960-425-059-0 The Lord of the Rings J. R. R. Tolkien \n 80-902734-1-6 And Then There Were None Agatha Christie \n =============== ========================== ================== \n "
),
array (
array ( 'ISBN' , 'Title' ),
array (
array ( '99921-58-10-7' , 'Divine Comedy' , 'Dante Alighieri' ),
array ( '9971-5-0210-0' ),
array ( '960-425-059-0' , 'The Lord of the Rings' , 'J. R. R. Tolkien' ),
array ( '80-902734-1-6' , 'And Then There Were None' , 'Agatha Christie' ),
),
TableHelper :: LAYOUT_DEFAULT ,
<<< TABLE
+---------------+--------------------------+------------------+
| ISBN | Title | |
+---------------+--------------------------+------------------+
| 99921 - 58 - 10 - 7 | Divine Comedy | Dante Alighieri |
| 9971 - 5 - 0210 - 0 | | |
| 960 - 425 - 05 9 - 0 | The Lord of the Rings | J . R . R . Tolkien |
| 80 - 902734 - 1 - 6 | And Then There Were None | Agatha Christie |
+---------------+--------------------------+------------------+
TABLE
),
array (
array (),
array (
array ( '99921-58-10-7' , 'Divine Comedy' , 'Dante Alighieri' ),
array ( '9971-5-0210-0' ),
array ( '960-425-059-0' , 'The Lord of the Rings' , 'J. R. R. Tolkien' ),
array ( '80-902734-1-6' , 'And Then There Were None' , 'Agatha Christie' ),
),
TableHelper :: LAYOUT_DEFAULT ,
<<< TABLE
+---------------+--------------------------+------------------+
| 99921 - 58 - 10 - 7 | Divine Comedy | Dante Alighieri |
| 9971 - 5 - 0210 - 0 | | |
| 960 - 425 - 05 9 - 0 | The Lord of the Rings | J . R . R . Tolkien |
| 80 - 902734 - 1 - 6 | And Then There Were None | Agatha Christie |
+---------------+--------------------------+------------------+
2013-12-15 17:59:25 +00:00
TABLE
),
array (
array ( 'ISBN' , 'Title' , 'Author' ),
array (
2015-03-21 10:51:07 +00:00
array ( '99921-58-10-7' , " Divine \n Comedy " , 'Dante Alighieri' ),
array ( '9971-5-0210-2' , " Harry Potter \n and the Chamber of Secrets " , " Rowling \n Joanne K. " ),
array ( '9971-5-0210-2' , " Harry Potter \n and the Chamber of Secrets " , " Rowling \n Joanne K. " ),
array ( '960-425-059-0' , 'The Lord of the Rings' , " J. R. R. \n Tolkien " ),
2013-12-15 17:59:25 +00:00
),
TableHelper :: LAYOUT_DEFAULT ,
<<< TABLE
+---------------+----------------------------+-----------------+
| ISBN | Title | Author |
+---------------+----------------------------+-----------------+
| 99921 - 58 - 10 - 7 | Divine | Dante Alighieri |
| | Comedy | |
| 9971 - 5 - 0210 - 2 | Harry Potter | Rowling |
| | and the Chamber of Secrets | Joanne K . |
2013-12-15 18:46:51 +00:00
| 9971 - 5 - 0210 - 2 | Harry Potter | Rowling |
| | and the Chamber of Secrets | Joanne K . |
2013-12-15 17:59:25 +00:00
| 960 - 425 - 05 9 - 0 | The Lord of the Rings | J . R . R . |
| | | Tolkien |
+---------------+----------------------------+-----------------+
2012-12-15 15:08:23 +00:00
TABLE
),
array (
array ( 'ISBN' , 'Title' ),
array (),
TableHelper :: LAYOUT_DEFAULT ,
<<< TABLE
+------+-------+
| ISBN | Title |
+------+-------+
TABLE
),
array (
array (),
array (),
TableHelper :: LAYOUT_DEFAULT ,
'' ,
),
2013-12-29 17:16:00 +00:00
'Cell text with tags used for Output styling' => array (
array ( 'ISBN' , 'Title' , 'Author' ),
array (
array ( '<info>99921-58-10-7</info>' , '<error>Divine Comedy</error>' , '<fg=blue;bg=white>Dante Alighieri</fg=blue;bg=white>' ),
array ( '9971-5-0210-0' , 'A Tale of Two Cities' , '<info>Charles Dickens</>' ),
),
TableHelper :: LAYOUT_DEFAULT ,
<<< TABLE
+---------------+----------------------+-----------------+
| ISBN | Title | Author |
+---------------+----------------------+-----------------+
| 99921 - 58 - 10 - 7 | Divine Comedy | Dante Alighieri |
| 9971 - 5 - 0210 - 0 | A Tale of Two Cities | Charles Dickens |
+---------------+----------------------+-----------------+
TABLE
),
'Cell text with tags not used for Output styling' => array (
array ( 'ISBN' , 'Title' , 'Author' ),
array (
array ( '<strong>99921-58-10-700</strong>' , '<f>Divine Com</f>' , 'Dante Alighieri' ),
array ( '9971-5-0210-0' , 'A Tale of Two Cities' , 'Charles Dickens' ),
),
TableHelper :: LAYOUT_DEFAULT ,
<<< TABLE
+----------------------------------+----------------------+-----------------+
| ISBN | Title | Author |
+----------------------------------+----------------------+-----------------+
| < strong > 99921 - 58 - 10 - 700 </ strong > | < f > Divine Com </ f > | Dante Alighieri |
| 9971 - 5 - 0210 - 0 | A Tale of Two Cities | Charles Dickens |
+----------------------------------+----------------------+-----------------+
TABLE
),
2012-12-15 15:08:23 +00:00
);
}
2013-06-15 18:35:00 +01:00
public function testRenderMultiByte ()
{
2014-12-05 08:50:33 +00:00
if ( ! function_exists ( 'mb_strwidth' )) {
2013-06-15 18:35:00 +01:00
$this -> markTestSkipped ( 'The "mbstring" extension is not available' );
}
$table = new TableHelper ();
$table
-> setHeaders ( array ( '■■' ))
-> setRows ( array ( array ( 1234 )))
-> setLayout ( TableHelper :: LAYOUT_DEFAULT )
;
$table -> render ( $output = $this -> getOutputStream ());
$expected =
<<< TABLE
+------+
| ■■ |
+------+
| 1234 |
+------+
2014-12-05 08:50:33 +00:00
TABLE ;
$this -> assertEquals ( $expected , $this -> getOutputContent ( $output ));
}
public function testRenderFullWidthCharacters ()
{
if ( ! function_exists ( 'mb_strwidth' )) {
$this -> markTestSkipped ( 'The "mbstring" extension is not available' );
}
$table = new TableHelper ();
$table
-> setHeaders ( array ( 'あいうえお' ))
-> setRows ( array ( array ( 1234567890 )))
-> setLayout ( TableHelper :: LAYOUT_DEFAULT )
;
$table -> render ( $output = $this -> getOutputStream ());
$expected =
<<< TABLE
+------------+
| あいうえお |
+------------+
| 1234567890 |
+------------+
2013-06-15 18:35:00 +01:00
TABLE ;
$this -> assertEquals ( $expected , $this -> getOutputContent ( $output ));
}
2012-12-15 15:08:23 +00:00
protected function getOutputStream ()
{
2013-04-25 12:56:40 +01:00
return new StreamOutput ( $this -> stream , StreamOutput :: VERBOSITY_NORMAL , false );
2012-12-15 15:08:23 +00:00
}
protected function getOutputContent ( StreamOutput $output )
{
rewind ( $output -> getStream ());
2013-04-25 12:56:40 +01:00
return str_replace ( PHP_EOL , " \n " , stream_get_contents ( $output -> getStream ()));
2012-12-15 15:08:23 +00:00
}
}