Server_AccessControl/vendor/codeception/base/src/Codeception/Scenario.php
2020-10-06 14:27:47 +07:00

169 lines
4.2 KiB
PHP

<?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;
}
}