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:
Nuno Maduro
2022-03-04 15:27:33 +00:00
committed by GitHub
2 changed files with 32 additions and 4 deletions

View File

@ -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;

View File

@ -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);