4 * This file is part of the Behat Testwork.
5 * (c) Konstantin Kudryashov <ever.zet@gmail.com>
7 * For the full copyright and license information, please view the LICENSE
8 * file that was distributed with this source code.
11 namespace Behat\Testwork\Specification;
13 use Behat\Testwork\Specification\Locator\SpecificationLocator;
14 use Behat\Testwork\Suite\Suite;
17 * Finds test specifications for provided suites using registered locators.
19 * @author Konstantin Kudryashov <ever.zet@gmail.com>
21 final class SpecificationFinder
24 * @var SpecificationLocator[]
26 private $specificationLocators = array();
29 * Registers specification locator.
31 * @param SpecificationLocator $locator
33 public function registerSpecificationLocator(SpecificationLocator $locator)
35 $this->specificationLocators[] = $locator;
39 * Returns array of strings representing examples of supported specification locators.
43 public function getExampleLocators()
46 foreach ($this->specificationLocators as $locator) {
47 $examples = array_merge($examples, $locator->getLocatorExamples());
54 * Finds all specifications for all provided suites matching provided locator and wraps them into a spec iterator.
56 * @param Suite[] $suites
57 * @param null|string $locator
59 * @return SpecificationIterator[]
61 public function findSuitesSpecifications(array $suites, $locator = null)
64 foreach ($suites as $suite) {
65 $iterators = array_merge($iterators, $this->findSuiteSpecifications($suite, $locator));
72 * Creates suite specification iterator for provided locator.
75 * @param null|string $locator
77 * @return SpecificationIterator[]
79 private function findSuiteSpecifications(Suite $suite, $locator = null)
82 foreach ($this->specificationLocators as $specificationLocator) {
83 $iterators[] = $specificationLocator->locateSpecifications($suite, $locator);