mirror of
https://github.com/pestphp/pest.git
synced 2026-03-06 07:47:22 +01:00
Reworks
This commit is contained in:
@ -465,19 +465,18 @@ final class Expectation
|
|||||||
/**
|
/**
|
||||||
* Asserts that the given expectation target have all methods documented.
|
* Asserts that the given expectation target have all methods documented.
|
||||||
*/
|
*/
|
||||||
public function toHaveAllMethodsDocumented(): ArchExpectation
|
public function toHaveMethodsDocumented(): ArchExpectation
|
||||||
{
|
{
|
||||||
return Targeted::make(
|
return Targeted::make(
|
||||||
$this,
|
$this,
|
||||||
fn (ObjectDescription $object): bool => isset($object->reflectionClass) === false
|
fn (ObjectDescription $object): bool => isset($object->reflectionClass) === false
|
||||||
|| array_filter(
|
|| array_filter(
|
||||||
$object->reflectionClass->getMethods(),
|
$object->reflectionClass->getMethods(),
|
||||||
fn (ReflectionMethod $method): bool =>
|
fn (ReflectionMethod $method): bool => (enum_exists($object->name) === false || in_array($method->name, ['from', 'tryFrom', 'cases'], true) === false)
|
||||||
(enum_exists($object->name) === false || in_array($method->name, ['from', 'tryFrom', 'cases'], true) === false)
|
&& realpath($method->getFileName() ?: '/') === realpath($object->path) // @phpstan-ignore-line
|
||||||
&& realpath($method->getFileName() ?: '/') === realpath($object->path)
|
|
||||||
&& $method->getDocComment() === false,
|
&& $method->getDocComment() === false,
|
||||||
) === [],
|
) === [],
|
||||||
'to have all methods documented',
|
'to have methods with documentation / annotations',
|
||||||
FileLineFinder::where(fn (string $line): bool => str_contains($line, 'class'))
|
FileLineFinder::where(fn (string $line): bool => str_contains($line, 'class'))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -485,20 +484,19 @@ final class Expectation
|
|||||||
/**
|
/**
|
||||||
* Asserts that the given expectation target have all properties documented.
|
* Asserts that the given expectation target have all properties documented.
|
||||||
*/
|
*/
|
||||||
public function toHaveAllPropertiesDocumented(): ArchExpectation
|
public function toHavePropertiesDocumented(): ArchExpectation
|
||||||
{
|
{
|
||||||
return Targeted::make(
|
return Targeted::make(
|
||||||
$this,
|
$this,
|
||||||
fn (ObjectDescription $object): bool => isset($object->reflectionClass) === false
|
fn (ObjectDescription $object): bool => isset($object->reflectionClass) === false
|
||||||
|| array_filter(
|
|| array_filter(
|
||||||
$object->reflectionClass->getProperties(),
|
$object->reflectionClass->getProperties(),
|
||||||
fn (ReflectionProperty $property): bool =>
|
fn (ReflectionProperty $property): bool => (enum_exists($object->name) === false || in_array($property->name, ['value', 'name'], true) === false)
|
||||||
(enum_exists($object->name) === false || in_array($property->name, ['value', 'name'], true) === false)
|
&& realpath($property->getDeclaringClass()->getFileName() ?: '/') === realpath($object->path) // @phpstan-ignore-line
|
||||||
&& realpath($property->getDeclaringClass()->getFileName() ?: '/') === realpath($object->path)
|
|
||||||
&& $property->isPromoted() === false
|
&& $property->isPromoted() === false
|
||||||
&& $property->getDocComment() === false,
|
&& $property->getDocComment() === false,
|
||||||
) === [],
|
) === [],
|
||||||
'to have all properties documented',
|
'to have properties with documentation / annotations',
|
||||||
FileLineFinder::where(fn (string $line): bool => str_contains($line, 'class'))
|
FileLineFinder::where(fn (string $line): bool => str_contains($line, 'class'))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -21,6 +21,8 @@ use Pest\Support\Exporter;
|
|||||||
use PHPUnit\Architecture\Elements\ObjectDescription;
|
use PHPUnit\Architecture\Elements\ObjectDescription;
|
||||||
use PHPUnit\Framework\AssertionFailedError;
|
use PHPUnit\Framework\AssertionFailedError;
|
||||||
use PHPUnit\Framework\ExpectationFailedException;
|
use PHPUnit\Framework\ExpectationFailedException;
|
||||||
|
use ReflectionMethod;
|
||||||
|
use ReflectionProperty;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @internal
|
* @internal
|
||||||
@ -99,17 +101,40 @@ final class OppositeExpectation
|
|||||||
/**
|
/**
|
||||||
* Not supported.
|
* Not supported.
|
||||||
*/
|
*/
|
||||||
public function toHaveAllMethodsDocumented(): ArchExpectation
|
public function toHaveMethodsDocumented(): ArchExpectation
|
||||||
{
|
{
|
||||||
throw InvalidExpectation::fromMethods(['not', 'toHaveAllMethodsDocumented']);
|
return Targeted::make(
|
||||||
|
$this->original,
|
||||||
|
fn (ObjectDescription $object): bool => isset($object->reflectionClass) === false
|
||||||
|
|| array_filter(
|
||||||
|
$object->reflectionClass->getMethods(),
|
||||||
|
fn (ReflectionMethod $method): bool => (enum_exists($object->name) === false || in_array($method->name, ['from', 'tryFrom', 'cases'], true) === false)
|
||||||
|
&& realpath($method->getFileName() ?: '/') === realpath($object->path) // @phpstan-ignore-line
|
||||||
|
&& $method->getDocComment() !== false,
|
||||||
|
) === [],
|
||||||
|
'to have methods without documentation / annotations',
|
||||||
|
FileLineFinder::where(fn (string $line): bool => str_contains($line, 'class'))
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Not supported.
|
* Not supported.
|
||||||
*/
|
*/
|
||||||
public function toHaveAllPropertiesDocumented(): ArchExpectation
|
public function toHavePropertiesDocumented(): ArchExpectation
|
||||||
{
|
{
|
||||||
throw InvalidExpectation::fromMethods(['not', 'toHaveAllPropertiesDocumented']);
|
return Targeted::make(
|
||||||
|
$this->original,
|
||||||
|
fn (ObjectDescription $object): bool => isset($object->reflectionClass) === false
|
||||||
|
|| array_filter(
|
||||||
|
$object->reflectionClass->getProperties(),
|
||||||
|
fn (ReflectionProperty $property): bool => (enum_exists($object->name) === false || in_array($property->name, ['value', 'name'], true) === false)
|
||||||
|
&& realpath($property->getDeclaringClass()->getFileName() ?: '/') === realpath($object->path) // @phpstan-ignore-line
|
||||||
|
&& $property->isPromoted() === false
|
||||||
|
&& $property->getDocComment() !== false,
|
||||||
|
) === [],
|
||||||
|
'to have properties without documentation / annotations',
|
||||||
|
FileLineFinder::where(fn (string $line): bool => str_contains($line, 'class'))
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -715,14 +715,6 @@
|
|||||||
✓ failures with custom message
|
✓ failures with custom message
|
||||||
✓ not failures
|
✓ not failures
|
||||||
|
|
||||||
PASS Tests\Features\Expect\toHaveAllMethodsDocumented
|
|
||||||
✓ it passes
|
|
||||||
✓ it fails
|
|
||||||
|
|
||||||
PASS Tests\Features\Expect\toHaveAllPropertiesDocumented
|
|
||||||
✓ it passes
|
|
||||||
✓ it fails
|
|
||||||
|
|
||||||
PASS Tests\Features\Expect\toHaveAttribute
|
PASS Tests\Features\Expect\toHaveAttribute
|
||||||
✓ class has attribute
|
✓ class has attribute
|
||||||
✓ opposite class has attribute
|
✓ opposite class has attribute
|
||||||
@ -823,6 +815,11 @@
|
|||||||
✓ failures with custom message
|
✓ failures with custom message
|
||||||
✓ not failures
|
✓ not failures
|
||||||
|
|
||||||
|
PASS Tests\Features\Expect\toHaveMethodsDocumented
|
||||||
|
✓ it passes
|
||||||
|
✓ it fails 1
|
||||||
|
✓ it fails 2
|
||||||
|
|
||||||
PASS Tests\Features\Expect\toHavePrefix
|
PASS Tests\Features\Expect\toHavePrefix
|
||||||
✓ missing prefix
|
✓ missing prefix
|
||||||
✓ has prefix
|
✓ has prefix
|
||||||
@ -835,6 +832,11 @@
|
|||||||
✓ failures with custom message
|
✓ failures with custom message
|
||||||
✓ not failures
|
✓ not failures
|
||||||
|
|
||||||
|
PASS Tests\Features\Expect\toHavePropertiesDocumented
|
||||||
|
✓ it passes
|
||||||
|
✓ it fails 1
|
||||||
|
✓ it fails 2
|
||||||
|
|
||||||
PASS Tests\Features\Expect\toHaveProperty
|
PASS Tests\Features\Expect\toHaveProperty
|
||||||
✓ pass
|
✓ pass
|
||||||
✓ failures
|
✓ failures
|
||||||
@ -1533,4 +1535,4 @@
|
|||||||
WARN Tests\Visual\Version
|
WARN Tests\Visual\Version
|
||||||
- visual snapshot of help command output
|
- visual snapshot of help command output
|
||||||
|
|
||||||
Tests: 2 deprecated, 4 warnings, 5 incomplete, 2 notices, 13 todos, 24 skipped, 1072 passed (2620 assertions)
|
Tests: 2 deprecated, 4 warnings, 5 incomplete, 2 notices, 13 todos, 24 skipped, 1074 passed (2626 assertions)
|
||||||
@ -1,13 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
use Pest\Arch\Exceptions\ArchExpectationFailedException;
|
|
||||||
use Pest\Expectation;
|
|
||||||
use Tests\Fixtures\Inheritance\ExampleTest;
|
|
||||||
|
|
||||||
it('passes', function () {
|
|
||||||
expect(Expectation::class)->toHaveAllMethodsDocumented();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('fails', function () {
|
|
||||||
expect(ExampleTest::class)->toHaveAllMethodsDocumented();
|
|
||||||
})->throws(ArchExpectationFailedException::class);
|
|
||||||
@ -1,13 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
use Pest\Arch\Exceptions\ArchExpectationFailedException;
|
|
||||||
use Pest\Expectation;
|
|
||||||
use Tests\Fixtures\Inheritance\ExampleTest;
|
|
||||||
|
|
||||||
it('passes', function () {
|
|
||||||
expect(Expectation::class)->toHaveAllPropertiesDocumented();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('fails', function () {
|
|
||||||
expect(ExampleTest::class)->toHaveAllPropertiesDocumented();
|
|
||||||
})->throws(ArchExpectationFailedException::class);
|
|
||||||
19
tests/Features/Expect/toHaveMethodsDocumented.php
Normal file
19
tests/Features/Expect/toHaveMethodsDocumented.php
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Pest\Arch\Exceptions\ArchExpectationFailedException;
|
||||||
|
use Pest\Configuration;
|
||||||
|
use Pest\Expectation;
|
||||||
|
use Tests\Fixtures\Inheritance\ExampleTest;
|
||||||
|
|
||||||
|
it('passes', function () {
|
||||||
|
expect(Expectation::class)->toHaveMethodsDocumented()
|
||||||
|
->and(ExampleTest::class)->not->toHaveMethodsDocumented();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('fails 1', function () {
|
||||||
|
expect(ExampleTest::class)->toHaveMethodsDocumented();
|
||||||
|
})->throws(ArchExpectationFailedException::class);
|
||||||
|
|
||||||
|
it('fails 2', function () {
|
||||||
|
expect(Configuration::class)->not->toHaveMethodsDocumented();
|
||||||
|
})->throws(ArchExpectationFailedException::class);
|
||||||
19
tests/Features/Expect/toHavePropertiesDocumented.php
Normal file
19
tests/Features/Expect/toHavePropertiesDocumented.php
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Pest\Arch\Exceptions\ArchExpectationFailedException;
|
||||||
|
use Pest\Expectation;
|
||||||
|
use Pest\Factories\TestCaseFactory;
|
||||||
|
use Tests\Fixtures\Inheritance\ExampleTest;
|
||||||
|
|
||||||
|
it('passes', function () {
|
||||||
|
expect(Expectation::class)->toHavePropertiesDocumented()
|
||||||
|
->and(ExampleTest::class)->not->toHavePropertiesDocumented();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('fails 1', function () {
|
||||||
|
expect(ExampleTest::class)->toHavePropertiesDocumented();
|
||||||
|
})->throws(ArchExpectationFailedException::class);
|
||||||
|
|
||||||
|
it('fails 2', function () {
|
||||||
|
expect(TestCaseFactory::class)->not->toHavePropertiesDocumented();
|
||||||
|
})->throws(ArchExpectationFailedException::class);
|
||||||
@ -16,7 +16,7 @@ $run = function () {
|
|||||||
|
|
||||||
test('parallel', function () use ($run) {
|
test('parallel', function () use ($run) {
|
||||||
expect($run('--exclude-group=integration'))
|
expect($run('--exclude-group=integration'))
|
||||||
->toContain('Tests: 2 deprecated, 4 warnings, 5 incomplete, 2 notices, 13 todos, 19 skipped, 1058 passed (2588 assertions)')
|
->toContain('Tests: 2 deprecated, 4 warnings, 5 incomplete, 2 notices, 13 todos, 19 skipped, 1060 passed (2594 assertions)')
|
||||||
->toContain('Parallel: 3 processes');
|
->toContain('Parallel: 3 processes');
|
||||||
})->skipOnWindows();
|
})->skipOnWindows();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user