NoHomoglyphNamesFixerTest.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  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\Fixer\Naming;
  12. use PhpCsFixer\Tests\Test\AbstractFixerTestCase;
  13. /**
  14. * @author Fred Cox <mcfedr@gmail.com>
  15. *
  16. * @internal
  17. *
  18. * @covers \PhpCsFixer\Fixer\Naming\NoHomoglyphNamesFixer
  19. */
  20. final class NoHomoglyphNamesFixerTest extends AbstractFixerTestCase
  21. {
  22. /**
  23. * @dataProvider provideFixCases
  24. *
  25. * @param mixed $expected
  26. * @param null|mixed $input
  27. */
  28. public function testFix($expected, $input = null)
  29. {
  30. $this->doTest($expected, $input);
  31. }
  32. public function provideFixCases()
  33. {
  34. return [
  35. ['<?php $øøøøa = 1;'],
  36. ['<?php $name = "This should not be changed";'],
  37. ['<?php $name = "Это не меняется";'],
  38. ['<?php $name = \'Это не меняется\';'],
  39. ['<?php // This should not be chаnged'],
  40. ['<?php /* This should not be chаnged */'],
  41. [
  42. '<?php $name = \'wrong\';',
  43. '<?php $nаmе = \'wrong\';', // 'а' in name is a cyrillic letter
  44. ],
  45. [
  46. '<?php $a->name = \'wrong\';',
  47. '<?php $a->nаmе = \'wrong\';',
  48. ],
  49. [
  50. '<?php class A { private $name; }',
  51. '<?php class A { private $nаmе; }',
  52. ],
  53. [
  54. '<?php class Broken {}',
  55. '<?php class Вroken {}', // 'В' in Broken is a cyrillic letter
  56. ],
  57. [
  58. '<?php interface Broken {}',
  59. '<?php interface Вroken {}',
  60. ],
  61. [
  62. '<?php trait Broken {}',
  63. '<?php trait Вroken {}',
  64. ],
  65. [
  66. '<?php $a = new Broken();',
  67. '<?php $a = new Вroken();',
  68. ],
  69. [
  70. '<?php class A extends Broken {}',
  71. '<?php class A extends Вroken {}',
  72. ],
  73. [
  74. '<?php class A implements Broken {}',
  75. '<?php class A implements Вroken {}',
  76. ],
  77. [
  78. '<?php class A { use Broken; }',
  79. '<?php class A { use Вroken; }',
  80. ],
  81. [
  82. '<?php echo Broken::class;',
  83. '<?php echo Вroken::class;',
  84. ],
  85. [
  86. '<?php function name() {}',
  87. '<?php function nаmе() {}',
  88. ],
  89. [
  90. '<?php name();',
  91. '<?php nаmе();',
  92. ],
  93. [
  94. '<?php $first_name = "a";',
  95. '<?php $first_name = "a";', // Weird underscore symbol
  96. ],
  97. ];
  98. }
  99. /**
  100. * @dataProvider provideFix74Cases
  101. * @requires PHP 7.4
  102. *
  103. * @param mixed $expected
  104. * @param null|mixed $input
  105. */
  106. public function testFix74($expected, $input = null)
  107. {
  108. $this->doTest($expected, $input);
  109. }
  110. public function provideFix74Cases()
  111. {
  112. return [
  113. [
  114. '<?php class A { private string $name; }',
  115. '<?php class A { private string $nаmе; }',
  116. ],
  117. [
  118. '<?php class A { private ? Foo\Bar $name; }',
  119. '<?php class A { private ? Foo\Bar $nаmе; }',
  120. ],
  121. [
  122. '<?php class A { private array $name; }',
  123. '<?php class A { private array $nаmе; }',
  124. ],
  125. ];
  126. }
  127. }