File: //usr/local/wp/vendor/behat/behat/src/Behat/Behat/Snippet/AggregateSnippet.php
<?php
/*
* This file is part of the Behat.
* (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\Behat\Snippet;
use Behat\Behat\Context\Snippet\ContextSnippet;
use Behat\Gherkin\Node\StepNode;
/**
* Aggregates multiple similar snippets with different targets and steps.
*
* @author Konstantin Kudryashov <ever.zet@gmail.com>
*/
final class AggregateSnippet
{
/**
* @var Snippet[]
*/
private $snippets;
/**
* Initializes snippet.
*
* @param Snippet[] $snippets
*/
public function __construct(array $snippets)
{
$this->snippets = $snippets;
}
/**
* Returns snippet type.
*
* @return string
*/
public function getType()
{
return current($this->snippets)->getType();
}
/**
* Returns snippet unique ID (step type independent).
*
* @return string
*/
public function getHash()
{
return current($this->snippets)->getHash();
}
/**
* Returns definition snippet text.
*
* @return string
*/
public function getSnippet()
{
return current($this->snippets)->getSnippet();
}
/**
* Returns all steps interested in this snippet.
*
* @return StepNode[]
*/
public function getSteps()
{
return array_unique(
array_map(
function (Snippet $snippet) {
return $snippet->getStep();
},
$this->snippets
),
SORT_REGULAR
);
}
/**
* Returns all snippet targets.
*
* @return string[]
*/
public function getTargets()
{
return array_unique(
array_map(
function (Snippet $snippet) {
return $snippet->getTarget();
},
$this->snippets
)
);
}
/**
* Returns the classes used in the snippet which should be imported.
*
* @return string[]
*/
public function getUsedClasses()
{
if (empty($this->snippets)) {
return array();
}
return array_unique(
call_user_func_array(
'array_merge',
array_map(
function (Snippet $snippet) {
if (!$snippet instanceof ContextSnippet) {
return array();
}
return $snippet->getUsedClasses();
},
$this->snippets
)
)
);
}
}