![]() 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/Lib/Generator/ |
<?php declare(strict_types=1); namespace Codeception\Lib\Generator; use Codeception\Configuration; use Codeception\Lib\Di; use Codeception\Lib\Friend; use Codeception\Lib\Generator\Shared\Classname; use Codeception\Lib\ModuleContainer; use Codeception\Util\ReflectionHelper; use Codeception\Util\Template; use ReflectionClass; use ReflectionMethod; class Actor { use Classname; public Di $di; public ModuleContainer $moduleContainer; protected string $template = <<<EOF <?php declare(strict_types=1); {{hasNamespace}} /** * Inherited Methods {{inheritedMethods}} * * @SuppressWarnings(PHPMD) */ class {{actor}} extends \Codeception\Actor { use _generated\{{actor}}Actions; /** * Define custom actions here */ } EOF; protected string $inheritedMethodTemplate = ' * @method {{return}} {{method}}({{params}})'; protected array $modules = []; protected array $actions = []; public function __construct(protected array $settings) { $this->di = new Di(); $this->moduleContainer = new ModuleContainer($this->di, $settings); $modules = Configuration::modules($this->settings); foreach ($modules as $moduleName) { $this->moduleContainer->create($moduleName); } $this->modules = $this->moduleContainer->all(); $this->actions = $this->moduleContainer->getActions(); } public function produce(): string { $namespace = trim($this->supportNamespace(), '\\'); return (new Template($this->template)) ->place('hasNamespace', $namespace !== '' ? "\nnamespace {$namespace};" : '') ->place('actor', $this->settings['actor']) ->place('inheritedMethods', $this->prependAbstractActorDocBlocks()) ->produce(); } protected function prependAbstractActorDocBlocks(): string { $inherited = []; $class = new ReflectionClass(\Codeception\Actor::class); $methods = $class->getMethods(ReflectionMethod::IS_PUBLIC); foreach ($methods as $method) { if ($method->name == '__call') { continue; } // skipping magic if ($method->name == '__construct') { continue; } // skipping magic $returnType = 'void'; if ($method->name == 'haveFriend') { $returnType = Friend::class; } $params = $this->getParamsString($method); $inherited[] = (new Template($this->inheritedMethodTemplate)) ->place('method', $method->name) ->place('params', $params) ->place('return', $returnType) ->produce(); } return implode("\n", $inherited); } protected function getParamsString(ReflectionMethod $refMethod): string { $params = []; foreach ($refMethod->getParameters() as $param) { if ($param->isOptional()) { $params[] = '$' . $param->name . ' = ' . ReflectionHelper::getDefaultValue($param); } else { $params[] = '$' . $param->name; } } return implode(', ', $params); } public function getActorName() { return $this->settings['actor']; } /** * @return string[] */ public function getModules(): array { return array_keys($this->modules); } }