TrimArraySpacesFixerTest.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485
  1. <?php
  2. declare(strict_types=1);
  3. /*
  4. * This file is part of PHP CS Fixer.
  5. *
  6. * (c) Fabien Potencier <fabien@symfony.com>
  7. * Dariusz Rumiński <dariusz.ruminski@gmail.com>
  8. *
  9. * This source file is subject to the MIT license that is bundled
  10. * with this source code in the file LICENSE.
  11. */
  12. namespace PhpCsFixer\Tests\Fixer\ArrayNotation;
  13. use PhpCsFixer\Tests\Test\AbstractFixerTestCase;
  14. /**
  15. * @author Jared Henderson <jared@netrivet.com>
  16. *
  17. * @internal
  18. *
  19. * @covers \PhpCsFixer\Fixer\ArrayNotation\TrimArraySpacesFixer
  20. */
  21. final class TrimArraySpacesFixerTest extends AbstractFixerTestCase
  22. {
  23. /**
  24. * @dataProvider provideFixCases
  25. */
  26. public function testFix(string $expected, ?string $input = null): void
  27. {
  28. $this->doTest($expected, $input);
  29. }
  30. public static function provideFixCases(): iterable
  31. {
  32. yield [
  33. '<?php $foo = array("foo");',
  34. '<?php $foo = array( "foo" );',
  35. ];
  36. yield [
  37. '<?php $foo = ["foo"];',
  38. '<?php $foo = [ "foo" ];',
  39. ];
  40. yield [
  41. '<?php $foo = array();',
  42. '<?php $foo = array( );',
  43. ];
  44. yield [
  45. '<?php $foo = [];',
  46. '<?php $foo = [ ];',
  47. ];
  48. yield [
  49. '<?php $foo = array("foo", "bar");',
  50. '<?php $foo = array( "foo", "bar" );',
  51. ];
  52. yield [
  53. '<?php $foo = array("foo", "bar", );',
  54. '<?php $foo = array( "foo", "bar", );',
  55. ];
  56. yield [
  57. '<?php $foo = ["foo", "bar", ];',
  58. '<?php $foo = [ "foo", "bar", ];',
  59. ];
  60. yield [
  61. "<?php \$foo = array('foo', 'bar');",
  62. "<?php \$foo = array(\t'foo', 'bar'\t);",
  63. ];
  64. yield [
  65. "<?php \$foo = array('foo', 'bar');",
  66. "<?php \$foo = array( \t 'foo', 'bar'\t );",
  67. ];
  68. yield [
  69. '<?php $foo = array("foo", "bar");',
  70. '<?php $foo = array( "foo", "bar" );',
  71. ];
  72. yield [
  73. '<?php $foo = ["foo", "bar"];',
  74. '<?php $foo = [ "foo", "bar" ];',
  75. ];
  76. yield [
  77. '<?php $foo = ["foo", "bar"];',
  78. '<?php $foo = [ "foo", "bar" ];',
  79. ];
  80. yield [
  81. "<?php \$foo = ['foo', 'bar'];",
  82. "<?php \$foo = [\t'foo', 'bar'\t];",
  83. ];
  84. yield [
  85. "<?php \$foo = ['foo', 'bar'];",
  86. "<?php \$foo = [ \t \t 'foo', 'bar'\t \t ];",
  87. ];
  88. yield [
  89. '<?php $foo = array("foo", "bar"); $bar = array("foo", "bar");',
  90. '<?php $foo = array( "foo", "bar" ); $bar = array( "foo", "bar" );',
  91. ];
  92. yield [
  93. '<?php $foo = ["foo", "bar"]; $bar = ["foo", "bar"];',
  94. '<?php $foo = [ "foo", "bar" ]; $bar = [ "foo", "bar" ];',
  95. ];
  96. yield [
  97. '<?php $foo = array("foo" => "bar");',
  98. '<?php $foo = array( "foo" => "bar" );',
  99. ];
  100. yield [
  101. '<?php $foo = ["foo" => "bar"];',
  102. '<?php $foo = [ "foo" => "bar" ];',
  103. ];
  104. yield [
  105. '<?php $foo = array("foo");',
  106. '<?php $foo = array( "foo" );',
  107. ];
  108. yield [
  109. '<?php $foo = ["foo"];',
  110. '<?php $foo = [ "foo" ];',
  111. ];
  112. yield [
  113. '<?php $foo = array($y ? true : false);',
  114. '<?php $foo = array( $y ? true : false );',
  115. ];
  116. yield [
  117. '<?php $foo = [$y ? true : false];',
  118. '<?php $foo = [ $y ? true : false ];',
  119. ];
  120. yield [
  121. '<?php $foo = array(array("foo"), array("bar"));',
  122. '<?php $foo = array( array( "foo" ), array( "bar" ) );',
  123. ];
  124. yield [
  125. '<?php $foo = [["foo"], ["bar"]];',
  126. '<?php $foo = [ [ "foo" ], [ "bar" ] ];',
  127. ];
  128. yield [
  129. '<?php function(array $foo = array("bar")) {};',
  130. '<?php function(array $foo = array( "bar" )) {};',
  131. ];
  132. yield [
  133. '<?php function(array $foo = ["bar"]) {};',
  134. '<?php function(array $foo = [ "bar" ]) {};',
  135. ];
  136. yield [
  137. '<?php $foo = array(function() {return "foo";});',
  138. '<?php $foo = array( function() {return "foo";} );',
  139. ];
  140. yield [
  141. '<?php $foo = [function() {return "foo";}];',
  142. '<?php $foo = [ function() {return "foo";} ];',
  143. ];
  144. yield [
  145. "<?php \$foo = [function( \$a = \tarray('foo') ) { return 'foo' ;}];",
  146. "<?php \$foo = [ function( \$a = \tarray( 'foo' ) ) { return 'foo' ;} ];",
  147. ];
  148. yield [
  149. "<?php \$foo = array(function( ) {\treturn 'foo' \t;\t});",
  150. "<?php \$foo = array( function( ) {\treturn 'foo' \t;\t} );",
  151. ];
  152. yield [
  153. "<?php \$foo = [function()\t{\t \treturn 'foo';\t}];",
  154. "<?php \$foo = [ function()\t{\t \treturn 'foo';\t} ];",
  155. ];
  156. yield [
  157. "<?php \$foo \t = array(function(\$a,\$b,\$c=array(3, 4))\t{\t \treturn 'foo';\t});",
  158. "<?php \$foo \t = array( function(\$a,\$b,\$c=array( 3, 4 ))\t{\t \treturn 'foo';\t} );",
  159. ];
  160. yield [
  161. '<?php $foo = array($bar->method(), Foo::doSomething());',
  162. '<?php $foo = array( $bar->method(), Foo::doSomething() );',
  163. ];
  164. yield [
  165. '<?php $foo = [$bar->method(), Foo::doSomething()];',
  166. '<?php $foo = [ $bar->method(), Foo::doSomething() ];',
  167. ];
  168. yield [
  169. "<?php \$foo = [\$bar->method( \$a,\$b, \$c,\t\t \$d ), Foo::doSomething()];",
  170. "<?php \$foo = [ \$bar->method( \$a,\$b, \$c,\t\t \$d ), Foo::doSomething() ];",
  171. ];
  172. yield [
  173. "<?php \$foo =\t array(\$bar->method( \$a,\$b, \$c,\t\t \$d ), \$bar -> doSomething( ['baz']));",
  174. "<?php \$foo =\t array( \$bar->method( \$a,\$b, \$c,\t\t \$d ), \$bar -> doSomething( [ 'baz']) );",
  175. ];
  176. yield [
  177. '<?php $foo = array(array("foo"), array("bar"));',
  178. '<?php $foo = array( array("foo"), array("bar") );',
  179. ];
  180. yield [
  181. '<?php $foo = [["foo"], ["bar"]];',
  182. '<?php $foo = [ ["foo"], ["bar"] ];',
  183. ];
  184. yield [
  185. '<?php $foo = array(array("foo"), array("bar"));',
  186. '<?php $foo = array(array( "foo" ), array( "bar" ));',
  187. ];
  188. yield [
  189. '<?php $foo = [["foo"], ["bar"]];',
  190. '<?php $foo = [[ "foo" ], [ "bar" ]];',
  191. ];
  192. yield [
  193. '<?php $foo = array(array("foo"), array("bar"));',
  194. '<?php $foo = array( array( "foo" ), array( "bar" ) );',
  195. ];
  196. yield [
  197. '<?php $foo = [["foo"], ["bar"]];',
  198. '<?php $foo = [ [ "foo" ], [ "bar" ] ];',
  199. ];
  200. yield [
  201. '<?php $foo = array(/* empty array */);',
  202. '<?php $foo = array( /* empty array */ );',
  203. ];
  204. yield [
  205. '<?php $foo = [/* empty array */];',
  206. '<?php $foo = [ /* empty array */ ];',
  207. ];
  208. yield [
  209. '<?php someFunc(array(/* empty array */));',
  210. '<?php someFunc(array( /* empty array */ ));',
  211. ];
  212. yield [
  213. '<?php someFunc([/* empty array */]);',
  214. '<?php someFunc([ /* empty array */ ]);',
  215. ];
  216. yield [
  217. '<?php
  218. someFunc(array(
  219. /* empty array */
  220. ));',
  221. ];
  222. yield [
  223. '<?php
  224. someFunc([
  225. /* empty array */
  226. ]);',
  227. ];
  228. yield [
  229. '<?php
  230. someFunc(array(
  231. /* empty
  232. array */));',
  233. '<?php
  234. someFunc(array(
  235. /* empty
  236. array */ ));',
  237. ];
  238. yield [
  239. '<?php
  240. someFunc([
  241. /* empty
  242. array */]);',
  243. '<?php
  244. someFunc([
  245. /* empty
  246. array */ ]);',
  247. ];
  248. yield [
  249. '<?php
  250. $a = array( // My array of:
  251. 1, // - first item
  252. 2, // - second item
  253. );',
  254. ];
  255. yield [
  256. '<?php
  257. $a = [ // My array of:
  258. 1, // - first item
  259. 2, // - second item
  260. ];',
  261. ];
  262. yield [
  263. '<?php
  264. $a = array(
  265. // My array of:
  266. 1, // - first item
  267. 2, // - second item
  268. );',
  269. ];
  270. yield [
  271. '<?php
  272. $a = [
  273. // My array of:
  274. 1, // - first item
  275. 2, // - second item
  276. ];',
  277. ];
  278. yield [
  279. '<?php
  280. $foo = array(/* comment */
  281. 1
  282. );',
  283. '<?php
  284. $foo = array( /* comment */
  285. 1
  286. );',
  287. ];
  288. yield [
  289. '<?php
  290. $foo = [/* comment */
  291. 1
  292. ];',
  293. '<?php
  294. $foo = [ /* comment */
  295. 1
  296. ];',
  297. ];
  298. // don't fix array syntax within comments
  299. yield [
  300. '<?php someFunc([/* array( "foo", "bar", [ "foo" ] ) */]);',
  301. '<?php someFunc([ /* array( "foo", "bar", [ "foo" ] ) */ ]);',
  302. ];
  303. yield [
  304. '<?php $foo = array($bar[ 4 ]);',
  305. '<?php $foo = array( $bar[ 4 ] );',
  306. ];
  307. yield [
  308. '<?php $foo = [$bar[ 4 ]];',
  309. '<?php $foo = [ $bar[ 4 ] ];',
  310. ];
  311. yield [
  312. '<?php // array( "foo", "bar" );',
  313. ];
  314. // multiple single line nested arrays on one line
  315. yield [
  316. '<?php $foo = array("foo", "bar", [1, 2, array(3)]); $baz = ["hash", 1, array("test")];',
  317. '<?php $foo = array( "foo", "bar", [ 1, 2, array( 3 )] ); $baz = [ "hash", 1, array( "test") ];',
  318. ];
  319. yield [
  320. "<?php \$foo = array( \n'bar'\n );",
  321. ];
  322. yield [
  323. "<?php \$foo = [ \n'bar'\n ];",
  324. ];
  325. yield [
  326. "<?php \$foo = array( \n'a', 'b',\n'c');",
  327. "<?php \$foo = array( \n'a', 'b',\n'c' );",
  328. ];
  329. yield [
  330. "<?php \$foo = [ \n'a', 'b',\n'c'];",
  331. "<?php \$foo = [ \n'a', 'b',\n'c' ];",
  332. ];
  333. yield [
  334. "<?php \$foo = array('a', 'b',\n'c'\n);",
  335. "<?php \$foo = array( 'a', 'b',\n'c'\n);",
  336. ];
  337. yield [
  338. "<?php \$foo = ['a', 'b',\n'c'\n];",
  339. "<?php \$foo = [ 'a', 'b',\n'c'\n];",
  340. ];
  341. // don't fix array syntax within string
  342. yield [
  343. '<?php $foo = [\'$bar = array( "foo" );\', array(1, 5)];',
  344. '<?php $foo = [ \'$bar = array( "foo" );\', array(1, 5 ) ];',
  345. ];
  346. // crazy nested garbage pile #1
  347. yield [
  348. "<?php \$foo = array(/* comment \$bar = array([ ], array( 'foo' ) ), */ function(\$a = array('foo'), \$b = [/* comment [] */]) {}, array('foo' => 'bar', 'baz' => \$x[ 4], 'hash' => array(1,2,3)));",
  349. "<?php \$foo = array( /* comment \$bar = array([ ], array( 'foo' ) ), */ function(\$a = array( 'foo' ), \$b = [ /* comment [] */ ]) {}, array( 'foo' => 'bar', 'baz' => \$x[ 4], 'hash' => array(1,2,3 )) );",
  350. ];
  351. // crazy nested garbage pile #2
  352. yield [
  353. '<?php $a = [array("foo", "bar ", [1, 4, function($x = ["foobar", 2]) {}, [/* array( 1) */]]), array("foo", [$y[ 3]()], \'bar\')];',
  354. '<?php $a = [ array("foo", "bar ", [ 1, 4, function($x = [ "foobar", 2 ]) {}, [/* array( 1) */] ] ), array("foo", [ $y[ 3]() ], \'bar\') ];',
  355. ];
  356. yield [
  357. '<?php
  358. $foo = array(
  359. 1 => 2, // comment
  360. );
  361. ',
  362. ];
  363. yield [
  364. '<?php
  365. function a()
  366. {
  367. yield array("a" => 1, "b" => 2);
  368. }',
  369. '<?php
  370. function a()
  371. {
  372. yield array( "a" => 1, "b" => 2 );
  373. }',
  374. ];
  375. yield [
  376. '<?php
  377. function a()
  378. {
  379. yield ["a" => 1, "b" => 2];
  380. }',
  381. '<?php
  382. function a()
  383. {
  384. yield [ "a" => 1, "b" => 2 ];
  385. }',
  386. ];
  387. yield 'array destructuring' => [
  388. "<?php ['url' => \$url] = \$data;",
  389. "<?php [ 'url' => \$url ] = \$data;",
  390. ];
  391. yield 'array destructuring with comments' => [
  392. "<?php [/* foo */ 'url' => \$url /* bar */] = \$data;",
  393. "<?php [ /* foo */ 'url' => \$url /* bar */ ] = \$data;",
  394. ];
  395. yield 'multiline array destructuring' => [
  396. '<?php
  397. [
  398. \'url\' => $url,
  399. \'token\' => $token,
  400. ] = $data;
  401. ',
  402. ];
  403. }
  404. }