File: D:/HostingSpaces/SBogers10/komma.pro/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();
}
}