Compare commits

...

5 Commits

Author SHA1 Message Date
4de70da0a0 release: v2.10.1 2023-07-31 11:58:13 +01:00
6820d8b7aa Merge pull request #888 from pestphp/feat_opposite_suffix_prefix
feat(arch): Adds support for opposite expectations of `toHavePrefix` and `toHaveSuffix`
2023-07-31 10:48:58 +00:00
6886558ed1 feat(arch): Adds support for opposite expectations of toHavePrefix and toHaveSuffix. 2023-07-31 11:28:53 +01:00
b795a92840 docs: updates changelog 2023-07-31 00:11:24 +01:00
2e622f6fd4 chore: fixes type checkign 2023-07-31 00:06:36 +01:00
15 changed files with 137 additions and 14 deletions

View File

@ -2,6 +2,28 @@
## Unreleased
## [v2.10.1 (2023-07-31)](https://github.com/pestphp/pest/compare/v2.10.0...v2.10.1)
### Fixed
- `not->toHaveSuffix` and `toHavePrefix` expectations ([#888](https://github.com/pestphp/pest/pull/888))
## [v2.10.0 (2023-07-31)](https://github.com/pestphp/pest/compare/v2.9.5...v2.10.0)
### Added
- `repeat` feature ([f3f35a2](https://github.com/pestphp/pest/commit/f3f35a2ed119f63eefd323a8c66d3387e908df3f))
### Fixed
- `-v` option ([86a6b32](https://github.com/pestphp/pest/commit/86a6b3271518742dc39761228687a5107551d279))
## [v2.9.5 (2023-07-22)](https://github.com/pestphp/pest/compare/v2.9.4...v2.9.5)
### Fixed
- Assertions count on arch expectations ([632ffc2](https://github.com/pestphp/pest/commit/632ffc2f8e1fe45f739b12b818426ae14700079e))
## [v2.9.4 (2023-07-22)](https://github.com/pestphp/pest/compare/v2.9.3...v2.9.4)
### Fixed

View File

@ -42,6 +42,7 @@
"psr-4": {
"Tests\\Fixtures\\Covers\\": "tests/Fixtures/Covers",
"Tests\\Fixtures\\Inheritance\\": "tests/Fixtures/Inheritance",
"Tests\\Fixtures\\Arch\\": "tests/Fixtures/Arch",
"Tests\\": "tests/PHPUnit/"
},
"files": [

View File

@ -430,7 +430,7 @@ final class Expectation
{
return Targeted::make(
$this,
fn (ObjectDescription $object): bool => ! enum_exists($object->name) && $object->reflectionClass->isReadOnly(),
fn (ObjectDescription $object): bool => ! enum_exists($object->name) && $object->reflectionClass->isReadOnly() && assert(true), // @phpstan-ignore-line
'to be readonly',
FileLineFinder::where(fn (string $line): bool => str_contains($line, 'class')),
);
@ -595,12 +595,12 @@ final class Expectation
/**
* Asserts that the given expectation target to have the given suffix.
*/
public function toHavePrefix(string $suffix): ArchExpectation
public function toHavePrefix(string $prefix): ArchExpectation
{
return Targeted::make(
$this,
fn (ObjectDescription $object): bool => str_starts_with($object->reflectionClass->getName(), $suffix),
"to have prefix '{$suffix}'",
fn (ObjectDescription $object): bool => str_starts_with($object->reflectionClass->getShortName(), $prefix),
"to have prefix '{$prefix}'",
FileLineFinder::where(fn (string $line): bool => str_contains($line, 'class')),
);
}

View File

@ -109,7 +109,7 @@ final class OppositeExpectation
{
return Targeted::make(
$this->original,
fn (ObjectDescription $object): bool => ! enum_exists($object->name) && ! $object->reflectionClass->isReadOnly(),
fn (ObjectDescription $object): bool => ! enum_exists($object->name) && ! $object->reflectionClass->isReadOnly() && assert(true), // @phpstan-ignore-line
'not to be readonly',
FileLineFinder::where(fn (string $line): bool => str_contains($line, 'class')),
);
@ -291,17 +291,27 @@ final class OppositeExpectation
/**
* Not supported.
*/
public function toHavePrefix(string $suffix): never
public function toHavePrefix(string $prefix): ArchExpectation
{
throw InvalidExpectation::fromMethods(['not', 'toHavePrefix']);
return Targeted::make(
$this->original,
fn (ObjectDescription $object): bool => ! str_starts_with($object->reflectionClass->getShortName(), $prefix),
"not to have prefix '{$prefix}'",
FileLineFinder::where(fn (string $line): bool => str_contains($line, 'class')),
);
}
/**
* Not supported.
*/
public function toHaveSuffix(string $suffix): never
public function toHaveSuffix(string $suffix): ArchExpectation
{
throw InvalidExpectation::fromMethods(['not', 'toHaveSuffix']);
return Targeted::make(
$this->original,
fn (ObjectDescription $object): bool => ! str_ends_with($object->reflectionClass->getName(), $suffix),
"not to have suffix '{$suffix}'",
FileLineFinder::where(fn (string $line): bool => str_contains($line, 'class')),
);
}
/**

View File

@ -6,7 +6,7 @@ namespace Pest;
function version(): string
{
return '2.10.0';
return '2.10.1';
}
function testDirectory(string $file = ''): string

View File

@ -1,5 +1,5 @@
Pest Testing Framework 2.10.0.
Pest Testing Framework 2.10.1.
USAGE: pest <file> [options]

View File

@ -1,3 +1,3 @@
Pest Testing Framework 2.10.0.
Pest Testing Framework 2.10.1.

View File

@ -629,6 +629,12 @@
✓ failures with custom message
✓ not failures
PASS Tests\Features\Expect\toHavePrefix
✓ missing prefix
✓ has prefix
✓ opposite missing prefix
✓ opposite has prefix
PASS Tests\Features\Expect\toHaveProperties
✓ pass
✓ failures
@ -642,6 +648,12 @@
✓ failures with message and Any matcher
✓ not failures
PASS Tests\Features\Expect\toHaveSuffix
✓ missing suffix
✓ has suffix
✓ opposite missing suffix
✓ opposite has suffix
PASS Tests\Features\Expect\toMatch
✓ pass
✓ failures
@ -1174,4 +1186,4 @@
WARN Tests\Visual\Version
- visual snapshot of help command output
Tests: 2 deprecated, 4 warnings, 5 incomplete, 2 notices, 13 todos, 19 skipped, 830 passed (1927 assertions)
Tests: 2 deprecated, 4 warnings, 5 incomplete, 2 notices, 13 todos, 19 skipped, 838 passed (1939 assertions)

View File

@ -0,0 +1,21 @@
<?php
use Pest\Arch\Exceptions\ArchExpectationFailedException;
test('missing prefix')
->throws(ArchExpectationFailedException::class)
->expect('Tests\\Fixtures\\Arch\\ToHavePrefix\\HasNoPrefix')
->toHavePrefix('Prefix');
test('has prefix')
->expect('Tests\\Fixtures\\Arch\\ToHavePrefix\\HasPrefix')
->toHavePrefix('Prefix');
test('opposite missing prefix')
->throws(ArchExpectationFailedException::class)
->expect('Tests\\Fixtures\\Arch\\ToHavePrefix\\HasPrefix')
->not->toHavePrefix('Prefix');
test('opposite has prefix')
->expect('Tests\\Fixtures\\Arch\\ToHavePrefix\\HasNoPrefix')
->not->toHavePrefix('Prefix');

View File

@ -0,0 +1,21 @@
<?php
use Pest\Arch\Exceptions\ArchExpectationFailedException;
test('missing suffix')
->throws(ArchExpectationFailedException::class)
->expect('Tests\\Fixtures\\Arch\\ToHaveSuffix\\HasNoSuffix')
->toHaveSuffix('Suffix');
test('has suffix')
->expect('Tests\\Fixtures\\Arch\\ToHaveSuffix\\HasSuffix')
->toHaveSuffix('Suffix');
test('opposite missing suffix')
->throws(ArchExpectationFailedException::class)
->expect('Tests\\Fixtures\\Arch\\ToHaveSuffix\\HasSuffix')
->not->toHaveSuffix('Suffix');
test('opposite has suffix')
->expect('Tests\\Fixtures\\Arch\\ToHaveSuffix\\HasNoSuffix')
->not->toHaveSuffix('Suffix');

View File

@ -0,0 +1,9 @@
<?php
declare(strict_types=1);
namespace Tests\Fixtures\Arch\ToHavePrefix\HasNoPrefix;
class ClassWithout
{
}

View File

@ -0,0 +1,9 @@
<?php
declare(strict_types=1);
namespace Tests\Fixtures\Arch\ToHavePrefix\HasPrefix;
class PrefixClassWith
{
}

View File

@ -0,0 +1,9 @@
<?php
declare(strict_types=1);
namespace Tests\Fixtures\Arch\ToHaveSuffix\HasNoSuffix;
class ClassWithout
{
}

View File

@ -0,0 +1,9 @@
<?php
declare(strict_types=1);
namespace Tests\Fixtures\Arch\ToHaveSuffix\HasSuffix;
class ClassWithSuffix
{
}

View File

@ -16,7 +16,7 @@ $run = function () {
test('parallel', function () use ($run) {
expect($run('--exclude-group=integration'))
->toContain('Tests: 1 deprecated, 4 warnings, 5 incomplete, 2 notices, 13 todos, 15 skipped, 819 passed (1912 assertions)')
->toContain('Tests: 1 deprecated, 4 warnings, 5 incomplete, 2 notices, 13 todos, 15 skipped, 827 passed (1924 assertions)')
->toContain('Parallel: 3 processes');
})->skipOnWindows();