* @coversDefaultClass Mage\Command\AbstractCommand
 */
class AbstractCommandTest extends BaseTest
{
    /**
     * @var AbstractCommand|PHPUnit_Framework_MockObject_MockObject
     */
    private $abstractCommand;
    /**
     * @before
     */
    public function before()
    {
        $this->abstractCommand = $this->getMockForAbstractClass('Mage\Command\AbstractCommand');
    }
    /**
     * @covers ::setConfig
     */
    public function testSetConfig()
    {
        $configMock = $this->getMock('Mage\Config');
        $this->doTestSetter($this->abstractCommand, 'config', $configMock);
    }
    /**
     * @covers ::getConfig
     */
    public function testGetConfig()
    {
        $configMock = $this->getMock('Mage\Config');
        $this->doTestGetter($this->abstractCommand, 'config', $configMock);
    }
    public function infoMessageProvider()
    {
        return [
            'happy_path' => [
                'helpMessage' => 'This command does everything you want to',
                'examples' => [
                    [
                        'snippet' => 'mage example',
                        'description' => 'Default command'
                    ],
                    [
                        'snippet' => 'mage example light',
                        'description' => 'Runs the command with lights'
                    ]
                ],
                'syntax' => 'mage example [light]',
                'output' => "\n"
                    . "This command does everything you want to\n"
                    . "\n"
                    . "Syntax:\n"
                    . "    mage example [light]\n"
                    . "\n"
                    . "Usage examples:\n"
                    . "    * Default command:\n"
                    . "        mage example\n"
                    . "    * Runs the command with lights:\n"
                    . "        mage example light\n"
            ],
            'no_help_message' => [
                'helpMessage' => '',
                'examples' => [
                    [
                        'snippet' => 'mage example',
                        'description' => 'Default command'
                    ],
                    [
                        'snippet' => 'mage example light',
                        'description' => 'Runs the command with lights'
                    ]
                ],
                'syntax' => 'mage example [light]',
                'output' => "\n"
                    . "Syntax:\n"
                    . "    mage example [light]\n"
                    . "\n"
                    . "Usage examples:\n"
                    . "    * Default command:\n"
                    . "        mage example\n"
                    . "    * Runs the command with lights:\n"
                    . "        mage example light\n"
            ],
            'no_examples' => [
                'helpMessage' => 'This command does everything you want to',
                'examples' => [],
                'syntax' => 'mage example [light]',
                'output' => "\n"
                    . "This command does everything you want to\n"
                    . "\n"
                    . "Syntax:\n"
                    . "    mage example [light]\n"
            ],
            "no_syntax" => [
                'helpMessage' => 'This command does everything you want to',
                'examples' => [
                    [
                        'snippet' => 'mage example',
                        'description' => 'Default command'
                    ],
                    [
                        'snippet' => 'mage example light',
                        'description' => 'Runs the command with lights'
                    ]
                ],
                'syntax' => '',
                'output' => "\n"
                    . "This command does everything you want to\n"
                    . "\n"
                    . "Usage examples:\n"
                    . "    * Default command:\n"
                    . "        mage example\n"
                    . "    * Runs the command with lights:\n"
                    . "        mage example light\n"
            ],
            "stripping_colons" => [
                'helpMessage' => 'This command does everything you want to',
                'examples' => [
                    [
                        'snippet' => 'mage example',
                        'description' => 'Default command:'
                    ],
                    [
                        'snippet' => 'mage example light',
                        'description' => 'Runs the command with lights:'
                    ]
                ],
                'syntax' => 'mage example [light]',
                'output' => "\n"
                    . "This command does everything you want to\n"
                    . "\n"
                    . "Syntax:\n"
                    . "    mage example [light]\n"
                    . "\n"
                    . "Usage examples:\n"
                    . "    * Default command:\n"
                    . "        mage example\n"
                    . "    * Runs the command with lights:\n"
                    . "        mage example light\n"
            ],
            "only_help" => [
                'helpMessage' => 'This command does everything you want to',
                'examples' => [],
                'syntax' => '',
                'output' => "\n"
                    . "This command does everything you want to\n"
            ],
            "only_examples" => [
                'helpMessage' => '',
                'examples' => [
                    [
                        'snippet' => 'mage example',
                        'description' => 'Default command'
                    ],
                    [
                        'snippet' => 'mage example light',
                        'description' => 'Runs the command with lights'
                    ]
                ],
                'syntax' => '',
                'output' => "\n"
                    . "Usage examples:\n"
                    . "    * Default command:\n"
                    . "        mage example\n"
                    . "    * Runs the command with lights:\n"
                    . "        mage example light\n"
            ],
            "only_syntax" => [
                'helpMessage' => '',
                'examples' => [],
                'syntax' => 'mage example [light]',
                'output' => "\n"
                    . "Syntax:\n"
                    . "    mage example [light]\n"
            ]
        ];
    }
    /**
     * @covers ::getInfoMessage
     * @covers ::setHelpMessage
     * @covers ::addUsageExample
     * @covers ::setSyntaxMessage
     *
     * @dataProvider infoMessageProvider
     */
    public function testGetInfoMessage($helpMessage, $examples, $syntax, $expectedMessage)
    {
        /** @var AbstractCommand $command */
        $command = $this->getMockForAbstractClass('Mage\Command\AbstractCommand');
        foreach ($examples as $example) {
            $command->addUsageExample($example['snippet'], $example['description']);
        }
        $command->setHelpMessage($helpMessage);
        $command->setSyntaxMessage($syntax);
        $actualMessage = $command->getInfoMessage();
        $this->assertEquals($expectedMessage, $actualMessage);
    }
}