AutorÃa | Ultima modificación | Ver Log |
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
namespace Moodle\BehatExtension\Definition\Cli;
use Behat\Behat\Definition\DefinitionWriter;
use Behat\Behat\Definition\Printer\ConsoleDefinitionListPrinter;
use Behat\Testwork\Cli\Controller;
use Behat\Testwork\Suite\SuiteRepository;
use Moodle\BehatExtension\Definition\Printer\ConsoleDefinitionInformationPrinter;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
/**
* Available definition controller, for calling moodle information printer.
*
* @package core
* @copyright 2016 Rajesh Taneja <rajesh@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
final class AvailableDefinitionsController implements Controller {
/** @var SuiteRepository */
private $suiterepository;
/** @var DefinitionWriter */
private $writer;
/** @var ConsoleDefinitionListPrinter */
private $listprinter;
/** @var ConsoleDefinitionInformationPrinter */
private $infoprinter;
/**
* Initializes controller.
*
* @param SuiteRepository $suiterepository
* @param DefinitionWriter $writer
* @param ConsoleDefinitionListPrinter $listprinter
* @param ConsoleDefinitionInformationPrinter $infoprinter
*/
public function __construct(
SuiteRepository $suiterepository,
DefinitionWriter $writer,
ConsoleDefinitionListPrinter $listprinter,
ConsoleDefinitionInformationPrinter $infoprinter
) {
$this->suiterepository = $suiterepository;
$this->writer = $writer;
$this->listprinter = $listprinter;
$this->infoprinter = $infoprinter;
}
/**
* Configures command to be executable by the controller.
*
* @param Command $command
*/
public function configure(Command $command) {
$command->addOption('--definitions', '-d', InputOption::VALUE_REQUIRED,
"Print all available step definitions:" . PHP_EOL .
"- use <info>--definitions l</info> to just list definition expressions." . PHP_EOL .
"- use <info>--definitions i</info> to show definitions with extended info." . PHP_EOL .
"- use <info>--definitions 'needle'</info> to find specific definitions." . PHP_EOL .
"Use <info>--lang</info> to see definitions in specific language."
);
}
/**
* Executes controller.
*
* @param InputInterface $input
* @param OutputInterface $output
*
* @return null|integer
*/
public function execute(InputInterface $input, OutputInterface $output) {
if (null === $argument = $input->getOption('definitions')) {
return null;
}
$printer = $this->getdefinitionPrinter($argument);
foreach ($this->suiterepository->getSuites() as $suite) {
$this->writer->printSuiteDefinitions($printer, $suite);
}
return 0;
}
/**
* Returns definition printer for provided option argument.
*
* @param string $argument
*
* @return \Behat\Behat\Definition\Printer\DefinitionPrinter
*/
private function getdefinitionprinter($argument) {
if ('l' === $argument) {
return $this->listprinter;
}
if ('i' !== $argument) {
$this->infoprinter->setSearchCriterion($argument);
}
return $this->infoprinter;
}
}