StandardizeIncrementFixerTest.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578
  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\Operator;
  12. use PhpCsFixer\Tests\Test\AbstractFixerTestCase;
  13. /**
  14. * @author ntzm
  15. *
  16. * @internal
  17. *
  18. * @covers \PhpCsFixer\Fixer\Operator\StandardizeIncrementFixer
  19. */
  20. final class StandardizeIncrementFixerTest extends AbstractFixerTestCase
  21. {
  22. /**
  23. * @param string $expected
  24. * @param null|string $input
  25. *
  26. * @dataProvider provideFixCases
  27. */
  28. public function testFix($expected, $input = null)
  29. {
  30. $this->doTest($expected, $input);
  31. }
  32. public function provideFixCases()
  33. {
  34. return [
  35. [
  36. '<?php ++$i;',
  37. '<?php $i += 1;',
  38. ],
  39. [
  40. '<?php ++$i;',
  41. '<?php $i+=1;',
  42. ],
  43. [
  44. '<?php for ($i = 0; $i < $n; ++$i) {};',
  45. '<?php for ($i = 0; $i < $n; $i += 1) {};',
  46. ],
  47. [
  48. '<?php ++$foo->bar;',
  49. '<?php $foo->bar += 1;',
  50. ],
  51. [
  52. '<?php ++$foo->$bar;',
  53. '<?php $foo->$bar += 1;',
  54. ],
  55. [
  56. '<?php ++$foo->$$$bar;',
  57. '<?php $foo->$$$bar += 1;',
  58. ],
  59. [
  60. '<?php ++$foo["bar"];',
  61. '<?php $foo["bar"] += 1;',
  62. ],
  63. [
  64. '<?php ++$foo[baz()];',
  65. '<?php $foo[baz()] += 1;',
  66. ],
  67. [
  68. '<?php ++$foo[$bar->baz];',
  69. '<?php $foo[$bar->baz] += 1;',
  70. ],
  71. [
  72. '<?php ++$foo[$bar];',
  73. '<?php $foo[$bar] += 1;',
  74. ],
  75. [
  76. '<?php ++$foo[Bar::BAZ];',
  77. '<?php $foo[Bar::BAZ] += 1;',
  78. ],
  79. [
  80. '<?php echo $foo[++$i];',
  81. '<?php echo $foo[$i += 1];',
  82. ],
  83. [
  84. '<?php echo ++$foo->{$bar};',
  85. '<?php echo $foo->{$bar} += 1;',
  86. ],
  87. [
  88. '<?php echo ++$foo->{$bar->{$baz}};',
  89. '<?php echo $foo->{$bar->{$baz}} += 1;',
  90. ],
  91. [
  92. '<?php echo ++$foo[$bar[$baz]];',
  93. '<?php echo $foo[$bar[$baz]] += 1;',
  94. ],
  95. [
  96. '<?php ++$$foo;',
  97. '<?php $$foo += 1;',
  98. ],
  99. [
  100. '<?php ++$$$$foo;',
  101. '<?php $$$$foo += 1;',
  102. ],
  103. [
  104. '<?php ++${$foo};',
  105. '<?php ${$foo} += 1;',
  106. ],
  107. [
  108. '<?php ++$$${$foo};',
  109. '<?php $$${$foo} += 1;',
  110. ],
  111. [
  112. '<?php ++$a{$b};',
  113. '<?php $a{$b} += 1;',
  114. ],
  115. [
  116. '<?php ++$a[++$b];',
  117. '<?php $a[$b += 1] += 1;',
  118. ],
  119. [
  120. '<?php foo(++$a);',
  121. '<?php foo($a += 1);',
  122. ],
  123. [
  124. '<?php foo(++$a, $bar);',
  125. '<?php foo($a += 1, $bar);',
  126. ],
  127. [
  128. '<?php ++$foo->{++$a};',
  129. '<?php $foo->{$a += 1} += 1;',
  130. ],
  131. [
  132. '<?php ++${++$a};',
  133. '<?php ${$a += 1} += 1;',
  134. ],
  135. [
  136. '<?php ++$i ?>',
  137. '<?php $i += 1 ?>',
  138. ],
  139. [
  140. '<?php $a = $b ? ++$c : ++$d;',
  141. '<?php $a = $b ? $c += 1 : $d += 1;',
  142. ],
  143. [
  144. '<?php ++$a->{++$b}[++$c];',
  145. '<?php $a->{$b += 1}[$c += 1] += 1;',
  146. ],
  147. [
  148. '<?php (++$i);',
  149. '<?php ($i += 1);',
  150. ],
  151. [
  152. '<?php (((++$i)));',
  153. '<?php ((($i += 1)));',
  154. ],
  155. [
  156. '<?php ++$a->b->$c;',
  157. '<?php $a->b->$c += 1;',
  158. ],
  159. [
  160. '<?php ++$i/* foo */;',
  161. '<?php $i +=/* foo */1;',
  162. ],
  163. [
  164. '<?php ++$i/* foo *//* bar */;',
  165. '<?php $i /* foo */ += /* bar */1;',
  166. ],
  167. [
  168. '<?php ++$i/** foo *//** bar */;',
  169. '<?php $i /** foo */ += /** bar */1;',
  170. ],
  171. [
  172. "<?php ++\$i// foo\n;",
  173. "<?php \$i += // foo\n1;",
  174. ],
  175. [
  176. '<?php --$i;',
  177. '<?php $i -= 1;',
  178. ],
  179. [
  180. '<?php --$i;',
  181. '<?php $i-=1;',
  182. ],
  183. [
  184. '<?php for ($i = 0; $i < $n; --$i) {};',
  185. '<?php for ($i = 0; $i < $n; $i -= 1) {};',
  186. ],
  187. [
  188. '<?php --$foo->bar;',
  189. '<?php $foo->bar -= 1;',
  190. ],
  191. [
  192. '<?php --$foo->$bar;',
  193. '<?php $foo->$bar -= 1;',
  194. ],
  195. [
  196. '<?php --$foo->$$$bar;',
  197. '<?php $foo->$$$bar -= 1;',
  198. ],
  199. [
  200. '<?php --$foo["bar"];',
  201. '<?php $foo["bar"] -= 1;',
  202. ],
  203. [
  204. '<?php --$foo[baz()];',
  205. '<?php $foo[baz()] -= 1;',
  206. ],
  207. [
  208. '<?php --$foo[$bar->baz];',
  209. '<?php $foo[$bar->baz] -= 1;',
  210. ],
  211. [
  212. '<?php --$foo[$bar];',
  213. '<?php $foo[$bar] -= 1;',
  214. ],
  215. [
  216. '<?php --$foo[Bar::BAZ];',
  217. '<?php $foo[Bar::BAZ] -= 1;',
  218. ],
  219. [
  220. '<?php echo $foo[--$i];',
  221. '<?php echo $foo[$i -= 1];',
  222. ],
  223. [
  224. '<?php echo --$foo->{$bar};',
  225. '<?php echo $foo->{$bar} -= 1;',
  226. ],
  227. [
  228. '<?php echo --$foo->{$bar->{$baz}};',
  229. '<?php echo $foo->{$bar->{$baz}} -= 1;',
  230. ],
  231. [
  232. '<?php echo --$foo[$bar[$baz]];',
  233. '<?php echo $foo[$bar[$baz]] -= 1;',
  234. ],
  235. [
  236. '<?php --$$foo;',
  237. '<?php $$foo -= 1;',
  238. ],
  239. [
  240. '<?php --$$$$foo;',
  241. '<?php $$$$foo -= 1;',
  242. ],
  243. [
  244. '<?php --${$foo};',
  245. '<?php ${$foo} -= 1;',
  246. ],
  247. [
  248. '<?php --$$${$foo};',
  249. '<?php $$${$foo} -= 1;',
  250. ],
  251. [
  252. '<?php --$a{$b};',
  253. '<?php $a{$b} -= 1;',
  254. ],
  255. [
  256. '<?php --$a[--$b];',
  257. '<?php $a[$b -= 1] -= 1;',
  258. ],
  259. [
  260. '<?php foo(--$a);',
  261. '<?php foo($a -= 1);',
  262. ],
  263. [
  264. '<?php foo(--$a, $bar);',
  265. '<?php foo($a -= 1, $bar);',
  266. ],
  267. [
  268. '<?php --$foo->{--$a};',
  269. '<?php $foo->{$a -= 1} -= 1;',
  270. ],
  271. [
  272. '<?php --${--$a};',
  273. '<?php ${$a -= 1} -= 1;',
  274. ],
  275. [
  276. '<?php --$i ?>',
  277. '<?php $i -= 1 ?>',
  278. ],
  279. [
  280. '<?php $a = $b ? --$c : --$d;',
  281. '<?php $a = $b ? $c -= 1 : $d -= 1;',
  282. ],
  283. [
  284. '<?php --$a->{--$b}[--$c];',
  285. '<?php $a->{$b -= 1}[$c -= 1] -= 1;',
  286. ],
  287. [
  288. '<?php (--$i);',
  289. '<?php ($i -= 1);',
  290. ],
  291. [
  292. '<?php (((--$i)));',
  293. '<?php ((($i -= 1)));',
  294. ],
  295. [
  296. '<?php --$a->b->$c;',
  297. '<?php $a->b->$c -= 1;',
  298. ],
  299. [
  300. '<?php --$i/* foo */;',
  301. '<?php $i -=/* foo */1;',
  302. ],
  303. [
  304. '<?php --$i/* foo *//* bar */;',
  305. '<?php $i /* foo */ -= /* bar */1;',
  306. ],
  307. [
  308. '<?php --$i/** foo *//** bar */;',
  309. '<?php $i /** foo */ -= /** bar */1;',
  310. ],
  311. [
  312. "<?php --\$i// foo\n;",
  313. "<?php \$i -= // foo\n1;",
  314. ],
  315. [
  316. '<?php $i + 1;',
  317. ],
  318. [
  319. '<?php $i - 1;',
  320. ],
  321. [
  322. '<?php $i = 1;',
  323. ],
  324. [
  325. '<?php $i = -1;',
  326. ],
  327. [
  328. '<?php $i + 1;',
  329. ],
  330. [
  331. '<?php $i += 1.0;',
  332. ],
  333. [
  334. '<?php $i += "1";',
  335. ],
  336. [
  337. '<?php $i -= 1.0;',
  338. ],
  339. [
  340. '<?php $i -= "1";',
  341. ],
  342. [
  343. '<?php $i += 1 * 2;',
  344. ],
  345. [
  346. '<?php $i += 1 ** 2;',
  347. ],
  348. [
  349. '<?php $i += 1 / 2;',
  350. ],
  351. [
  352. '<?php $i += 1 + 2;',
  353. ],
  354. [
  355. '<?php $i += 1 - 2;',
  356. ],
  357. [
  358. '<?php $i += 1 % 2;',
  359. ],
  360. [
  361. '<?php $i += 1 ?: 2;',
  362. ],
  363. [
  364. '<?php $i += 1 & 2;',
  365. ],
  366. [
  367. '<?php $i += 1 ^ 2;',
  368. ],
  369. [
  370. '<?php $i += 1 >> 2;',
  371. ],
  372. [
  373. '<?php $i += 1 << 2;',
  374. ],
  375. [
  376. '<?php $i += 1 && true;',
  377. ],
  378. [
  379. '<?php $i += 1 || true;',
  380. ],
  381. [
  382. '<?php $i += 1 and true;',
  383. ],
  384. [
  385. '<?php $i += 1 or true;',
  386. ],
  387. [
  388. '<?php $i += 1 xor true;',
  389. ],
  390. [
  391. '<?php $i += 1 === 2;',
  392. ],
  393. [
  394. '<?php $i += 1 == 2;',
  395. ],
  396. [
  397. '<?php $i += 1 !== 2;',
  398. ],
  399. [
  400. '<?php $i += 1 != 2;',
  401. ],
  402. [
  403. '<?php $i += 1 < 2;',
  404. ],
  405. [
  406. '<?php $i += 1 > 2;',
  407. ],
  408. [
  409. '<?php $i += 1 <= 2;',
  410. ],
  411. [
  412. '<?php $i += 1 >= 2;',
  413. ],
  414. [
  415. '<?php $i += 1 <> 2;',
  416. ],
  417. [
  418. '<?php $i -= 1 * 2;',
  419. ],
  420. [
  421. '<?php $i -= 1 ** 2;',
  422. ],
  423. [
  424. '<?php $i -= 1 / 2;',
  425. ],
  426. [
  427. '<?php $i -= 1 + 2;',
  428. ],
  429. [
  430. '<?php $i -= 1 - 2;',
  431. ],
  432. [
  433. '<?php $i -= 1 % 2;',
  434. ],
  435. [
  436. '<?php $i -= 1 ?: 2;',
  437. ],
  438. [
  439. '<?php $i -= 1 & 2;',
  440. ],
  441. [
  442. '<?php $i -= 1 ^ 2;',
  443. ],
  444. [
  445. '<?php $i -= 1 >> 2;',
  446. ],
  447. [
  448. '<?php $i -= 1 << 2;',
  449. ],
  450. [
  451. '<?php $i -= 1 && true;',
  452. ],
  453. [
  454. '<?php $i -= 1 || true;',
  455. ],
  456. [
  457. '<?php $i -= 1 and true;',
  458. ],
  459. [
  460. '<?php $i -= 1 or true;',
  461. ],
  462. [
  463. '<?php $i -= 1 xor true;',
  464. ],
  465. [
  466. '<?php $i -= 1 === 2;',
  467. ],
  468. [
  469. '<?php $i -= 1 == 2;',
  470. ],
  471. [
  472. '<?php $i -= 1 !== 2;',
  473. ],
  474. [
  475. '<?php $i -= 1 != 2;',
  476. ],
  477. [
  478. '<?php $i -= 1 < 2;',
  479. ],
  480. [
  481. '<?php $i -= 1 > 2;',
  482. ],
  483. [
  484. '<?php $i -= 1 <= 2;',
  485. ],
  486. [
  487. '<?php $i -= 1 >= 2;',
  488. ],
  489. [
  490. '<?php $i -= 1 <> 2;',
  491. ],
  492. [
  493. '<?php #1
  494. #2
  495. ++$i#3
  496. #4
  497. #5
  498. #6
  499. #7
  500. ;#8
  501. #9',
  502. '<?php #1
  503. #2
  504. $i#3
  505. #4
  506. +=#5
  507. #6
  508. 1#7
  509. ;#8
  510. #9',
  511. ],
  512. [
  513. '<?php $a -= ($a -= ($a -= (--$a)));',
  514. '<?php $a -= ($a -= ($a -= ($a -= 1)));',
  515. ],
  516. [
  517. '<?php --$a[foo($d,foo($c))];',
  518. '<?php $a[foo($d,foo($c))] -= 1;',
  519. ],
  520. ];
  521. }
  522. /**
  523. * @param string $expected
  524. * @param null|string $input
  525. *
  526. * @dataProvider provideFix70Cases
  527. * @requires PHP 7.0
  528. */
  529. public function testFix70($expected, $input = null)
  530. {
  531. $this->doTest($expected, $input);
  532. }
  533. public function provideFix70Cases()
  534. {
  535. return [
  536. [
  537. '<?php $i -= 1 ?? 2;',
  538. ],
  539. [
  540. '<?php $i += 1 ?? 2;',
  541. ],
  542. [
  543. '<?php $i -= 1 <=> 2;',
  544. ],
  545. [
  546. '<?php $i += 1 <=> 2;',
  547. ],
  548. ];
  549. }
  550. /**
  551. * @param string $expected
  552. * @param null|string $input
  553. *
  554. * @dataProvider provideFix74Cases
  555. * @requires PHP 7.4
  556. */
  557. public function testFix74($expected, $input = null)
  558. {
  559. $this->doTest($expected, $input);
  560. }
  561. public function provideFix74Cases()
  562. {
  563. return [
  564. [
  565. '<?php $i += 1_0;',
  566. ],
  567. ];
  568. }
  569. }