sonarrradarrplexorganizrnginxdashboardmuximuxlandingpagestartpagelandinghtpcserverhomepagesabnzbdheimdallembycouchpotatonzbgetbookmarkapplication-dashboard
		
		
		
		
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							838 lines
						
					
					
						
							29 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							838 lines
						
					
					
						
							29 KiB
						
					
					
				
								<?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 PHPUnit\Framework\TestCase;
							 | 
						|
								use Symfony\Component\Console\Helper\Table;
							 | 
						|
								use Symfony\Component\Console\Helper\TableStyle;
							 | 
						|
								use Symfony\Component\Console\Helper\TableSeparator;
							 | 
						|
								use Symfony\Component\Console\Helper\TableCell;
							 | 
						|
								use Symfony\Component\Console\Output\StreamOutput;
							 | 
						|
								
							 | 
						|
								class TableTest extends TestCase
							 | 
						|
								{
							 | 
						|
								    protected $stream;
							 | 
						|
								
							 | 
						|
								    protected function setUp()
							 | 
						|
								    {
							 | 
						|
								        $this->stream = fopen('php://memory', 'r+');
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    protected function tearDown()
							 | 
						|
								    {
							 | 
						|
								        fclose($this->stream);
							 | 
						|
								        $this->stream = null;
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @dataProvider renderProvider
							 | 
						|
								     */
							 | 
						|
								    public function testRender($headers, $rows, $style, $expected, $decorated = false)
							 | 
						|
								    {
							 | 
						|
								        $table = new Table($output = $this->getOutputStream($decorated));
							 | 
						|
								        $table
							 | 
						|
								            ->setHeaders($headers)
							 | 
						|
								            ->setRows($rows)
							 | 
						|
								            ->setStyle($style)
							 | 
						|
								        ;
							 | 
						|
								        $table->render();
							 | 
						|
								
							 | 
						|
								        $this->assertEquals($expected, $this->getOutputContent($output));
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @dataProvider renderProvider
							 | 
						|
								     */
							 | 
						|
								    public function testRenderAddRows($headers, $rows, $style, $expected, $decorated = false)
							 | 
						|
								    {
							 | 
						|
								        $table = new Table($output = $this->getOutputStream($decorated));
							 | 
						|
								        $table
							 | 
						|
								            ->setHeaders($headers)
							 | 
						|
								            ->addRows($rows)
							 | 
						|
								            ->setStyle($style)
							 | 
						|
								        ;
							 | 
						|
								        $table->render();
							 | 
						|
								
							 | 
						|
								        $this->assertEquals($expected, $this->getOutputContent($output));
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @dataProvider renderProvider
							 | 
						|
								     */
							 | 
						|
								    public function testRenderAddRowsOneByOne($headers, $rows, $style, $expected, $decorated = false)
							 | 
						|
								    {
							 | 
						|
								        $table = new Table($output = $this->getOutputStream($decorated));
							 | 
						|
								        $table
							 | 
						|
								            ->setHeaders($headers)
							 | 
						|
								            ->setStyle($style)
							 | 
						|
								        ;
							 | 
						|
								        foreach ($rows as $row) {
							 | 
						|
								            $table->addRow($row);
							 | 
						|
								        }
							 | 
						|
								        $table->render();
							 | 
						|
								
							 | 
						|
								        $this->assertEquals($expected, $this->getOutputContent($output));
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function renderProvider()
							 | 
						|
								    {
							 | 
						|
								        $books = 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'),
							 | 
						|
								        );
							 | 
						|
								
							 | 
						|
								        return array(
							 | 
						|
								            array(
							 | 
						|
								                array('ISBN', 'Title', 'Author'),
							 | 
						|
								                $books,
							 | 
						|
								                '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-059-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'),
							 | 
						|
								                $books,
							 | 
						|
								                'compact',
							 | 
						|
								<<<'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-059-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'),
							 | 
						|
								                $books,
							 | 
						|
								                'borderless',
							 | 
						|
								<<<'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-059-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'),
							 | 
						|
								                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'),
							 | 
						|
								                ),
							 | 
						|
								                'default',
							 | 
						|
								<<<'TABLE'
							 | 
						|
								+---------------+--------------------------+------------------+
							 | 
						|
								| ISBN          | Title                    |                  |
							 | 
						|
								+---------------+--------------------------+------------------+
							 | 
						|
								| 99921-58-10-7 | Divine Comedy            | Dante Alighieri  |
							 | 
						|
								| 9971-5-0210-0 |                          |                  |
							 | 
						|
								| 960-425-059-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'),
							 | 
						|
								                ),
							 | 
						|
								                'default',
							 | 
						|
								<<<'TABLE'
							 | 
						|
								+---------------+--------------------------+------------------+
							 | 
						|
								| 99921-58-10-7 | Divine Comedy            | Dante Alighieri  |
							 | 
						|
								| 9971-5-0210-0 |                          |                  |
							 | 
						|
								| 960-425-059-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\nComedy", 'Dante Alighieri'),
							 | 
						|
								                    array('9971-5-0210-2', "Harry Potter\nand the Chamber of Secrets", "Rowling\nJoanne K."),
							 | 
						|
								                    array('9971-5-0210-2', "Harry Potter\nand the Chamber of Secrets", "Rowling\nJoanne K."),
							 | 
						|
								                    array('960-425-059-0', 'The Lord of the Rings', "J. R. R.\nTolkien"),
							 | 
						|
								                ),
							 | 
						|
								                '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.       |
							 | 
						|
								| 9971-5-0210-2 | Harry Potter               | Rowling         |
							 | 
						|
								|               | and the Chamber of Secrets | Joanne K.       |
							 | 
						|
								| 960-425-059-0 | The Lord of the Rings      | J. R. R.        |
							 | 
						|
								|               |                            | Tolkien         |
							 | 
						|
								+---------------+----------------------------+-----------------+
							 | 
						|
								
							 | 
						|
								TABLE
							 | 
						|
								            ),
							 | 
						|
								            array(
							 | 
						|
								                array('ISBN', 'Title'),
							 | 
						|
								                array(),
							 | 
						|
								                'default',
							 | 
						|
								<<<'TABLE'
							 | 
						|
								+------+-------+
							 | 
						|
								| ISBN | Title |
							 | 
						|
								+------+-------+
							 | 
						|
								
							 | 
						|
								TABLE
							 | 
						|
								            ),
							 | 
						|
								            array(
							 | 
						|
								                array(),
							 | 
						|
								                array(),
							 | 
						|
								                'default',
							 | 
						|
								                '',
							 | 
						|
								            ),
							 | 
						|
								            '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</>'),
							 | 
						|
								                ),
							 | 
						|
								                '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'),
							 | 
						|
								                ),
							 | 
						|
								                '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
							 | 
						|
								            ),
							 | 
						|
								            'Cell with colspan' => array(
							 | 
						|
								                array('ISBN', 'Title', 'Author'),
							 | 
						|
								                array(
							 | 
						|
								                    array('99921-58-10-7', 'Divine Comedy', 'Dante Alighieri'),
							 | 
						|
								                    new TableSeparator(),
							 | 
						|
								                    array(new TableCell('Divine Comedy(Dante Alighieri)', array('colspan' => 3))),
							 | 
						|
								                    new TableSeparator(),
							 | 
						|
								                    array(
							 | 
						|
								                        new TableCell('Arduino: A Quick-Start Guide', array('colspan' => 2)),
							 | 
						|
								                        'Mark Schmidt',
							 | 
						|
								                    ),
							 | 
						|
								                    new TableSeparator(),
							 | 
						|
								                    array(
							 | 
						|
								                        '9971-5-0210-0',
							 | 
						|
								                        new TableCell("A Tale of \nTwo Cities", array('colspan' => 2)),
							 | 
						|
								                    ),
							 | 
						|
								                    new TableSeparator(),
							 | 
						|
								                    array(
							 | 
						|
								                        new TableCell('Cupiditate dicta atque porro, tempora exercitationem modi animi nulla nemo vel nihil!', array('colspan' => 3)),
							 | 
						|
								                    ),
							 | 
						|
								                ),
							 | 
						|
								                'default',
							 | 
						|
								<<<'TABLE'
							 | 
						|
								+-------------------------------+-------------------------------+-----------------------------+
							 | 
						|
								| ISBN                          | Title                         | Author                      |
							 | 
						|
								+-------------------------------+-------------------------------+-----------------------------+
							 | 
						|
								| 99921-58-10-7                 | Divine Comedy                 | Dante Alighieri             |
							 | 
						|
								+-------------------------------+-------------------------------+-----------------------------+
							 | 
						|
								| Divine Comedy(Dante Alighieri)                                                              |
							 | 
						|
								+-------------------------------+-------------------------------+-----------------------------+
							 | 
						|
								| Arduino: A Quick-Start Guide                                  | Mark Schmidt                |
							 | 
						|
								+-------------------------------+-------------------------------+-----------------------------+
							 | 
						|
								| 9971-5-0210-0                 | A Tale of                                                   |
							 | 
						|
								|                               | Two Cities                                                  |
							 | 
						|
								+-------------------------------+-------------------------------+-----------------------------+
							 | 
						|
								| Cupiditate dicta atque porro, tempora exercitationem modi animi nulla nemo vel nihil!       |
							 | 
						|
								+-------------------------------+-------------------------------+-----------------------------+
							 | 
						|
								
							 | 
						|
								TABLE
							 | 
						|
								            ),
							 | 
						|
								            'Cell with rowspan' => array(
							 | 
						|
								                array('ISBN', 'Title', 'Author'),
							 | 
						|
								                array(
							 | 
						|
								                    array(
							 | 
						|
								                        new TableCell('9971-5-0210-0', array('rowspan' => 3)),
							 | 
						|
								                        new TableCell('Divine Comedy', array('rowspan' => 2)),
							 | 
						|
								                        'Dante Alighieri',
							 | 
						|
								                    ),
							 | 
						|
								                    array(),
							 | 
						|
								                    array("The Lord of \nthe Rings", "J. R. \nR. Tolkien"),
							 | 
						|
								                    new TableSeparator(),
							 | 
						|
								                    array('80-902734-1-6', new TableCell("And Then \nThere \nWere None", array('rowspan' => 3)), 'Agatha Christie'),
							 | 
						|
								                    array('80-902734-1-7', 'Test'),
							 | 
						|
								                ),
							 | 
						|
								                'default',
							 | 
						|
								<<<'TABLE'
							 | 
						|
								+---------------+---------------+-----------------+
							 | 
						|
								| ISBN          | Title         | Author          |
							 | 
						|
								+---------------+---------------+-----------------+
							 | 
						|
								| 9971-5-0210-0 | Divine Comedy | Dante Alighieri |
							 | 
						|
								|               |               |                 |
							 | 
						|
								|               | The Lord of   | J. R.           |
							 | 
						|
								|               | the Rings     | R. Tolkien      |
							 | 
						|
								+---------------+---------------+-----------------+
							 | 
						|
								| 80-902734-1-6 | And Then      | Agatha Christie |
							 | 
						|
								| 80-902734-1-7 | There         | Test            |
							 | 
						|
								|               | Were None     |                 |
							 | 
						|
								+---------------+---------------+-----------------+
							 | 
						|
								
							 | 
						|
								TABLE
							 | 
						|
								            ),
							 | 
						|
								            'Cell with rowspan and colspan' => array(
							 | 
						|
								                array('ISBN', 'Title', 'Author'),
							 | 
						|
								                array(
							 | 
						|
								                    array(
							 | 
						|
								                        new TableCell('9971-5-0210-0', array('rowspan' => 2, 'colspan' => 2)),
							 | 
						|
								                        'Dante Alighieri',
							 | 
						|
								                    ),
							 | 
						|
								                    array('Charles Dickens'),
							 | 
						|
								                    new TableSeparator(),
							 | 
						|
								                    array(
							 | 
						|
								                        'Dante Alighieri',
							 | 
						|
								                        new TableCell('9971-5-0210-0', array('rowspan' => 3, 'colspan' => 2)),
							 | 
						|
								                    ),
							 | 
						|
								                    array('J. R. R. Tolkien'),
							 | 
						|
								                    array('J. R. R'),
							 | 
						|
								                ),
							 | 
						|
								                'default',
							 | 
						|
								<<<'TABLE'
							 | 
						|
								+------------------+---------+-----------------+
							 | 
						|
								| ISBN             | Title   | Author          |
							 | 
						|
								+------------------+---------+-----------------+
							 | 
						|
								| 9971-5-0210-0              | Dante Alighieri |
							 | 
						|
								|                            | Charles Dickens |
							 | 
						|
								+------------------+---------+-----------------+
							 | 
						|
								| Dante Alighieri  | 9971-5-0210-0             |
							 | 
						|
								| J. R. R. Tolkien |                           |
							 | 
						|
								| J. R. R          |                           |
							 | 
						|
								+------------------+---------+-----------------+
							 | 
						|
								
							 | 
						|
								TABLE
							 | 
						|
								            ),
							 | 
						|
								            'Cell with rowspan and colspan contains new line break' => array(
							 | 
						|
								                array('ISBN', 'Title', 'Author'),
							 | 
						|
								                array(
							 | 
						|
								                    array(
							 | 
						|
								                        new TableCell("9971\n-5-\n021\n0-0", array('rowspan' => 2, 'colspan' => 2)),
							 | 
						|
								                        'Dante Alighieri',
							 | 
						|
								                    ),
							 | 
						|
								                    array('Charles Dickens'),
							 | 
						|
								                    new TableSeparator(),
							 | 
						|
								                    array(
							 | 
						|
								                        'Dante Alighieri',
							 | 
						|
								                        new TableCell("9971\n-5-\n021\n0-0", array('rowspan' => 2, 'colspan' => 2)),
							 | 
						|
								                    ),
							 | 
						|
								                    array('Charles Dickens'),
							 | 
						|
								                    new TableSeparator(),
							 | 
						|
								                    array(
							 | 
						|
								                        new TableCell("9971\n-5-\n021\n0-0", array('rowspan' => 2, 'colspan' => 2)),
							 | 
						|
								                        new TableCell("Dante \nAlighieri", array('rowspan' => 2, 'colspan' => 1)),
							 | 
						|
								                    ),
							 | 
						|
								                ),
							 | 
						|
								                'default',
							 | 
						|
								<<<'TABLE'
							 | 
						|
								+-----------------+-------+-----------------+
							 | 
						|
								| ISBN            | Title | Author          |
							 | 
						|
								+-----------------+-------+-----------------+
							 | 
						|
								| 9971                    | Dante Alighieri |
							 | 
						|
								| -5-                     | Charles Dickens |
							 | 
						|
								| 021                     |                 |
							 | 
						|
								| 0-0                     |                 |
							 | 
						|
								+-----------------+-------+-----------------+
							 | 
						|
								| Dante Alighieri | 9971                    |
							 | 
						|
								| Charles Dickens | -5-                     |
							 | 
						|
								|                 | 021                     |
							 | 
						|
								|                 | 0-0                     |
							 | 
						|
								+-----------------+-------+-----------------+
							 | 
						|
								| 9971                    | Dante           |
							 | 
						|
								| -5-                     | Alighieri       |
							 | 
						|
								| 021                     |                 |
							 | 
						|
								| 0-0                     |                 |
							 | 
						|
								+-----------------+-------+-----------------+
							 | 
						|
								
							 | 
						|
								TABLE
							 | 
						|
								            ),
							 | 
						|
								            'Cell with rowspan and colspan without using TableSeparator' => array(
							 | 
						|
								                array('ISBN', 'Title', 'Author'),
							 | 
						|
								                array(
							 | 
						|
								                    array(
							 | 
						|
								                        new TableCell("9971\n-5-\n021\n0-0", array('rowspan' => 2, 'colspan' => 2)),
							 | 
						|
								                        'Dante Alighieri',
							 | 
						|
								                    ),
							 | 
						|
								                    array('Charles Dickens'),
							 | 
						|
								                    array(
							 | 
						|
								                        'Dante Alighieri',
							 | 
						|
								                        new TableCell("9971\n-5-\n021\n0-0", array('rowspan' => 2, 'colspan' => 2)),
							 | 
						|
								                    ),
							 | 
						|
								                    array('Charles Dickens'),
							 | 
						|
								                ),
							 | 
						|
								                'default',
							 | 
						|
								<<<'TABLE'
							 | 
						|
								+-----------------+-------+-----------------+
							 | 
						|
								| ISBN            | Title | Author          |
							 | 
						|
								+-----------------+-------+-----------------+
							 | 
						|
								| 9971                    | Dante Alighieri |
							 | 
						|
								| -5-                     | Charles Dickens |
							 | 
						|
								| 021                     |                 |
							 | 
						|
								| 0-0                     |                 |
							 | 
						|
								| Dante Alighieri | 9971                    |
							 | 
						|
								| Charles Dickens | -5-                     |
							 | 
						|
								|                 | 021                     |
							 | 
						|
								|                 | 0-0                     |
							 | 
						|
								+-----------------+-------+-----------------+
							 | 
						|
								
							 | 
						|
								TABLE
							 | 
						|
								            ),
							 | 
						|
								            'Cell with rowspan and colspan with separator inside a rowspan' => array(
							 | 
						|
								                array('ISBN', 'Author'),
							 | 
						|
								                array(
							 | 
						|
								                    array(
							 | 
						|
								                        new TableCell('9971-5-0210-0', array('rowspan' => 3, 'colspan' => 1)),
							 | 
						|
								                        'Dante Alighieri',
							 | 
						|
								                    ),
							 | 
						|
								                    array(new TableSeparator()),
							 | 
						|
								                    array('Charles Dickens'),
							 | 
						|
								                ),
							 | 
						|
								                'default',
							 | 
						|
								<<<'TABLE'
							 | 
						|
								+---------------+-----------------+
							 | 
						|
								| ISBN          | Author          |
							 | 
						|
								+---------------+-----------------+
							 | 
						|
								| 9971-5-0210-0 | Dante Alighieri |
							 | 
						|
								|               |-----------------|
							 | 
						|
								|               | Charles Dickens |
							 | 
						|
								+---------------+-----------------+
							 | 
						|
								
							 | 
						|
								TABLE
							 | 
						|
								            ),
							 | 
						|
								            'Multiple header lines' => array(
							 | 
						|
								                array(
							 | 
						|
								                    array(new TableCell('Main title', array('colspan' => 3))),
							 | 
						|
								                    array('ISBN', 'Title', 'Author'),
							 | 
						|
								                ),
							 | 
						|
								                array(),
							 | 
						|
								                'default',
							 | 
						|
								<<<'TABLE'
							 | 
						|
								+------+-------+--------+
							 | 
						|
								| Main title            |
							 | 
						|
								+------+-------+--------+
							 | 
						|
								| ISBN | Title | Author |
							 | 
						|
								+------+-------+--------+
							 | 
						|
								
							 | 
						|
								TABLE
							 | 
						|
								            ),
							 | 
						|
								            'Row with multiple cells' => array(
							 | 
						|
								                array(),
							 | 
						|
								                array(
							 | 
						|
								                    array(
							 | 
						|
								                        new TableCell('1', array('colspan' => 3)),
							 | 
						|
								                        new TableCell('2', array('colspan' => 2)),
							 | 
						|
								                        new TableCell('3', array('colspan' => 2)),
							 | 
						|
								                        new TableCell('4', array('colspan' => 2)),
							 | 
						|
								                    ),
							 | 
						|
								        ),
							 | 
						|
								                'default',
							 | 
						|
								<<<'TABLE'
							 | 
						|
								+---+--+--+---+--+---+--+---+--+
							 | 
						|
								| 1       | 2    | 3    | 4    |
							 | 
						|
								+---+--+--+---+--+---+--+---+--+
							 | 
						|
								
							 | 
						|
								TABLE
							 | 
						|
								            ),
							 | 
						|
								            'Coslpan and table cells with comment style' => array(
							 | 
						|
								                array(
							 | 
						|
								                    new TableCell('<comment>Long Title</comment>', array('colspan' => 3)),
							 | 
						|
								                ),
							 | 
						|
								                array(
							 | 
						|
								                    array(
							 | 
						|
								                        new TableCell('9971-5-0210-0', array('colspan' => 3)),
							 | 
						|
								                    ),
							 | 
						|
								                    new TableSeparator(),
							 | 
						|
								                    array(
							 | 
						|
								                        'Dante Alighieri',
							 | 
						|
								                        'J. R. R. Tolkien',
							 | 
						|
								                        'J. R. R',
							 | 
						|
								                    ),
							 | 
						|
								                ),
							 | 
						|
								                'default',
							 | 
						|
								                <<<TABLE
							 | 
						|
								+-----------------+------------------+---------+
							 | 
						|
								|\033[32m \033[39m\033[33mLong Title\033[39m\033[32m                                   \033[39m|
							 | 
						|
								+-----------------+------------------+---------+
							 | 
						|
								| 9971-5-0210-0                                |
							 | 
						|
								+-----------------+------------------+---------+
							 | 
						|
								| Dante Alighieri | J. R. R. Tolkien | J. R. R |
							 | 
						|
								+-----------------+------------------+---------+
							 | 
						|
								
							 | 
						|
								TABLE
							 | 
						|
								            ,
							 | 
						|
								                true,
							 | 
						|
								            ),
							 | 
						|
								            'Row with formatted cells containing a newline' => array(
							 | 
						|
								                array(),
							 | 
						|
								                array(
							 | 
						|
								                    array(
							 | 
						|
								                        new TableCell('<error>Dont break'."\n".'here</error>', array('colspan' => 2)),
							 | 
						|
								                    ),
							 | 
						|
								                    new TableSeparator(),
							 | 
						|
								                    array(
							 | 
						|
								                        'foo',
							 | 
						|
								                         new TableCell('<error>Dont break'."\n".'here</error>', array('rowspan' => 2)),
							 | 
						|
								                    ),
							 | 
						|
								                    array(
							 | 
						|
								                        'bar',
							 | 
						|
								                    ),
							 | 
						|
								                ),
							 | 
						|
								                'default',
							 | 
						|
								                <<<'TABLE'
							 | 
						|
								+-------+------------+
							 | 
						|
								[39;49m| [39;49m[37;41mDont break[39;49m[39;49m         |[39;49m
							 | 
						|
								[39;49m| [39;49m[37;41mhere[39;49m               |
							 | 
						|
								+-------+------------+
							 | 
						|
								[39;49m| foo   | [39;49m[37;41mDont break[39;49m[39;49m |[39;49m
							 | 
						|
								[39;49m| bar   | [39;49m[37;41mhere[39;49m       |
							 | 
						|
								+-------+------------+
							 | 
						|
								
							 | 
						|
								TABLE
							 | 
						|
								            ,
							 | 
						|
								                true,
							 | 
						|
								            ),
							 | 
						|
								        );
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testRenderMultiByte()
							 | 
						|
								    {
							 | 
						|
								        $table = new Table($output = $this->getOutputStream());
							 | 
						|
								        $table
							 | 
						|
								            ->setHeaders(array('■■'))
							 | 
						|
								            ->setRows(array(array(1234)))
							 | 
						|
								            ->setStyle('default')
							 | 
						|
								        ;
							 | 
						|
								        $table->render();
							 | 
						|
								
							 | 
						|
								        $expected =
							 | 
						|
								<<<'TABLE'
							 | 
						|
								+------+
							 | 
						|
								| ■■   |
							 | 
						|
								+------+
							 | 
						|
								| 1234 |
							 | 
						|
								+------+
							 | 
						|
								
							 | 
						|
								TABLE;
							 | 
						|
								
							 | 
						|
								        $this->assertEquals($expected, $this->getOutputContent($output));
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testTableCellWithNumericIntValue()
							 | 
						|
								    {
							 | 
						|
								        $table = new Table($output = $this->getOutputStream());
							 | 
						|
								
							 | 
						|
								        $table->setRows(array(array(new TableCell(12345))));
							 | 
						|
								        $table->render();
							 | 
						|
								
							 | 
						|
								        $expected =
							 | 
						|
								<<<'TABLE'
							 | 
						|
								+-------+
							 | 
						|
								| 12345 |
							 | 
						|
								+-------+
							 | 
						|
								
							 | 
						|
								TABLE;
							 | 
						|
								
							 | 
						|
								        $this->assertEquals($expected, $this->getOutputContent($output));
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testTableCellWithNumericFloatValue()
							 | 
						|
								    {
							 | 
						|
								        $table = new Table($output = $this->getOutputStream());
							 | 
						|
								
							 | 
						|
								        $table->setRows(array(array(new TableCell(12345.01))));
							 | 
						|
								        $table->render();
							 | 
						|
								
							 | 
						|
								        $expected =
							 | 
						|
								<<<'TABLE'
							 | 
						|
								+----------+
							 | 
						|
								| 12345.01 |
							 | 
						|
								+----------+
							 | 
						|
								
							 | 
						|
								TABLE;
							 | 
						|
								
							 | 
						|
								        $this->assertEquals($expected, $this->getOutputContent($output));
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testStyle()
							 | 
						|
								    {
							 | 
						|
								        $style = new TableStyle();
							 | 
						|
								        $style
							 | 
						|
								            ->setHorizontalBorderChar('.')
							 | 
						|
								            ->setVerticalBorderChar('.')
							 | 
						|
								            ->setCrossingChar('.')
							 | 
						|
								        ;
							 | 
						|
								
							 | 
						|
								        Table::setStyleDefinition('dotfull', $style);
							 | 
						|
								        $table = new Table($output = $this->getOutputStream());
							 | 
						|
								        $table
							 | 
						|
								            ->setHeaders(array('Foo'))
							 | 
						|
								            ->setRows(array(array('Bar')))
							 | 
						|
								            ->setStyle('dotfull');
							 | 
						|
								        $table->render();
							 | 
						|
								
							 | 
						|
								        $expected =
							 | 
						|
								<<<'TABLE'
							 | 
						|
								.......
							 | 
						|
								. Foo .
							 | 
						|
								.......
							 | 
						|
								. Bar .
							 | 
						|
								.......
							 | 
						|
								
							 | 
						|
								TABLE;
							 | 
						|
								
							 | 
						|
								        $this->assertEquals($expected, $this->getOutputContent($output));
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testRowSeparator()
							 | 
						|
								    {
							 | 
						|
								        $table = new Table($output = $this->getOutputStream());
							 | 
						|
								        $table
							 | 
						|
								            ->setHeaders(array('Foo'))
							 | 
						|
								            ->setRows(array(
							 | 
						|
								                array('Bar1'),
							 | 
						|
								                new TableSeparator(),
							 | 
						|
								                array('Bar2'),
							 | 
						|
								                new TableSeparator(),
							 | 
						|
								                array('Bar3'),
							 | 
						|
								            ));
							 | 
						|
								        $table->render();
							 | 
						|
								
							 | 
						|
								        $expected =
							 | 
						|
								<<<'TABLE'
							 | 
						|
								+------+
							 | 
						|
								| Foo  |
							 | 
						|
								+------+
							 | 
						|
								| Bar1 |
							 | 
						|
								+------+
							 | 
						|
								| Bar2 |
							 | 
						|
								+------+
							 | 
						|
								| Bar3 |
							 | 
						|
								+------+
							 | 
						|
								
							 | 
						|
								TABLE;
							 | 
						|
								
							 | 
						|
								        $this->assertEquals($expected, $this->getOutputContent($output));
							 | 
						|
								
							 | 
						|
								        $this->assertEquals($table, $table->addRow(new TableSeparator()), 'fluent interface on addRow() with a single TableSeparator() works');
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testRenderMultiCalls()
							 | 
						|
								    {
							 | 
						|
								        $table = new Table($output = $this->getOutputStream());
							 | 
						|
								        $table->setRows(array(
							 | 
						|
								            array(new TableCell('foo', array('colspan' => 2))),
							 | 
						|
								        ));
							 | 
						|
								        $table->render();
							 | 
						|
								        $table->render();
							 | 
						|
								        $table->render();
							 | 
						|
								
							 | 
						|
								        $expected =
							 | 
						|
								<<<TABLE
							 | 
						|
								+----+---+
							 | 
						|
								| foo    |
							 | 
						|
								+----+---+
							 | 
						|
								+----+---+
							 | 
						|
								| foo    |
							 | 
						|
								+----+---+
							 | 
						|
								+----+---+
							 | 
						|
								| foo    |
							 | 
						|
								+----+---+
							 | 
						|
								
							 | 
						|
								TABLE;
							 | 
						|
								
							 | 
						|
								        $this->assertEquals($expected, $this->getOutputContent($output));
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testColumnStyle()
							 | 
						|
								    {
							 | 
						|
								        $table = new Table($output = $this->getOutputStream());
							 | 
						|
								        $table
							 | 
						|
								            ->setHeaders(array('ISBN', 'Title', 'Author', 'Price'))
							 | 
						|
								            ->setRows(array(
							 | 
						|
								                array('99921-58-10-7', 'Divine Comedy', 'Dante Alighieri', '9.95'),
							 | 
						|
								                array('9971-5-0210-0', 'A Tale of Two Cities', 'Charles Dickens', '139.25'),
							 | 
						|
								            ));
							 | 
						|
								
							 | 
						|
								        $style = new TableStyle();
							 | 
						|
								        $style->setPadType(STR_PAD_LEFT);
							 | 
						|
								        $table->setColumnStyle(3, $style);
							 | 
						|
								
							 | 
						|
								        $table->render();
							 | 
						|
								
							 | 
						|
								        $expected =
							 | 
						|
								            <<<TABLE
							 | 
						|
								+---------------+----------------------+-----------------+--------+
							 | 
						|
								| ISBN          | Title                | Author          |  Price |
							 | 
						|
								+---------------+----------------------+-----------------+--------+
							 | 
						|
								| 99921-58-10-7 | Divine Comedy        | Dante Alighieri |   9.95 |
							 | 
						|
								| 9971-5-0210-0 | A Tale of Two Cities | Charles Dickens | 139.25 |
							 | 
						|
								+---------------+----------------------+-----------------+--------+
							 | 
						|
								
							 | 
						|
								TABLE;
							 | 
						|
								
							 | 
						|
								        $this->assertEquals($expected, $this->getOutputContent($output));
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @expectedException \Symfony\Component\Console\Exception\InvalidArgumentException
							 | 
						|
								     * @expectedExceptionMessage A cell must be a TableCell, a scalar or an object implementing __toString, array given.
							 | 
						|
								     */
							 | 
						|
								    public function testThrowsWhenTheCellInAnArray()
							 | 
						|
								    {
							 | 
						|
								        $table = new Table($output = $this->getOutputStream());
							 | 
						|
								        $table
							 | 
						|
								            ->setHeaders(array('ISBN', 'Title', 'Author', 'Price'))
							 | 
						|
								            ->setRows(array(
							 | 
						|
								                array('99921-58-10-7', array(), 'Dante Alighieri', '9.95'),
							 | 
						|
								            ));
							 | 
						|
								
							 | 
						|
								        $table->render();
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testColumnWith()
							 | 
						|
								    {
							 | 
						|
								        $table = new Table($output = $this->getOutputStream());
							 | 
						|
								        $table
							 | 
						|
								            ->setHeaders(array('ISBN', 'Title', 'Author', 'Price'))
							 | 
						|
								            ->setRows(array(
							 | 
						|
								                array('99921-58-10-7', 'Divine Comedy', 'Dante Alighieri', '9.95'),
							 | 
						|
								                array('9971-5-0210-0', 'A Tale of Two Cities', 'Charles Dickens', '139.25'),
							 | 
						|
								            ))
							 | 
						|
								            ->setColumnWidth(0, 15)
							 | 
						|
								            ->setColumnWidth(3, 10);
							 | 
						|
								
							 | 
						|
								        $style = new TableStyle();
							 | 
						|
								        $style->setPadType(STR_PAD_LEFT);
							 | 
						|
								        $table->setColumnStyle(3, $style);
							 | 
						|
								
							 | 
						|
								        $table->render();
							 | 
						|
								
							 | 
						|
								        $expected =
							 | 
						|
								            <<<TABLE
							 | 
						|
								+-----------------+----------------------+-----------------+------------+
							 | 
						|
								| ISBN            | Title                | Author          |      Price |
							 | 
						|
								+-----------------+----------------------+-----------------+------------+
							 | 
						|
								| 99921-58-10-7   | Divine Comedy        | Dante Alighieri |       9.95 |
							 | 
						|
								| 9971-5-0210-0   | A Tale of Two Cities | Charles Dickens |     139.25 |
							 | 
						|
								+-----------------+----------------------+-----------------+------------+
							 | 
						|
								
							 | 
						|
								TABLE;
							 | 
						|
								
							 | 
						|
								        $this->assertEquals($expected, $this->getOutputContent($output));
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testColumnWiths()
							 | 
						|
								    {
							 | 
						|
								        $table = new Table($output = $this->getOutputStream());
							 | 
						|
								        $table
							 | 
						|
								            ->setHeaders(array('ISBN', 'Title', 'Author', 'Price'))
							 | 
						|
								            ->setRows(array(
							 | 
						|
								                array('99921-58-10-7', 'Divine Comedy', 'Dante Alighieri', '9.95'),
							 | 
						|
								                array('9971-5-0210-0', 'A Tale of Two Cities', 'Charles Dickens', '139.25'),
							 | 
						|
								            ))
							 | 
						|
								            ->setColumnWidths(array(15, 0, -1, 10));
							 | 
						|
								
							 | 
						|
								        $style = new TableStyle();
							 | 
						|
								        $style->setPadType(STR_PAD_LEFT);
							 | 
						|
								        $table->setColumnStyle(3, $style);
							 | 
						|
								
							 | 
						|
								        $table->render();
							 | 
						|
								
							 | 
						|
								        $expected =
							 | 
						|
								            <<<TABLE
							 | 
						|
								+-----------------+----------------------+-----------------+------------+
							 | 
						|
								| ISBN            | Title                | Author          |      Price |
							 | 
						|
								+-----------------+----------------------+-----------------+------------+
							 | 
						|
								| 99921-58-10-7   | Divine Comedy        | Dante Alighieri |       9.95 |
							 | 
						|
								| 9971-5-0210-0   | A Tale of Two Cities | Charles Dickens |     139.25 |
							 | 
						|
								+-----------------+----------------------+-----------------+------------+
							 | 
						|
								
							 | 
						|
								TABLE;
							 | 
						|
								
							 | 
						|
								        $this->assertEquals($expected, $this->getOutputContent($output));
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @expectedException \Symfony\Component\Console\Exception\InvalidArgumentException
							 | 
						|
								     * @expectedExceptionMessage Style "absent" is not defined.
							 | 
						|
								     */
							 | 
						|
								    public function testIsNotDefinedStyleException()
							 | 
						|
								    {
							 | 
						|
								        $table = new Table($this->getOutputStream());
							 | 
						|
								        $table->setStyle('absent');
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * @expectedException \Symfony\Component\Console\Exception\InvalidArgumentException
							 | 
						|
								     * @expectedExceptionMessage Style "absent" is not defined.
							 | 
						|
								     */
							 | 
						|
								    public function testGetStyleDefinition()
							 | 
						|
								    {
							 | 
						|
								        Table::getStyleDefinition('absent');
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    protected function getOutputStream($decorated = false)
							 | 
						|
								    {
							 | 
						|
								        return new StreamOutput($this->stream, StreamOutput::VERBOSITY_NORMAL, $decorated);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    protected function getOutputContent(StreamOutput $output)
							 | 
						|
								    {
							 | 
						|
								        rewind($output->getStream());
							 | 
						|
								
							 | 
						|
								        return str_replace(PHP_EOL, "\n", stream_get_contents($output->getStream()));
							 | 
						|
								    }
							 | 
						|
								}
							 | 
						|
								
							 |