This repository has been archived on 2025-01-19. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
drupalcampbristol/vendor/chi-teck/drupal-code-generator/src/GeneratorTester.php
2018-11-23 12:29:20 +00:00

181 lines
4.2 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace DrupalCodeGenerator;
use DrupalCodeGenerator\Tests\QuestionHelper;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Tester\CommandTester;
/**
* Eases the testing of generator commands.
*/
class GeneratorTester {
/**
* Command to test.
*
* @var \Symfony\Component\Console\Command\Command
*/
protected $command;
/**
* Command tester.
*
* @var \Symfony\Component\Console\Tester\CommandTester
*/
protected $commandTester;
/**
* Working directory.
*
* @var string
*/
protected $directory;
/**
* An associative array representing an interaction with the generator.
*
* @var array
*/
protected $interaction = [];
/**
* The fixtures.
*
* @var array
*/
protected $fixtures = [];
/**
* GeneratorTester constructor.
*/
public function __construct(Command $command) {
$this->command = $command;
$this->commandTester = new CommandTester($this->command);
$application = ApplicationFactory::create();
$helper_set = $application->getHelperSet();
$helper_set->set(new QuestionHelper());
$application->add($this->command);
$this->setDirectory(sys_get_temp_dir() . '/dcg_' . uniqid());
}
/**
* Getter for the directory.
*
* @return string
* The directory.
*/
public function getDirectory() {
return $this->directory;
}
/**
* Setter for the directory.
*
* @param string $directory
* The directory.
*/
public function setDirectory($directory) {
$this->directory = $directory;
}
/**
* Getter for the interaction.
*
* @return array
* The interaction.
*/
public function getInteraction() {
return $this->interaction;
}
/**
* Setter for the interaction.
*
* @param array $interaction
* The interaction.
*/
public function setInteraction(array $interaction) {
$this->interaction = $interaction;
}
/**
* Getter for the fixtures.
*
* @return array
* The fixtures.
*/
public function getFixtures() {
return $this->fixtures;
}
/**
* Setter for the fixtures.
*
* @param array $fixtures
* The fixtures.
*/
public function setFixtures(array $fixtures) {
$this->fixtures = $fixtures;
}
/**
* Executes the command.
*
* @return int
* The command exit code
*/
public function execute() {
return $this->commandTester
->setInputs(array_values($this->interaction))
->execute(['--directory' => $this->getDirectory()]);
}
/**
* Gets the display returned by the last execution of the command.
*
* @return string
* The display.
*/
public function getDisplay() {
return $this->commandTester->getDisplay();
}
/**
* Gets expected display.
*
* @return string
* Expected display.
*/
public function getExpectedDisplay() {
$default_name = Utils::machine2human(basename($this->directory));
$expected_display = "\n";
$name = $this->command->getName();
$title = "Welcome to $name generator!";
$expected_display .= " $title\n";
$expected_display .= str_repeat('', strlen($title) + 2) . "\n";
foreach ($this->interaction as $question => $answer) {
$question = preg_replace('/^<\d*> /', '', $question);
$expected_display .= "\n";
$expected_display .= " $question\n";
$expected_display .= "\n";
}
$expected_display = str_replace('%default_name%', $default_name, $expected_display);
$default_machine_name = Utils::human2machine(basename($this->directory));
$expected_display = str_replace('%default_machine_name%', $default_machine_name, $expected_display);
$targets = implode("\n", array_keys($this->fixtures));
$expected_display .= "\n";
$expected_display .= " The following directories and files have been created or updated:\n";
$expected_display .= "\n";
$expected_display .= "$targets\n";
$expected_display .= "\n";
return $expected_display;
}
}