BracesFixerTest.php 22 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241
  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 \Exeption();
  46. } catch (\LogicException $e) {
  47. // do nothing
  48. } catch (\Exception $e) {
  49. // do nothing
  50. }',
  51. '<?php
  52. try {
  53. throw new \Exeption();
  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 $2) {
  81. echo 2;
  82. }',
  83. '<?php
  84. try
  85. {
  86. echo 1;
  87. }
  88. catch (Exception $2)
  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; ++$) {
  249. echo $i;
  250. }
  251. for ($i = 1; $i < 10; ++$) {
  252. echo $i;
  253. }',
  254. '<?php
  255. for ($i = 1; $i < 10; ++$) echo $i;
  256. for ($i = 1; $i < 10; ++$) { 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 \Exeption();
  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. if (true) {
  674. try {
  675. echo 1;
  676. } catch (Exception $e) {
  677. echo 2;
  678. } catch (Exception $e) {
  679. echo 3;
  680. }
  681. } else {
  682. echo 4;
  683. }',
  684. '<?php
  685. if (true)
  686. try
  687. echo 1;
  688. catch(Exception $e)
  689. echo 2;
  690. catch(Exception $e)
  691. echo 3;
  692. else
  693. echo 4;',
  694. ),
  695. );
  696. }
  697. /**
  698. * @dataProvider provideFixClassyBracesCases
  699. */
  700. public function testFixClassyBraces($expected, $input = null)
  701. {
  702. $this->makeTest($expected, $input);
  703. }
  704. public function provideFixClassyBracesCases()
  705. {
  706. return array(
  707. array(
  708. '<?php
  709. class FooA
  710. {
  711. }',
  712. '<?php
  713. class FooA {}',
  714. ),
  715. array(
  716. '<?php
  717. class FooB
  718. {
  719. }',
  720. '<?php
  721. class FooB{}',
  722. ),
  723. array(
  724. '<?php
  725. class FooC
  726. {
  727. }',
  728. '<?php
  729. class FooC
  730. {}',
  731. ),
  732. array(
  733. '<?php
  734. interface FooD
  735. {
  736. }',
  737. '<?php
  738. interface FooD {}',
  739. ),
  740. array(
  741. '<?php
  742. class TestClass extends BaseTestClass implements TestInterface
  743. {
  744. private $foo;
  745. }',
  746. '<?php
  747. class TestClass extends BaseTestClass implements TestInterface { private $foo;}',
  748. ),
  749. array(
  750. '<?php
  751. <?php
  752. abstract class Foo
  753. {
  754. public function getProcess($foo)
  755. {
  756. return true;
  757. }
  758. }',
  759. ),
  760. array('<?php
  761. function foo()
  762. {
  763. return "$c ($d)";
  764. }',
  765. ),
  766. );
  767. }
  768. /**
  769. * @dataProvider provideFixClassyBraces54Cases
  770. * @requires PHP 5.4
  771. */
  772. public function testFixClassyBraces54($expected, $input = null)
  773. {
  774. $this->makeTest($expected, $input);
  775. }
  776. public function provideFixClassyBraces54Cases()
  777. {
  778. return array(
  779. array(
  780. '<?php
  781. trait TFoo
  782. {
  783. public $a;
  784. }',
  785. '<?php
  786. trait TFoo {public $a;}',
  787. ),
  788. );
  789. }
  790. /**
  791. * @dataProvider provideFixAnonFunctionInShortArraySyntax54Cases
  792. * @requires PHP 5.4
  793. */
  794. public function testFixAnonFunctionInShortArraySyntax54($expected, $input = null)
  795. {
  796. $this->makeTest($expected, $input);
  797. }
  798. public function provideFixAnonFunctionInShortArraySyntax54Cases()
  799. {
  800. return array(
  801. array(
  802. '<?php
  803. function myFunction()
  804. {
  805. return [
  806. [
  807. "callback" => function ($data) {
  808. return true;
  809. }
  810. ],
  811. [
  812. "callback" => function ($data) {
  813. return true;
  814. },
  815. ],
  816. ];
  817. }',
  818. ),
  819. );
  820. }
  821. /**
  822. * @dataProvider provideFixCommentBeforeBraceCases
  823. */
  824. public function testFixCommentBeforeBrace($expected, $input = null)
  825. {
  826. $this->makeTest($expected, $input);
  827. }
  828. public function provideFixCommentBeforeBraceCases()
  829. {
  830. return array(
  831. array(
  832. '<?php
  833. if ($test) {
  834. // foo
  835. echo 1;
  836. }',
  837. '<?php
  838. if ($test) // foo
  839. {
  840. echo 1;
  841. }',
  842. ),
  843. );
  844. }
  845. /**
  846. * @dataProvider provideFixWhitespaceBeforeBraceCases
  847. */
  848. public function testFixWhitespaceBeforeBrace($expected, $input = null)
  849. {
  850. $this->makeTest($expected, $input);
  851. }
  852. public function provideFixWhitespaceBeforeBraceCases()
  853. {
  854. return array(
  855. array(
  856. '<?php
  857. if (true) {
  858. echo 1;
  859. }',
  860. '<?php
  861. if (true)
  862. {
  863. echo 1;
  864. }',
  865. ),
  866. array(
  867. '<?php
  868. if (true) {
  869. echo 1;
  870. }',
  871. '<?php
  872. if (true){
  873. echo 1;
  874. }',
  875. ),
  876. array(
  877. '<?php
  878. if (true) {
  879. echo 1;
  880. }',
  881. '<?php
  882. if (true) {
  883. echo 1;
  884. }',
  885. ),
  886. array(
  887. '<?php
  888. while ($file = $this->getFile()) {
  889. }',
  890. '<?php
  891. while ($file = $this->getFile())
  892. {
  893. }',
  894. ),
  895. array(
  896. '<?php
  897. switch (n) {
  898. case label1:
  899. echo 1;
  900. echo 2;
  901. break;
  902. default:
  903. echo 3;
  904. echo 4;
  905. }',
  906. '<?php
  907. switch (n)
  908. {
  909. case label1:
  910. echo 1;
  911. echo 2;
  912. break;
  913. default:
  914. echo 3;
  915. echo 4;
  916. }',
  917. ),
  918. );
  919. }
  920. /**
  921. * @dataProvider provideFixFunctionsCases
  922. */
  923. public function testFixFunctions($expected, $input = null)
  924. {
  925. $this->makeTest($expected, $input);
  926. }
  927. public function provideFixFunctionsCases()
  928. {
  929. return array(
  930. array(
  931. '<?php
  932. function download()
  933. {
  934. }',
  935. '<?php
  936. function download() {
  937. }',
  938. ),
  939. array(
  940. '<?php
  941. class Foo
  942. {
  943. public function AAAA()
  944. {
  945. }
  946. public function BBBB()
  947. {
  948. }
  949. public function CCCC()
  950. {
  951. }
  952. }',
  953. '<?php
  954. class Foo
  955. {
  956. public function AAAA(){
  957. }
  958. public function BBBB() {
  959. }
  960. public function CCCC()
  961. {
  962. }
  963. }',
  964. ),
  965. array(
  966. '<?php
  967. filter(function () {
  968. return true;
  969. })
  970. ',
  971. ),
  972. array(
  973. '<?php
  974. filter(function ($a) {});',
  975. '<?php
  976. filter(function ($a)
  977. {});',
  978. ),
  979. array(
  980. '<?php
  981. filter(function ($b) {});',
  982. '<?php
  983. filter(function ($b){});',
  984. ),
  985. array(
  986. '<?php
  987. class Foo
  988. {
  989. public static function bar()
  990. {
  991. return 1;
  992. }
  993. }',
  994. ),
  995. array(
  996. '<?php
  997. usort($this->fixers, function &($a, $b) use ($selfName) {
  998. return 1;
  999. });',
  1000. ),
  1001. array(
  1002. '<?php
  1003. usort(
  1004. $this->fixers,
  1005. function &($a, $b) use ($selfName) {
  1006. return 1;
  1007. }
  1008. );',
  1009. ),
  1010. );
  1011. }
  1012. /**
  1013. * @dataProvider provideFixSpaceAroundTokenCases
  1014. */
  1015. public function testFixSpaceAroundToken($expected, $input = null)
  1016. {
  1017. $this->makeTest($expected, $input);
  1018. }
  1019. public function provideFixSpaceAroundTokenCases()
  1020. {
  1021. return array(
  1022. array(
  1023. '<?php
  1024. try {
  1025. throw new Exception();
  1026. } catch (Exception $e) {
  1027. log($e);
  1028. }',
  1029. '<?php
  1030. try{
  1031. throw new Exception();
  1032. }catch (Exception $e){
  1033. log($e);
  1034. }',
  1035. ),
  1036. array(
  1037. '<?php
  1038. do {
  1039. echo 1;
  1040. } while ($test);',
  1041. '<?php
  1042. do{
  1043. echo 1;
  1044. }while($test);',
  1045. ),
  1046. array(
  1047. '<?php
  1048. if (true === true
  1049. && true === true
  1050. ) {
  1051. }',
  1052. '<?php
  1053. if(true === true
  1054. && true === true
  1055. ) {
  1056. }',
  1057. ),
  1058. array(
  1059. '<?php
  1060. if (1) {
  1061. }
  1062. if ($this->tesT ($test)) {
  1063. }',
  1064. '<?php
  1065. if(1){
  1066. }
  1067. if ($this->tesT ($test)) {
  1068. }',
  1069. ),
  1070. array(
  1071. '<?php
  1072. if (true) {
  1073. } elseif (false) {
  1074. } else {
  1075. }',
  1076. '<?php
  1077. if(true){
  1078. }elseif(false){
  1079. }else{
  1080. }',
  1081. ),
  1082. array(
  1083. '<?php
  1084. $foo = function& () use ($bar) {}',
  1085. '<?php
  1086. $foo = function& ()use($bar){}',
  1087. ),
  1088. array(
  1089. '<?php
  1090. // comment
  1091. declare (ticks = 1);
  1092. // comment
  1093. while (true) {
  1094. }',
  1095. ),
  1096. );
  1097. }
  1098. /**
  1099. * @dataProvider provide55Cases
  1100. * @requires PHP 5.5
  1101. */
  1102. public function test55($expected, $input = null)
  1103. {
  1104. $this->makeTest($expected, $input);
  1105. }
  1106. public function provide55Cases()
  1107. {
  1108. return array(
  1109. array(
  1110. '<?php
  1111. try {
  1112. throw new \Exeption();
  1113. } catch (\LogicException $e) {
  1114. // do nothing
  1115. } catch (\Exception $e) {
  1116. // do nothing
  1117. } finally {
  1118. echo "finish!";
  1119. }',
  1120. '<?php
  1121. try {
  1122. throw new \Exeption();
  1123. }catch (\LogicException $e) {
  1124. // do nothing
  1125. }
  1126. catch (\Exception $e) {
  1127. // do nothing
  1128. }
  1129. finally {
  1130. echo "finish!";
  1131. }',
  1132. ),
  1133. array(
  1134. '<?php
  1135. try {
  1136. try {
  1137. echo 1;
  1138. } catch (Exception $e) {
  1139. echo 2;
  1140. } catch (Exception $e) {
  1141. echo 3;
  1142. } finally {
  1143. echo 4;
  1144. }
  1145. } catch (Exception $e) {
  1146. echo 5;
  1147. }',
  1148. '<?php
  1149. try
  1150. try
  1151. echo 1;
  1152. catch(Exception $e)
  1153. echo 2;
  1154. catch(Exception $e)
  1155. echo 3;
  1156. finally
  1157. echo 4;
  1158. catch(Exception $e)
  1159. echo 5;',
  1160. ),
  1161. );
  1162. }
  1163. /**
  1164. * @dataProvider providePreserveLineAfterControlBrace
  1165. */
  1166. public function testPreserveLineAfterControlBrace($expected, $input = null)
  1167. {
  1168. $this->makeTest($expected, $input);
  1169. }
  1170. public function providePreserveLineAfterControlBrace()
  1171. {
  1172. return array(
  1173. array(
  1174. '<?php
  1175. if (true) {
  1176. // The blank line helps with legibility in nested control structures
  1177. if (true) {
  1178. // if body
  1179. }
  1180. // if body
  1181. }',
  1182. ),
  1183. array(
  1184. "<?php if (true) {\r\n\r\n// CRLF newline\r\n}",
  1185. ),
  1186. );
  1187. }
  1188. }