mirror of
https://github.com/pestphp/pest.git
synced 2026-03-06 07:47:22 +01:00
feat(presets): reworks code
This commit is contained in:
@ -5,21 +5,27 @@ declare(strict_types=1);
|
||||
namespace Pest\ArchPresets;
|
||||
|
||||
use Pest\Arch\Contracts\ArchExpectation;
|
||||
use Pest\Expectation;
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
abstract class AbstractPreset
|
||||
{
|
||||
/**
|
||||
* The expectations.
|
||||
*
|
||||
* @var array<int, ArchExpectation>
|
||||
*/
|
||||
protected array $expectations = [];
|
||||
|
||||
/**
|
||||
* Creates a new preset instance.
|
||||
*
|
||||
* @param array<int, string> $userNamespaces
|
||||
* @param array<int, ArchExpectation> $expectations
|
||||
*/
|
||||
final public function __construct(// @phpstan-ignore-line
|
||||
protected array $userNamespaces,
|
||||
protected array $expectations = [],
|
||||
final public function __construct(
|
||||
private readonly array $userNamespaces,
|
||||
) {
|
||||
//
|
||||
}
|
||||
@ -44,6 +50,20 @@ abstract class AbstractPreset
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Runs the given callback for each namespace.
|
||||
*
|
||||
* @param callable(Expectation<string|null>): ArchExpectation ...$callbacks
|
||||
*/
|
||||
final public function eachUserNamespace(callable ...$callbacks): void
|
||||
{
|
||||
foreach ($this->userNamespaces as $namespace) {
|
||||
foreach ($callbacks as $callback) {
|
||||
$this->expectations[] = $callback(expect($namespace));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Flushes the expectations.
|
||||
*/
|
||||
|
||||
@ -7,7 +7,7 @@ namespace Pest\ArchPresets;
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
final class Base extends AbstractPreset
|
||||
final class Php extends AbstractPreset
|
||||
{
|
||||
/**
|
||||
* Executes the arch preset.
|
||||
25
src/ArchPresets/Relaxed.php
Normal file
25
src/ArchPresets/Relaxed.php
Normal file
@ -0,0 +1,25 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Pest\ArchPresets;
|
||||
|
||||
use Pest\Arch\Contracts\ArchExpectation;
|
||||
use Pest\Expectation;
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
final class Relaxed extends AbstractPreset
|
||||
{
|
||||
/**
|
||||
* Executes the arch preset.
|
||||
*/
|
||||
public function execute(): void
|
||||
{
|
||||
$this->eachUserNamespace(
|
||||
fn (Expectation $namespace): ArchExpectation => $namespace->not->toUseStrictTypes(),
|
||||
fn (Expectation $namespace): ArchExpectation => $namespace->classes()->not->toBeFinal(),
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -4,6 +4,9 @@ declare(strict_types=1);
|
||||
|
||||
namespace Pest\ArchPresets;
|
||||
|
||||
use Pest\Arch\Contracts\ArchExpectation;
|
||||
use Pest\Expectation;
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
@ -14,6 +17,10 @@ final class Security extends AbstractPreset
|
||||
*/
|
||||
public function execute(): void
|
||||
{
|
||||
$this->eachUserNamespace(
|
||||
fn (Expectation $namespace): ArchExpectation => $namespace->not->toHaveFileSystemPermissions('0777'),
|
||||
);
|
||||
|
||||
$this->expectations[] = expect([
|
||||
'md5',
|
||||
'sha1',
|
||||
@ -37,11 +44,5 @@ final class Security extends AbstractPreset
|
||||
'dl',
|
||||
'assert',
|
||||
])->not->toBeUsed();
|
||||
|
||||
foreach ($this->userNamespaces as $namespace) {
|
||||
$this->expectations[] = expect($namespace)
|
||||
->not
|
||||
->toHaveFileSystemPermissions('0777');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -4,6 +4,9 @@ declare(strict_types=1);
|
||||
|
||||
namespace Pest\ArchPresets;
|
||||
|
||||
use Pest\Arch\Contracts\ArchExpectation;
|
||||
use Pest\Expectation;
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
@ -14,14 +17,15 @@ final class Strict extends AbstractPreset
|
||||
*/
|
||||
public function execute(): void
|
||||
{
|
||||
$this->eachUserNamespace(
|
||||
fn (Expectation $namespace): ArchExpectation => $namespace->toUseStrictTypes(),
|
||||
fn (Expectation $namespace): ArchExpectation => $namespace->classes()->toBeFinal(),
|
||||
fn (Expectation $namespace): ArchExpectation => $namespace->classes()->not->toBeAbstract(),
|
||||
);
|
||||
|
||||
$this->expectations[] = expect([
|
||||
'sleep',
|
||||
'usleep',
|
||||
])->not->toBeUsed();
|
||||
|
||||
foreach ($this->userNamespaces as $namespace) {
|
||||
$this->expectations[] = expect($namespace)
|
||||
->toUseStrictTypes();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -355,11 +355,11 @@ final class TestCall
|
||||
/**
|
||||
* Sets the test as "todo".
|
||||
*/
|
||||
public function todo(
|
||||
array|string $note = null,
|
||||
array|string $issue = null,
|
||||
array|string $assignee = null,
|
||||
array|string $pr = null,
|
||||
public function todo(// @phpstan-ignore-line
|
||||
array|string|null $note = null,
|
||||
array|string|null $assignee = null,
|
||||
array|string|null $issue = null,
|
||||
array|string|null $pr = null,
|
||||
): self {
|
||||
$this->skip('__TODO__');
|
||||
|
||||
@ -412,6 +412,8 @@ final class TestCall
|
||||
|
||||
/**
|
||||
* Sets the test assignee(s).
|
||||
*
|
||||
* @param array<int, string>|string $assignee
|
||||
*/
|
||||
public function assignee(array|string $assignee): self
|
||||
{
|
||||
|
||||
@ -405,6 +405,7 @@ final class WrapperRunner implements RunnerInterface
|
||||
}
|
||||
|
||||
$testSuite = (new LogMerger)->merge($this->junitFiles);
|
||||
assert($testSuite instanceof \ParaTest\JUnit\TestSuite);
|
||||
(new Writer)->write(
|
||||
$testSuite,
|
||||
$this->options->configuration->logfileJunit(),
|
||||
|
||||
@ -6,8 +6,8 @@ namespace Pest;
|
||||
|
||||
use Pest\Arch\Support\Composer;
|
||||
use Pest\ArchPresets\AbstractPreset;
|
||||
use Pest\ArchPresets\Base;
|
||||
use Pest\ArchPresets\Laravel;
|
||||
use Pest\ArchPresets\Php;
|
||||
use Pest\ArchPresets\Security;
|
||||
use Pest\ArchPresets\Strict;
|
||||
use Pest\PendingCalls\TestCall;
|
||||
@ -34,11 +34,11 @@ final class Preset
|
||||
}
|
||||
|
||||
/**
|
||||
* Uses the Pest base preset and returns the test call instance.
|
||||
* Uses the Pest php preset and returns the test call instance.
|
||||
*/
|
||||
public function base(): Base
|
||||
public function php(): Php
|
||||
{
|
||||
return $this->executePreset(new Base($this->baseNamespaces()));
|
||||
return $this->executePreset(new Php($this->baseNamespaces()));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -22,6 +22,6 @@ final readonly class AssigneeTestCaseFilter implements TestCaseMethodFilter
|
||||
*/
|
||||
public function accept(TestCaseMethodFactory $factory): bool
|
||||
{
|
||||
return array_filter($factory->assignees, fn ($assignee): bool => str_starts_with($assignee, $this->assignee)) !== [];
|
||||
return array_filter($factory->assignees, fn (string $assignee): bool => str_starts_with($assignee, $this->assignee)) !== [];
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
|
||||
use Pest\Expectation;
|
||||
|
||||
arch()->preset()->base()->ignoring([
|
||||
arch()->preset()->php()->ignoring([
|
||||
Expectation::class,
|
||||
'debug_backtrace',
|
||||
'var_export',
|
||||
|
||||
Reference in New Issue
Block a user