SingleQuoteFixerTest.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  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\StringNotation;
  13. use PhpCsFixer\Tests\Test\AbstractFixerTestCase;
  14. /**
  15. * @author Gregor Harlan <gharlan@web.de>
  16. *
  17. * @internal
  18. *
  19. * @covers \PhpCsFixer\Fixer\StringNotation\SingleQuoteFixer
  20. */
  21. final class SingleQuoteFixerTest 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. return [
  33. [
  34. '<?php $a = \'\';',
  35. '<?php $a = "";',
  36. ],
  37. [
  38. '<?php $a = \'foo bar\';',
  39. '<?php $a = "foo bar";',
  40. ],
  41. [
  42. '<?php $a = b\'\';',
  43. '<?php $a = b"";',
  44. ],
  45. [
  46. '<?php $a = B\'\';',
  47. '<?php $a = B"";',
  48. ],
  49. [
  50. '<?php $a = \'foo bar\';',
  51. '<?php $a = "foo bar";',
  52. ],
  53. [
  54. '<?php $a = b\'foo bar\';',
  55. '<?php $a = b"foo bar";',
  56. ],
  57. [
  58. '<?php $a = B\'foo bar\';',
  59. '<?php $a = B"foo bar";',
  60. ],
  61. [
  62. '<?php $a = \'foo
  63. bar\';',
  64. '<?php $a = "foo
  65. bar";',
  66. ],
  67. [
  68. '<?php $a = \'foo\'.\'bar\'."$baz";',
  69. '<?php $a = \'foo\'."bar"."$baz";',
  70. ],
  71. [
  72. '<?php $a = \'foo "bar"\';',
  73. '<?php $a = "foo \"bar\"";',
  74. ],
  75. [
  76. <<<'EOF'
  77. <?php $a = '\\foo\\bar\\\\';
  78. EOF
  79. ,
  80. <<<'EOF'
  81. <?php $a = "\\foo\\bar\\\\";
  82. EOF
  83. ],
  84. [
  85. '<?php $a = \'foo $bar7\';',
  86. '<?php $a = "foo \$bar7";',
  87. ],
  88. [
  89. '<?php $a = \'foo $(bar7)\';',
  90. '<?php $a = "foo \$(bar7)";',
  91. ],
  92. [
  93. '<?php $a = \'foo \\\\($bar8)\';',
  94. '<?php $a = "foo \\\\(\$bar8)";',
  95. ],
  96. ['<?php $a = "foo \\" \\$$bar";'],
  97. ['<?php $a = b"foo \\" \\$$bar";'],
  98. ['<?php $a = B"foo \\" \\$$bar";'],
  99. ['<?php $a = "foo \'bar\'";'],
  100. ['<?php $a = b"foo \'bar\'";'],
  101. ['<?php $a = B"foo \'bar\'";'],
  102. ['<?php $a = "foo $bar";'],
  103. ['<?php $a = b"foo $bar";'],
  104. ['<?php $a = B"foo $bar";'],
  105. ['<?php $a = "foo ${bar}";'],
  106. ['<?php $a = b"foo ${bar}";'],
  107. ['<?php $a = B"foo ${bar}";'],
  108. ['<?php $a = "foo\n bar";'],
  109. ['<?php $a = b"foo\n bar";'],
  110. ['<?php $a = B"foo\n bar";'],
  111. [<<<'EOF'
  112. <?php $a = "\\\n";
  113. EOF
  114. ],
  115. ];
  116. }
  117. /**
  118. * @dataProvider provideSingleQuoteFixCases
  119. */
  120. public function testSingleQuoteFix(string $expected, ?string $input = null): void
  121. {
  122. $this->fixer->configure([
  123. 'strings_containing_single_quote_chars' => true,
  124. ]);
  125. $this->doTest($expected, $input);
  126. }
  127. public static function provideSingleQuoteFixCases(): iterable
  128. {
  129. return [
  130. [
  131. '<?php $a = \'foo \\\'bar\\\'\';',
  132. '<?php $a = "foo \'bar\'";',
  133. ],
  134. [
  135. <<<'EOT'
  136. <?php
  137. // none
  138. $a = 'start \' end';
  139. // one escaped baskslash
  140. $b = 'start \\\' end';
  141. // two escaped baskslash
  142. $c = 'start \\\\\' end';
  143. EOT
  144. ,
  145. <<<'EOT'
  146. <?php
  147. // none
  148. $a = "start ' end";
  149. // one escaped baskslash
  150. $b = "start \\' end";
  151. // two escaped baskslash
  152. $c = "start \\\\' end";
  153. EOT
  154. ,
  155. ],
  156. [
  157. <<<'EOT'
  158. <?php
  159. // one unescaped backslash
  160. $a = "start \' end";
  161. // one escaped + one unescaped baskslash
  162. $b = "start \\\' end";
  163. EOT
  164. ,
  165. ],
  166. ];
  167. }
  168. }