ClassAttributeTargetsCheckTest
class ClassAttributeTargetsCheckTest extends CheckTestCase (View source)
Constants
| private TARGET_METHOD |
|
| private TARGET_PROPERTY |
|
| private TARGET_CLASS_CONSTANT |
|
Methods
Create a stubbed StubDataQueryInterface.
Create a StubDataQueryInterface mock, for tests that constrain arguments with with() or assert call counts with expects().
Create a mock PHPFunction with the given id/name.
Create a mock PHPClass with the given id/name.
Create a mock PHPClass with properties (isFinal, isReadonly, namespace, parentClass).
Create a mock PHPProperty with the given name and optional version bounds.
Create a mock PHPMethod with the given name.
Create a mock PHPParameter with the given name and type.
Create a StandaloneType with the given type name.
Create a mock type that returns a string representation.
No description
No description
No description
No description
No description
No description
No description
No description
No description
No description
No description
No description
No description
The stub parser falls back to a symbolic name when the constant is not defined on the runtime that parsed the stubs. Casting that with (int) yields 0, so a stub declaring exactly the right target was reported as declaring none.
The worst case: "1|Attribute::TARGET_CONSTANT" casts to 1, which is a valid-looking bitmask, so the check reported a confident, wrong "missing target(s)" result.
No description
A genuine mismatch must still be reported — the resolution must not mask real defects.
An unresolvable value must fail loudly with the raw text rather than being cast to a plausible-looking number and compared.
#[Attribute] with no flags means TARGET_ALL, which widened from 63 to 127 in PHP 8.5
when TARGET_CONSTANT was added. The old code hardcoded 63 as its fallback.
No description
The same bare stub declaration must not satisfy both 63 and 127 — otherwise the version map is being ignored.
Details
protected StubDataQueryInterface&Stub
createMockStorageManager()
Create a stubbed StubDataQueryInterface.
A stub rather than a mock: these doubles only supply return values and never verify interactions, so createMock() made PHPUnit emit "No expectations were configured for the mock object" for every one of them — 1777 notices from this helper alone.
The return type names the double explicitly (&Stub) instead of just the interface,
so ->method(...) resolves for static analysis; previously every such call across
~90 test files was reported as an undefined method, burying real warnings.
protected StubDataQueryInterface&MockObject
createStorageManagerMock()
Create a StubDataQueryInterface mock, for tests that constrain arguments with with() or assert call counts with expects().
Those only work on a mock: on a stub, with() is silently ignored (PHPUnit deprecates it and will remove it in 13), so a test using the stub helper would appear to pin the argument while actually accepting anything.
protected PHPFunction
createMockFunction(string $name, array $parameters = [], $returnType = null)
Create a mock PHPFunction with the given id/name.
protected PHPClass
createMockClass(string $name, array $methods = [])
Create a mock PHPClass with the given id/name.
protected PHPClass
createMockClassWithProperties(string $name, string|null $namespace = null, bool|null $isFinal = null, bool|null $isReadonly = null, array $methods = [], PHPClass|null $parentClass = null, array $interfaces = [], array $properties = [])
Create a mock PHPClass with properties (isFinal, isReadonly, namespace, parentClass).
protected PHPProperty
createMockProperty(string $name, string|null $sinceVersion = null, string|null $removedVersion = null)
Create a mock PHPProperty with the given name and optional version bounds.
protected PHPMethod
createMockMethod(string $name, array $parameters = [], $returnType = null)
Create a mock PHPMethod with the given name.
protected PHPParameter
createMockParameter(string $name, mixed|null $type = null, string|null $sinceVersion = null, string|null $removedVersion = null, bool $isDeprecated = false, string|null $deprecatedSinceVersion = null)
Create a mock PHPParameter with the given name and type.
Note: Supports both getDeclaredType() and getType() methods to be compatible with different validators (ParameterNamesCheck uses getName, ParameterTypesCheck uses getType).
protected StandaloneType
createType(string $typeName)
Create a StandaloneType with the given type name.
protected object
createMockType(string $typeString)
Create a mock type that returns a string representation.
__construct(string $typeName)
No description
string
__toString()
No description
string
getTypeName()
No description
void
testSupportsPhp80AndAbove()
No description
void
testDoesNotSupportOlderPhpVersions()
No description
void
testMatchingTargetsPasses()
No description
void
testNonAttributeClassPasses()
No description
void
testOtherAttributesAreIgnored()
No description
void
testMissingTargetFails()
No description
void
testUnexpectedTargetFails()
No description
void
testAttributeInReflectionButNotInStubsFails()
No description
void
testAttributeInStubsButNotInReflectionFails()
No description
void
testDefaultFlagsTreatedAsTargetAll()
No description
void
testNamedFlagsArgumentSupported()
No description
void
testClassNotFoundInReflection()
No description
void
testClassNotFoundInStubs()
No description
void
testSingleSymbolicFlagIsResolvedNotCastToZero()
The stub parser falls back to a symbolic name when the constant is not defined on the runtime that parsed the stubs. Casting that with (int) yields 0, so a stub declaring exactly the right target was reported as declaring none.
void
testMixedSymbolicBitwiseOrIsResolvedNotTruncated()
The worst case: "1|Attribute::TARGET_CONSTANT" casts to 1, which is a valid-looking bitmask, so the check reported a confident, wrong "missing target(s)" result.
void
testFullySymbolicBitwiseOrIsResolved()
No description
void
testSymbolicResolutionStillDetectsARealMismatch()
A genuine mismatch must still be reported — the resolution must not mask real defects.
void
testUnresolvableFlagsFailWithTheRawValue()
An unresolvable value must fail loudly with the raw text rather than being cast to a plausible-looking number and compared.
void
testBareAttributeUsesTheVersionsTargetAllOn85AndLater()
#[Attribute] with no flags means TARGET_ALL, which widened from 63 to 127 in PHP 8.5
when TARGET_CONSTANT was added. The old code hardcoded 63 as its fallback.
void
testBareAttributeUsesTheNarrowerTargetAllBefore85()
No description
void
testBareAttributeIsVersionSensitive()
The same bare stub declaration must not satisfy both 63 and 127 — otherwise the version map is being ignored.