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\Suite\Suite;
16 * Iterates over specification iterators grouped by their suite.
18 * @author Konstantin Kudryashov <ever.zet@gmail.com>
20 final class GroupedSpecificationIterator implements SpecificationIterator
27 * @var SpecificationIterator[]
33 private $position = 0;
36 * Initializes iterator.
39 * @param SpecificationIterator[] $specificationIterators
41 public function __construct(Suite $suite, array $specificationIterators)
43 $this->suite = $suite;
44 $this->iterators = $specificationIterators;
48 * Groups specifications by their suite.
50 * @param SpecificationIterator[] $specificationIterators
52 * @return GroupedSpecificationIterator[]
54 public static function group(array $specificationIterators)
56 $groupedSpecifications = array();
57 foreach ($specificationIterators as $specificationIterator) {
58 $groupedSpecifications[$specificationIterator->getSuite()->getName()][] = $specificationIterator;
62 function ($iterator) {
63 return new GroupedSpecificationIterator($iterator[0]->getSuite(), $iterator);
65 $groupedSpecifications
72 public function getSuite()
80 public function rewind()
83 while (isset($this->iterators[$this->position])) {
84 $this->iterators[$this->position]->rewind();
86 if ($this->iterators[$this->position]->valid()) {
96 public function next()
98 if (!isset($this->iterators[$this->position])) {
102 $this->iterators[$this->position]->next();
103 while (!$this->iterators[$this->position]->valid()) {
106 if (!isset($this->iterators[$this->position])) {
110 $this->iterators[$this->position]->rewind();
117 public function valid()
119 return isset($this->iterators[$this->position]) && $this->iterators[$this->position]->valid();
125 public function current()
127 return $this->iterators[$this->position]->current();
133 public function key()
135 return $this->position + $this->iterators[$this->position]->key();