Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Windows] Add platform agnostic asserts #461

Merged
merged 17 commits into from Aug 16, 2021
Merged

Conversation

TomasVotruba
Copy link
Member

@TomasVotruba TomasVotruba commented Jul 19, 2021

Merge of https://github.com/rectorphp/rector-src/pull/120/checks with vendor detection fixes

@TomasVotruba TomasVotruba changed the title platform agnostic asserts [Windows] Add platform agnostic asserts Jul 19, 2021
@TomasVotruba TomasVotruba force-pushed the platform-agnostic-asserts branch 6 times, most recently from 8b0adb8 to d028d34 Compare July 19, 2021 17:25
@TomasVotruba TomasVotruba enabled auto-merge (squash) July 19, 2021 17:27
@TomasVotruba TomasVotruba force-pushed the platform-agnostic-asserts branch 4 times, most recently from ce6e5d4 to 94d3b1d Compare July 19, 2021 21:05
@TomasVotruba
Copy link
Member Author

TomasVotruba commented Jul 19, 2021

@staabm This is rebased version of #120 with some commits cherry-picked to main.

There 2 things left:

  • make Rector\CodingStyle\Reflection\VendorLocationDetector::detectFunctionLikeReflection() work on windows, that's the 2 failing tests - I think it returns false positive on Windows
  • Windows "rules-tests" jobs now runs 13 mins, compared to 5 on Linux - that means the build now takes almost 3-times more time to wait; that's way too much for contributing smootly. Somthing like 6-7 mins might be acceptable

Could you check those? First one has higher priority and would be easier to solve IMO.
Thank you

@TomasVotruba
Copy link
Member Author

Btw, as an external contributor you should be able to checkout the PR like this:

gh pr checkout 461

And commit right to it.

I find GH CLI extermely for checking PRs from contributors and work with them quickly.

@staabm
Copy link
Contributor

staabm commented Jul 20, 2021

This is rebased version of #120 with some commits cherry-picked to main.

thank you so much.

* Windows "rules-tests" jobs now runs 13 mins, compared to 5 on Linux - that means the build now takes almost 3-times more time to wait; that's way too much for contributing smootly. Somthing like 6-7 mins might be acceptable

maybe we should start with testing on windows only in php8 (until we get it faster)?

* make `Rector\CodingStyle\Reflection\VendorLocationDetector::detectFunctionLikeReflection()` work on windows, that's the 2 failing tests - I think it returns false positive on Windows

I will have a look

@TomasVotruba
Copy link
Member Author

thank you so much.

I only moved some bits of code. Thank you for all the effort you're putting into this. Lot of Windows users who are stuck on legacy (IMO more easily than any other OS) will benefits from your contributions 👍

maybe we should start with testing on windows only in php8 (until we get it faster)?
only

We actually test only PHP 8, as that's min version before downgrade.

I will have a look

Thanks 👍

@TomasVotruba
Copy link
Member Author

@staabm Btw, I've managed to fix the double import @throws collission here:
#478

Took a bit of refactoring all over the place, but it works now 🤗

@staabm
Copy link
Contributor

staabm commented Jul 23, 2021

* Windows "rules-tests" jobs now runs 13 mins, compared to 5 on Linux - that means the build now takes almost 3-times more time to wait; that's way too much for contributing smootly. Somthing like 6-7 mins might be acceptable

blackfire profilling reveals that the most time while running tests is spent on rename'ing files

phpunit/phpunit/phpunit .\packages-tests\

grafik

phpunit/phpunit .\tests\

grafik

@staabm
Copy link
Contributor

staabm commented Jul 23, 2021

* make `Rector\CodingStyle\Reflection\VendorLocationDetector::detectFunctionLikeReflection()` work on windows, that's the 2 failing tests - I think it returns false positive on Windows

should be fixed with the latest commit 04feea9

I can't rebase right now from this workstation, but I hope it should be green now.

@staabm
Copy link
Contributor

staabm commented Jul 24, 2021

Exporting times of a phpunit run is described at https://stackoverflow.com/a/6775476

anotherway could be using speedtrap: https://phpmagazine.net/2021/02/speedtrap-detect-slow-phpunit-tests.html

maybe we could also investigate in a parallel testsuite with https://theiconic.tech/how-to-reduce-your-php-tests-execution-time-up-to-85-690f70e28d41

