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 12namespace Symfony\Component\Console\Tests\Helper; 13 14use PHPUnit\Framework\TestCase; 15use Symfony\Component\Console\Command\Command; 16use Symfony\Component\Console\Helper\HelperSet; 17 18class HelperSetTest extends TestCase 19{ 20 public function testConstructor() 21 { 22 $mock_helper = $this->getGenericMockHelper('fake_helper'); 23 $helperset = new HelperSet(['fake_helper_alias' => $mock_helper]); 24 25 $this->assertEquals($mock_helper, $helperset->get('fake_helper_alias'), '__construct sets given helper to helpers'); 26 $this->assertTrue($helperset->has('fake_helper_alias'), '__construct sets helper alias for given helper'); 27 } 28 29 public function testSet() 30 { 31 $helperset = new HelperSet(); 32 $helperset->set($this->getGenericMockHelper('fake_helper', $helperset)); 33 $this->assertTrue($helperset->has('fake_helper'), '->set() adds helper to helpers'); 34 35 $helperset = new HelperSet(); 36 $helperset->set($this->getGenericMockHelper('fake_helper_01', $helperset)); 37 $helperset->set($this->getGenericMockHelper('fake_helper_02', $helperset)); 38 $this->assertTrue($helperset->has('fake_helper_01'), '->set() will set multiple helpers on consecutive calls'); 39 $this->assertTrue($helperset->has('fake_helper_02'), '->set() will set multiple helpers on consecutive calls'); 40 41 $helperset = new HelperSet(); 42 $helperset->set($this->getGenericMockHelper('fake_helper', $helperset), 'fake_helper_alias'); 43 $this->assertTrue($helperset->has('fake_helper'), '->set() adds helper alias when set'); 44 $this->assertTrue($helperset->has('fake_helper_alias'), '->set() adds helper alias when set'); 45 } 46 47 public function testHas() 48 { 49 $helperset = new HelperSet(['fake_helper_alias' => $this->getGenericMockHelper('fake_helper')]); 50 $this->assertTrue($helperset->has('fake_helper'), '->has() finds set helper'); 51 $this->assertTrue($helperset->has('fake_helper_alias'), '->has() finds set helper by alias'); 52 } 53 54 public function testGet() 55 { 56 $helper_01 = $this->getGenericMockHelper('fake_helper_01'); 57 $helper_02 = $this->getGenericMockHelper('fake_helper_02'); 58 $helperset = new HelperSet(['fake_helper_01_alias' => $helper_01, 'fake_helper_02_alias' => $helper_02]); 59 $this->assertEquals($helper_01, $helperset->get('fake_helper_01'), '->get() returns correct helper by name'); 60 $this->assertEquals($helper_01, $helperset->get('fake_helper_01_alias'), '->get() returns correct helper by alias'); 61 $this->assertEquals($helper_02, $helperset->get('fake_helper_02'), '->get() returns correct helper by name'); 62 $this->assertEquals($helper_02, $helperset->get('fake_helper_02_alias'), '->get() returns correct helper by alias'); 63 64 $helperset = new HelperSet(); 65 try { 66 $helperset->get('foo'); 67 $this->fail('->get() throws InvalidArgumentException when helper not found'); 68 } catch (\Exception $e) { 69 $this->assertInstanceOf('\InvalidArgumentException', $e, '->get() throws InvalidArgumentException when helper not found'); 70 $this->assertInstanceOf('Symfony\Component\Console\Exception\ExceptionInterface', $e, '->get() throws domain specific exception when helper not found'); 71 $this->assertStringContainsString('The helper "foo" is not defined.', $e->getMessage(), '->get() throws InvalidArgumentException when helper not found'); 72 } 73 } 74 75 public function testSetCommand() 76 { 77 $cmd_01 = new Command('foo'); 78 $cmd_02 = new Command('bar'); 79 80 $helperset = new HelperSet(); 81 $helperset->setCommand($cmd_01); 82 $this->assertEquals($cmd_01, $helperset->getCommand(), '->setCommand() stores given command'); 83 84 $helperset = new HelperSet(); 85 $helperset->setCommand($cmd_01); 86 $helperset->setCommand($cmd_02); 87 $this->assertEquals($cmd_02, $helperset->getCommand(), '->setCommand() overwrites stored command with consecutive calls'); 88 } 89 90 public function testGetCommand() 91 { 92 $cmd = new Command('foo'); 93 $helperset = new HelperSet(); 94 $helperset->setCommand($cmd); 95 $this->assertEquals($cmd, $helperset->getCommand(), '->getCommand() retrieves stored command'); 96 } 97 98 public function testIteration() 99 { 100 $helperset = new HelperSet(); 101 $helperset->set($this->getGenericMockHelper('fake_helper_01', $helperset)); 102 $helperset->set($this->getGenericMockHelper('fake_helper_02', $helperset)); 103 104 $helpers = ['fake_helper_01', 'fake_helper_02']; 105 $i = 0; 106 107 foreach ($helperset as $helper) { 108 $this->assertEquals($helpers[$i++], $helper->getName()); 109 } 110 } 111 112 private function getGenericMockHelper($name, HelperSet $helperset = null) 113 { 114 $mock_helper = $this->getMockBuilder('\Symfony\Component\Console\Helper\HelperInterface')->getMock(); 115 $mock_helper->expects($this->any()) 116 ->method('getName') 117 ->willReturn($name); 118 119 if ($helperset) { 120 $mock_helper->expects($this->any()) 121 ->method('setHelperSet') 122 ->with($this->equalTo($helperset)); 123 } 124 125 return $mock_helper; 126 } 127} 128