| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- <?php
- namespace Codeception;
- use Codeception\Event\StepEvent;
- use Codeception\Exception\ConditionalAssertionFailed;
- use Codeception\Test\Metadata;
- class Scenario
- {
- /**
- * @var TestInterface
- */
- protected $test;
- /**
- * @var Metadata
- */
- protected $metadata;
- /**
- * @var array
- */
- protected $steps = [];
- /**
- * @var string
- */
- protected $feature;
- protected $metaStep;
- /**
- * Constructor
- *
- * @param TestInterface $test
- */
- public function __construct(TestInterface $test)
- {
- $this->metadata = $test->getMetadata();
- $this->test = $test;
- }
- public function setFeature($feature)
- {
- $this->metadata->setFeature($feature);
- }
- public function getFeature()
- {
- return $this->metadata->getFeature();
- }
- public function getGroups()
- {
- return $this->metadata->getGroups();
- }
- public function current($key)
- {
- return $this->metadata->getCurrent($key);
- }
- public function runStep(Step $step)
- {
- $step->saveTrace();
- if ($this->metaStep instanceof Step\Meta) {
- $step->setMetaStep($this->metaStep);
- }
- $this->steps[] = $step;
- $result = null;
- $this->metadata->getService('dispatcher')->dispatch(Events::STEP_BEFORE, new StepEvent($this->test, $step));
- try {
- $result = $step->run($this->metadata->getService('modules'));
- } catch (ConditionalAssertionFailed $f) {
- $result = $this->test->getTestResultObject();
- if (is_null($result)) {
- $this->metadata->getService('dispatcher')->dispatch(Events::STEP_AFTER, new StepEvent($this->test, $step));
- throw $f;
- } else {
- $result->addFailure(clone($this->test), $f, $result->time());
- }
- } catch (\Exception $e) {
- $this->metadata->getService('dispatcher')->dispatch(Events::STEP_AFTER, new StepEvent($this->test, $step));
- throw $e;
- }
- $this->metadata->getService('dispatcher')->dispatch(Events::STEP_AFTER, new StepEvent($this->test, $step));
- $step->executed = true;
- return $result;
- }
- public function addStep(Step $step)
- {
- $this->steps[] = $step;
- }
- /**
- * Returns the steps of this scenario.
- *
- * @return array
- */
- public function getSteps()
- {
- return $this->steps;
- }
- public function getHtml()
- {
- $text = '';
- foreach ($this->getSteps() as $step) {
- /** @var Step $step */
- if ($step->getName() !== 'Comment') {
- $text .= $step->getHtml() . '<br/>';
- } else {
- $text .= trim($step->getHumanizedArguments(), '"') . '<br/>';
- }
- }
- $text = str_replace(['"\'', '\'"'], ["'", "'"], $text);
- $text = "<h3>" . mb_strtoupper('I want to ' . $this->getFeature(), 'utf-8') . "</h3>" . $text;
- return $text;
- }
- public function getText()
- {
- $text = '';
- foreach ($this->getSteps() as $step) {
- $text .= $step->getPrefix() . "$step \r\n";
- }
- $text = trim(str_replace(['"\'', '\'"'], ["'", "'"], $text));
- $text = mb_strtoupper('I want to ' . $this->getFeature(), 'utf-8') . "\r\n\r\n" . $text . "\r\n\r\n";
- return $text;
- }
- public function comment($comment)
- {
- $this->runStep(new \Codeception\Step\Comment($comment, []));
- }
- public function skip($message = '')
- {
- throw new \PHPUnit\Framework\SkippedTestError($message);
- }
- public function incomplete($message = '')
- {
- throw new \PHPUnit\Framework\IncompleteTestError($message);
- }
- public function __call($method, $args)
- {
- // all methods were deprecated and removed from here
- trigger_error("Codeception: \$scenario->$method() has been deprecated and removed. Use annotations to pass scenario params", E_USER_DEPRECATED);
- }
- /**
- * @param Step\Meta $metaStep
- */
- public function setMetaStep($metaStep)
- {
- $this->metaStep = $metaStep;
- }
- /**
- * @return Step\Meta
- */
- public function getMetaStep()
- {
- return $this->metaStep;
- }
- }
|