YieldFromArrayToYieldsFixerTest.php 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  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. * @internal
  16. *
  17. * @covers \PhpCsFixer\Fixer\ArrayNotation\YieldFromArrayToYieldsFixer
  18. */
  19. final class YieldFromArrayToYieldsFixerTest extends AbstractFixerTestCase
  20. {
  21. /**
  22. * @dataProvider provideFixCases
  23. */
  24. public function testFix(string $expected, ?string $input = null): void
  25. {
  26. $this->doTest($expected, $input);
  27. }
  28. /**
  29. * @return iterable<array{0: string, 1?: string}>
  30. */
  31. public static function provideFixCases(): iterable
  32. {
  33. yield [
  34. '<?php function f() { yield from foo(); }',
  35. ];
  36. yield [
  37. '<?php function f() { yield 1; yield 2; yield 3; }',
  38. '<?php function f() { yield from [1, 2, 3]; }',
  39. ];
  40. yield [
  41. '<?php function f() { yield 11; yield 22; yield 33; }',
  42. '<?php function f() { yield from array(11, 22, 33); }',
  43. ];
  44. yield [
  45. '<?php function f() { yield 11; yield 22; yield 33; }',
  46. '<?php function f() { yield from array (11, 22, 33); }',
  47. ];
  48. yield [
  49. '<?php function f() { /* ugly comment */yield 11; yield 22; yield 33; }',
  50. '<?php function f() { yield from array/* ugly comment */(11, 22, 33); }',
  51. ];
  52. yield [
  53. '<?php function f() { /** ugly doc */yield 11; yield 22; yield 33; }',
  54. '<?php function f() { yield from array/** ugly doc */(11, 22, 33); }',
  55. ];
  56. yield [
  57. '<?php function f() { yield 111; yield 222; yield 333; }',
  58. '<?php function f() { yield from [111, 222, 333,]; }',
  59. ];
  60. yield [
  61. '<?php function f() {
  62. '.'
  63. yield [1, 2];
  64. yield [3, 4];
  65. '.'
  66. }',
  67. '<?php function f() {
  68. yield from [
  69. [1, 2],
  70. [3, 4],
  71. ];
  72. }',
  73. ];
  74. yield [
  75. '<?php function f() {
  76. '.'
  77. yield array(1, 2);
  78. yield array(3, 4);
  79. '.'
  80. }',
  81. '<?php function f() {
  82. yield from [
  83. array(1, 2),
  84. array(3, 4),
  85. ];
  86. }',
  87. ];
  88. yield [
  89. '<?php function f() {
  90. '.'
  91. yield 1;
  92. yield 2;
  93. yield 3;
  94. '.'
  95. }',
  96. '<?php function f() {
  97. yield from [
  98. 1,
  99. 2,
  100. 3,
  101. ];
  102. }',
  103. ];
  104. yield [
  105. '<?php function f() {
  106. '.'
  107. yield random_key() => true;
  108. yield "foo" => foo(1, 2);
  109. yield "bar" => function ($x, $y) { return max($x, $y); };
  110. yield "baz" => function () { yield [1, 2]; };
  111. '.'
  112. }',
  113. '<?php function f() {
  114. yield from [
  115. random_key() => true,
  116. "foo" => foo(1, 2),
  117. "bar" => function ($x, $y) { return max($x, $y); },
  118. "baz" => function () { yield [1, 2]; },
  119. ];
  120. }',
  121. ];
  122. yield [
  123. '<?php
  124. function f1() { yield 0; yield 1; yield 2; }
  125. function f2() { yield 3; yield 4; yield 5; }
  126. function f3() { yield 6; yield 7; yield 8; }
  127. ',
  128. '<?php
  129. function f1() { yield from [0, 1, 2]; }
  130. function f2() { yield from [3, 4, 5]; }
  131. function f3() { yield from [6, 7, 8]; }
  132. ',
  133. ];
  134. yield [
  135. '<?php
  136. function f1() { yield 0; yield 1; }
  137. function f2() { yield 2; yield 3; }
  138. function f3() { yield 4; yield 5; }
  139. function f4() { yield 6; yield 7; }
  140. function f5() { yield 8; yield 9; }
  141. ',
  142. '<?php
  143. function f1() { yield from array(0, 1); }
  144. function f2() { yield from [2, 3]; }
  145. function f3() { yield from array(4, 5); }
  146. function f4() { yield from [6, 7]; }
  147. function f5() { yield from array(8, 9); }
  148. ',
  149. ];
  150. yield [
  151. '<?php
  152. function foo() {
  153. return [
  154. 1,
  155. yield from [2, 3],
  156. 4,
  157. ];
  158. }
  159. ',
  160. ];
  161. yield [
  162. '<?php
  163. function foo() {
  164. yield from [
  165. "this element is regular string",
  166. yield from ["here", "are", "nested", "strings"],
  167. "next elements will be an arrow function reference",
  168. fn() => [yield 1, yield from [2, 3]],
  169. fn() => [yield from [1, 2], yield 3],
  170. fn() => [yield from array(1, 2), yield 3]
  171. ];
  172. }
  173. ',
  174. ];
  175. yield [
  176. '<?php function foo() {
  177. yield 0; yield 1;
  178. yield 2; yield 3;
  179. yield from [4, yield from [5, 6], 7];
  180. yield 8; yield 9;
  181. }',
  182. '<?php function foo() {
  183. yield from [0, 1];
  184. yield from [2, 3];
  185. yield from [4, yield from [5, 6], 7];
  186. yield from [8, 9];
  187. }',
  188. ];
  189. }
  190. }