%PDF- %PDF-
Direktori : /var/www/html/car_rent/vendor/phpspec/phpspec/src/PhpSpec/Loader/ |
Current File : /var/www/html/car_rent/vendor/phpspec/phpspec/src/PhpSpec/Loader/ResourceLoader.php |
<?php /* * This file is part of PhpSpec, A php toolset to drive emergent * design by specification. * * (c) Marcello Duarte <marcello.duarte@gmail.com> * (c) Konstantin Kudryashov <ever.zet@gmail.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PhpSpec\Loader; use PhpSpec\Util\MethodAnalyser; use PhpSpec\Locator\ResourceManagerInterface; use ReflectionClass; use ReflectionMethod; class ResourceLoader { /** * @var ResourceManagerInterface */ private $manager; /** * @var MethodAnalyser */ private $methodAnalyser; /** * @param ResourceManagerInterface $manager */ public function __construct(ResourceManagerInterface $manager, MethodAnalyser $methodAnalyser = null) { $this->manager = $manager; $this->methodAnalyser = $methodAnalyser ?: new MethodAnalyser(); } /** * @param string $locator * @param integer|null $line * * @return Suite */ public function load($locator, $line = null) { $suite = new Suite(); foreach ($this->manager->locateResources($locator) as $resource) { if (!class_exists($resource->getSpecClassname(), false) && is_file($resource->getSpecFilename())) { require_once StreamWrapper::wrapPath($resource->getSpecFilename()); } if (!class_exists($resource->getSpecClassname(), false)) { continue; } $reflection = new ReflectionClass($resource->getSpecClassname()); if ($reflection->isAbstract()) { continue; } if (!$reflection->implementsInterface('PhpSpec\SpecificationInterface')) { continue; } $spec = new Node\SpecificationNode($resource->getSrcClassname(), $reflection, $resource); foreach ($reflection->getMethods(ReflectionMethod::IS_PUBLIC) as $method) { if (!preg_match('/^(it|its)[^a-zA-Z]/', $method->getName())) { continue; } if (null !== $line && !$this->lineIsInsideMethod($line, $method)) { continue; } $example = new Node\ExampleNode(str_replace('_', ' ', $method->getName()), $method); if ($this->methodAnalyser->reflectionMethodIsEmpty($method)) { $example->markAsPending(); } $spec->addExample($example); } $suite->addSpecification($spec); } return $suite; } /** * @param int $line * @param ReflectionMethod $method * * @return bool */ private function lineIsInsideMethod($line, ReflectionMethod $method) { $line = intval($line); return $line >= $method->getStartLine() && $line <= $method->getEndLine(); } }