diff --git a/tests/run.php b/tests/run.php index a16aeb1..4ec2233 100644 --- a/tests/run.php +++ b/tests/run.php @@ -205,6 +205,22 @@ function testNamespaceConstantSignatureModelsRenderCurrentStrings(): void { assertTrue('Namespace constant identities should detect value changes.', !$identity->equals(new NamespaceConstantIdentity('STATUS', "'no'"))); } +function testTraitUseSignatureModelsCoverUnqualifiedAliasAndMultiplePrecedenceTargets(): void { + $alias = TraitUseSignature::forAlias(null, 'boot', null, 'private'); + assertSameValue('Trait alias signatures should support unqualified visibility-only aliases.', ' use boot as private', $alias->toLegacyString()); + + $precedence = TraitUseSignature::forPrecedence( + new TypeReference('\Vendor\SharedTrait'), + 'boot', + [new TypeReference('\Vendor\FirstFallback'), new TypeReference('\Vendor\SecondFallback')] + ); + assertSameValue('Trait precedence signatures should support multiple insteadof targets.', ' use \Vendor\SharedTrait::boot insteadof \Vendor\FirstFallback, \Vendor\SecondFallback', $precedence->toLegacyString()); + + $identity = new TraitUseIdentity('alias', [], 'boot', null, 'private'); + assertTrue('Unqualified trait alias identities should compare equal when semantic fields match.', $identity->equals(new TraitUseIdentity('alias', [], 'boot', null, 'private'))); + assertTrue('Unqualified trait alias identities should detect modifier changes.', !$identity->equals(new TraitUseIdentity('alias', [], 'boot', null, 'protected'))); +} + function testTraitUseSignatureModelsRenderCurrentStrings(): void { $use = TraitUseSignature::forUse([ new TypeReference('\Vendor\SharedTrait'), @@ -1383,6 +1399,69 @@ class Worker { ], $signatures); } +function testSignatureSearchCapturesTraitAliasEdgeCases(): void { + $root = createRepository('trait-alias-edge-cases', [ + 'src/Traits.php' => <<<'PHP' +__construct()', + '\Demo\{Trait SharedTrait}->boot()', + ], $signatures); +} + +function testTraitAliasVisibilityChangesAffectDiffs(): void { + $root = createRepository('trait-alias-visibility-diff', [ + 'src/Traits.php' => <<<'PHP' +diff('HEAD', 'WC')->getIncrement()); +} + function testTraitUseAdaptationChangesAffectDiffs(): void { $root = createRepository('trait-use-adaptation-diff', [ 'src/Traits.php' => <<<'PHP' @@ -1993,6 +2072,7 @@ function testCliParsingAndDefaults(): void { testCliPreloadFailuresAndUnknownOptions(); testTraitUseSignatureModelsRenderCurrentStrings(); +testTraitUseSignatureModelsCoverUnqualifiedAliasAndMultiplePrecedenceTargets(); testNamespaceConstantSignatureModelsRenderCurrentStrings(); testSignatureSearchResolvesImportedClassConstantFetchesInValues(); testClassConstantFetchAliasChangesAffectDiffs(); @@ -2021,6 +2101,8 @@ function testCliParsingAndDefaults(): void { testSignatureSearchCapturesByReferenceCallables(); testByReferenceChangesAffectDiffs(); testSignatureSearchCapturesTraitUseAdaptations(); +testSignatureSearchCapturesTraitAliasEdgeCases(); +testTraitAliasVisibilityChangesAffectDiffs(); testTraitUseAdaptationChangesAffectDiffs(); testSignatureSearchCapturesInterfaceInheritanceContracts(); testSignatureSearchCapturesClassInheritanceContracts();