class MethodProphecy in Zircon Profile 8
Same name and namespace in other branches
- 8.0 vendor/phpspec/prophecy/src/Prophecy/Prophecy/MethodProphecy.php \Prophecy\Prophecy\MethodProphecy
Method prophecy.
@author Konstantin Kudryashov <ever.zet@gmail.com>
Hierarchy
- class \Prophecy\Prophecy\MethodProphecy
Expanded class hierarchy of MethodProphecy
14 files declare their use of MethodProphecy
- CallbackPrediction.php in vendor/
phpspec/ prophecy/ src/ Prophecy/ Prediction/ CallbackPrediction.php - CallbackPromise.php in vendor/
phpspec/ prophecy/ src/ Prophecy/ Promise/ CallbackPromise.php - CallCenter.php in vendor/
phpspec/ prophecy/ src/ Prophecy/ Call/ CallCenter.php - CallPrediction.php in vendor/
phpspec/ prophecy/ src/ Prophecy/ Prediction/ CallPrediction.php - CallTimesPrediction.php in vendor/
phpspec/ prophecy/ src/ Prophecy/ Prediction/ CallTimesPrediction.php
File
- vendor/
phpspec/ prophecy/ src/ Prophecy/ Prophecy/ MethodProphecy.php, line 27
Namespace
Prophecy\ProphecyView source
class MethodProphecy {
private $objectProphecy;
private $methodName;
private $argumentsWildcard;
private $promise;
private $prediction;
private $checkedPredictions = array();
private $bound = false;
/**
* Initializes method prophecy.
*
* @param ObjectProphecy $objectProphecy
* @param string $methodName
* @param null|Argument\ArgumentsWildcard|array $arguments
*
* @throws \Prophecy\Exception\Doubler\MethodNotFoundException If method not found
*/
public function __construct(ObjectProphecy $objectProphecy, $methodName, $arguments = null) {
$double = $objectProphecy
->reveal();
if (!method_exists($double, $methodName)) {
throw new MethodNotFoundException(sprintf('Method `%s::%s()` is not defined.', get_class($double), $methodName), get_class($double), $methodName, $arguments);
}
$this->objectProphecy = $objectProphecy;
$this->methodName = $methodName;
$reflectedMethod = new \ReflectionMethod($double, $methodName);
if ($reflectedMethod
->isFinal()) {
throw new MethodProphecyException(sprintf("Can not add prophecy for a method `%s::%s()`\n" . "as it is a final method.", get_class($double), $methodName), $this);
}
if (null !== $arguments) {
$this
->withArguments($arguments);
}
if (version_compare(PHP_VERSION, '7.0', '>=') && true === $reflectedMethod
->hasReturnType()) {
$type = (string) $reflectedMethod
->getReturnType();
$this
->will(function () use ($type) {
switch ($type) {
case 'string':
return '';
case 'float':
return 0.0;
case 'int':
return 0;
case 'bool':
return false;
case 'array':
return array();
case 'callable':
case 'Closure':
return function () {
};
case 'Traversable':
case 'Generator':
// Remove eval() when minimum version >=5.5
$generator = eval('return function () { yield; };');
return $generator();
default:
$prophet = new Prophet();
return $prophet
->prophesize($type)
->reveal();
}
});
}
}
/**
* Sets argument wildcard.
*
* @param array|Argument\ArgumentsWildcard $arguments
*
* @return $this
*
* @throws \Prophecy\Exception\InvalidArgumentException
*/
public function withArguments($arguments) {
if (is_array($arguments)) {
$arguments = new Argument\ArgumentsWildcard($arguments);
}
if (!$arguments instanceof Argument\ArgumentsWildcard) {
throw new InvalidArgumentException(sprintf("Either an array or an instance of ArgumentsWildcard expected as\n" . 'a `MethodProphecy::withArguments()` argument, but got %s.', gettype($arguments)));
}
$this->argumentsWildcard = $arguments;
return $this;
}
/**
* Sets custom promise to the prophecy.
*
* @param callable|Promise\PromiseInterface $promise
*
* @return $this
*
* @throws \Prophecy\Exception\InvalidArgumentException
*/
public function will($promise) {
if (is_callable($promise)) {
$promise = new Promise\CallbackPromise($promise);
}
if (!$promise instanceof Promise\PromiseInterface) {
throw new InvalidArgumentException(sprintf('Expected callable or instance of PromiseInterface, but got %s.', gettype($promise)));
}
$this
->bindToObjectProphecy();
$this->promise = $promise;
return $this;
}
/**
* Sets return promise to the prophecy.
*
* @see Prophecy\Promise\ReturnPromise
*
* @return $this
*/
public function willReturn() {
return $this
->will(new Promise\ReturnPromise(func_get_args()));
}
/**
* Sets return argument promise to the prophecy.
*
* @param int $index The zero-indexed number of the argument to return
*
* @see Prophecy\Promise\ReturnArgumentPromise
*
* @return $this
*/
public function willReturnArgument($index = 0) {
return $this
->will(new Promise\ReturnArgumentPromise($index));
}
/**
* Sets throw promise to the prophecy.
*
* @see Prophecy\Promise\ThrowPromise
*
* @param string|\Exception $exception Exception class or instance
*
* @return $this
*/
public function willThrow($exception) {
return $this
->will(new Promise\ThrowPromise($exception));
}
/**
* Sets custom prediction to the prophecy.
*
* @param callable|Prediction\PredictionInterface $prediction
*
* @return $this
*
* @throws \Prophecy\Exception\InvalidArgumentException
*/
public function should($prediction) {
if (is_callable($prediction)) {
$prediction = new Prediction\CallbackPrediction($prediction);
}
if (!$prediction instanceof Prediction\PredictionInterface) {
throw new InvalidArgumentException(sprintf('Expected callable or instance of PredictionInterface, but got %s.', gettype($prediction)));
}
$this
->bindToObjectProphecy();
$this->prediction = $prediction;
return $this;
}
/**
* Sets call prediction to the prophecy.
*
* @see Prophecy\Prediction\CallPrediction
*
* @return $this
*/
public function shouldBeCalled() {
return $this
->should(new Prediction\CallPrediction());
}
/**
* Sets no calls prediction to the prophecy.
*
* @see Prophecy\Prediction\NoCallsPrediction
*
* @return $this
*/
public function shouldNotBeCalled() {
return $this
->should(new Prediction\NoCallsPrediction());
}
/**
* Sets call times prediction to the prophecy.
*
* @see Prophecy\Prediction\CallTimesPrediction
*
* @param $count
*
* @return $this
*/
public function shouldBeCalledTimes($count) {
return $this
->should(new Prediction\CallTimesPrediction($count));
}
/**
* Checks provided prediction immediately.
*
* @param callable|Prediction\PredictionInterface $prediction
*
* @return $this
*
* @throws \Prophecy\Exception\InvalidArgumentException
*/
public function shouldHave($prediction) {
if (is_callable($prediction)) {
$prediction = new Prediction\CallbackPrediction($prediction);
}
if (!$prediction instanceof Prediction\PredictionInterface) {
throw new InvalidArgumentException(sprintf('Expected callable or instance of PredictionInterface, but got %s.', gettype($prediction)));
}
if (null === $this->promise) {
$this
->willReturn();
}
$calls = $this
->getObjectProphecy()
->findProphecyMethodCalls($this
->getMethodName(), $this
->getArgumentsWildcard());
try {
$prediction
->check($calls, $this
->getObjectProphecy(), $this);
$this->checkedPredictions[] = $prediction;
} catch (\Exception $e) {
$this->checkedPredictions[] = $prediction;
throw $e;
}
return $this;
}
/**
* Checks call prediction.
*
* @see Prophecy\Prediction\CallPrediction
*
* @return $this
*/
public function shouldHaveBeenCalled() {
return $this
->shouldHave(new Prediction\CallPrediction());
}
/**
* Checks no calls prediction.
*
* @see Prophecy\Prediction\NoCallsPrediction
*
* @return $this
*/
public function shouldNotHaveBeenCalled() {
return $this
->shouldHave(new Prediction\NoCallsPrediction());
}
/**
* Checks no calls prediction.
*
* @see Prophecy\Prediction\NoCallsPrediction
* @deprecated
*
* @return $this
*/
public function shouldNotBeenCalled() {
return $this
->shouldNotHaveBeenCalled();
}
/**
* Checks call times prediction.
*
* @see Prophecy\Prediction\CallTimesPrediction
*
* @param int $count
*
* @return $this
*/
public function shouldHaveBeenCalledTimes($count) {
return $this
->shouldHave(new Prediction\CallTimesPrediction($count));
}
/**
* Checks currently registered [with should(...)] prediction.
*/
public function checkPrediction() {
if (null === $this->prediction) {
return;
}
$this
->shouldHave($this->prediction);
}
/**
* Returns currently registered promise.
*
* @return null|Promise\PromiseInterface
*/
public function getPromise() {
return $this->promise;
}
/**
* Returns currently registered prediction.
*
* @return null|Prediction\PredictionInterface
*/
public function getPrediction() {
return $this->prediction;
}
/**
* Returns predictions that were checked on this object.
*
* @return Prediction\PredictionInterface[]
*/
public function getCheckedPredictions() {
return $this->checkedPredictions;
}
/**
* Returns object prophecy this method prophecy is tied to.
*
* @return ObjectProphecy
*/
public function getObjectProphecy() {
return $this->objectProphecy;
}
/**
* Returns method name.
*
* @return string
*/
public function getMethodName() {
return $this->methodName;
}
/**
* Returns arguments wildcard.
*
* @return Argument\ArgumentsWildcard
*/
public function getArgumentsWildcard() {
return $this->argumentsWildcard;
}
private function bindToObjectProphecy() {
if ($this->bound) {
return;
}
$this
->getObjectProphecy()
->addMethodProphecy($this);
$this->bound = true;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
MethodProphecy:: |
private | property | ||
MethodProphecy:: |
private | property | ||
MethodProphecy:: |
private | property | ||
MethodProphecy:: |
private | property | ||
MethodProphecy:: |
private | property | ||
MethodProphecy:: |
private | property | ||
MethodProphecy:: |
private | property | ||
MethodProphecy:: |
private | function | ||
MethodProphecy:: |
public | function | Checks currently registered [with should(...)] prediction. | |
MethodProphecy:: |
public | function | Returns arguments wildcard. | |
MethodProphecy:: |
public | function | Returns predictions that were checked on this object. | |
MethodProphecy:: |
public | function | Returns method name. | |
MethodProphecy:: |
public | function | Returns object prophecy this method prophecy is tied to. | |
MethodProphecy:: |
public | function | Returns currently registered prediction. | |
MethodProphecy:: |
public | function | Returns currently registered promise. | |
MethodProphecy:: |
public | function | Sets custom prediction to the prophecy. | |
MethodProphecy:: |
public | function | Sets call prediction to the prophecy. | |
MethodProphecy:: |
public | function | Sets call times prediction to the prophecy. | |
MethodProphecy:: |
public | function | Checks provided prediction immediately. | |
MethodProphecy:: |
public | function | Checks call prediction. | |
MethodProphecy:: |
public | function | Checks call times prediction. | |
MethodProphecy:: |
public | function | Sets no calls prediction to the prophecy. | |
MethodProphecy:: |
public | function | Checks no calls prediction. | |
MethodProphecy:: |
public | function | Checks no calls prediction. | |
MethodProphecy:: |
public | function | Sets custom promise to the prophecy. | |
MethodProphecy:: |
public | function | Sets return promise to the prophecy. | |
MethodProphecy:: |
public | function | Sets return argument promise to the prophecy. | |
MethodProphecy:: |
public | function | Sets throw promise to the prophecy. | |
MethodProphecy:: |
public | function | Sets argument wildcard. | |
MethodProphecy:: |
public | function | Initializes method prophecy. |