X-Git-Url: http://www.aleph1.co.uk/gitweb/?a=blobdiff_plain;ds=sidebyside;f=vendor%2Fbehat%2Fbehat%2Fsrc%2FBehat%2FBehat%2FTransformation%2FCall%2FFilter%2FDefinitionArgumentsTransformer.php;fp=vendor%2Fbehat%2Fbehat%2Fsrc%2FBehat%2FBehat%2FTransformation%2FCall%2FFilter%2FDefinitionArgumentsTransformer.php;h=d6cde918d7a42c35d8ab8d02b824f7c6fdb0914e;hb=1270d9129ce8f27c9b28b10518e32132c58e0aca;hp=0000000000000000000000000000000000000000;hpb=c27c0f0cdaa3f354b1fe54a56ae7e854be6e3f68;p=yaffs-website diff --git a/vendor/behat/behat/src/Behat/Behat/Transformation/Call/Filter/DefinitionArgumentsTransformer.php b/vendor/behat/behat/src/Behat/Behat/Transformation/Call/Filter/DefinitionArgumentsTransformer.php new file mode 100644 index 000000000..d6cde918d --- /dev/null +++ b/vendor/behat/behat/src/Behat/Behat/Transformation/Call/Filter/DefinitionArgumentsTransformer.php @@ -0,0 +1,108 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Behat\Transformation\Call\Filter; + +use Behat\Behat\Definition\Call\DefinitionCall; +use Behat\Behat\Transformation\Exception\UnsupportedCallException; +use Behat\Behat\Transformation\Transformer\ArgumentTransformer; +use Behat\Testwork\Call\Call; +use Behat\Testwork\Call\Filter\CallFilter; + +/** + * Handles definition calls by intercepting them and transforming their arguments using transformations. + * + * @author Konstantin Kudryashov + */ +final class DefinitionArgumentsTransformer implements CallFilter +{ + /** + * @var ArgumentTransformer[] + */ + private $argumentTransformers = array(); + + /** + * Registers new argument transformer. + * + * @param ArgumentTransformer $transformer + */ + public function registerArgumentTransformer(ArgumentTransformer $transformer) + { + $this->argumentTransformers[] = $transformer; + } + + /** + * {@inheritdoc} + */ + public function supportsCall(Call $call) + { + return $call instanceof DefinitionCall; + } + + /** + * {@inheritdoc} + */ + public function filterCall(Call $definitionCall) + { + if (!$definitionCall instanceof DefinitionCall) { + throw new UnsupportedCallException(sprintf( + 'DefinitionArgumentTransformer can not filter `%s` call.', + get_class($definitionCall) + ), $definitionCall); + } + + $newArguments = array(); + $transformed = false; + foreach ($definitionCall->getArguments() as $index => $value) { + $newValue = $this->transformArgument($definitionCall, $index, $value); + + if ($newValue !== $value) { + $transformed = true; + } + + $newArguments[$index] = $newValue; + } + + if (!$transformed) { + return $definitionCall; + } + + return new DefinitionCall( + $definitionCall->getEnvironment(), + $definitionCall->getFeature(), + $definitionCall->getStep(), + $definitionCall->getCallee(), + $newArguments, + $definitionCall->getErrorReportingLevel() + ); + } + + /** + * Transforms call argument using registered transformers. + * + * @param DefinitionCall $definitionCall + * @param integer|string $index + * @param mixed $value + * + * @return mixed + */ + private function transformArgument(DefinitionCall $definitionCall, $index, $value) + { + foreach ($this->argumentTransformers as $transformer) { + if (!$transformer->supportsDefinitionAndArgument($definitionCall, $index, $value)) { + continue; + } + + return $transformer->transformArgument($definitionCall, $index, $value); + } + + return $value; + } +}