BracesFixerTest.php 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287
  1. <?php
  2. /*
  3. * This file is part of the PHP CS utility.
  4. *
  5. * (c) Fabien Potencier <fabien@symfony.com>
  6. *
  7. * This source file is subject to the MIT license that is bundled
  8. * with this source code in the file LICENSE.
  9. */
  10. namespace Symfony\CS\Tests\Fixer\PSR2;
  11. use Symfony\CS\Tests\Fixer\AbstractFixerTestBase;
  12. /**
  13. * @author Dariusz Rumiński <dariusz.ruminski@gmail.com>
  14. */
  15. class BracesFixerTest extends AbstractFixerTestBase
  16. {
  17. /**
  18. * @dataProvider provideFixControlContinuationBracesCases
  19. */
  20. public function testFixControlContinuationBraces($expected, $input = null)
  21. {
  22. $this->makeTest($expected, $input);
  23. }
  24. public function provideFixControlContinuationBracesCases()
  25. {
  26. return array(
  27. array(
  28. '<?php
  29. if (true) {
  30. $a = 1;
  31. } else {
  32. $b = 2;
  33. }',
  34. '<?php
  35. if (true) {
  36. $a = 1;
  37. }
  38. else {
  39. $b = 2;
  40. }',
  41. ),
  42. array(
  43. '<?php
  44. try {
  45. throw new \Exception();
  46. } catch (\LogicException $e) {
  47. // do nothing
  48. } catch (\Exception $e) {
  49. // do nothing
  50. }',
  51. '<?php
  52. try {
  53. throw new \Exception();
  54. }catch (\LogicException $e) {
  55. // do nothing
  56. }
  57. catch (\Exception $e) {
  58. // do nothing
  59. }',
  60. ),
  61. array(
  62. '<?php
  63. if (true) {
  64. echo 1;
  65. } elseif (true) {
  66. echo 2;
  67. }',
  68. '<?php
  69. if (true) {
  70. echo 1;
  71. } elseif (true)
  72. {
  73. echo 2;
  74. }',
  75. ),
  76. array(
  77. '<?php
  78. try {
  79. echo 1;
  80. } catch (Exception $e) {
  81. echo 2;
  82. }',
  83. '<?php
  84. try
  85. {
  86. echo 1;
  87. }
  88. catch (Exception $e)
  89. {
  90. echo 2;
  91. }',
  92. ),
  93. array(
  94. '<?php
  95. class Foo
  96. {
  97. public function bar(
  98. FooInterface $foo,
  99. BarInterface $bar,
  100. array $data = []
  101. ) {
  102. }
  103. }',
  104. '<?php
  105. class Foo
  106. {
  107. public function bar(
  108. FooInterface $foo,
  109. BarInterface $bar,
  110. array $data = []
  111. ){
  112. }
  113. }',
  114. ),
  115. array(
  116. '<?php
  117. if (1) {
  118. self::${$key} = $val;
  119. self::${$type}[$rule] = $pattern;
  120. self::${$type}[$rule] = array_merge($pattern, self::${$type}[$rule]);
  121. self::${$type}[$rule] = $pattern + self::${$type}["rules"];
  122. }
  123. ',
  124. ),
  125. );
  126. }
  127. /**
  128. * @dataProvider provideFixMissingBracesAndIndentCases
  129. */
  130. public function testFixMissingBracesAndIndent($expected, $input = null)
  131. {
  132. $this->makeTest($expected, $input);
  133. }
  134. public function provideFixMissingBracesAndIndentCases()
  135. {
  136. return array(
  137. array(
  138. '<?php
  139. if (true):
  140. $foo = 0;
  141. endif;',
  142. ),
  143. array(
  144. '<?php
  145. if (true) :
  146. $foo = 0;
  147. endif;',
  148. ),
  149. array(
  150. '<?php
  151. if (true) : $foo = 1; endif;',
  152. ),
  153. array(
  154. '<?php
  155. if (true) {
  156. $foo = 1;
  157. }',
  158. '<?php
  159. if (true)$foo = 1;',
  160. ),
  161. array(
  162. '<?php
  163. if (true) {
  164. $foo = 2;
  165. }',
  166. '<?php
  167. if (true) $foo = 2;',
  168. ),
  169. array(
  170. '<?php
  171. if (true) {
  172. $foo = 3;
  173. }',
  174. '<?php
  175. if (true){$foo = 3;}',
  176. ),
  177. array(
  178. '<?php
  179. if (true) {
  180. echo 1;
  181. } else {
  182. echo 2;
  183. }',
  184. '<?php
  185. if(true) { echo 1; } else echo 2;',
  186. ),
  187. array(
  188. '<?php
  189. if (true) {
  190. echo 3;
  191. } else {
  192. echo 4;
  193. }',
  194. '<?php
  195. if(true) echo 3; else { echo 4; }',
  196. ),
  197. array(
  198. '<?php
  199. if (true) {
  200. echo 5;
  201. } else {
  202. echo 6;
  203. }',
  204. '<?php
  205. if (true) echo 5; else echo 6;',
  206. ),
  207. array(
  208. '<?php
  209. if (true) {
  210. while (true) {
  211. $foo = 1;
  212. $bar = 2;
  213. }
  214. }',
  215. '<?php
  216. if (true) while (true) { $foo = 1; $bar = 2;}',
  217. ),
  218. array(
  219. '<?php
  220. if (true) {
  221. if (true) {
  222. echo 1;
  223. } else {
  224. echo 2;
  225. }
  226. } else {
  227. echo 3;
  228. }',
  229. '<?php
  230. if (true) if (true) echo 1; else echo 2; else echo 3;',
  231. ),
  232. array(
  233. '<?php
  234. if (true) {
  235. // sth here...
  236. if ($a && ($b || $c)) {
  237. $d = 1;
  238. }
  239. }',
  240. '<?php
  241. if (true) {
  242. // sth here...
  243. if ($a && ($b || $c)) $d = 1;
  244. }',
  245. ),
  246. array(
  247. '<?php
  248. for ($i = 1; $i < 10; ++$i) {
  249. echo $i;
  250. }
  251. for ($i = 1; $i < 10; ++$i) {
  252. echo $i;
  253. }',
  254. '<?php
  255. for ($i = 1; $i < 10; ++$i) echo $i;
  256. for ($i = 1; $i < 10; ++$i) { echo $i; }',
  257. ),
  258. array(
  259. '<?php
  260. for ($i = 1; $i < 5; ++$i) {
  261. for ($i = 1; $i < 10; ++$i) {
  262. echo $i;
  263. }
  264. }',
  265. '<?php
  266. for ($i = 1; $i < 5; ++$i) for ($i = 1; $i < 10; ++$i) { echo $i; }',
  267. ),
  268. array(
  269. '<?php
  270. do {
  271. echo 1;
  272. } while (false);',
  273. '<?php
  274. do { echo 1; } while (false);',
  275. ),
  276. array(
  277. '<?php
  278. while ($foo->next());',
  279. ),
  280. array(
  281. '<?php
  282. foreach ($foo as $bar) {
  283. echo $bar;
  284. }',
  285. '<?php
  286. foreach ($foo as $bar) echo $bar;',
  287. ),
  288. array(
  289. '<?php
  290. if (true) {
  291. $a = 1;
  292. }',
  293. '<?php
  294. if (true) {$a = 1;}',
  295. ),
  296. array(
  297. '<?php
  298. if (true) {
  299. $a = 1;
  300. }',
  301. '<?php
  302. if (true) {
  303. $a = 1;
  304. }',
  305. ),
  306. array(
  307. '<?php
  308. if (true) {
  309. $a = 1;
  310. $b = 2;
  311. while (true) {
  312. $c = 3;
  313. }
  314. $d = 4;
  315. }',
  316. '<?php
  317. if (true) {
  318. $a = 1;
  319. $b = 2;
  320. while (true) {
  321. $c = 3;
  322. }
  323. $d = 4;
  324. }',
  325. ),
  326. array(
  327. '<?php
  328. if (true) {
  329. $a = 1;
  330. $b = 2;
  331. }',
  332. ),
  333. array(
  334. '<?php
  335. if (1) {
  336. $a = 1;
  337. // comment at end
  338. }',
  339. ),
  340. array(
  341. '<?php
  342. if (1) {
  343. if (2) {
  344. $a = "a";
  345. } elseif (3) {
  346. $b = "b";
  347. // comment
  348. } else {
  349. $c = "c";
  350. }
  351. $d = "d";
  352. }',
  353. ),
  354. array(
  355. '<?php
  356. foreach ($numbers as $num) {
  357. for ($i = 0; $i < $num; ++$i) {
  358. $a = "a";
  359. }
  360. $b = "b";
  361. }',
  362. ),
  363. array(
  364. '<?php
  365. if (1) {
  366. if (2) {
  367. $foo = 2;
  368. if (3) {
  369. $foo = 3;
  370. }
  371. }
  372. }',
  373. ),
  374. array(
  375. '<?php
  376. declare(ticks=1) {
  377. $ticks = 1;
  378. }',
  379. '<?php
  380. declare(ticks=1) {
  381. $ticks = 1;
  382. }',
  383. ),
  384. array(
  385. '<?php
  386. if (true) {
  387. foo();
  388. } elseif (true) {
  389. bar();
  390. }',
  391. '<?php
  392. if (true)
  393. {
  394. foo();
  395. } elseif (true)
  396. {
  397. bar();
  398. }',
  399. ),
  400. array(
  401. '<?php
  402. while (true) {
  403. foo();
  404. }',
  405. '<?php
  406. while (true)
  407. {
  408. foo();
  409. }',
  410. ),
  411. array(
  412. '<?php
  413. do {
  414. echo $test;
  415. } while ($test = $this->getTest());',
  416. '<?php
  417. do
  418. {
  419. echo $test;
  420. }
  421. while ($test = $this->getTest());',
  422. ),
  423. array(
  424. '<?php
  425. do {
  426. echo $test;
  427. } while ($test = $this->getTest());',
  428. '<?php
  429. do
  430. {
  431. echo $test;
  432. }while ($test = $this->getTest());',
  433. ),
  434. array(
  435. '<?php
  436. class ClassName
  437. {
  438. /**
  439. * comment
  440. */
  441. public $foo = null;
  442. }',
  443. '<?php
  444. class ClassName
  445. {
  446. /**
  447. * comment
  448. */
  449. public $foo = null;
  450. }',
  451. ),
  452. array(
  453. '<?php
  454. while ($true) {
  455. try {
  456. throw new \Exception();
  457. } catch (\Exception $e) {
  458. // do nothing
  459. }
  460. }',
  461. ),
  462. array(
  463. '<?php
  464. interface Foo
  465. {
  466. public function setConfig(ConfigInterface $config);
  467. }',
  468. ),
  469. array(
  470. '<?php
  471. function bar()
  472. {
  473. $a = 1; //comment
  474. }',
  475. ),
  476. array(
  477. '<?php
  478. function & lambda()
  479. {
  480. return function () {};
  481. }',
  482. ),
  483. array(
  484. '<?php
  485. function nested()
  486. {
  487. $a = "a{$b->c()}d";
  488. }',
  489. ),
  490. array(
  491. '<?php
  492. function foo()
  493. {
  494. $a = $b->{$c->d}($e);
  495. $f->{$g} = $h;
  496. $i->{$j}[$k] = $l;
  497. $m = $n->{$o};
  498. $p = array($q->{$r}, $s->{$t});
  499. $u->{$v}->w = 1;
  500. }',
  501. ),
  502. array(
  503. '<?php
  504. function mixed()
  505. {
  506. $a = $b->{"a{$c}d"}();
  507. }',
  508. ),
  509. array(
  510. '<?php
  511. function mixedComplex()
  512. {
  513. $a = $b->{"a{$c->{\'foo-bar\'}()}d"}();
  514. }',
  515. ),
  516. array(
  517. '<?php
  518. function mixedComplex()
  519. {
  520. $a = ${"b{$foo}"}->{"a{$c->{\'foo-bar\'}()}d"}();
  521. }',
  522. ),
  523. array(
  524. '<?php
  525. if (true):
  526. echo 1;
  527. else:
  528. echo 2;
  529. endif;
  530. ',
  531. ),
  532. array(
  533. '<?php
  534. if ($test) { //foo
  535. echo 1;
  536. }',
  537. ),
  538. array(
  539. '<?php
  540. if (true) {
  541. // foo
  542. // bar
  543. if (true) {
  544. print("foo");
  545. print("bar");
  546. }
  547. }',
  548. '<?php
  549. if (true)
  550. // foo
  551. // bar
  552. {
  553. if (true)
  554. {
  555. print("foo");
  556. print("bar");
  557. }
  558. }',
  559. ),
  560. array(
  561. '<?php if (true) {
  562. echo "s";
  563. } ?>x',
  564. '<?php if (true) echo "s" ?>x',
  565. ),
  566. array(
  567. '<?php
  568. class Foo
  569. {
  570. public function getFaxNumbers()
  571. {
  572. if (1) {
  573. return $this->phoneNumbers->filter(function ($phone) {
  574. $a = 1;
  575. $b = 1;
  576. $c = 1;
  577. return ($phone->getType() === 1) ? true : false;
  578. });
  579. }
  580. }
  581. }',
  582. '<?php
  583. class Foo
  584. {
  585. public function getFaxNumbers()
  586. {
  587. if (1)
  588. return $this->phoneNumbers->filter(function ($phone) {
  589. $a = 1;
  590. $b = 1;
  591. $c = 1;
  592. return ($phone->getType() === 1) ? true : false;
  593. });
  594. }
  595. }',
  596. ),
  597. array(
  598. '<?php
  599. if (true) {
  600. if (true) {
  601. echo 1;
  602. } elseif (true) {
  603. echo 2;
  604. } else {
  605. echo 3;
  606. }
  607. }
  608. ',
  609. '<?php
  610. if(true)
  611. if(true)
  612. echo 1;
  613. elseif(true)
  614. echo 2;
  615. else
  616. echo 3;
  617. ',
  618. ),
  619. array(
  620. '<?php
  621. if (true) {
  622. if (true) {
  623. echo 1;
  624. } elseif (true) {
  625. echo 2;
  626. } else {
  627. echo 3;
  628. }
  629. }
  630. echo 4;
  631. ',
  632. '<?php
  633. if(true)
  634. if(true)
  635. echo 1;
  636. elseif(true)
  637. echo 2;
  638. else
  639. echo 3;
  640. echo 4;
  641. ',
  642. ),
  643. array(
  644. '<?php
  645. if (true) {
  646. if (true) {
  647. echo 1;
  648. } elseif (true) {
  649. echo 2;
  650. } else {
  651. echo 3;
  652. }
  653. }',
  654. '<?php
  655. if(true) if(true) echo 1; elseif(true) echo 2; else echo 3;',
  656. ),
  657. array(
  658. '<?php
  659. if (true) {
  660. if (true) {
  661. echo 1;
  662. } else {
  663. echo 2;
  664. }
  665. } else {
  666. echo 3;
  667. }',
  668. '<?php
  669. if(true) if(true) echo 1; else echo 2; else echo 3;',
  670. ),
  671. array(
  672. '<?php
  673. foreach ($data as $val) {
  674. // test val
  675. if ($val === "errors") {
  676. echo "!";
  677. }
  678. }',
  679. '<?php
  680. foreach ($data as $val)
  681. // test val
  682. if ($val === "errors") {
  683. echo "!";
  684. }',
  685. ),
  686. array(
  687. '<?php
  688. if (1) {
  689. foreach ($data as $val) {
  690. // test val
  691. if ($val === "errors") {
  692. echo "!";
  693. }
  694. }
  695. }',
  696. '<?php
  697. if (1)
  698. foreach ($data as $val)
  699. // test val
  700. if ($val === "errors") {
  701. echo "!";
  702. }',
  703. ),
  704. array(
  705. '<?php
  706. class Foo
  707. {
  708. public function main()
  709. {
  710. echo "Hello";
  711. }
  712. }',
  713. '<?php
  714. class Foo
  715. {
  716. public function main()
  717. {
  718. echo "Hello";
  719. }
  720. }',
  721. ),
  722. array(
  723. '<?php
  724. class Foo
  725. {
  726. public function main()
  727. {
  728. echo "Hello";
  729. }
  730. }',
  731. '<?php
  732. class Foo
  733. {
  734. public function main()
  735. {
  736. echo "Hello";
  737. }
  738. }',
  739. ),
  740. array(
  741. '<?php
  742. class Foo
  743. {
  744. public $bar;
  745. public $baz;
  746. }',
  747. '<?php
  748. class Foo
  749. {
  750. public $bar;
  751. public $baz;
  752. }',
  753. ),
  754. array(
  755. '<?php
  756. function myFunction($foo, $bar)
  757. {
  758. return \Foo::{$foo}($bar);
  759. }',
  760. ),
  761. );
  762. }
  763. /**
  764. * @dataProvider provideFixClassyBracesCases
  765. */
  766. public function testFixClassyBraces($expected, $input = null)
  767. {
  768. $this->makeTest($expected, $input);
  769. }
  770. public function provideFixClassyBracesCases()
  771. {
  772. return array(
  773. array(
  774. '<?php
  775. class FooA
  776. {
  777. }',
  778. '<?php
  779. class FooA {}',
  780. ),
  781. array(
  782. '<?php
  783. class FooB
  784. {
  785. }',
  786. '<?php
  787. class FooB{}',
  788. ),
  789. array(
  790. '<?php
  791. class FooC
  792. {
  793. }',
  794. '<?php
  795. class FooC
  796. {}',
  797. ),
  798. array(
  799. '<?php
  800. interface FooD
  801. {
  802. }',
  803. '<?php
  804. interface FooD {}',
  805. ),
  806. array(
  807. '<?php
  808. class TestClass extends BaseTestClass implements TestInterface
  809. {
  810. private $foo;
  811. }',
  812. '<?php
  813. class TestClass extends BaseTestClass implements TestInterface { private $foo;}',
  814. ),
  815. array(
  816. '<?php
  817. abstract class Foo
  818. {
  819. public function getProcess($foo)
  820. {
  821. return true;
  822. }
  823. }',
  824. ),
  825. array('<?php
  826. function foo()
  827. {
  828. return "$c ($d)";
  829. }',
  830. ),
  831. );
  832. }
  833. /**
  834. * @dataProvider provideFixClassyBraces54Cases
  835. * @requires PHP 5.4
  836. */
  837. public function testFixClassyBraces54($expected, $input = null)
  838. {
  839. $this->makeTest($expected, $input);
  840. }
  841. public function provideFixClassyBraces54Cases()
  842. {
  843. return array(
  844. array(
  845. '<?php
  846. trait TFoo
  847. {
  848. public $a;
  849. }',
  850. '<?php
  851. trait TFoo {public $a;}',
  852. ),
  853. );
  854. }
  855. /**
  856. * @dataProvider provideFixAnonFunctionInShortArraySyntax54Cases
  857. * @requires PHP 5.4
  858. */
  859. public function testFixAnonFunctionInShortArraySyntax54($expected, $input = null)
  860. {
  861. $this->makeTest($expected, $input);
  862. }
  863. public function provideFixAnonFunctionInShortArraySyntax54Cases()
  864. {
  865. return array(
  866. array(
  867. '<?php
  868. function myFunction()
  869. {
  870. return [
  871. [
  872. "callback" => function ($data) {
  873. return true;
  874. }
  875. ],
  876. [
  877. "callback" => function ($data) {
  878. return true;
  879. },
  880. ],
  881. ];
  882. }',
  883. ),
  884. );
  885. }
  886. /**
  887. * @dataProvider provideFixCommentBeforeBraceCases
  888. */
  889. public function testFixCommentBeforeBrace($expected, $input = null)
  890. {
  891. $this->makeTest($expected, $input);
  892. }
  893. public function provideFixCommentBeforeBraceCases()
  894. {
  895. return array(
  896. array(
  897. '<?php
  898. if ($test) {
  899. // foo
  900. echo 1;
  901. }',
  902. '<?php
  903. if ($test) // foo
  904. {
  905. echo 1;
  906. }',
  907. ),
  908. );
  909. }
  910. /**
  911. * @dataProvider provideFixWhitespaceBeforeBraceCases
  912. */
  913. public function testFixWhitespaceBeforeBrace($expected, $input = null)
  914. {
  915. $this->makeTest($expected, $input);
  916. }
  917. public function provideFixWhitespaceBeforeBraceCases()
  918. {
  919. return array(
  920. array(
  921. '<?php
  922. if (true) {
  923. echo 1;
  924. }',
  925. '<?php
  926. if (true)
  927. {
  928. echo 1;
  929. }',
  930. ),
  931. array(
  932. '<?php
  933. if (true) {
  934. echo 1;
  935. }',
  936. '<?php
  937. if (true){
  938. echo 1;
  939. }',
  940. ),
  941. array(
  942. '<?php
  943. if (true) {
  944. echo 1;
  945. }',
  946. '<?php
  947. if (true) {
  948. echo 1;
  949. }',
  950. ),
  951. array(
  952. '<?php
  953. while ($file = $this->getFile()) {
  954. }',
  955. '<?php
  956. while ($file = $this->getFile())
  957. {
  958. }',
  959. ),
  960. array(
  961. '<?php
  962. switch (n) {
  963. case label1:
  964. echo 1;
  965. echo 2;
  966. break;
  967. default:
  968. echo 3;
  969. echo 4;
  970. }',
  971. '<?php
  972. switch (n)
  973. {
  974. case label1:
  975. echo 1;
  976. echo 2;
  977. break;
  978. default:
  979. echo 3;
  980. echo 4;
  981. }',
  982. ),
  983. );
  984. }
  985. /**
  986. * @dataProvider provideFixFunctionsCases
  987. */
  988. public function testFixFunctions($expected, $input = null)
  989. {
  990. $this->makeTest($expected, $input);
  991. }
  992. public function provideFixFunctionsCases()
  993. {
  994. return array(
  995. array(
  996. '<?php
  997. function download()
  998. {
  999. }',
  1000. '<?php
  1001. function download() {
  1002. }',
  1003. ),
  1004. array(
  1005. '<?php
  1006. class Foo
  1007. {
  1008. public function AAAA()
  1009. {
  1010. }
  1011. public function BBBB()
  1012. {
  1013. }
  1014. public function CCCC()
  1015. {
  1016. }
  1017. }',
  1018. '<?php
  1019. class Foo
  1020. {
  1021. public function AAAA(){
  1022. }
  1023. public function BBBB() {
  1024. }
  1025. public function CCCC()
  1026. {
  1027. }
  1028. }',
  1029. ),
  1030. array(
  1031. '<?php
  1032. filter(function () {
  1033. return true;
  1034. });
  1035. ',
  1036. ),
  1037. array(
  1038. '<?php
  1039. filter(function ($a) {});',
  1040. '<?php
  1041. filter(function ($a)
  1042. {});',
  1043. ),
  1044. array(
  1045. '<?php
  1046. filter(function ($b) {});',
  1047. '<?php
  1048. filter(function ($b){});',
  1049. ),
  1050. array(
  1051. '<?php
  1052. class Foo
  1053. {
  1054. public static function bar()
  1055. {
  1056. return 1;
  1057. }
  1058. }',
  1059. ),
  1060. array(
  1061. '<?php
  1062. usort($this->fixers, function &($a, $b) use ($selfName) {
  1063. return 1;
  1064. });',
  1065. ),
  1066. array(
  1067. '<?php
  1068. usort(
  1069. $this->fixers,
  1070. function &($a, $b) use ($selfName) {
  1071. return 1;
  1072. }
  1073. );',
  1074. ),
  1075. );
  1076. }
  1077. /**
  1078. * @dataProvider provideFixSpaceAroundTokenCases
  1079. */
  1080. public function testFixSpaceAroundToken($expected, $input = null)
  1081. {
  1082. $this->makeTest($expected, $input);
  1083. }
  1084. public function provideFixSpaceAroundTokenCases()
  1085. {
  1086. return array(
  1087. array(
  1088. '<?php
  1089. try {
  1090. throw new Exception();
  1091. } catch (Exception $e) {
  1092. log($e);
  1093. }',
  1094. '<?php
  1095. try{
  1096. throw new Exception();
  1097. }catch (Exception $e){
  1098. log($e);
  1099. }',
  1100. ),
  1101. array(
  1102. '<?php
  1103. do {
  1104. echo 1;
  1105. } while ($test);',
  1106. '<?php
  1107. do{
  1108. echo 1;
  1109. }while($test);',
  1110. ),
  1111. array(
  1112. '<?php
  1113. if (true === true
  1114. && true === true
  1115. ) {
  1116. }',
  1117. '<?php
  1118. if(true === true
  1119. && true === true
  1120. ) {
  1121. }',
  1122. ),
  1123. array(
  1124. '<?php
  1125. if (1) {
  1126. }
  1127. if ($this->tesT ($test)) {
  1128. }',
  1129. '<?php
  1130. if(1){
  1131. }
  1132. if ($this->tesT ($test)) {
  1133. }',
  1134. ),
  1135. array(
  1136. '<?php
  1137. if (true) {
  1138. } elseif (false) {
  1139. } else {
  1140. }',
  1141. '<?php
  1142. if(true){
  1143. }elseif(false){
  1144. }else{
  1145. }',
  1146. ),
  1147. array(
  1148. '<?php
  1149. $foo = function& () use ($bar) {};',
  1150. '<?php
  1151. $foo = function& ()use($bar){};',
  1152. ),
  1153. array(
  1154. '<?php
  1155. // comment
  1156. declare(strict_types=1);
  1157. // comment
  1158. while (true) {
  1159. }',
  1160. ),
  1161. array(
  1162. '<?php
  1163. declare(ticks=1) {
  1164. }',
  1165. '<?php
  1166. declare ( ticks = 1 ) {
  1167. }',
  1168. ),
  1169. );
  1170. }
  1171. /**
  1172. * @dataProvider provide55Cases
  1173. * @requires PHP 5.5
  1174. */
  1175. public function test55($expected, $input = null)
  1176. {
  1177. $this->makeTest($expected, $input);
  1178. }
  1179. public function provide55Cases()
  1180. {
  1181. return array(
  1182. array(
  1183. '<?php
  1184. try {
  1185. throw new \Exception();
  1186. } catch (\LogicException $e) {
  1187. // do nothing
  1188. } catch (\Exception $e) {
  1189. // do nothing
  1190. } finally {
  1191. echo "finish!";
  1192. }',
  1193. '<?php
  1194. try {
  1195. throw new \Exception();
  1196. }catch (\LogicException $e) {
  1197. // do nothing
  1198. }
  1199. catch (\Exception $e) {
  1200. // do nothing
  1201. }
  1202. finally {
  1203. echo "finish!";
  1204. }',
  1205. ),
  1206. );
  1207. }
  1208. /**
  1209. * @dataProvider providePreserveLineAfterControlBrace
  1210. */
  1211. public function testPreserveLineAfterControlBrace($expected, $input = null)
  1212. {
  1213. $this->makeTest($expected, $input);
  1214. }
  1215. public function providePreserveLineAfterControlBrace()
  1216. {
  1217. return array(
  1218. array(
  1219. '<?php
  1220. if (true) {
  1221. // The blank line helps with legibility in nested control structures
  1222. if (true) {
  1223. // if body
  1224. }
  1225. // if body
  1226. }',
  1227. ),
  1228. array(
  1229. "<?php if (true) {\r\n\r\n// CRLF newline\r\n}",
  1230. ),
  1231. );
  1232. }
  1233. }