Skip to content

Detect Test Attribute in TestsNodeAnalyzer::isTestClassMethod#486

Merged
samsonasik merged 8 commits into
rectorphp:mainfrom
Levivb:patch-1
May 8, 2025
Merged

Detect Test Attribute in TestsNodeAnalyzer::isTestClassMethod#486
samsonasik merged 8 commits into
rectorphp:mainfrom
Levivb:patch-1

Conversation

@Levivb

@Levivb Levivb commented May 7, 2025

Copy link
Copy Markdown
Contributor

The isTestClassMethod didn't take phpunit 12 #[Test] Attribute into account. Now it does. Tested in on a project and yielded thousands of updated method signatures spanning over 250 test files. So it seems to work :)

It uses the php 8.4 array_any function. But I think that's going to be downgraded automatically by rector, right?

Comment thread src/NodeAnalyzer/TestsNodeAnalyzer.php Outdated
@samsonasik

Copy link
Copy Markdown
Member

Please run

vendor/bin/rector && composer fix-cs

to fix ci,

also, please add fixture test

@Levivb

Levivb commented May 7, 2025

Copy link
Copy Markdown
Contributor Author

Sure thing. Will do that at home. There I can properly git clone the project (instead of working in github editor)

@Levivb

Levivb commented May 7, 2025

Copy link
Copy Markdown
Contributor Author

fixture test added and ran composer fix-cs

vendor/bin/rector blows up in my face:

$ vendor/bin/rector
Fatal error: Uncaught Error: Class "Symfony\Component\String\UnicodeString" not found in rector-phpunit/vendor/symfony/console/Helper/Helper.php:51
Stack trace:
#0 rector-phpunit/vendor/symfony/console/Helper/ProgressBar.php(405): Symfony\Component\Console\Helper\Helper::width('282')
#1 rector-phpunit/vendor/symfony/console/Helper/ProgressBar.php(77): Symfony\Component\Console\Helper\ProgressBar->setMaxSteps(282)
#2 rector-phpunit/vendor/symfony/console/Style/OutputStyle.php(43): Symfony\Component\Console\Helper\ProgressBar->__construct(Object(Symfony\Component\Console\Output\StreamOutput), 282)
#3 rector-phpunit/vendor/symfony/console/Style/SymfonyStyle.php(317): Symfony\Component\Console\Style\OutputStyle->createProgressBar(282)
#4 rector-phpunit/vendor/rector/rector-src/src/Console/Style/RectorStyle.php(35): Symfony\Component\Console\Style\SymfonyStyle->createProgressBar(282)
#5 rector-phpunit/vendor/symfony/console/Style/SymfonyStyle.php(293): Rector\Console\Style\RectorStyle->createProgressBar(282)
#6 rector-phpunit/vendor/rector/rector-src/src/Application/ApplicationFileProcessor.php(77): Symfony\Component\Console\Style\SymfonyStyle->progressStart(282)
#7 rector-phpunit/vendor/rector/rector-src/src/Console/Command/ProcessCommand.php(154): Rector\Application\ApplicationFileProcessor->run(Object(Rector\ValueObject\Configuration), Object(Symfony\Component\Console\Input\ArgvInput))
#8 rector-phpunit/vendor/symfony/console/Command/Command.php(326): Rector\Console\Command\ProcessCommand->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#9 rector-phpunit/vendor/symfony/console/Application.php(1078): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#10 rector-phpunit/vendor/symfony/console/Application.php(324): Symfony\Component\Console\Application->doRunCommand(Object(Rector\Console\Command\ProcessCommand), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#11 rector-phpunit/vendor/rector/rector-src/src/Console/ConsoleApplication.php(77): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#12 rector-phpunit/vendor/symfony/console/Application.php(175): Rector\Console\ConsoleApplication->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#13 rector-phpunit/vendor/rector/rector-src/bin/rector.php(158): Symfony\Component\Console\Application->run()
#14 rector-phpunit/vendor/rector/rector-src/bin/rector(4): require_once('/Users/me/rec...')
#15 rector-phpunit/vendor/bin/rector(119): include('/Users/me/rec...')
#16 {main}
  thrown in rector-phpunit/vendor/symfony/console/Helper/Helper.php on line 51

@samsonasik

Copy link
Copy Markdown
Member

You possibly have issue with composer update/install, you can see troubleshooting vendor patch here

https://github.com/symplify/vendor-patches/?tab=readme-ov-file#troubleshooting

for windows, you may need to add Git usr directory to path

@Levivb

Levivb commented May 8, 2025

Copy link
Copy Markdown
Contributor Author

That did the trick. thanks! Changes submitted

First time I saw vendor-patches in action, so it looked interactive to apply (pressing 'enter' to apply). But in reality, it didn't do anything :)

Is there a way to detect this problem so vendor-patches shows information on why it might hang?

@samsonasik

Copy link
Copy Markdown
Member

Could you add fixture to existing rules tests in this package that using the method instead of add new test class? Thank you

@Levivb

Levivb commented May 8, 2025

Copy link
Copy Markdown
Contributor Author

Sure, can you point me in the right direction? Because I didn't find a test for this rule at all

@samsonasik

Copy link
Copy Markdown
Member

You can search here, it seems at least 2 rules use of it https://github.com/search?q=repo%3Arectorphp%2Frector-phpunit%20isTestClassMethod&type=code

Then, locate fixture under rules-tests directory

@Levivb

Levivb commented May 8, 2025

Copy link
Copy Markdown
Contributor Author

Thanks. I was looking for TestWithAnnotationToAttributeRector. But there's no such test.

I've added a fixture to PHPUnit60/Rector/ClassMethod/AddDoesNotPerformAssertionToNonAssertingTestRector and to AnnotationsToAttributes/Rector/ClassMethod/TestWithAnnotationToAttributeRector

TestWithAnnotationToAttributeRectorTest is removed

@samsonasik

Copy link
Copy Markdown
Member

Let's give it a try, thank you @Levivb

@samsonasik samsonasik merged commit 462d1a9 into rectorphp:main May 8, 2025
6 checks passed
@Levivb Levivb deleted the patch-1 branch May 8, 2025 08:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

2 participants