4 * This file is part of the Behat.
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\Behat\Context\Environment;
13 use Behat\Behat\Context\Environment\Handler\ContextEnvironmentHandler;
14 use Behat\Behat\Context\Exception\ContextNotFoundException;
15 use Behat\Behat\Context\Exception\WrongContextClassException;
16 use Behat\Testwork\Environment\StaticEnvironment;
19 * Context environment based on a list of context classes.
21 * @see ContextEnvironmentHandler
23 * @author Konstantin Kudryashov <ever.zet@gmail.com>
25 final class UninitializedContextEnvironment extends StaticEnvironment implements ContextEnvironment
30 private $contextClasses = array();
33 * Registers context class.
35 * @param string $contextClass
36 * @param null|array $arguments
38 * @throws ContextNotFoundException If class does not exist
39 * @throws WrongContextClassException if class does not implement Context interface
41 public function registerContextClass($contextClass, array $arguments = null)
43 if (!class_exists($contextClass)) {
44 throw new ContextNotFoundException(sprintf(
45 '`%s` context class not found and can not be used.',
50 $reflClass = new \ReflectionClass($contextClass);
52 if (!$reflClass->implementsInterface('Behat\Behat\Context\Context')) {
53 throw new WrongContextClassException(sprintf(
54 'Every context class must implement Behat Context interface, but `%s` does not.',
59 $this->contextClasses[$contextClass] = $arguments ? : array();
65 public function hasContexts()
67 return count($this->contextClasses) > 0;
73 public function getContextClasses()
75 return array_keys($this->contextClasses);
81 public function hasContextClass($class)
83 return isset($this->contextClasses[$class]);
87 * Returns context classes with their arguments.
91 public function getContextClassesWithArguments()
93 return $this->contextClasses;