FunctionToConstantFixerTest.php 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  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\LanguageConstruct;
  12. use PhpCsFixer\Tests\Test\AbstractFixerTestCase;
  13. /**
  14. * @author SpacePossum
  15. *
  16. * @internal
  17. *
  18. * @covers \PhpCsFixer\Fixer\LanguageConstruct\FunctionToConstantFixer
  19. */
  20. final class FunctionToConstantFixerTest extends AbstractFixerTestCase
  21. {
  22. /**
  23. * @param string $expected
  24. * @param null|string $input
  25. * @param null|array $config
  26. *
  27. * @dataProvider provideTestCases
  28. */
  29. public function testFix($expected, $input = null, array $config = null)
  30. {
  31. if ($config) {
  32. $this->fixer->configure($config);
  33. }
  34. $this->doTest($expected, $input);
  35. }
  36. public function provideTestCases()
  37. {
  38. return [
  39. 'Minimal case, alternative casing, alternative statement end.' => [
  40. '<?php echo PHP_VERSION?>',
  41. '<?php echo PHPversion()?>',
  42. ],
  43. 'With embedded comment.' => [
  44. '<?php echo PHP_VERSION/**/?>',
  45. '<?php echo phpversion(/**/)?>',
  46. ],
  47. 'With white space.' => [
  48. '<?php echo PHP_VERSION ;',
  49. '<?php echo phpversion ( ) ;',
  50. ],
  51. 'With multi line whitespace.' => [
  52. '<?php echo
  53. PHP_VERSION
  54. '.'
  55. '.'
  56. ;',
  57. '<?php echo
  58. phpversion
  59. (
  60. )
  61. ;',
  62. ],
  63. 'Global namespaced.' => [
  64. '<?php echo \PHP_VERSION;',
  65. '<?php echo \phpversion();',
  66. ],
  67. 'Wrong number of arguments.' => [
  68. '<?php phpversion($a);',
  69. ],
  70. 'Wrong namespace.' => [
  71. '<?php A\B\phpversion();',
  72. ],
  73. 'Class creating.' => [
  74. '<?php new phpversion();',
  75. ],
  76. 'Class static method call.' => [
  77. '<?php A::phpversion();',
  78. ],
  79. 'Class method call.' => [
  80. '<?php $a->phpversion();',
  81. ],
  82. 'Overridden function.' => [
  83. '<?php if (!function_exists("phpversion")){function phpversion(){}}?>',
  84. ],
  85. 'phpversion only' => [
  86. '<?php echo PHP_VERSION; echo php_sapi_name(); echo pi();',
  87. '<?php echo phpversion(); echo php_sapi_name(); echo pi();',
  88. ['functions' => ['phpversion']],
  89. ],
  90. 'php_sapi_name only' => [
  91. '<?php echo phpversion(); echo PHP_SAPI; echo pi();',
  92. '<?php echo phpversion(); echo php_sapi_name(); echo pi();',
  93. ['functions' => ['php_sapi_name']],
  94. ],
  95. 'php_sapi_name in conditional' => [
  96. '<?php if ("cli" === PHP_SAPI && $a){ echo 123;}',
  97. '<?php if ("cli" === php_sapi_name() && $a){ echo 123;}',
  98. ['functions' => ['php_sapi_name']],
  99. ],
  100. 'pi only' => [
  101. '<?php echo phpversion(); echo php_sapi_name(); echo M_PI;',
  102. '<?php echo phpversion(); echo php_sapi_name(); echo pi();',
  103. ['functions' => ['pi']],
  104. ],
  105. 'multi line pi' => [
  106. '<?php
  107. $a =
  108. $b
  109. || $c < M_PI
  110. ;',
  111. '<?php
  112. $a =
  113. $b
  114. || $c < pi()
  115. ;',
  116. ['functions' => ['pi']],
  117. ],
  118. 'phpversion and pi' => [
  119. '<?php echo PHP_VERSION; echo php_sapi_name(); echo M_PI;',
  120. '<?php echo phpversion(); echo php_sapi_name(); echo M_PI;',
  121. ['functions' => ['pi', 'phpversion']],
  122. ],
  123. 'diff argument count than native allows' => [
  124. '<?php
  125. echo phpversion(1);
  126. echo php_sapi_name(1,2);
  127. echo pi(1);
  128. ',
  129. ],
  130. 'get_class => T_CLASS' => [
  131. '<?php
  132. class A
  133. {
  134. public function echoClassName($notMe)
  135. {
  136. echo get_class($notMe);
  137. echo __CLASS__/** 1 *//* 2 */;
  138. echo __CLASS__;
  139. }
  140. }
  141. trait A
  142. {
  143. public function A() {
  144. var_dump(__CLASS__);
  145. }
  146. }
  147. class B
  148. {
  149. use A;
  150. }
  151. ',
  152. '<?php
  153. class A
  154. {
  155. public function echoClassName($notMe)
  156. {
  157. echo get_class($notMe);
  158. echo get_class(/** 1 *//* 2 */);
  159. echo GET_Class();
  160. }
  161. }
  162. trait A
  163. {
  164. public function A() {
  165. var_dump(get_class());
  166. }
  167. }
  168. class B
  169. {
  170. use A;
  171. }
  172. ',
  173. ],
  174. 'get_class with leading backslash' => [
  175. '<?php __CLASS__;',
  176. '<?php \get_class();',
  177. ],
  178. ];
  179. }
  180. /**
  181. * @param array $config
  182. *
  183. * @dataProvider provideInvalidConfigurationKeysCases
  184. */
  185. public function testInvalidConfigurationKeys(array $config)
  186. {
  187. $this->expectException(\PhpCsFixer\ConfigurationException\InvalidFixerConfigurationException::class);
  188. $this->expectExceptionMessageRegExp('#^\[function_to_constant\] Invalid configuration: The option "functions" with value array is invalid\.$#');
  189. $this->fixer->configure($config);
  190. }
  191. public function provideInvalidConfigurationKeysCases()
  192. {
  193. return [
  194. [['functions' => ['a']]],
  195. [['functions' => [false => 1]]],
  196. [['functions' => ['abc' => true]]],
  197. ];
  198. }
  199. public function testInvalidConfigurationValue()
  200. {
  201. $this->expectException(\PhpCsFixer\ConfigurationException\InvalidFixerConfigurationException::class);
  202. $this->expectExceptionMessageRegExp('#^\[function_to_constant\] Invalid configuration: The option "0" does not exist\. Defined options are: "functions"\.$#');
  203. $this->fixer->configure(['pi123']);
  204. }
  205. }