mirror of
https://github.com/pestphp/pest.git
synced 2026-03-11 02:07:23 +01:00
Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8871a6f5ef | |||
| e4b6fc08b6 | |||
| 7796630eaf | |||
| 3aec2b26ef | |||
| 7a7c35292c | |||
| 72cf695554 |
44
.github/workflows/static.yml
vendored
44
.github/workflows/static.yml
vendored
@ -1,44 +0,0 @@
|
||||
name: Static Analysis
|
||||
|
||||
on:
|
||||
push:
|
||||
pull_request:
|
||||
schedule:
|
||||
- cron: '0 0 * * *'
|
||||
|
||||
jobs:
|
||||
static:
|
||||
if: github.event_name != 'schedule' || github.repository == 'pestphp/pest'
|
||||
name: Static Tests
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
fail-fast: true
|
||||
matrix:
|
||||
dependency-version: [prefer-lowest, prefer-stable]
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup PHP
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: 8.2
|
||||
tools: composer:v2
|
||||
coverage: none
|
||||
|
||||
- name: Install Dependencies
|
||||
run: composer update --prefer-stable --no-interaction --no-progress --ansi
|
||||
|
||||
# - name: Type Check
|
||||
# run: composer test:type:check
|
||||
|
||||
- name: Type Coverage
|
||||
run: composer test:type:coverage
|
||||
|
||||
- name: Refacto
|
||||
run: composer test:refacto
|
||||
|
||||
- name: Style
|
||||
run: composer test:lint
|
||||
2
.github/workflows/tests.yml
vendored
2
.github/workflows/tests.yml
vendored
@ -15,7 +15,7 @@ jobs:
|
||||
os: [ubuntu-latest, macos-latest, windows-latest]
|
||||
symfony: ['7.1']
|
||||
php: ['8.2', '8.3', '8.4']
|
||||
dependency_version: [prefer-lowest, prefer-stable]
|
||||
dependency_version: [prefer-stable]
|
||||
|
||||
name: PHP ${{ matrix.php }} - Symfony ^${{ matrix.symfony }} - ${{ matrix.os }} - ${{ matrix.dependency_version }}
|
||||
|
||||
|
||||
@ -18,17 +18,17 @@
|
||||
],
|
||||
"require": {
|
||||
"php": "^8.2.0",
|
||||
"brianium/paratest": "^7.8.4",
|
||||
"nunomaduro/collision": "^8.8.2",
|
||||
"nunomaduro/termwind": "^2.3.1",
|
||||
"brianium/paratest": "^7.8.5",
|
||||
"nunomaduro/collision": "^8.9.1",
|
||||
"nunomaduro/termwind": "^2.4.0",
|
||||
"pestphp/pest-plugin": "^3.0.0",
|
||||
"pestphp/pest-plugin-arch": "^3.1.1",
|
||||
"pestphp/pest-plugin-mutate": "^3.0.5",
|
||||
"phpunit/phpunit": "^11.5.33"
|
||||
"phpunit/phpunit": "^11.5.50"
|
||||
},
|
||||
"conflict": {
|
||||
"filp/whoops": "<2.16.0",
|
||||
"phpunit/phpunit": ">11.5.33",
|
||||
"phpunit/phpunit": ">11.5.50",
|
||||
"sebastian/exporter": "<6.0.0",
|
||||
"webmozart/assert": "<1.11.0"
|
||||
},
|
||||
@ -55,7 +55,7 @@
|
||||
"require-dev": {
|
||||
"pestphp/pest-dev-tools": "^3.4.0",
|
||||
"pestphp/pest-plugin-type-coverage": "^3.6.1",
|
||||
"symfony/process": "^7.3.0"
|
||||
"symfony/process": "^7.4.5"
|
||||
},
|
||||
"minimum-stability": "dev",
|
||||
"prefer-stable": true,
|
||||
@ -71,21 +71,12 @@
|
||||
],
|
||||
"scripts": {
|
||||
"refacto": "rector",
|
||||
"lint": "pint",
|
||||
"test:refacto": "rector --dry-run",
|
||||
"test:lint": "pint --test",
|
||||
"test:type:check": "phpstan analyse --ansi --memory-limit=-1 --debug",
|
||||
"test:type:coverage": "php -d memory_limit=-1 bin/pest --type-coverage --min=100",
|
||||
"test:unit": "php bin/pest --colors=always --exclude-group=integration --compact",
|
||||
"test:inline": "php bin/pest --colors=always --configuration=phpunit.inline.xml",
|
||||
"test:parallel": "php bin/pest --colors=always --exclude-group=integration --parallel --processes=3",
|
||||
"test:integration": "php bin/pest --colors=always --group=integration -v",
|
||||
"update:snapshots": "REBUILD_SNAPSHOTS=true php bin/pest --colors=always --update-snapshots",
|
||||
"test": [
|
||||
"@test:refacto",
|
||||
"@test:lint",
|
||||
"@test:type:check",
|
||||
"@test:type:coverage",
|
||||
"@test:unit",
|
||||
"@test:parallel",
|
||||
"@test:integration"
|
||||
|
||||
@ -14,6 +14,9 @@ namespace PHPUnit\Logging\JUnit;
|
||||
|
||||
use DOMDocument;
|
||||
use DOMElement;
|
||||
use Pest\Logging\Converter;
|
||||
use Pest\Support\Container;
|
||||
use Pest\TestSuite;
|
||||
use PHPUnit\Event\Code\Test;
|
||||
use PHPUnit\Event\Code\TestMethod;
|
||||
use PHPUnit\Event\EventFacadeIsSealedException;
|
||||
@ -50,7 +53,7 @@ final class JunitXmlLogger
|
||||
{
|
||||
private readonly Printer $printer;
|
||||
|
||||
private readonly \Pest\Logging\Converter $converter; // pest-added
|
||||
private readonly Converter $converter; // pest-added
|
||||
|
||||
private DOMDocument $document;
|
||||
|
||||
@ -108,7 +111,7 @@ final class JunitXmlLogger
|
||||
public function __construct(Printer $printer, Facade $facade)
|
||||
{
|
||||
$this->printer = $printer;
|
||||
$this->converter = new \Pest\Logging\Converter(\Pest\Support\Container::getInstance()->get(\Pest\TestSuite::class)->rootPath); // pest-added
|
||||
$this->converter = new Converter(Container::getInstance()->get(TestSuite::class)->rootPath); // pest-added
|
||||
|
||||
$this->registerSubscribers($facade);
|
||||
$this->createDocument();
|
||||
|
||||
@ -66,6 +66,6 @@ trait Pipeable
|
||||
*/
|
||||
private function pipes(string $name, object $context, string $scope): array
|
||||
{
|
||||
return array_map(fn (Closure $pipe): \Closure => $pipe->bindTo($context, $scope), self::$pipes[$name] ?? []);
|
||||
return array_map(fn (Closure $pipe): Closure => $pipe->bindTo($context, $scope), self::$pipes[$name] ?? []);
|
||||
}
|
||||
}
|
||||
|
||||
@ -148,7 +148,7 @@ trait Testable
|
||||
*/
|
||||
public function __addBeforeAll(?Closure $hook): void
|
||||
{
|
||||
if (! $hook instanceof \Closure) {
|
||||
if (! $hook instanceof Closure) {
|
||||
return;
|
||||
}
|
||||
|
||||
@ -162,7 +162,7 @@ trait Testable
|
||||
*/
|
||||
public function __addAfterAll(?Closure $hook): void
|
||||
{
|
||||
if (! $hook instanceof \Closure) {
|
||||
if (! $hook instanceof Closure) {
|
||||
return;
|
||||
}
|
||||
|
||||
@ -192,7 +192,7 @@ trait Testable
|
||||
*/
|
||||
private function __addHook(string $property, ?Closure $hook): void
|
||||
{
|
||||
if (! $hook instanceof \Closure) {
|
||||
if (! $hook instanceof Closure) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@ -134,7 +134,7 @@ final class Expectation
|
||||
/**
|
||||
* Dump the expectation value when the result of the condition is truthy.
|
||||
*
|
||||
* @param (\Closure(TValue): bool)|bool $condition
|
||||
* @param (Closure(TValue): bool)|bool $condition
|
||||
* @return self<TValue>
|
||||
*/
|
||||
public function ddWhen(Closure|bool $condition, mixed ...$arguments): Expectation
|
||||
@ -151,7 +151,7 @@ final class Expectation
|
||||
/**
|
||||
* Dump the expectation value when the result of the condition is falsy.
|
||||
*
|
||||
* @param (\Closure(TValue): bool)|bool $condition
|
||||
* @param (Closure(TValue): bool)|bool $condition
|
||||
* @return self<TValue>
|
||||
*/
|
||||
public function ddUnless(Closure|bool $condition, mixed ...$arguments): Expectation
|
||||
|
||||
@ -17,6 +17,7 @@ use Pest\Factories\Concerns\HigherOrderable;
|
||||
use Pest\Support\Reflection;
|
||||
use Pest\Support\Str;
|
||||
use Pest\TestSuite;
|
||||
use PHPUnit\Framework\Attributes\TestDox;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use RuntimeException;
|
||||
|
||||
@ -135,7 +136,7 @@ final class TestCaseFactory
|
||||
|
||||
$this->attributes = [
|
||||
new Attribute(
|
||||
\PHPUnit\Framework\Attributes\TestDox::class,
|
||||
TestDox::class,
|
||||
[$this->filename],
|
||||
),
|
||||
...$this->attributes,
|
||||
|
||||
@ -13,6 +13,9 @@ use Pest\Support\Str;
|
||||
use Pest\TestSuite;
|
||||
use PHPUnit\Framework\Assert;
|
||||
use PHPUnit\Framework\Attributes\DataProvider;
|
||||
use PHPUnit\Framework\Attributes\Depends;
|
||||
use PHPUnit\Framework\Attributes\Test;
|
||||
use PHPUnit\Framework\Attributes\TestDox;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
@ -192,11 +195,11 @@ final class TestCaseMethodFactory
|
||||
|
||||
$this->attributes = [
|
||||
new Attribute(
|
||||
\PHPUnit\Framework\Attributes\Test::class,
|
||||
Test::class,
|
||||
[],
|
||||
),
|
||||
new Attribute(
|
||||
\PHPUnit\Framework\Attributes\TestDox::class,
|
||||
TestDox::class,
|
||||
[str_replace('*/', '{@*}', $this->description)],
|
||||
),
|
||||
...$this->attributes,
|
||||
@ -206,7 +209,7 @@ final class TestCaseMethodFactory
|
||||
$depend = Str::evaluable($this->describing === [] ? $depend : Str::describe($this->describing, $depend));
|
||||
|
||||
$this->attributes[] = new Attribute(
|
||||
\PHPUnit\Framework\Attributes\Depends::class,
|
||||
Depends::class,
|
||||
[$depend],
|
||||
);
|
||||
}
|
||||
|
||||
@ -136,7 +136,7 @@ if (! function_exists('test')) {
|
||||
*/
|
||||
function test(?string $description = null, ?Closure $closure = null): HigherOrderTapProxy|TestCall
|
||||
{
|
||||
if ($description === null && TestSuite::getInstance()->test instanceof \PHPUnit\Framework\TestCase) {
|
||||
if ($description === null && TestSuite::getInstance()->test instanceof TestCase) {
|
||||
return new HigherOrderTapProxy(TestSuite::getInstance()->test);
|
||||
}
|
||||
|
||||
@ -232,7 +232,7 @@ if (! function_exists('covers')) {
|
||||
|
||||
/** @var MutationTestRunner $runner */
|
||||
$runner = Container::getInstance()->get(MutationTestRunner::class);
|
||||
/** @var \Pest\Mutate\Repositories\ConfigurationRepository $configurationRepository */
|
||||
/** @var ConfigurationRepository $configurationRepository */
|
||||
$configurationRepository = Container::getInstance()->get(ConfigurationRepository::class);
|
||||
$everything = $configurationRepository->cliConfiguration->toArray()['everything'] ?? false;
|
||||
$classes = $configurationRepository->cliConfiguration->toArray()['classes'] ?? false;
|
||||
@ -259,7 +259,7 @@ if (! function_exists('mutates')) {
|
||||
|
||||
/** @var MutationTestRunner $runner */
|
||||
$runner = Container::getInstance()->get(MutationTestRunner::class);
|
||||
/** @var \Pest\Mutate\Repositories\ConfigurationRepository $configurationRepository */
|
||||
/** @var ConfigurationRepository $configurationRepository */
|
||||
$configurationRepository = Container::getInstance()->get(ConfigurationRepository::class);
|
||||
$everything = $configurationRepository->cliConfiguration->toArray()['everything'] ?? false;
|
||||
$classes = $configurationRepository->cliConfiguration->toArray()['classes'] ?? false;
|
||||
|
||||
@ -151,7 +151,7 @@ final readonly class Converter
|
||||
{
|
||||
if ($testSuite instanceof TestSuiteForTestMethodWithDataProvider) {
|
||||
$firstTest = $this->getFirstTest($testSuite);
|
||||
if ($firstTest instanceof \PHPUnit\Event\Code\TestMethod) {
|
||||
if ($firstTest instanceof TestMethod) {
|
||||
return $this->getTestMethodNameWithoutDatasetSuffix($firstTest);
|
||||
}
|
||||
}
|
||||
@ -179,7 +179,7 @@ final readonly class Converter
|
||||
public function getTestSuiteLocation(TestSuite $testSuite): ?string
|
||||
{
|
||||
$firstTest = $this->getFirstTest($testSuite);
|
||||
if (! $firstTest instanceof \PHPUnit\Event\Code\TestMethod) {
|
||||
if (! $firstTest instanceof TestMethod) {
|
||||
return null;
|
||||
}
|
||||
$path = $firstTest->testDox()->prettifiedClassName();
|
||||
|
||||
@ -200,7 +200,7 @@ final class TeamCityLogger
|
||||
|
||||
public function testFinished(Finished $event): void
|
||||
{
|
||||
if (! $this->time instanceof \PHPUnit\Event\Telemetry\HRTime) {
|
||||
if (! $this->time instanceof HRTime) {
|
||||
throw ShouldNotHappen::fromMessage('Start time has not been set.');
|
||||
}
|
||||
|
||||
|
||||
@ -9,6 +9,7 @@ use Closure;
|
||||
use Countable;
|
||||
use DateTimeInterface;
|
||||
use Error;
|
||||
use Illuminate\Testing\TestResponse;
|
||||
use InvalidArgumentException;
|
||||
use JsonSerializable;
|
||||
use Pest\Exceptions\InvalidExpectationValue;
|
||||
@ -846,7 +847,7 @@ final class Expectation
|
||||
is_object($this->value) && method_exists($this->value, 'toSnapshot') => $this->value->toSnapshot(),
|
||||
is_object($this->value) && method_exists($this->value, '__toString') => $this->value->__toString(),
|
||||
is_object($this->value) && method_exists($this->value, 'toString') => $this->value->toString(),
|
||||
$this->value instanceof \Illuminate\Testing\TestResponse => $this->value->getContent(), // @phpstan-ignore-line
|
||||
$this->value instanceof TestResponse => $this->value->getContent(), // @phpstan-ignore-line
|
||||
is_array($this->value) => json_encode($this->value, JSON_THROW_ON_ERROR | JSON_PRETTY_PRINT),
|
||||
$this->value instanceof Traversable => json_encode(iterator_to_array($this->value), JSON_THROW_ON_ERROR | JSON_PRETTY_PRINT),
|
||||
$this->value instanceof JsonSerializable => json_encode($this->value->jsonSerialize(), JSON_THROW_ON_ERROR | JSON_PRETTY_PRINT),
|
||||
@ -987,7 +988,7 @@ final class Expectation
|
||||
*/
|
||||
private function export(mixed $value): string
|
||||
{
|
||||
if (! $this->exporter instanceof \Pest\Support\Exporter) {
|
||||
if (! $this->exporter instanceof Exporter) {
|
||||
$this->exporter = Exporter::default();
|
||||
}
|
||||
|
||||
|
||||
@ -72,7 +72,7 @@ final class DescribeCall
|
||||
{
|
||||
$filename = Backtrace::file();
|
||||
|
||||
if (! $this->currentBeforeEachCall instanceof \Pest\PendingCalls\BeforeEachCall) {
|
||||
if (! $this->currentBeforeEachCall instanceof BeforeEachCall) {
|
||||
$this->currentBeforeEachCall = new BeforeEachCall(TestSuite::getInstance(), $filename);
|
||||
|
||||
$this->currentBeforeEachCall->describing[] = $this->description;
|
||||
|
||||
@ -21,6 +21,11 @@ use Pest\Support\NullClosure;
|
||||
use Pest\Support\Str;
|
||||
use Pest\TestSuite;
|
||||
use PHPUnit\Framework\AssertionFailedError;
|
||||
use PHPUnit\Framework\Attributes\CoversClass;
|
||||
use PHPUnit\Framework\Attributes\CoversFunction;
|
||||
use PHPUnit\Framework\Attributes\CoversNothing;
|
||||
use PHPUnit\Framework\Attributes\CoversTrait;
|
||||
use PHPUnit\Framework\Attributes\Group;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
@ -181,7 +186,7 @@ final class TestCall // @phpstan-ignore-line
|
||||
* Runs the current test multiple times with
|
||||
* each item of the given `iterable`.
|
||||
*
|
||||
* @param array<\Closure|iterable<int|string, mixed>|string> $data
|
||||
* @param array<Closure|iterable<int|string, mixed>|string> $data
|
||||
*/
|
||||
public function with(Closure|iterable|string ...$data): self
|
||||
{
|
||||
@ -211,7 +216,7 @@ final class TestCall // @phpstan-ignore-line
|
||||
{
|
||||
foreach ($groups as $group) {
|
||||
$this->testCaseMethod->attributes[] = new Attribute(
|
||||
\PHPUnit\Framework\Attributes\Group::class,
|
||||
Group::class,
|
||||
[$group],
|
||||
);
|
||||
}
|
||||
@ -549,7 +554,7 @@ final class TestCall // @phpstan-ignore-line
|
||||
{
|
||||
foreach ($classes as $class) {
|
||||
$this->testCaseFactoryAttributes[] = new Attribute(
|
||||
\PHPUnit\Framework\Attributes\CoversClass::class,
|
||||
CoversClass::class,
|
||||
[$class],
|
||||
);
|
||||
}
|
||||
@ -572,7 +577,7 @@ final class TestCall // @phpstan-ignore-line
|
||||
{
|
||||
foreach ($traits as $trait) {
|
||||
$this->testCaseFactoryAttributes[] = new Attribute(
|
||||
\PHPUnit\Framework\Attributes\CoversTrait::class,
|
||||
CoversTrait::class,
|
||||
[$trait],
|
||||
);
|
||||
}
|
||||
@ -595,7 +600,7 @@ final class TestCall // @phpstan-ignore-line
|
||||
{
|
||||
foreach ($functions as $function) {
|
||||
$this->testCaseFactoryAttributes[] = new Attribute(
|
||||
\PHPUnit\Framework\Attributes\CoversFunction::class,
|
||||
CoversFunction::class,
|
||||
[$function],
|
||||
);
|
||||
}
|
||||
@ -609,7 +614,7 @@ final class TestCall // @phpstan-ignore-line
|
||||
public function coversNothing(): self
|
||||
{
|
||||
$this->testCaseMethod->attributes[] = new Attribute(
|
||||
\PHPUnit\Framework\Attributes\CoversNothing::class,
|
||||
CoversNothing::class,
|
||||
[],
|
||||
);
|
||||
|
||||
|
||||
@ -6,7 +6,7 @@ namespace Pest;
|
||||
|
||||
function version(): string
|
||||
{
|
||||
return '3.8.3';
|
||||
return '3.8.6';
|
||||
}
|
||||
|
||||
function testDirectory(string $file = ''): string
|
||||
|
||||
@ -7,6 +7,7 @@ namespace Pest\Plugins\Parallel\Handlers;
|
||||
use Closure;
|
||||
use Composer\InstalledVersions;
|
||||
use Illuminate\Testing\ParallelRunner;
|
||||
use Orchestra\Testbench\TestCase;
|
||||
use ParaTest\Options;
|
||||
use ParaTest\RunnerInterface;
|
||||
use Pest\Contracts\Plugins\HandlesArguments;
|
||||
@ -39,13 +40,13 @@ final class Laravel implements HandlesArguments
|
||||
* Executes the given closure when running Laravel.
|
||||
*
|
||||
* @param array<int, string> $arguments
|
||||
* @param CLosure(array<int, string>): array<int, string> $closure
|
||||
* @param Closure(array<int, string>): array<int, string> $closure
|
||||
* @return array<int, string>
|
||||
*/
|
||||
private function whenUsingLaravel(array $arguments, Closure $closure): array
|
||||
{
|
||||
$isLaravelApplication = InstalledVersions::isInstalled('laravel/framework', false);
|
||||
$isLaravelPackage = class_exists(\Orchestra\Testbench\TestCase::class);
|
||||
$isLaravelPackage = class_exists(TestCase::class);
|
||||
|
||||
if ($isLaravelApplication && ! $isLaravelPackage) {
|
||||
return $closure($arguments);
|
||||
|
||||
@ -200,6 +200,7 @@ final class DatasetsRepository
|
||||
throw new DatasetDoesNotExist($name);
|
||||
}
|
||||
|
||||
// @phpstan-ignore-next-line
|
||||
return $matchingDatasets[$closestScopeDatasetKey];
|
||||
}
|
||||
|
||||
|
||||
@ -19,14 +19,14 @@ final class Closure
|
||||
*/
|
||||
public static function bind(?BaseClosure $closure, ?object $newThis, object|string|null $newScope = 'static'): BaseClosure
|
||||
{
|
||||
if (! $closure instanceof \Closure) {
|
||||
if (! $closure instanceof BaseClosure) {
|
||||
throw ShouldNotHappen::fromMessage('Could not bind null closure.');
|
||||
}
|
||||
|
||||
// @phpstan-ignore-next-line
|
||||
$closure = BaseClosure::bind($closure, $newThis, $newScope);
|
||||
|
||||
if (! $closure instanceof \Closure) {
|
||||
if (! $closure instanceof BaseClosure) {
|
||||
throw ShouldNotHappen::fromMessage('Could not bind closure.');
|
||||
}
|
||||
|
||||
|
||||
@ -28,7 +28,7 @@ final class Container
|
||||
*/
|
||||
public static function getInstance(): self
|
||||
{
|
||||
if (! self::$instance instanceof \Pest\Support\Container) {
|
||||
if (! self::$instance instanceof Container) {
|
||||
self::$instance = new self;
|
||||
}
|
||||
|
||||
|
||||
@ -46,6 +46,7 @@ final readonly class HigherOrderCallables
|
||||
*/
|
||||
public function and(mixed $value): Expectation
|
||||
{
|
||||
// @phpstan-ignore-next-line
|
||||
return $this->expect($value);
|
||||
}
|
||||
|
||||
|
||||
@ -8,6 +8,7 @@ use Closure;
|
||||
use InvalidArgumentException;
|
||||
use Pest\Exceptions\ShouldNotHappen;
|
||||
use Pest\TestSuite;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use ReflectionClass;
|
||||
use ReflectionException;
|
||||
use ReflectionFunction;
|
||||
@ -66,7 +67,7 @@ final class Reflection
|
||||
{
|
||||
$test = TestSuite::getInstance()->test;
|
||||
|
||||
if (! $test instanceof \PHPUnit\Framework\TestCase) {
|
||||
if (! $test instanceof TestCase) {
|
||||
return self::bindCallable($callable);
|
||||
}
|
||||
|
||||
@ -221,7 +222,7 @@ final class Reflection
|
||||
{
|
||||
$getProperties = fn (ReflectionClass $reflectionClass): array => array_filter(
|
||||
array_map(
|
||||
fn (ReflectionProperty $property): \ReflectionProperty => $property,
|
||||
fn (ReflectionProperty $property): ReflectionProperty => $property,
|
||||
$reflectionClass->getProperties(),
|
||||
), fn (ReflectionProperty $property): bool => $property->getDeclaringClass()->getName() === $reflectionClass->getName(),
|
||||
);
|
||||
@ -256,7 +257,7 @@ final class Reflection
|
||||
{
|
||||
$getMethods = fn (ReflectionClass $reflectionClass): array => array_filter(
|
||||
array_map(
|
||||
fn (ReflectionMethod $method): \ReflectionMethod => $method,
|
||||
fn (ReflectionMethod $method): ReflectionMethod => $method,
|
||||
$reflectionClass->getMethods($filter),
|
||||
), fn (ReflectionMethod $method): bool => $method->getDeclaringClass()->getName() === $reflectionClass->getName(),
|
||||
);
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
|
||||
Pest Testing Framework 3.8.3.
|
||||
Pest Testing Framework 3.8.6.
|
||||
|
||||
USAGE: pest <file> [options]
|
||||
|
||||
|
||||
@ -1,3 +1,3 @@
|
||||
|
||||
Pest Testing Framework 3.8.3.
|
||||
Pest Testing Framework 3.8.6.
|
||||
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
<?php
|
||||
|
||||
use Pest\Plugin;
|
||||
|
||||
trait PluginTrait
|
||||
{
|
||||
public function assertPluginTraitGotRegistered(): void
|
||||
@ -16,8 +18,8 @@ trait SecondPluginTrait
|
||||
}
|
||||
}
|
||||
|
||||
Pest\Plugin::uses(PluginTrait::class);
|
||||
Pest\Plugin::uses(SecondPluginTrait::class);
|
||||
Plugin::uses(PluginTrait::class);
|
||||
Plugin::uses(SecondPluginTrait::class);
|
||||
|
||||
function _assertThat()
|
||||
{
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
$foo = new \stdClass;
|
||||
$foo = new stdClass;
|
||||
$foo->bar = 0;
|
||||
|
||||
beforeAll(function () use ($foo) {
|
||||
|
||||
@ -17,7 +17,7 @@ it('adds coverage if --coverage exist', function () {
|
||||
$arguments = $plugin->handleArguments(['--coverage']);
|
||||
expect($arguments)->toEqual(['--coverage-php', Coverage::getPath()])
|
||||
->and($plugin->coverage)->toBeTrue();
|
||||
})->skip(! \Pest\Support\Coverage::isAvailable() || ! function_exists('xdebug_info') || ! in_array('coverage', xdebug_info('mode'), true), 'Coverage is not available');
|
||||
})->skip(! Coverage::isAvailable() || ! function_exists('xdebug_info') || ! in_array('coverage', xdebug_info('mode'), true), 'Coverage is not available');
|
||||
|
||||
it('adds coverage if --min exist', function () {
|
||||
$plugin = new CoveragePlugin(new ConsoleOutput);
|
||||
|
||||
@ -39,7 +39,7 @@ it('allows to call underlying protected/private methods', function () {
|
||||
|
||||
it('throws error if method do not exist', function () {
|
||||
test()->foo();
|
||||
})->throws(\ReflectionException::class, 'Call to undefined method PHPUnit\Framework\TestCase::foo()');
|
||||
})->throws(ReflectionException::class, 'Call to undefined method PHPUnit\Framework\TestCase::foo()');
|
||||
|
||||
it('can forward unexpected calls to any global function')->_assertThat();
|
||||
|
||||
|
||||
@ -1,7 +1,9 @@
|
||||
<?php
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* @return \PHPUnit\Framework\TestCase
|
||||
* @return TestCase
|
||||
*/
|
||||
function myAssertTrue($value)
|
||||
{
|
||||
|
||||
@ -1,8 +1,9 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class MyCustomClassTest extends PHPUnit\Framework\TestCase
|
||||
class MyCustomClassTest extends TestCase
|
||||
{
|
||||
public function assertTrueIsTrue()
|
||||
{
|
||||
|
||||
@ -1,6 +1,8 @@
|
||||
<?php
|
||||
|
||||
pest()->use(Tests\CustomTestCase\CustomTestCase::class)->in(__DIR__);
|
||||
use Tests\CustomTestCase\CustomTestCase;
|
||||
|
||||
pest()->use(CustomTestCase::class)->in(__DIR__);
|
||||
|
||||
test('closure was bound to CustomTestCase', function () {
|
||||
$this->assertCustomTrue();
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
<?php
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
trait MyCustomTrait
|
||||
{
|
||||
public function assertFalseIsFalse()
|
||||
@ -8,7 +10,7 @@ trait MyCustomTrait
|
||||
}
|
||||
}
|
||||
|
||||
abstract class MyCustomClass extends PHPUnit\Framework\TestCase
|
||||
abstract class MyCustomClass extends TestCase
|
||||
{
|
||||
public function assertTrueIsTrue()
|
||||
{
|
||||
|
||||
@ -1,7 +1,9 @@
|
||||
<?php
|
||||
|
||||
use Pest\Configuration\Printer;
|
||||
|
||||
it('creates a printer instance', function () {
|
||||
$theme = pest()->printer();
|
||||
|
||||
expect($theme)->toBeInstanceOf(Pest\Configuration\Printer::class);
|
||||
expect($theme)->toBeInstanceOf(Printer::class);
|
||||
});
|
||||
|
||||
@ -1,8 +1,10 @@
|
||||
<?php
|
||||
|
||||
use Symfony\Component\Process\Process;
|
||||
|
||||
test('collision', function (array $arguments) {
|
||||
$output = function () use ($arguments) {
|
||||
$process = (new Symfony\Component\Process\Process(
|
||||
$process = (new Process(
|
||||
array_merge(['php', 'bin/pest', 'tests/Fixtures/CollisionTest.php'], $arguments),
|
||||
null,
|
||||
['COLLISION_PRINTER' => 'DefaultPrinter', 'COLLISION_IGNORE_DURATION' => 'true', 'COLLISION_TEST' => true]
|
||||
|
||||
@ -1,8 +1,10 @@
|
||||
<?php
|
||||
|
||||
use Symfony\Component\Process\Process;
|
||||
|
||||
test('visual snapshot of help command output', function () {
|
||||
$output = function () {
|
||||
$process = (new Symfony\Component\Process\Process(['php', 'bin/pest', '--help'], null, ['COLLISION_PRINTER' => 'DefaultPrinter', 'COLLISION_IGNORE_DURATION' => 'true']));
|
||||
$process = (new Process(['php', 'bin/pest', '--help'], null, ['COLLISION_PRINTER' => 'DefaultPrinter', 'COLLISION_IGNORE_DURATION' => 'true']));
|
||||
|
||||
$process->run();
|
||||
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
<?php
|
||||
|
||||
use Symfony\Component\Process\Process;
|
||||
|
||||
test('visual snapshot of test suite on success', function () {
|
||||
$testsPath = dirname(__DIR__);
|
||||
$snapshot = implode(DIRECTORY_SEPARATOR, [
|
||||
@ -9,7 +11,7 @@ test('visual snapshot of test suite on success', function () {
|
||||
]);
|
||||
|
||||
$output = function () use ($testsPath) {
|
||||
$process = (new Symfony\Component\Process\Process(
|
||||
$process = (new Process(
|
||||
['php', 'bin/pest'],
|
||||
dirname($testsPath),
|
||||
['EXCLUDE' => 'integration', '--exclude-group' => 'integration', 'REBUILD_SNAPSHOTS' => false, 'PARATEST' => 0, 'COLLISION_PRINTER' => 'DefaultPrinter', 'COLLISION_IGNORE_DURATION' => 'true'],
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
<?php
|
||||
|
||||
use Symfony\Component\Process\Process;
|
||||
|
||||
function normalize_windows_os_output(string $text): string
|
||||
{
|
||||
$text = str_replace('\r', '', $text);
|
||||
@ -17,7 +19,7 @@ test('visual snapshot of team city', function (string $testFile) {
|
||||
]);
|
||||
|
||||
$output = function () use ($testsPath) {
|
||||
$process = (new Symfony\Component\Process\Process(
|
||||
$process = (new Process(
|
||||
['php', 'bin/pest', '--teamcity', $testsPath],
|
||||
dirname(__DIR__, levels: 2),
|
||||
[
|
||||
|
||||
@ -1,8 +1,10 @@
|
||||
<?php
|
||||
|
||||
use Symfony\Component\Process\Process;
|
||||
|
||||
test('visual snapshot of help command output', function () {
|
||||
$output = function () {
|
||||
$process = (new Symfony\Component\Process\Process(['php', 'bin/pest', '--version'], null, ['COLLISION_PRINTER' => 'DefaultPrinter', 'COLLISION_IGNORE_DURATION' => 'true']));
|
||||
$process = (new Process(['php', 'bin/pest', '--version'], null, ['COLLISION_PRINTER' => 'DefaultPrinter', 'COLLISION_IGNORE_DURATION' => 'true']));
|
||||
|
||||
$process->run();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user