Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 9 |
CRAP | |
0.00% |
0 / 89 |
Cest | |
0.00% |
0 / 1 |
|
0.00% |
0 / 9 |
702 | |
0.00% |
0 / 89 |
__construct($dispatcher, array $data = array() | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 8 |
|||
testCodecept($run = true) | |
0.00% |
0 / 1 |
90 | |
0.00% |
0 / 29 |
|||
executeTestMethod($I) | |
0.00% |
0 / 1 |
20 | |
0.00% |
0 / 11 |
|||
getTestClass() | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 4 |
|||
getTestMethod() | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 4 |
|||
getCoveredClass() | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 6 |
|||
getCoveredMethod() | |
0.00% |
0 / 1 |
30 | |
0.00% |
0 / 14 |
|||
getSpecFromMethod() | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 10 |
|||
getFileName() | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
<?php | |
namespace Codeception\TestCase; | |
class Cest extends \Codeception\TestCase\Cept | |
{ | |
protected $testClass = null; | |
protected $testMethod = null; | |
protected $signature; | |
protected $guy = 'CodeGuy'; | |
public function __construct($dispatcher, array $data = array(), $dataName = '') { | |
parent::__construct($dispatcher, $data, $dataName); | |
$this->testClass = $data['class']; | |
$this->testMethod = $data['method']; | |
$this->static = $data['static']; | |
$this->signature = $data['signature']; | |
$this->guy = $data['guy']; | |
} | |
public function testCodecept($run = true) { | |
if (file_exists($this->bootstrap)) require $this->bootstrap; | |
if (isset($this->testClass->class)) { | |
if (!class_exists($this->testClass->class, true)) { | |
throw new \Exception("Tested class '{$this->testClass->class}' can't be loaded."); | |
} | |
} | |
// executing test | |
$class_name = '\\'.$this->guy; | |
$I = new $class_name($this->scenario); | |
if ($this->getCoveredMethod()) { | |
$I->testMethod($this->signature); | |
} | |
if ($spec = $this->getSpecFromMethod()) { | |
$I->wantTo($spec); | |
} | |
// preload everything | |
$this->executeTestMethod($I); | |
if (!$run) return; | |
$this->dispatcher->dispatch('test.before', new \Codeception\Event\Test($this)); | |
$this->scenario->run(); | |
if ($this->getCoveredMethod()) { | |
$I->testMethod($this->signature); | |
} | |
try { | |
$this->executeTestMethod($I); | |
} catch (\PHPUnit_Framework_ExpectationFailedException $e) { | |
$this->dispatcher->dispatch('test.fail', new \Codeception\Event\Fail($this, $e)); | |
throw $e; | |
} | |
} | |
protected function executeTestMethod($I) | |
{ | |
if ($this->static) { | |
$class = $this->testClass->class; | |
if (!is_callable(array($class, $this->testMethod))) throw new \Exception("Method {$this->specName} can't be found in tested class"); | |
call_user_func(array(get_class($this->testClass), $this->testMethod), $I, $this->scenario); | |
} else { | |
if (!is_callable(array($this->testClass, $this->testMethod))) throw new \Exception("Method {$this->specName} can't be found in tested class"); | |
call_user_func(array($this->testClass, $this->testMethod), $I, $this->scenario); | |
} | |
} | |
public function getTestClass() | |
{ | |
return $this->testClass; | |
} | |
public function getTestMethod() | |
{ | |
return $this->testMethod; | |
} | |
public function getCoveredClass() | |
{ | |
$class = $this->getTestClass(); | |
if (isset($class->class)) return $class->class; | |
return null; | |
} | |
public function getCoveredMethod() | |
{ | |
if (!$this->getCoveredClass()) return null; | |
$r = new \ReflectionClass($this->getCoveredClass()); | |
if ($r->hasMethod($this->testMethod)) return $this->testMethod; | |
// search by annotations | |
$rm = new \ReflectionMethod($this->testClass, $this->testMethod); | |
$doc = $rm->getDocComment(); | |
if (preg_match('~@(covers|doc) (.*?)\*~si', $doc, $matches)) { | |
$method = trim($matches[2]); | |
if ($r->hasMethod($method)) return $method; | |
return null; | |
} | |
return null; | |
} | |
public function getSpecFromMethod() { | |
if (strpos(strtolower($this->testMethod),'should') === 0) { | |
$text = substr($this->testMethod,6); | |
$text = preg_replace('/([A-Z]+)([A-Z][a-z])/', '\\1 \\2', $text); | |
$text = preg_replace('/([a-z\d])([A-Z])/', '\\1 \\2', $text); | |
$text = strtolower($text); | |
return $text; | |
} | |
return ''; | |
} | |
public function getFileName() { | |
return get_class($this)."::".$this->getTestMethod(); | |
} | |
} |