mirror of
https://github.com/pestphp/pest.git
synced 2026-03-06 15:57:21 +01:00
Merge pull request #490 from mkohei/feat/add-code-to-the-throws-arg
feat: Add code to the throws arg
This commit is contained in:
@ -45,9 +45,11 @@ final class TestCall
|
|||||||
/**
|
/**
|
||||||
* Asserts that the test throws the given `$exceptionClass` when called.
|
* Asserts that the test throws the given `$exceptionClass` when called.
|
||||||
*/
|
*/
|
||||||
public function throws(string $exception, string $exceptionMessage = null): TestCall
|
public function throws(string|int $exception, string $exceptionMessage = null, int $exceptionCode = null): TestCall
|
||||||
{
|
{
|
||||||
if (class_exists($exception)) {
|
if (is_int($exception)) {
|
||||||
|
$exceptionCode = $exception;
|
||||||
|
} else if (class_exists($exception)) {
|
||||||
$this->testCaseMethod
|
$this->testCaseMethod
|
||||||
->proxies
|
->proxies
|
||||||
->add(Backtrace::file(), Backtrace::line(), 'expectException', [$exception]);
|
->add(Backtrace::file(), Backtrace::line(), 'expectException', [$exception]);
|
||||||
@ -61,6 +63,12 @@ final class TestCall
|
|||||||
->add(Backtrace::file(), Backtrace::line(), 'expectExceptionMessage', [$exceptionMessage]);
|
->add(Backtrace::file(), Backtrace::line(), 'expectExceptionMessage', [$exceptionMessage]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (is_int($exceptionCode)) {
|
||||||
|
$this->testCaseMethod
|
||||||
|
->proxies
|
||||||
|
->add(Backtrace::file(), Backtrace::line(), 'expectExceptionCode', [$exceptionCode]);
|
||||||
|
}
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -69,7 +77,7 @@ final class TestCall
|
|||||||
*
|
*
|
||||||
* @param (callable(): bool)|bool $condition
|
* @param (callable(): bool)|bool $condition
|
||||||
*/
|
*/
|
||||||
public function throwsIf(callable|bool $condition, string $exception, string $exceptionMessage = null): TestCall
|
public function throwsIf(callable|bool $condition, string|int $exception, string $exceptionMessage = null, int $exceptionCode = null): TestCall
|
||||||
{
|
{
|
||||||
$condition = is_callable($condition)
|
$condition = is_callable($condition)
|
||||||
? $condition
|
? $condition
|
||||||
@ -78,7 +86,7 @@ final class TestCall
|
|||||||
};
|
};
|
||||||
|
|
||||||
if ($condition()) {
|
if ($condition()) {
|
||||||
return $this->throws($exception, $exceptionMessage);
|
return $this->throws($exception, $exceptionMessage, $exceptionCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
|
|||||||
@ -14,10 +14,18 @@ it('catch exceptions and messages', function () {
|
|||||||
throw new Exception('Something bad happened');
|
throw new Exception('Something bad happened');
|
||||||
})->throws(Exception::class, 'Something bad happened');
|
})->throws(Exception::class, 'Something bad happened');
|
||||||
|
|
||||||
|
it('catch exceptions, messages and code', function () {
|
||||||
|
throw new Exception('Something bad happened', 1);
|
||||||
|
})->throws(Exception::class, 'Something bad happened', 1);
|
||||||
|
|
||||||
it('can just define the message', function () {
|
it('can just define the message', function () {
|
||||||
throw new Exception('Something bad happened');
|
throw new Exception('Something bad happened');
|
||||||
})->throws('Something bad happened');
|
})->throws('Something bad happened');
|
||||||
|
|
||||||
|
it('can just define the code', function () {
|
||||||
|
throw new Exception('Something bad happened', 1);
|
||||||
|
})->throws(1);
|
||||||
|
|
||||||
it('not catch exceptions if given condition is false', function () {
|
it('not catch exceptions if given condition is false', function () {
|
||||||
$this->assertTrue(true);
|
$this->assertTrue(true);
|
||||||
})->throwsIf(false, Exception::class);
|
})->throwsIf(false, Exception::class);
|
||||||
@ -30,10 +38,22 @@ it('catch exceptions and messages if given condition is true', function () {
|
|||||||
throw new Exception('Something bad happened');
|
throw new Exception('Something bad happened');
|
||||||
})->throwsIf(true, Exception::class, 'Something bad happened');
|
})->throwsIf(true, Exception::class, 'Something bad happened');
|
||||||
|
|
||||||
|
it('catch exceptions, messages and code if given condition is true', function () {
|
||||||
|
throw new Exception('Something bad happened', 1);
|
||||||
|
})->throwsIf(true, Exception::class, 'Something bad happened', 1);
|
||||||
|
|
||||||
it('can just define the message if given condition is true', function () {
|
it('can just define the message if given condition is true', function () {
|
||||||
throw new Exception('Something bad happened');
|
throw new Exception('Something bad happened');
|
||||||
})->throwsIf(true, 'Something bad happened');
|
})->throwsIf(true, 'Something bad happened');
|
||||||
|
|
||||||
|
it('can just define the code if given condition is true', function () {
|
||||||
|
throw new Exception('Something bad happened', 1);
|
||||||
|
})->throwsIf(true, 1);
|
||||||
|
|
||||||
it('can just define the message if given condition is 1', function () {
|
it('can just define the message if given condition is 1', function () {
|
||||||
throw new Exception('Something bad happened');
|
throw new Exception('Something bad happened');
|
||||||
})->throwsIf(1, 'Something bad happened');
|
})->throwsIf(1, 'Something bad happened');
|
||||||
|
|
||||||
|
it('can just define the code if given condition is 1', function () {
|
||||||
|
throw new Exception('Something bad happened', 1);
|
||||||
|
})->throwsIf(1, 1);
|
||||||
|
|||||||
Reference in New Issue
Block a user