mirror of
https://github.com/pestphp/pest.git
synced 2026-03-09 01:07:23 +01:00
Handles tests where a static closure is provided
This commit is contained in:
16
src/Exceptions/TestClosureMustNotBeStatic.php
Normal file
16
src/Exceptions/TestClosureMustNotBeStatic.php
Normal file
@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Pest\Exceptions;
|
||||
|
||||
use NunoMaduro\Collision\Contracts\RenderlessEditor;
|
||||
use NunoMaduro\Collision\Contracts\RenderlessTrace;
|
||||
use Symfony\Component\Console\Exception\ExceptionInterface;
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
final class TestClosureMustNotBeStatic extends \InvalidArgumentException implements ExceptionInterface, RenderlessEditor, RenderlessTrace
|
||||
{
|
||||
}
|
||||
@ -4,6 +4,7 @@ declare(strict_types=1);
|
||||
|
||||
namespace Pest\Factories;
|
||||
|
||||
use Laravel\SerializableClosure\Support\ReflectionClosure;
|
||||
use ParseError;
|
||||
use Pest\Concerns;
|
||||
use Pest\Contracts\AddsAnnotations;
|
||||
@ -11,6 +12,7 @@ use Pest\Contracts\HasPrintableTestCaseName;
|
||||
use Pest\Exceptions\DatasetMissing;
|
||||
use Pest\Exceptions\ShouldNotHappen;
|
||||
use Pest\Exceptions\TestAlreadyExist;
|
||||
use Pest\Exceptions\TestClosureMustNotBeStatic;
|
||||
use Pest\Exceptions\TestDescriptionMissing;
|
||||
use Pest\Factories\Concerns\HigherOrderable;
|
||||
use Pest\Support\Reflection;
|
||||
@ -216,6 +218,13 @@ final class TestCaseFactory
|
||||
throw new TestAlreadyExist($method->filename, $method->description);
|
||||
}
|
||||
|
||||
if (
|
||||
$method->closure instanceof \Closure &&
|
||||
(new ReflectionClosure($method->closure))->isStatic()
|
||||
) {
|
||||
throw new TestClosureMustNotBeStatic("The test `$method->description` closure must not be static in $method->filename.");
|
||||
}
|
||||
|
||||
if (! $method->receivesArguments()) {
|
||||
if (! $method->closure instanceof \Closure) {
|
||||
throw ShouldNotHappen::fromMessage('The test closure may not be empty.');
|
||||
|
||||
@ -90,11 +90,6 @@ final class TestCaseMethodFactory
|
||||
throw ShouldNotHappen::fromMessage('Description can not be empty.');
|
||||
}
|
||||
|
||||
if (($reflection = new ReflectionClosure($this->closure))->isStatic()) {
|
||||
$fileAndLine = $reflection->getFileName() . ':' . $reflection->getStartLine();
|
||||
throw ShouldNotHappen::fromMessage("The test `$this->description` closure must not be static in $fileAndLine.");
|
||||
}
|
||||
|
||||
$closure = $this->closure;
|
||||
|
||||
$testCase = TestSuite::getInstance()->tests->get($this->filename);
|
||||
|
||||
Reference in New Issue
Block a user