/** * Evaluates negative match. * * @param string $name * @param mixed $subject * @param array $arguments * * @throws \PhpSpec\Exception\Example\FailureException * @return boolean */ public function negativeMatch($name, $subject, array $arguments) { $checker = $this->getCheckerName($name); if (call_user_func($checker, $subject)) { throw new FailureException(sprintf('%s not expected to return %s, but it did.', $this->presenter->presentString(sprintf('%s(%s)', $checker, $this->presenter->presentValue($subject))), $this->presenter->presentValue(true))); } }
/** * @param array $args * * @throws \PhpSpec\Exception\Wrapper\SubjectException */ public function beConstructedWith($args) { if (null === $this->classname) { throw new SubjectException(sprintf('You can not set object arguments. Behavior subject is %s.', $this->presenter->presentValue(null))); } $this->beAnInstanceOf($this->classname, $args); }
/** * @param $keyword * @param $subject * @param array $arguments * @return mixed * @throws \PhpSpec\Exception\Wrapper\MatcherNotFoundException */ public function find($keyword, $subject, array $arguments) { foreach ($this->matchers as $matcher) { if (true === $matcher->supports($keyword, $subject, $arguments)) { return $matcher; } } throw new MatcherNotFoundException(sprintf('No %s(%s) matcher found for %s.', $this->presenter->presentString($keyword), $this->presenter->presentValue($arguments), $this->presenter->presentValue($subject)), $keyword, $subject, $arguments); }
/** * @param array $args * * @throws \PhpSpec\Exception\Wrapper\SubjectException */ public function beConstructedWith($args) { if (null === $this->classname) { throw new SubjectException(sprintf('You can not set object arguments. Behavior subject is %s.', $this->presenter->presentValue(null))); } if ($this->isInstantiated()) { throw new SubjectException('You can not change object construction method when it is already instantiated'); } $this->beAnInstanceOf($this->classname, $args); }
/** * @param mixed $subject * @param array $arguments * * @return boolean */ protected function matches($subject, array $arguments) { if (!$this->isRestViewObject($subject)) { $this->exception = new FailureException(sprintf('Expected %s to be an instance of FOS\\RestBundle\\View\\View', $this->presenter->presentValue($subject))); return false; } /** @var View $subject */ $argument = isset($arguments[0]) ? $arguments[0] : []; if (!$this->dataMatches($subject, $argument)) { $this->exception = new FailureException(sprintf('Expected %s to be a data of the View, but it is not. Instead got: %s', $this->presenter->presentValue($argument['data']), $this->presenter->presentValue($subject->getData()))); return false; } if (!$this->statusCodeMatches($subject, $argument)) { $this->exception = new FailureException(sprintf('Expected %s to be a status code of the View, but it is not. Instead got: %s', $this->presenter->presentValue($argument['statusCode']), $this->presenter->presentValue($subject->getStatusCode()))); return false; } if (!$this->headersMatches($subject, $argument)) { $this->exception = new FailureException(sprintf('Expected headers to be %s, but it is not. Instead got: %s. Details: %s', $this->presenter->presentValue($argument['headers']), $this->presenter->presentValue($subject->getHeaders()), $this->matcher->getError())); return false; } if (!$this->serializationGroupsMatches($subject, $argument)) { $this->exception = new FailureException(sprintf('Expected serialization group to be %s, but they are not', empty($argument['serializationGroups']) ? 'empty (it\'s impossible!)' : implode(', ', $argument['serializationGroups']))); return false; } }
/** * @param callable $callable * @param array $arguments * @param string|null $exception * * @throws \PhpSpec\Exception\Example\FailureException */ public function verifyNegative($callable, array $arguments, $exception = null) { try { call_user_func_array($callable, $arguments); } catch (\Exception $e) { if (null === $exception) { throw new FailureException(sprintf('Expected to not throw any exceptions, but got %s.', $this->presenter->presentValue($e))); } if ($e instanceof $exception) { $invalidProperties = array(); if (is_object($exception)) { $exceptionRefl = $this->factory->create($exception); foreach ($exceptionRefl->getProperties() as $property) { if (in_array($property->getName(), self::$ignoredProperties)) { continue; } $property->setAccessible(true); $expected = $property->getValue($exception); $actual = $property->getValue($e); if (null !== $expected && $actual === $expected) { $invalidProperties[] = sprintf(' `%s`=%s', $property->getName(), $this->presenter->presentValue($expected)); } } } $withProperties = ''; if (count($invalidProperties) > 0) { $withProperties = sprintf(' with' . PHP_EOL . '%s,' . PHP_EOL, implode(",\n", $invalidProperties)); } throw new FailureException(sprintf('Expected to not throw %s exception%s but got it.', $this->presenter->presentValue($exception), $withProperties)); } } }
function let(PresenterInterface $presenter) { $presenter->presentValue(Argument::any())->willReturn('val'); $presenter->presentString(Argument::any())->willReturnArgument(); $this->beConstructedWith('custom', function () { }, $presenter); }
/** * @param string $classname * @param array $arguments * * @throws \PhpSpec\Exception\Wrapper\SubjectException */ public function beAnInstanceOf($classname, array $arguments = array()) { if (!is_string($classname)) { throw new SubjectException(sprintf('Behavior subject classname should be a string, %s given.', $this->presenter->presentValue($classname))); } $this->classname = $classname; $unwrapper = new Unwrapper(); $this->arguments = $unwrapper->unwrapAll($arguments); $this->isInstantiated = false; $this->factoryMethod = null; }
/** * @param string $name * @param mixed $subject * @param array $arguments * * @throws \PhpSpec\Exception\Example\FailureException * @throws \PhpSpec\Exception\Fracture\MethodNotFoundException */ public function negativeMatch($name, $subject, array $arguments) { preg_match(self::$regex, $name, $matches); $method = ('be' === $matches[1] ? 'is' : 'has') . ucfirst($matches[2]); $callable = array($subject, $method); if (!method_exists($subject, $method)) { throw new MethodNotFoundException(sprintf('Method %s not found.', $this->presenter->presentValue($callable)), $subject, $method, $arguments); } if (false !== ($result = call_user_func_array($callable, $arguments))) { throw $this->getFailureExceptionFor($callable, false, $result); } }
/** * * @param array $arguments * * @return null|string * @throws \PhpSpec\Exception\Example\MatcherException */ private function getException(array $arguments) { if (0 == count($arguments)) { return null; } if (is_string($arguments[0])) { return $arguments[0]; } if (is_object($arguments[0]) && $arguments[0] instanceof \Exception) { return $arguments[0]; } throw new MatcherException(sprintf("Wrong argument provided in throw matcher.\n" . "Fully qualified classname or exception instance expected,\n" . "Got %s.", $this->presenter->presentValue($arguments[0]))); }
function let(PresenterInterface $presenter) { $presenter->presentValue(Argument::any())->will(function ($subject) { if (is_array($subject[0])) { return 'array'; } if (is_object($subject[0])) { return 'object'; } return $subject[0]; }); $presenter->presentString(Argument::any())->willReturnArgument(); $this->beConstructedWith($presenter); }
/** * @param string $name * @param mixed $subject * @param array $arguments * * @return FailureException */ protected function getNegativeFailureException($name, $subject, array $arguments) { return new FailureException(sprintf('Did not expect %s relationship on %s but got %s', $this->presenter->presentString($arguments[0]), $this->presenter->presentString($arguments[1]), $this->presenter->presentValue($subject))); }
/** * @param string $name * @param mixed $subject * @param array $arguments * * @return FailureException */ protected function getNegativeFailureException($name, $subject, array $arguments) { return new FailureException(sprintf('Did not expect %s, but got one.', $this->presenter->presentValue($subject))); }
function let(PresenterInterface $presenter) { $presenter->presentValue(Argument::any())->willReturn('countable'); $presenter->presentString(Argument::any())->willReturnArgument(); $this->beConstructedWith($presenter); }
/** * @param string $name * @param mixed $subject * @param array $arguments * * @return FailureException */ protected function getNegativeFailureException($name, $subject, array $arguments) { return new FailureException(sprintf('Expected %s not to be odd, but it is.', $this->presenter->presentValue($subject))); }
/** * @param string $name * @param mixed $subject * @param array $arguments * * @return FailureException */ protected function getNegativeFailureException($name, $subject, array $arguments) { return new FailureException(sprintf('Expected %s not to contain %s, but it does.', $this->presenter->presentValue($subject), $this->presenter->presentValue($arguments[0]))); }
function let(PresenterInterface $presenter) { $presenter->presentValue(Argument::any())->willReturn('val1', 'val2'); $this->beConstructedWith($presenter); }
function let(Unwrapper $unwrapper, PresenterInterface $presenter) { $unwrapper->unwrapAll(Argument::any())->willReturnArgument(); $presenter->presentValue(Argument::any())->willReturn('val1', 'val2'); $this->beConstructedWith($unwrapper, $presenter); }
/** * @param string $name * @param mixed $subject * @param array $arguments * * @return FailureException */ protected function getNegativeFailureException($name, $subject, array $arguments) { return new FailureException(sprintf('%s not expected to %s(%s), but it did.', $this->presenter->presentValue($subject), $this->presenter->presentString($name), implode(', ', array_map(array($this->presenter, 'presentValue'), $arguments)))); }
/** * @param mixed $subject * * @return SubjectException */ private function cantUseAsArray($subject) { return new SubjectException(sprintf('Can not use %s as array.', $this->presenter->presentValue($subject))); }
/** * @param string $name * @param mixed $subject * @param array $arguments * * @return FailureException */ protected function getNegativeFailureException($name, $subject, array $arguments) { return new FailureException(sprintf('Expected %s not to have %s items, but got it.', $this->presenter->presentValue($subject), $this->presenter->presentString(intval($arguments[0])))); }
/** * @param callable $callable * @param Boolean $expectedBool * @param Boolean $result * * @return FailureException */ private function getFailureExceptionFor($callable, $expectedBool, $result) { return new FailureException(sprintf("Expected %s to return %s, but got %s.", $this->presenter->presentValue($callable), $this->presenter->presentValue($expectedBool), $this->presenter->presentValue($result))); }