Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 10 additions & 28 deletions phpstan-baseline.neon
Original file line number Diff line number Diff line change
@@ -1,79 +1,61 @@
parameters:
ignoreErrors:
-
message: '#^Call to method testRunnerTriggeredPhpunitDeprecation\(\) of internal interface PHPUnit\\Event\\Emitter from outside its root namespace PHPUnit\.$#'
identifier: method.internalInterface
count: 1
path: src/PHPUnitAttributesExtension.php

-
message: '#^Call to static method emitter\(\) of internal class PHPUnit\\Event\\Facade from outside its root namespace PHPUnit\.$#'
identifier: staticMethod.internalClass
count: 1
path: src/PHPUnitAttributesExtension.php

-
message: '#^Instantiated class EliasHaeussler\\PHPUnitAttributes\\Tests\\E2E\\Foo not found\.$#'
rawMessage: Instantiated class EliasHaeussler\PHPUnitAttributes\Tests\E2E\Foo not found.
identifier: class.notFound
count: 1
path: tests/e2e/abstract-attribute/fixtures/handle-autoload-errors/tests/DummyAttributeHandlesAutoloadErrorsTest.php

-
message: '#^Property EliasHaeussler\\PHPUnitAttributes\\Tests\\E2E\\DummyAttributeHandlesAutoloadErrorsTest\:\:\$foo has unknown class EliasHaeussler\\PHPUnitAttributes\\Tests\\E2E\\Foo as its type\.$#'
rawMessage: Property EliasHaeussler\PHPUnitAttributes\Tests\E2E\DummyAttributeHandlesAutoloadErrorsTest::$foo has unknown class EliasHaeussler\PHPUnitAttributes\Tests\E2E\Foo as its type.
identifier: class.notFound
count: 1
path: tests/e2e/abstract-attribute/fixtures/handle-autoload-errors/tests/DummyAttributeHandlesAutoloadErrorsTest.php

-
message: '#^Property EliasHaeussler\\PHPUnitAttributes\\Tests\\E2E\\DummyAttributeHandlesAutoloadErrorsTest\:\:\$foo is never read, only written\.$#'
rawMessage: 'Property EliasHaeussler\PHPUnitAttributes\Tests\E2E\DummyAttributeHandlesAutoloadErrorsTest::$foo is never read, only written.'
identifier: property.onlyWritten
count: 1
path: tests/e2e/abstract-attribute/fixtures/handle-autoload-errors/tests/DummyAttributeHandlesAutoloadErrorsTest.php

-
message: '#^Parameter \#1 \$className of attribute class EliasHaeussler\\PHPUnitAttributes\\Attribute\\RequiresClass constructor expects class\-string, string given\.$#'
rawMessage: 'Parameter #1 $className of attribute class EliasHaeussler\PHPUnitAttributes\Attribute\RequiresClass constructor expects class-string, string given.'
identifier: argument.type
count: 1
path: tests/e2e/requires-class-attribute/fixtures/custom-message/tests/RequiresClassAttributeWithCustomMessageTest.php

-
message: '#^Parameter \#1 \$className of attribute class EliasHaeussler\\PHPUnitAttributes\\Attribute\\RequiresClass constructor expects class\-string, string given\.$#'
rawMessage: 'Parameter #1 $className of attribute class EliasHaeussler\PHPUnitAttributes\Attribute\RequiresClass constructor expects class-string, string given.'
identifier: argument.type
count: 1
path: tests/e2e/requires-class-attribute/fixtures/fail-on-unsatisfied-requirement/tests/RequiresClassAttributeFailsOnUnsatisfiedRequirementTest.php

-
message: '#^Parameter \#1 \$className of attribute class EliasHaeussler\\PHPUnitAttributes\\Attribute\\RequiresClass constructor expects class\-string, string given\.$#'
identifier: argument.type
count: 1
path: tests/e2e/requires-class-attribute/fixtures/parameter-migration/tests/RequiresClassAttributeFailsWithMigratedParameterTest.php

