SingleQuoteFixerTest.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. <?php
  2. /*
  3. * This file is part of PHP CS Fixer.
  4. *
  5. * (c) Fabien Potencier <fabien@symfony.com>
  6. * Dariusz Rumiński <dariusz.ruminski@gmail.com>
  7. *
  8. * This source file is subject to the MIT license that is bundled
  9. * with this source code in the file LICENSE.
  10. */
  11. namespace PhpCsFixer\Tests\Fixer\StringNotation;
  12. use PhpCsFixer\Tests\Test\AbstractFixerTestCase;
  13. /**
  14. * @author Gregor Harlan <gharlan@web.de>
  15. *
  16. * @internal
  17. *
  18. * @covers \PhpCsFixer\Fixer\StringNotation\SingleQuoteFixer
  19. */
  20. final class SingleQuoteFixerTest extends AbstractFixerTestCase
  21. {
  22. /**
  23. * @param string $expected
  24. * @param null|string $input
  25. *
  26. * @dataProvider provideTestFixCases
  27. */
  28. public function testFix($expected, $input = null)
  29. {
  30. $this->doTest($expected, $input);
  31. }
  32. public function provideTestFixCases()
  33. {
  34. return [
  35. [
  36. '<?php $a = \'\';',
  37. '<?php $a = "";',
  38. ],
  39. [
  40. '<?php $a = \'foo bar\';',
  41. '<?php $a = "foo bar";',
  42. ],
  43. [
  44. '<?php $a = b\'\';',
  45. '<?php $a = b"";',
  46. ],
  47. [
  48. '<?php $a = B\'\';',
  49. '<?php $a = B"";',
  50. ],
  51. [
  52. '<?php $a = \'foo bar\';',
  53. '<?php $a = "foo bar";',
  54. ],
  55. [
  56. '<?php $a = b\'foo bar\';',
  57. '<?php $a = b"foo bar";',
  58. ],
  59. [
  60. '<?php $a = B\'foo bar\';',
  61. '<?php $a = B"foo bar";',
  62. ],
  63. [
  64. '<?php $a = \'foo
  65. bar\';',
  66. '<?php $a = "foo
  67. bar";',
  68. ],
  69. [
  70. '<?php $a = \'foo\'.\'bar\'."$baz";',
  71. '<?php $a = \'foo\'."bar"."$baz";',
  72. ],
  73. [
  74. '<?php $a = \'foo "bar"\';',
  75. '<?php $a = "foo \"bar\"";',
  76. ],
  77. [<<<'EOF'
  78. <?php $a = '\\foo\\bar\\\\';
  79. EOF
  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. * @param string $expected
  119. * @param null|string $input
  120. *
  121. * @dataProvider provideTestSingleQuoteFixCases
  122. */
  123. public function testSingleQuoteFix($expected, $input = null)
  124. {
  125. $this->fixer->configure([
  126. 'strings_containing_single_quote_chars' => true,
  127. ]);
  128. $this->doTest($expected, $input);
  129. }
  130. public function provideTestSingleQuoteFixCases()
  131. {
  132. return [
  133. [
  134. '<?php $a = \'foo \\\'bar\\\'\';',
  135. '<?php $a = "foo \'bar\'";',
  136. ],
  137. [
  138. <<<'EOT'
  139. <?php
  140. // none
  141. $a = 'start \' end';
  142. // one escaped baskslash
  143. $b = 'start \\\' end';
  144. // two escaped baskslash
  145. $c = 'start \\\\\' end';
  146. EOT
  147. ,
  148. <<<'EOT'
  149. <?php
  150. // none
  151. $a = "start ' end";
  152. // one escaped baskslash
  153. $b = "start \\' end";
  154. // two escaped baskslash
  155. $c = "start \\\\' end";
  156. EOT
  157. ,
  158. ],
  159. [
  160. <<<'EOT'
  161. <?php
  162. // one unescaped backslash
  163. $a = "start \' end";
  164. // one escaped + one unescaped baskslash
  165. $b = "start \\\' end";
  166. EOT
  167. ,
  168. ],
  169. ];
  170. }
  171. }