4 * This file is part of the Symfony package.
6 * (c) Fabien Potencier <fabien@symfony.com>
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
12 namespace Symfony\Component\Console\Tests\Helper;
14 use PHPUnit\Framework\TestCase;
15 use Symfony\Component\Console\Helper\HelperSet;
16 use Symfony\Component\Console\Command\Command;
18 class HelperSetTest extends TestCase
20 public function testConstructor()
22 $mock_helper = $this->getGenericMockHelper('fake_helper');
23 $helperset = new HelperSet(array('fake_helper_alias' => $mock_helper));
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');
29 public function testSet()
31 $helperset = new HelperSet();
32 $helperset->set($this->getGenericMockHelper('fake_helper', $helperset));
33 $this->assertTrue($helperset->has('fake_helper'), '->set() adds helper to helpers');
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');
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');
47 public function testHas()
49 $helperset = new HelperSet(array('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');
54 public function testGet()
56 $helper_01 = $this->getGenericMockHelper('fake_helper_01');
57 $helper_02 = $this->getGenericMockHelper('fake_helper_02');
58 $helperset = new HelperSet(array('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');
64 $helperset = new HelperSet();
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->assertContains('The helper "foo" is not defined.', $e->getMessage(), '->get() throws InvalidArgumentException when helper not found');
75 public function testSetCommand()
77 $cmd_01 = new Command('foo');
78 $cmd_02 = new Command('bar');
80 $helperset = new HelperSet();
81 $helperset->setCommand($cmd_01);
82 $this->assertEquals($cmd_01, $helperset->getCommand(), '->setCommand() stores given command');
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');
90 public function testGetCommand()
92 $cmd = new Command('foo');
93 $helperset = new HelperSet();
94 $helperset->setCommand($cmd);
95 $this->assertEquals($cmd, $helperset->getCommand(), '->getCommand() retrieves stored command');
98 public function testIteration()
100 $helperset = new HelperSet();
101 $helperset->set($this->getGenericMockHelper('fake_helper_01', $helperset));
102 $helperset->set($this->getGenericMockHelper('fake_helper_02', $helperset));
104 $helpers = array('fake_helper_01', 'fake_helper_02');
107 foreach ($helperset as $helper) {
108 $this->assertEquals($helpers[$i++], $helper->getName());
112 private function getGenericMockHelper($name, HelperSet $helperset = null)
114 $mock_helper = $this->getMockBuilder('\Symfony\Component\Console\Helper\HelperInterface')->getMock();
115 $mock_helper->expects($this->any())
117 ->will($this->returnValue($name));
120 $mock_helper->expects($this->any())
121 ->method('setHelperSet')
122 ->with($this->equalTo($helperset));