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 ## 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) ## [v2.9.4 (2023-07-22)](https://github.com/pestphp/pest/compare/v2.9.3...v2.9.4)
### Fixed ### Fixed

View File

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

View File

@ -430,7 +430,7 @@ final class Expectation
{ {
return Targeted::make( return Targeted::make(
$this, $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', 'to be readonly',
FileLineFinder::where(fn (string $line): bool => str_contains($line, 'class')), 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. * 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( return Targeted::make(
$this, $this,
fn (ObjectDescription $object): bool => str_starts_with($object->reflectionClass->getName(), $suffix), fn (ObjectDescription $object): bool => str_starts_with($object->reflectionClass->getShortName(), $prefix),
"to have prefix '{$suffix}'", "to have prefix '{$prefix}'",
FileLineFinder::where(fn (string $line): bool => str_contains($line, 'class')), FileLineFinder::where(fn (string $line): bool => str_contains($line, 'class')),
); );
} }

View File

@ -109,7 +109,7 @@ final class OppositeExpectation
{ {
return Targeted::make( return Targeted::make(
$this->original, $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', 'not to be readonly',
FileLineFinder::where(fn (string $line): bool => str_contains($line, 'class')), FileLineFinder::where(fn (string $line): bool => str_contains($line, 'class')),
); );
@ -291,17 +291,27 @@ final class OppositeExpectation
/** /**
* Not supported. * 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. * 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 function version(): string
{ {
return '2.10.0'; return '2.10.1';
} }
function testDirectory(string $file = ''): string 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] 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 ✓ failures with custom message
✓ not failures ✓ not failures
PASS Tests\Features\Expect\toHavePrefix
✓ missing prefix
✓ has prefix
✓ opposite missing prefix
✓ opposite has prefix
PASS Tests\Features\Expect\toHaveProperties PASS Tests\Features\Expect\toHaveProperties
✓ pass ✓ pass
✓ failures ✓ failures
@ -642,6 +648,12 @@
✓ failures with message and Any matcher ✓ failures with message and Any matcher
✓ not failures ✓ not failures
PASS Tests\Features\Expect\toHaveSuffix
✓ missing suffix
✓ has suffix
✓ opposite missing suffix
✓ opposite has suffix
PASS Tests\Features\Expect\toMatch PASS Tests\Features\Expect\toMatch
✓ pass ✓ pass
✓ failures ✓ failures
@ -1174,4 +1186,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, 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) { test('parallel', function () use ($run) {
expect($run('--exclude-group=integration')) 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'); ->toContain('Parallel: 3 processes');
})->skipOnWindows(); })->skipOnWindows();