mirror of
https://github.com/pestphp/pest.git
synced 2026-03-07 00:07:22 +01:00
feat(presets): reworks code
This commit is contained in:
@ -5,21 +5,27 @@ declare(strict_types=1);
|
|||||||
namespace Pest\ArchPresets;
|
namespace Pest\ArchPresets;
|
||||||
|
|
||||||
use Pest\Arch\Contracts\ArchExpectation;
|
use Pest\Arch\Contracts\ArchExpectation;
|
||||||
|
use Pest\Expectation;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @internal
|
* @internal
|
||||||
*/
|
*/
|
||||||
abstract class AbstractPreset
|
abstract class AbstractPreset
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* The expectations.
|
||||||
|
*
|
||||||
|
* @var array<int, ArchExpectation>
|
||||||
|
*/
|
||||||
|
protected array $expectations = [];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new preset instance.
|
* Creates a new preset instance.
|
||||||
*
|
*
|
||||||
* @param array<int, string> $userNamespaces
|
* @param array<int, string> $userNamespaces
|
||||||
* @param array<int, ArchExpectation> $expectations
|
|
||||||
*/
|
*/
|
||||||
final public function __construct(// @phpstan-ignore-line
|
final public function __construct(
|
||||||
protected array $userNamespaces,
|
private readonly array $userNamespaces,
|
||||||
protected array $expectations = [],
|
|
||||||
) {
|
) {
|
||||||
//
|
//
|
||||||
}
|
}
|
||||||
@ -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.
|
* Flushes the expectations.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -7,7 +7,7 @@ namespace Pest\ArchPresets;
|
|||||||
/**
|
/**
|
||||||
* @internal
|
* @internal
|
||||||
*/
|
*/
|
||||||
final class Base extends AbstractPreset
|
final class Php extends AbstractPreset
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Executes the arch preset.
|
* 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;
|
namespace Pest\ArchPresets;
|
||||||
|
|
||||||
|
use Pest\Arch\Contracts\ArchExpectation;
|
||||||
|
use Pest\Expectation;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @internal
|
* @internal
|
||||||
*/
|
*/
|
||||||
@ -14,6 +17,10 @@ final class Security extends AbstractPreset
|
|||||||
*/
|
*/
|
||||||
public function execute(): void
|
public function execute(): void
|
||||||
{
|
{
|
||||||
|
$this->eachUserNamespace(
|
||||||
|
fn (Expectation $namespace): ArchExpectation => $namespace->not->toHaveFileSystemPermissions('0777'),
|
||||||
|
);
|
||||||
|
|
||||||
$this->expectations[] = expect([
|
$this->expectations[] = expect([
|
||||||
'md5',
|
'md5',
|
||||||
'sha1',
|
'sha1',
|
||||||
@ -37,11 +44,5 @@ final class Security extends AbstractPreset
|
|||||||
'dl',
|
'dl',
|
||||||
'assert',
|
'assert',
|
||||||
])->not->toBeUsed();
|
])->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;
|
namespace Pest\ArchPresets;
|
||||||
|
|
||||||
|
use Pest\Arch\Contracts\ArchExpectation;
|
||||||
|
use Pest\Expectation;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @internal
|
* @internal
|
||||||
*/
|
*/
|
||||||
@ -14,14 +17,15 @@ final class Strict extends AbstractPreset
|
|||||||
*/
|
*/
|
||||||
public function execute(): void
|
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([
|
$this->expectations[] = expect([
|
||||||
'sleep',
|
'sleep',
|
||||||
'usleep',
|
'usleep',
|
||||||
])->not->toBeUsed();
|
])->not->toBeUsed();
|
||||||
|
|
||||||
foreach ($this->userNamespaces as $namespace) {
|
|
||||||
$this->expectations[] = expect($namespace)
|
|
||||||
->toUseStrictTypes();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -355,11 +355,11 @@ final class TestCall
|
|||||||
/**
|
/**
|
||||||
* Sets the test as "todo".
|
* Sets the test as "todo".
|
||||||
*/
|
*/
|
||||||
public function todo(
|
public function todo(// @phpstan-ignore-line
|
||||||
array|string $note = null,
|
array|string|null $note = null,
|
||||||
array|string $issue = null,
|
array|string|null $assignee = null,
|
||||||
array|string $assignee = null,
|
array|string|null $issue = null,
|
||||||
array|string $pr = null,
|
array|string|null $pr = null,
|
||||||
): self {
|
): self {
|
||||||
$this->skip('__TODO__');
|
$this->skip('__TODO__');
|
||||||
|
|
||||||
@ -412,6 +412,8 @@ final class TestCall
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the test assignee(s).
|
* Sets the test assignee(s).
|
||||||
|
*
|
||||||
|
* @param array<int, string>|string $assignee
|
||||||
*/
|
*/
|
||||||
public function assignee(array|string $assignee): self
|
public function assignee(array|string $assignee): self
|
||||||
{
|
{
|
||||||
|
|||||||
@ -405,6 +405,7 @@ final class WrapperRunner implements RunnerInterface
|
|||||||
}
|
}
|
||||||
|
|
||||||
$testSuite = (new LogMerger)->merge($this->junitFiles);
|
$testSuite = (new LogMerger)->merge($this->junitFiles);
|
||||||
|
assert($testSuite instanceof \ParaTest\JUnit\TestSuite);
|
||||||
(new Writer)->write(
|
(new Writer)->write(
|
||||||
$testSuite,
|
$testSuite,
|
||||||
$this->options->configuration->logfileJunit(),
|
$this->options->configuration->logfileJunit(),
|
||||||
|
|||||||
@ -6,8 +6,8 @@ namespace Pest;
|
|||||||
|
|
||||||
use Pest\Arch\Support\Composer;
|
use Pest\Arch\Support\Composer;
|
||||||
use Pest\ArchPresets\AbstractPreset;
|
use Pest\ArchPresets\AbstractPreset;
|
||||||
use Pest\ArchPresets\Base;
|
|
||||||
use Pest\ArchPresets\Laravel;
|
use Pest\ArchPresets\Laravel;
|
||||||
|
use Pest\ArchPresets\Php;
|
||||||
use Pest\ArchPresets\Security;
|
use Pest\ArchPresets\Security;
|
||||||
use Pest\ArchPresets\Strict;
|
use Pest\ArchPresets\Strict;
|
||||||
use Pest\PendingCalls\TestCall;
|
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
|
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;
|
use Pest\Expectation;
|
||||||
|
|
||||||
arch()->preset()->base()->ignoring([
|
arch()->preset()->php()->ignoring([
|
||||||
Expectation::class,
|
Expectation::class,
|
||||||
'debug_backtrace',
|
'debug_backtrace',
|
||||||
'var_export',
|
'var_export',
|
||||||
|
|||||||
Reference in New Issue
Block a user