123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535 |
- <?php
- declare(strict_types=1);
- /*
- * This file is part of PHP CS Fixer.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- * Dariusz Rumiński <dariusz.ruminski@gmail.com>
- *
- * This source file is subject to the MIT license that is bundled
- * with this source code in the file LICENSE.
- */
- namespace PhpCsFixer\Tests\Fixer\ClassNotation;
- use PhpCsFixer\Tests\Test\AbstractFixerTestCase;
- /**
- * @author Filippo Tessarotto <zoeslam@gmail.com>
- *
- * @internal
- *
- * @covers \PhpCsFixer\Fixer\ClassNotation\NoUnneededFinalMethodFixer
- *
- * @extends AbstractFixerTestCase<\PhpCsFixer\Fixer\ClassNotation\NoUnneededFinalMethodFixer>
- *
- * @phpstan-import-type _AutogeneratedInputConfiguration from \PhpCsFixer\Fixer\ClassNotation\NoUnneededFinalMethodFixer
- */
- final class NoUnneededFinalMethodFixerTest extends AbstractFixerTestCase
- {
- /**
- * @dataProvider provideFixCases
- *
- * @param _AutogeneratedInputConfiguration $configuration
- */
- public function testFix(string $expected, ?string $input = null, array $configuration = []): void
- {
- $this->fixer->configure($configuration);
- $this->doTest($expected, $input);
- }
- public static function provideFixCases(): iterable
- {
- yield 'default' => [
- '<?php
- final class Foo {
- public function foo() {}
- protected function bar() {}
- private function baz() {}
- }',
- '<?php
- final class Foo {
- final public function foo() {}
- final protected function bar() {}
- final private function baz() {}
- }',
- ];
- yield 'final-after-visibility' => [
- '<?php
- final class Foo {
- public function foo() {}
- protected function bar() {}
- private function baz() {}
- }',
- '<?php
- final class Foo {
- public final function foo() {}
- protected final function bar() {}
- private final function baz() {}
- }',
- ];
- yield 'default-static' => [
- '<?php
- final class SomeClass {
- public static function foo() {}
- protected static function bar() {}
- private static function baz() {}
- }',
- '<?php
- final class SomeClass {
- final public static function foo() {}
- final protected static function bar() {}
- final private static function baz() {}
- }',
- ];
- yield 'visibility-then-final-then-static' => [
- '<?php
- final class SomeClass {
- public static function foo() {}
- protected static function bar() {}
- private static function baz() {}
- }',
- '<?php
- final class SomeClass {
- public final static function foo() {}
- protected final static function bar() {}
- private final static function baz() {}
- }',
- ];
- yield 'visibility-then-static-then-final' => [
- '<?php
- final class SomeClass {
- public static function foo() {}
- protected static function bar() {}
- private static function baz() {}
- }',
- '<?php
- final class SomeClass {
- public static final function foo() {}
- protected static final function bar() {}
- private static final function baz() {}
- }',
- ];
- yield 'static-then-visibility-then-final' => [
- '<?php
- final class SomeClass {
- static public function foo() {}
- static protected function bar() {}
- static private function baz() {}
- }',
- '<?php
- final class SomeClass {
- static public final function foo() {}
- static protected final function bar() {}
- static private final function baz() {}
- }',
- ];
- yield 'static-then-final-then-visibility' => [
- '<?php
- final class SomeClass {
- static public function foo() {}
- static protected function bar() {}
- static private function baz() {}
- }',
- '<?php
- final class SomeClass {
- static final public function foo() {}
- static final protected function bar() {}
- static final private function baz() {}
- }',
- ];
- yield 'no-visibility' => [
- '<?php
- final class Foo {
- function foo() {}
- function bar() {}
- function baz() {}
- }',
- '<?php
- final class Foo {
- final function foo() {}
- final function bar() {}
- final function baz() {}
- }',
- ];
- yield 'no-visibility-final-then-static' => [
- '<?php
- final class SomeClass {
- static function foo() {}
- static function bar() {}
- static function baz() {}
- }',
- '<?php
- final class SomeClass {
- final static function foo() {}
- final static function bar() {}
- final static function baz() {}
- }',
- ];
- yield 'no-visibility-static-then-final' => [
- '<?php
- final class SomeClass {
- static function foo() {}
- static function bar() {}
- static function baz() {}
- }',
- '<?php
- final class SomeClass {
- static final function foo() {}
- static final function bar() {}
- static final function baz() {}
- }',
- ];
- yield 'private-method' => [
- '<?php
- class Foo {
- final function bar0() {}
- final public function bar1() {}
- final protected function bar2() {}
- final static public function bar4() {}
- final public static function bar5() {}
- private function bar31() {}
- private function bar32() {}
- }',
- '<?php
- class Foo {
- final function bar0() {}
- final public function bar1() {}
- final protected function bar2() {}
- final static public function bar4() {}
- final public static function bar5() {}
- final private function bar31() {}
- private final function bar32() {}
- }',
- ];
- yield 'private-method-with-visibility-before-final' => [
- '<?php
- class Foo {
- private function bar() {}
- }',
- '<?php
- class Foo {
- private final function bar() {}
- }',
- ];
- yield 'preserve-comment' => [
- '<?php final class Foo { /* comment */public function foo() {} }',
- '<?php final class Foo { final/* comment */public function foo() {} }',
- ];
- yield 'multiple-classes-per-file' => [
- '<?php final class Foo { public function foo() {} } abstract class Bar { final public function bar() {} }',
- '<?php final class Foo { final public function foo() {} } abstract class Bar { final public function bar() {} }',
- ];
- yield 'non-final' => [
- '<php class Foo { final public function foo() {} }',
- ];
- yield 'abstract-class' => [
- '<php abstract class Foo { final public function foo() {} }',
- ];
- yield 'final-method-with-private-attribute' => [
- '<?php abstract class Foo { private static $var; final public function foo() {} }',
- ];
- yield 'trait' => [
- '<php trait Foo { final public function foo() {} }',
- ];
- yield 'do not fix constructors' => [
- '<?php
- class Bar
- {
- final private function __construct()
- {
- }
- }',
- ];
- yield 'anonymous-class-inside' => [
- '<?php
- final class Foo
- {
- public function foo()
- {
- }
- private function bar()
- {
- new class {
- final public function baz()
- {
- }
- };
- }
- }
- ',
- '<?php
- final class Foo
- {
- final public function foo()
- {
- }
- private function bar()
- {
- new class {
- final public function baz()
- {
- }
- };
- }
- }
- ',
- ];
- yield 'anonymous-class-inside-with-final-private-method' => [
- '<?php
- class Foo
- {
- private function bar()
- {
- new class {
- private function qux()
- {
- }
- };
- }
- }
- ',
- '<?php
- class Foo
- {
- private function bar()
- {
- new class {
- final private function qux()
- {
- }
- };
- }
- }
- ',
- ];
- yield 'final private static' => [
- '<?php
- class Foo {
- public function bar(){}
- private static function bar1() {echo 1;}
- private static function bar2() {echo 2;}
- static private function bar3() {echo 3;}
- private static function bar4() {echo 4;}
- static private function bar5() {echo 5;}
- static private function bar6() {echo 6;}
- }
- ',
- '<?php
- class Foo {
- public function bar(){}
- private static final function bar1() {echo 1;}
- private final static function bar2() {echo 2;}
- final static private function bar3() {echo 3;}
- final private static function bar4() {echo 4;}
- static final private function bar5() {echo 5;}
- static private final function bar6() {echo 6;}
- }
- ',
- ];
- yield [
- '<?php
- abstract class Foo {
- public final function bar1(){ $this->bar3(); }
- private function bar2(){ echo 1; }
- private function bar3(){ echo 2; }
- }',
- '<?php
- abstract class Foo {
- public final function bar1(){ $this->bar3(); }
- private function bar2(){ echo 1; }
- private final function bar3(){ echo 2; }
- }',
- ];
- yield [
- '<?php
- final class Foo
- {
- private function baz() {}
- }
- class Bar
- {
- final private function bar1() {}
- }
- ',
- '<?php
- final class Foo
- {
- final private function baz() {}
- }
- class Bar
- {
- final private function bar1() {}
- }
- ',
- ['private_methods' => false],
- ];
- }
- /**
- * @dataProvider provideFix81Cases
- *
- * @requires PHP 8.1
- */
- public function testFix81(string $expected, ?string $input = null): void
- {
- $this->doTest($expected, $input);
- }
- /**
- * @return iterable<int|string, array{0: string, 1?: string}>
- */
- public static function provideFix81Cases(): iterable
- {
- yield [
- '<?php
- final class Foo81 {
- public readonly string $prop1;
- readonly public string $prop2;
- readonly string $prop3;
- }
- ',
- ];
- yield [
- '<?php
- class Foo81 {
- public readonly string $prop1;
- readonly public string $prop2;
- readonly string $prop3;
- }
- ',
- ];
- yield [
- '<?php
- final class Foo81 {
- public function foo81() {}
- protected function bar81() {}
- private function baz81() {}
- public readonly string $prop81;
- final public const Y = "i81";
- final const XY = "i81";
- }
- ',
- '<?php
- final class Foo81 {
- final public function foo81() {}
- final protected function bar81() {}
- final private function baz81() {}
- public readonly string $prop81;
- final public const Y = "i81";
- final const XY = "i81";
- }
- ',
- ];
- yield 'enum' => [
- '<?php
- enum Foo: string
- {
- case Hearts = "H";
- public function test() {
- echo 123;
- }
- }
- var_dump(Foo::Spades);',
- '<?php
- enum Foo: string
- {
- case Hearts = "H";
- final public function test() {
- echo 123;
- }
- }
- var_dump(Foo::Spades);',
- ];
- }
- /**
- * @dataProvider provideFix82Cases
- *
- * @requires PHP 8.2
- */
- public function testFix82(string $expected, string $input): void
- {
- $this->doTest($expected, $input);
- }
- /**
- * @return iterable<string, array{string, string}>
- */
- public static function provideFix82Cases(): iterable
- {
- yield 'final readonly class - final after visibility method' => [
- '<?php
- final readonly class Foo {
- public function foo() {}
- protected function bar() {}
- private function baz() {}
- }',
- '<?php
- final readonly class Foo {
- public final function foo() {}
- protected final function bar() {}
- private final function baz() {}
- }',
- ];
- yield 'readonly comment final class - final before visibility method' => [
- '<?php
- readonly /* X */ final class Foo {
- public function foo() {}
- protected function bar() {}
- private function baz() {}
- }',
- '<?php
- readonly /* X */ final class Foo {
- final public function foo() {}
- final protected function bar() {}
- final private function baz() {}
- }',
- ];
- }
- }
|