This gist contains a BASH script that runs through all 16 scenarios related to Dealerdirect/phpcodesniffer-composer-installer issues #103.
For v0.6.0
of phpcodesniffer-composer-installer, three scenarios fail.
This is the scenario reported in the issue, and the scenarios described by @jrfnl:
❌ 09. Going from no-dev to uninstall with Codesniffer Package in require and Installer Plugin in require
❌ 16. Going from dev to no-dev with Codesniffer Package in require-dev and Installer Plugin in require-dev
❌ 21. Going from dev to uninstall with Codesniffer Package in require and Installer Plugin in require
The test scenarios can be run like this:
bash ./reproduce_issue_103.sh /tmp
The test scenarios can also be run with a development version of the
phpcodesniffer-composer-installer
plugin. In order to do so, pass the path to
plugin as the second parameter:
bash ./reproduce_issue_103.sh /tmp ./phpcodesniffer-composer-installer
The following factors are involved in the scenarios:
- PHP Codesniffer Package (A)
- PHP Codesniffer Composer Installer Plugin (B)
- require / no-dev (I)
- require-dev / dev (J)
- Manual Uninstall (K)
The Package and Plugin are present in the scenarios in the following variations:
- PHP Codesniffer Package (A) in Require (I) and PHP Codesniffer Composer Installer Plugin (B) in Require (I) (A+I/B+I)
- PHP Codesniffer Package (A) in Require (I) and PHP Codesniffer Composer Installer Plugin (B) in Require-dev (J) (A+I/B+J)
- PHP Codesniffer Package (A) in Require-dev (J) and PHP Codesniffer Composer Installer Plugin (B) in Require (I) (A+J/B+I)
- PHP Codesniffer Package (A) in Require-dev (J) and PHP Codesniffer Composer Installer Plugin (B) in Require-dev (J) (A+J/B+J)
The scenarios go through the following flows:
- Going from no-dev (I) to no-dev (I) (I->I)
- Going from no-dev (I) to dev (J) (I->J)
- Going from no-dev (I) to uninstall (K) (I->K)
- Going from dev (J) to no-dev (I) (J->I)
- Going from dev (J) to dev (J) (J->J)
- Going from dev (J) to uninstall (K) (J->K)
The above factors, in their various variations and flows, give us the following 24 possible scenarios:
- (I->I)
- (A+I/B+I) = I:I:I:I
- (A+I/B+J) = I:I:I:J
- (A+J/B+I) = I:I:J:I
- (A+J/B+J) = I:I:J:J
- (I->J)
- (A+I/B+I) = I:J:I:I
- (A+I/B+J) = I:J:I:J
- (A+J/B+I) = I:J:J:I
- (A+J/B+J) = I:J:J:J
- (I->K)
- (A+I/B+I) = I:K:I:I
- (A+I/B+J) = I:k:I:J
- (A+J/B+I) = I:K:J:I
- (A+J/B+J) = I:K:J:J
- (J->I)
- (A+I/B+I) = J:I:I:I
- (A+I/B+J) = J:I:I:J
- (A+J/B+I) = J:I:J:I
- (A+J/B+J) = J:I:J:J
- (J->J)
- (A+I/B+I) = J:J:I:I
- (A+I/B+J) = J:J:I:J
- (A+J/B+I) = J:J:J:I
- (A+J/B+J) = J:J:J:J
- (J->K)
- (A+I/B+I) = J:K:I:I
- (A+I/B+J) = J:k:I:J
- (A+J/B+I) = J:K:J:I
- (A+J/B+J) = j:K:J:J
For v0.6.0
of phpcodesniffer-composer-installer, running the scenarios gives the following output:
✔️ 01. Going from no-dev to no-dev with Codesniffer Package in require and Installer Plugin in require
✔️ 02. Going from no-dev to no-dev with Codesniffer Package in require and Installer Plugin in require-dev
✔️ 03. Going from no-dev to no-dev with Codesniffer Package in require-dev and Installer Plugin in require
✔️ 04. Going from no-dev to no-dev with Codesniffer Package in require-dev and Installer Plugin in require-dev
✔️ 05. Going from no-dev to dev with Codesniffer Package in require and Installer Plugin in require
✔️ 06. Going from no-dev to dev with Codesniffer Package in require and Installer Plugin in require-dev
✔️ 07. Going from no-dev to dev with Codesniffer Package in require-dev and Installer Plugin in require
✔️ 08. Going from no-dev to dev with Codesniffer Package in require-dev and Installer Plugin in require-dev
❌ 09. Going from no-dev to uninstall with Codesniffer Package in require and Installer Plugin in require
✔️ 10. Going from no-dev to uninstall with Codesniffer Package in require and Installer Plugin in require-dev
✔️ 11. Going from no-dev to uninstall with Codesniffer Package in require-dev and Installer Plugin in require
✔️ 12. Going from no-dev to uninstall with Codesniffer Package in require-dev and Installer Plugin in require-dev
✔️ 13. Going from dev to no-dev with Codesniffer Package in require and Installer Plugin in require
✔️ 14. Going from dev to no-dev with Codesniffer Package in require and Installer Plugin in require-dev
✔️ 15. Going from dev to no-dev with Codesniffer Package in require-dev and Installer Plugin in require
❌ 16. Going from dev to no-dev with Codesniffer Package in require-dev and Installer Plugin in require-dev
✔️ 17. Going from dev to dev with Codesniffer Package in require and Installer Plugin in require
✔️ 18. Going from dev to dev with Codesniffer Package in require and Installer Plugin in require-dev
✔️ 19. Going from dev to dev with Codesniffer Package in require-dev and Installer Plugin in require
✔️ 20. Going from dev to dev with Codesniffer Package in require-dev and Installer Plugin in require-dev
❌ 21. Going from dev to uninstall with Codesniffer Package in require and Installer Plugin in require
✔️ 22. Going from dev to uninstall with Codesniffer Package in require and Installer Plugin in require-dev
✔️ 23. Going from dev to uninstall with Codesniffer Package in require-dev and Installer Plugin in require
✔️ 24. Going from dev to uninstall with Codesniffer Package in require-dev and Installer Plugin in require-dev
[ END ]
❌ Failure