X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs-website;a=blobdiff_plain;f=vendor%2Fbehat%2Fbehat%2Fsrc%2FBehat%2FTestwork%2FSpecification%2FGroupedSpecificationIterator.php;fp=vendor%2Fbehat%2Fbehat%2Fsrc%2FBehat%2FTestwork%2FSpecification%2FGroupedSpecificationIterator.php;h=bac556d05f46df138efd43810feed38a95e53165;hp=0000000000000000000000000000000000000000;hb=1270d9129ce8f27c9b28b10518e32132c58e0aca;hpb=c27c0f0cdaa3f354b1fe54a56ae7e854be6e3f68 diff --git a/vendor/behat/behat/src/Behat/Testwork/Specification/GroupedSpecificationIterator.php b/vendor/behat/behat/src/Behat/Testwork/Specification/GroupedSpecificationIterator.php new file mode 100644 index 000000000..bac556d05 --- /dev/null +++ b/vendor/behat/behat/src/Behat/Testwork/Specification/GroupedSpecificationIterator.php @@ -0,0 +1,137 @@ + + * + * 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\Suite\Suite; + +/** + * Iterates over specification iterators grouped by their suite. + * + * @author Konstantin Kudryashov + */ +final class GroupedSpecificationIterator implements SpecificationIterator +{ + /** + * @var Suite + */ + private $suite; + /** + * @var SpecificationIterator[] + */ + private $iterators; + /** + * @var integer + */ + private $position = 0; + + /** + * Initializes iterator. + * + * @param Suite $suite + * @param SpecificationIterator[] $specificationIterators + */ + public function __construct(Suite $suite, array $specificationIterators) + { + $this->suite = $suite; + $this->iterators = $specificationIterators; + } + + /** + * Groups specifications by their suite. + * + * @param SpecificationIterator[] $specificationIterators + * + * @return GroupedSpecificationIterator[] + */ + public static function group(array $specificationIterators) + { + $groupedSpecifications = array(); + foreach ($specificationIterators as $specificationIterator) { + $groupedSpecifications[$specificationIterator->getSuite()->getName()][] = $specificationIterator; + } + + return array_map( + function ($iterator) { + return new GroupedSpecificationIterator($iterator[0]->getSuite(), $iterator); + }, + $groupedSpecifications + ); + } + + /** + * {@inheritdoc} + */ + public function getSuite() + { + return $this->suite; + } + + /** + * {@inheritdoc} + */ + public function rewind() + { + $this->position = 0; + while (isset($this->iterators[$this->position])) { + $this->iterators[$this->position]->rewind(); + + if ($this->iterators[$this->position]->valid()) { + break; + } + $this->position++; + } + } + + /** + * {@inheritdoc} + */ + public function next() + { + if (!isset($this->iterators[$this->position])) { + return; + } + + $this->iterators[$this->position]->next(); + while (!$this->iterators[$this->position]->valid()) { + $this->position++; + + if (!isset($this->iterators[$this->position])) { + break; + } + + $this->iterators[$this->position]->rewind(); + } + } + + /** + * {@inheritdoc} + */ + public function valid() + { + return isset($this->iterators[$this->position]) && $this->iterators[$this->position]->valid(); + } + + /** + * {@inheritdoc} + */ + public function current() + { + return $this->iterators[$this->position]->current(); + } + + /** + * {@inheritdoc} + */ + public function key() + { + return $this->position + $this->iterators[$this->position]->key(); + } +}