File: //usr/local/wp/vendor/behat/behat/src/Behat/Testwork/Specification/SpecificationFinder.php
<?php
/*
* This file is part of the Behat Testwork.
* (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 Behat\Testwork\Specification;
use Behat\Testwork\Specification\Locator\SpecificationLocator;
use Behat\Testwork\Suite\Suite;
/**
* Finds test specifications for provided suites using registered locators.
*
* @author Konstantin Kudryashov <ever.zet@gmail.com>
*/
final class SpecificationFinder
{
/**
* @var SpecificationLocator[]
*/
private $specificationLocators = array();
/**
* Registers specification locator.
*
* @param SpecificationLocator $locator
*/
public function registerSpecificationLocator(SpecificationLocator $locator)
{
$this->specificationLocators[] = $locator;
}
/**
* Returns array of strings representing examples of supported specification locators.
*
* @return string[]
*/
public function getExampleLocators()
{
$examples = array();
foreach ($this->specificationLocators as $locator) {
$examples = array_merge($examples, $locator->getLocatorExamples());
}
return $examples;
}
/**
* Finds all specifications for all provided suites matching provided locator and wraps them into a spec iterator.
*
* @param Suite[] $suites
* @param null|string $locator
*
* @return SpecificationIterator[]
*/
public function findSuitesSpecifications(array $suites, $locator = null)
{
$iterators = array();
foreach ($suites as $suite) {
$iterators = array_merge($iterators, $this->findSuiteSpecifications($suite, $locator));
}
return $iterators;
}
/**
* Creates suite specification iterator for provided locator.
*
* @param Suite $suite
* @param null|string $locator
*
* @return SpecificationIterator[]
*/
private function findSuiteSpecifications(Suite $suite, $locator = null)
{
$iterators = array();
foreach ($this->specificationLocators as $specificationLocator) {
$iterators[] = $specificationLocator->locateSpecifications($suite, $locator);
}
return $iterators;
}
}