-
message: '#^Parameter \#1 \$className of attribute class EliasHaeussler\\PHPUnitAttributes\\Attribute\\RequiresClass constructor expects class\-string, string given\.$#'
rawMessage: 'Parameter #1 $className of attribute class EliasHaeussler\PHPUnitAttributes\Attribute\RequiresClass constructor expects class-string, string given.'
identifier: argument.type
count: 1
path: tests/e2e/requires-class-attribute/fixtures/skip-on-invalid-configuration-value/tests/RequiresClassAttributeSkipsOnInvalidConfigurationValueTest.php

-
message: '#^Parameter \#1 \$className of attribute class EliasHaeussler\\PHPUnitAttributes\\Attribute\\RequiresClass constructor expects class\-string, string given\.$#'
rawMessage: 'Parameter #1 $className of attribute class EliasHaeussler\PHPUnitAttributes\Attribute\RequiresClass constructor expects class-string, string given.'
identifier: argument.type
count: 1
path: tests/e2e/requires-class-attribute/fixtures/skip-on-unsatisfied-requirement/tests/RequiresClassAttributeSkipsOnUnsatisfiedRequirementTest.php

-
message: '#^Parameter \#1 \$className of class EliasHaeussler\\PHPUnitAttributes\\Attribute\\ForbidsClass constructor expects class\-string, string given\.$#'
rawMessage: 'Parameter #1 $className of class EliasHaeussler\PHPUnitAttributes\Attribute\ForbidsClass constructor expects class-string, string given.'
identifier: argument.type
count: 1
path: tests/unit/Metadata/ClassRequirementsTest.php

-
message: '#^Parameter \#1 \$className of class EliasHaeussler\\PHPUnitAttributes\\Attribute\\RequiresClass constructor expects class\-string, string given\.$#'
rawMessage: 'Parameter #1 $className of class EliasHaeussler\PHPUnitAttributes\Attribute\RequiresClass constructor expects class-string, string given.'
identifier: argument.type
count: 1
path: tests/unit/Metadata/ClassRequirementsTest.php

-
message: '#^Parameter \#1 \$className of static method EliasHaeussler\\PHPUnitAttributes\\TextUI\\Messages\:\:forMissingClass\(\) expects class\-string, string given\.$#'
rawMessage: 'Parameter #1 $className of static method EliasHaeussler\PHPUnitAttributes\TextUI\Messages::forMissingClass() expects class-string, string given.'
identifier: argument.type
count: 1
path: tests/unit/Metadata/ClassRequirementsTest.php
82 changes: 6 additions & 76 deletions src/PHPUnitAttributesExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,9 @@

namespace EliasHaeussler\PHPUnitAttributes;

use PHPUnit\Event\Facade;
use PHPUnit\Runner;
use PHPUnit\TextUI\Configuration;

use function array_unshift;
use function implode;