alternatively running blackfire directly on the gh-action: https://blog.blackfire.io/github-actions-support-for-blackfire.html

@TomasVotruba
Copy link
Member Author

I think this PR is now mixing to many different topics at once - performance, windows in CI, failing test on Windows etc. That may lead to extreme prolonging and overcomplexity. I'd prefer go the other way around, small changes and merge early.

@staabm
Copy link
Contributor

staabm commented Jul 24, 2021

The PR does not yet contain changes regarding performance.

Its all about windows github actions.

The comment maybe is misplaced, but I put it here as an repsonse to your initial request.

Is this PR acceptable without performance improvements?

@TomasVotruba
Copy link
Member Author

TomasVotruba commented Jul 24, 2021

Is this PR acceptable without performance improvements?

If we don't have to wait longer for the feedback from CI than before, it's ok.
It's not about performance, but rather boy scout rule; keeping the original CI quality at least the same.

@staabm
Copy link
Contributor

staabm commented Aug 7, 2021

I think we should drop the ci workflow and merge the changes, as it improves already the contribution flow for windows users.

i dont have time right now to analyze the gh-win perf topic

@TomasVotruba
Copy link
Member Author

The time got from 2 mins to 7 mins. That would slow down all PRs feedback by ~350 %. Not a way to go if we want to enjoy contributions:

image


We can merge it if the time difference is ~ 50 % or without running CI for now.

@staabm staabm enabled auto-merge (squash) August 8, 2021 18:20
@TomasVotruba
Copy link
Member Author

Thank you ☺️

@staabm staabm merged commit 6cdfebe into main Aug 16, 2021
@staabm staabm deleted the platform-agnostic-asserts branch August 16, 2021 07:08
@TomasVotruba
Copy link
Member Author

👍

@samsonasik
Copy link
Member

It seems make error in rector prefixed:

rectorphp/rector@4d052b0

https://github.com/rectorphp/rector/runs/3337580361

  1. Utils\Rector\Tests\Rector\RenameSimpleRector\RenameSimpleRectorTest::test with data set #0 (RectorPrefix20210816\Symplify\SmartFileSystem\SmartFileInfo Object (...))
    13
    Error: Class 'RectorPrefix20210816\PHPUnit\Framework\Constraint\IsEqual' not found

namespace Rector\Testing\PHPUnit;

use Nette\Utils\FileSystem;
use PHPUnit\Framework\Constraint\IsEqual;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I created PR #693 for it.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thx @samsonasik

is this something I could have covered before merging the PR?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it is fixed now, you can test scoping by run sh ./full_build.sh locally

@TomasVotruba
Copy link
Member Author

Btw, the PlatformAgnosticAssertions trait is breaking compability when using test with PHPUnit 8 and PHPUnit 9. See rectorphp/rector#6709

I could not find a quick solution, so for now, we're removing it from AbstractRectorTestCase, to allow people writing their own rules.

@staabm
Copy link
Contributor

staabm commented Sep 28, 2021

From reading rectorphp/rector#6709 I don't see how this issue relates to the trait.

Could you give more details?

@TomasVotruba
Copy link
Member Author

You're right, it's not clear from the description. It was the first next blocker there when the reported issue was fixed.

Here it's better described:
rectorphp/rector-phpunit#21 (comment)

Basically overriding native PHPUnit functions leads to BC breaks in case of their argument types + number changing. That's one of main reasons for composition (own methods) over extension (override).

@staabm
Copy link
Contributor

staabm commented Nov 29, 2021

Btw, the PlatformAgnosticAssertions trait is breaking compability when using test with PHPUnit 8 and PHPUnit 9. See rectorphp/rector#6709

hey @TomasVotruba ,

I am just working on a similar windows-support topic in a different project.
after analyzing phpunit a bit deeper I found a feature which allows the use of custom Comparator methods.

with https://github.com/staabm/phpunit-cross-os I utilized this API and added the capability to use regular assertEquals* assertions with phpunit, but in a way that differences in DIRECTORY_SEPARATOR and/or EOL-chars are not taken into account on a per TestCase basis.

if time allows I will see whether this also fits rector, without the problems mentioned in rectorphp/rector#6709

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
5 participants