ConstructorPromotionTransformerTest.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. <?php
  2. /*
  3. * This file is part of PHP CS Fixer.
  4. *
  5. * (c) Fabien Potencier <fabien@symfony.com>
  6. * Dariusz Rumiński <dariusz.ruminski@gmail.com>
  7. *
  8. * This source file is subject to the MIT license that is bundled
  9. * with this source code in the file LICENSE.
  10. */
  11. namespace PhpCsFixer\Tests\Tokenizer\Transformer;
  12. use PhpCsFixer\Tests\Test\AbstractTransformerTestCase;
  13. use PhpCsFixer\Tokenizer\CT;
  14. use PhpCsFixer\Tokenizer\Tokens;
  15. /**
  16. * @internal
  17. *
  18. * @covers \PhpCsFixer\Tokenizer\Transformer\ConstructorPromotionTransformer
  19. */
  20. final class ConstructorPromotionTransformerTest extends AbstractTransformerTestCase
  21. {
  22. /**
  23. * @param string $source
  24. *
  25. * @dataProvider provideProcessCases
  26. * @requires PHP 8.0
  27. */
  28. public function testProcess($source, array $expectedTokens)
  29. {
  30. $this->doTest(
  31. $source,
  32. $expectedTokens,
  33. [
  34. CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PUBLIC,
  35. CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PROTECTED,
  36. CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PRIVATE,
  37. ]
  38. );
  39. }
  40. public function provideProcessCases()
  41. {
  42. yield [
  43. '<?php
  44. class Point {
  45. public function __construct(
  46. public float $x = 0.0,
  47. protected float $y = 0.0,
  48. private float $z = 0.0,
  49. ) {}
  50. }
  51. ',
  52. [
  53. 14 => CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PUBLIC,
  54. 25 => CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PROTECTED,
  55. 36 => CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PRIVATE,
  56. ],
  57. ];
  58. yield [
  59. '<?php $a = new class {function/* 1 */__CONSTRUCT/* 2 */(/* 3 */public float $x,protected float $y,private float $z) {}}',
  60. [
  61. 16 => CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PUBLIC,
  62. 22 => CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PROTECTED,
  63. 28 => CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PRIVATE,
  64. ],
  65. ];
  66. }
  67. public function testNotChange()
  68. {
  69. $code = '<?php
  70. // class Foo1 {
  71. // function __construct(
  72. // private float $z = new class {
  73. // public function __construct() {}
  74. // }
  75. // ) {}
  76. // }
  77. // class Foo2 {
  78. // function __construct(
  79. // private array $z = [new class {}],
  80. // ) {}
  81. // }
  82. // class Foo3 {
  83. // public function __construct(
  84. // public float $x = 0.0,
  85. // protected float $y = 0.0,
  86. // private float $z = 0.0,
  87. // ) {}
  88. // }
  89. function __construct(/* public */ $foo){}
  90. class Foo4 {
  91. public function construct(/* public */ $foo)
  92. {}
  93. }
  94. class Foo5 {
  95. public $foo1;
  96. protected $foo2;
  97. private $foo3;
  98. public function __construct(/* public */ $foo){} public $foo4;
  99. }
  100. ';
  101. Tokens::clearCache();
  102. foreach (Tokens::fromCode($code) as $token) {
  103. static::assertFalse($token->isGivenKind([
  104. CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PUBLIC,
  105. CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PROTECTED,
  106. CT::T_CONSTRUCTOR_PROPERTY_PROMOTION_PRIVATE,
  107. ]));
  108. }
  109. }
  110. }