/**
* PHPUnitAttributesExtension.
*
Expand All @@ -43,34 +39,21 @@ public function bootstrap(
Runner\Extension\Facade $facade,
Runner\Extension\ParameterCollection $parameters,
): void {
$requiresClassMigrationResult = $this->registerClassAttributeTracers($facade, $parameters);
$this->registerClassAttributeTracers($facade, $parameters);
$this->registerConstantAttributeTracers($facade, $parameters);
$requiresPackageMigrationResult = $this->registerPackageAttributeTracers($facade, $parameters);
$this->registerPackageAttributeTracers($facade, $parameters);
$this->registerEnvAttributeTracers($facade, $parameters);

$this->triggerDeprecationForMigratedConfigurationParameters(
$configuration->colors(),
$requiresPackageMigrationResult,
$requiresClassMigrationResult,
);
}

private function registerClassAttributeTracers(
Runner\Extension\Facade $facade,
Runner\Extension\ParameterCollection $parameters,
): TextUI\Configuration\MigrationResult {
): void {
// RequiresClass
// @todo Remove support of legacy parameter in v3 of the library
$migrationResult = $this->migrateParameter(
'handleMissingClasses',
'failOnMissingClasses',
$parameters,
);

$facade->registerTracer(
new Event\Tracer\RequiresClassAttributeTracer(
new Metadata\ClassRequirements(),
Enum\OutcomeBehavior::tryFrom($migrationResult->value()) ?? Enum\OutcomeBehavior::Skip,
$this->resolveOutcomeBehavior('handleMissingClasses', $parameters),
),
);

Expand All @@ -81,8 +64,6 @@ private function registerClassAttributeTracers(
$this->resolveOutcomeBehavior('handleAvailableClasses', $parameters),
),
);

return $migrationResult;
}

private function registerConstantAttributeTracers(
Expand All @@ -109,19 +90,12 @@ private function registerConstantAttributeTracers(
private function registerPackageAttributeTracers(
Runner\Extension\Facade $facade,
Runner\Extension\ParameterCollection $parameters,
): TextUI\Configuration\MigrationResult {
): void {
// RequiresPackage
// @todo Remove support of legacy parameter in v3 of the library
$migrationResult = $this->migrateParameter(
'handleUnsatisfiedPackageRequirements',
'failOnUnsatisfiedPackageRequirements',
$parameters,
);

$facade->registerTracer(
new Event\Tracer\RequiresPackageAttributeTracer(
new Metadata\PackageRequirements(),
Enum\OutcomeBehavior::tryFrom($migrationResult->value()) ?? Enum\OutcomeBehavior::Skip,
$this->resolveOutcomeBehavior('handleUnsatisfiedPackageRequirements', $parameters),
),
);

Expand All @@ -132,8 +106,6 @@ private function registerPackageAttributeTracers(
$this->resolveOutcomeBehavior('handleSatisfiedPackageRequirements', $parameters),
),
);

return $migrationResult;
}

private function registerEnvAttributeTracers(
Expand All @@ -157,22 +129,6 @@ private function registerEnvAttributeTracers(
);
}

/**
* @param non-empty-string $new
* @param non-empty-string $legacy
*/
private function migrateParameter(
string $new,
string $legacy,
Runner\Extension\ParameterCollection $parameters,
): TextUI\Configuration\MigrationResult {
return TextUI\Configuration\Migration::forParameter($new, $legacy)
->withValueMapping(Enum\OutcomeBehavior::Fail->value, 'true', true)
->withValueMapping(Enum\OutcomeBehavior::Skip->value, 'false', true)
->resolve($parameters, Enum\OutcomeBehavior::Skip->value)
;
}

private function resolveOutcomeBehavior(
string $name,
Runner\Extension\ParameterCollection $parameters,
Expand All @@ -185,30 +141,4 @@ private function resolveOutcomeBehavior(

return $behavior ?? Enum\OutcomeBehavior::Skip;
}

private function triggerDeprecationForMigratedConfigurationParameters(
bool $colorize,
TextUI\Configuration\MigrationResult ...$migrationResults,
): void {
$deprecationMessages = [];

foreach ($migrationResults as $migrationResult) {
if ($migrationResult->wasMigrated()) {
$deprecationMessages[] = $migrationResult->getDiffAsString($colorize);
}
}

if ([] === $deprecationMessages) {
return;
}

// Early return if no deprecations are to be triggered
array_unshift(
$deprecationMessages,
'Your XML configuration contains deprecated extension parameters. Migrate your XML configuration:',
);

$emitter = Facade::emitter();
$emitter->testRunnerTriggeredPhpunitDeprecation(implode(PHP_EOL, $deprecationMessages));
}
}
121 changes: 0 additions & 121 deletions src/TextUI/Configuration/Migration.php

This file was deleted.

Loading