* Dariusz Rumiński * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace PhpCsFixer\Tests\Fixer\Operator; use PhpCsFixer\Tests\Test\AbstractFixerTestCase; /** * @internal * * @covers \PhpCsFixer\Fixer\Operator\NoUselessConcatOperatorFixer * * @extends AbstractFixerTestCase<\PhpCsFixer\Fixer\Operator\NoUselessConcatOperatorFixer> * * @phpstan-import-type _AutogeneratedInputConfiguration from \PhpCsFixer\Fixer\Operator\NoUselessConcatOperatorFixer */ final class NoUselessConcatOperatorFixerTest extends AbstractFixerTestCase { /** * @dataProvider provideFixCases */ public function testFix(string $expected, ?string $input = null): void { $this->fixer->configure(['juggle_simple_strings' => true]); $this->doTest($expected, $input); } /** * @return iterable */ public static function provideFixCases(): iterable { $templateExpected = ' ["'a'", "'b'", "'ab'"], 'single . double' => ["'a'", '"b"', '"ab"'], 'double . single' => ['"b\n"', "'a'", '"b\na"'], 'double . double' => ['"b"', '"b"', '"bb"'], 'encapsed . encapsed' => ['"{$a}"', '"{$b}"', '"{$a}{$b}"'], 'encapsed space. encapsed' => ['"{$a1} "', '"{$b2}"', '"{$a1} {$b2}"'], 'encapsed . space encapsed' => ['"{$a}"', '" {$b}"', '"{$a} {$b}"'], 'encapsed space. space encapsed' => ['"{$a} "', '" {$b}"', '"{$a} {$b}"'], 'encapsed . single' => ['"{$a}"', "'Z'", '"{$a}Z"'], 'single . encapsed' => ["'Y'", '"{$a}"', '"Y{$a}"'], 'encapsed spaced. single' => ['"{$a} "', "'G'", '"{$a} G"'], 'single . space encapsed' => ["'V'", '" {$a}"', '"V {$a}"'], 'encapsed . double' => ['"{$a} "', '"XX"', '"{$a} XX"'], 'double . encapsed' => ['"XCV"', '"{$a}"', '"XCV{$a}"'], 'encapsed spaced . double' => ['"{$a} V "', '"PO"', '"{$a} V PO"'], 'double . space encapsed' => ['"DSA"', '" XX {$a}"', '"DSA XX {$a}"'], ]; foreach ($cases as $label => $case) { yield $label => [ \sprintf($templateExpected, $case[2]), \sprintf($templateInput, $case[0], $case[1]), ]; } yield 'encapsed followed by simple double quoted 1' => [ ' [ ' [ ' [ ' [ ' [ ' [ ' [ ' [ 'e"; echo "abc $d" . \'->e\'; echo "abc $d" . "->$e"; echo "abc $d" . "?->e"; echo "abc $d" . "?->$e"; echo "abc $d" . \'?->e\'; ', ]; yield 'do not fix if variables would be broken' => [ ' [ ' [ " [ " [ '', ]; yield 'linebreak before concat + comment' => [ " [ <<<'PHP' fixer->configure(['juggle_simple_strings' => true]); $this->doTest($expected, $input); $this->fixer->configure(['juggle_simple_strings' => false]); $this->doTest($input); } }