![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/codeception/codeception/src/Codeception/Command/ |
<?php declare(strict_types=1); namespace Codeception\Command; use Codeception\Configuration; use Codeception\Lib\Generator\Actor as ActorGenerator; use Codeception\Util\Template; use Exception; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Yaml\Yaml; use function file_exists; use function preg_match; use function ucfirst; /** * Create new test suite. Requires suite name and actor name * * * `` * * `codecept g:suite api` -> api + ApiTester * * `codecept g:suite integration Code` -> integration + CodeTester * * `codecept g:suite frontend Front` -> frontend + FrontTester * */ class GenerateSuite extends Command { use Shared\FileSystemTrait; use Shared\ConfigTrait; use Shared\StyleTrait; protected function configure(): void { $this->setDefinition([ new InputArgument('suite', InputArgument::REQUIRED, 'suite to be generated'), new InputArgument('actor', InputArgument::OPTIONAL, 'name of new actor class'), ]); } public function getDescription(): string { return 'Generates new test suite'; } public function execute(InputInterface $input, OutputInterface $output): int { $this->addStyles($output); $suite = ucfirst((string)$input->getArgument('suite')); $actor = $input->getArgument('actor'); if ($this->containsInvalidCharacters($suite)) { $output->writeln("<error>Suite name '{$suite}' contains invalid characters. ([A-Za-z0-9_]).</error>"); return 1; } $config = $this->getGlobalConfig(); if (!$actor) { $actor = $suite . $config['actor_suffix']; } $dir = Configuration::testsDir(); if (file_exists($dir . $suite . '.suite.yml')) { throw new Exception("Suite configuration file '{$suite}.suite.yml' already exists."); } $this->createDirectoryFor($dir . $suite); if ($config['settings']['bootstrap']) { // generate bootstrap file $this->createFile( $dir . $suite . DIRECTORY_SEPARATOR . $config['settings']['bootstrap'], "<?php\n", true ); } $yamlSuiteConfigTemplate = <<<EOF actor: {{actor}} suite_namespace: {{suite_namespace}} modules: # enable helpers as array enabled: [] EOF; $this->createFile( $dir . $suite . '.suite.yml', $yamlSuiteConfig = (new Template($yamlSuiteConfigTemplate)) ->place('actor', $actor) ->place('suite_namespace', $config['namespace'] . '\\' . $suite) ->produce() ); Configuration::append(Yaml::parse($yamlSuiteConfig)); $actorGenerator = new ActorGenerator(Configuration::config()); $content = $actorGenerator->produce(); $file = $this->createDirectoryFor( Configuration::supportDir(), $actor ) . $this->getShortClassName($actor); $file .= '.php'; $this->createFile($file, $content); $output->writeln("Actor <info>" . $actor . "</info> was created in {$file}"); $output->writeln("Suite config <info>{$suite}.suite.yml</info> was created."); $output->writeln(' '); $output->writeln("Next steps:"); $output->writeln("1. Edit <bold>{$suite}.suite.yml</bold> to enable modules for this suite"); $output->writeln("2. Create first test with <bold>generate:cest testName</bold> ( or test|cept) command"); $output->writeln("3. Run tests of this suite with <bold>codecept run {$suite}</bold> command"); $output->writeln("<info>Suite {$suite} generated</info>"); return 0; } private function containsInvalidCharacters(string $suite): bool { return (bool)preg_match('#[^A-Za-z0-9_]#', $suite); } }