Security update for permissions_by_term
[yaffs-website] / vendor / behat / behat / src / Behat / Testwork / Specification / SpecificationFinder.php
diff --git a/vendor/behat/behat/src/Behat/Testwork/Specification/SpecificationFinder.php b/vendor/behat/behat/src/Behat/Testwork/Specification/SpecificationFinder.php
new file mode 100644 (file)
index 0000000..5204bd5
--- /dev/null
@@ -0,0 +1,88 @@
+<?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;
+    }
+}