From 5bc3006268d455a2167f71a3cb799c2984ff95cd Mon Sep 17 00:00:00 2001 From: Markus Staab Date: Thu, 30 Oct 2025 07:20:23 +0100 Subject: [PATCH 1/2] Make AssertSameBooleanExpectedRule auto-fixable --- .../PHPUnit/AssertEqualsIsDiscouragedRule.php | 8 +----- .../PHPUnit/AssertSameBooleanExpectedRule.php | 26 +++++++++++++++++-- .../AssertSameBooleanExpectedRuleTest.php | 5 ++++ .../assert-same-boolean-expected-fixable.php | 21 +++++++++++++++ ...rt-same-boolean-expected-fixable.php.fixed | 21 +++++++++++++++ 5 files changed, 72 insertions(+), 9 deletions(-) create mode 100644 tests/Rules/PHPUnit/data/assert-same-boolean-expected-fixable.php create mode 100644 tests/Rules/PHPUnit/data/assert-same-boolean-expected-fixable.php.fixed diff --git a/src/Rules/PHPUnit/AssertEqualsIsDiscouragedRule.php b/src/Rules/PHPUnit/AssertEqualsIsDiscouragedRule.php index c4c23887..ed6470e2 100644 --- a/src/Rules/PHPUnit/AssertEqualsIsDiscouragedRule.php +++ b/src/Rules/PHPUnit/AssertEqualsIsDiscouragedRule.php @@ -73,13 +73,7 @@ public function processNode(Node $node, Scope $scope): array ), )->identifier('phpunit.assertEquals') ->fixNode($node, static function (CallLike $node) use ($correctName) { - if ($node instanceof Node\Expr\MethodCall) { - $node->name = new Node\Identifier($correctName); - } - - if ($node instanceof Node\Expr\StaticCall) { - $node->name = new Node\Identifier($correctName); - } + $node->name = new Node\Identifier($correctName); return $node; }) diff --git a/src/Rules/PHPUnit/AssertSameBooleanExpectedRule.php b/src/Rules/PHPUnit/AssertSameBooleanExpectedRule.php index fd76f7c4..97d1cf97 100644 --- a/src/Rules/PHPUnit/AssertSameBooleanExpectedRule.php +++ b/src/Rules/PHPUnit/AssertSameBooleanExpectedRule.php @@ -47,13 +47,35 @@ public function processNode(Node $node, Scope $scope): array if ($expectedArgumentValue->name->toLowerString() === 'true') { return [ - RuleErrorBuilder::message('You should use assertTrue() instead of assertSame() when expecting "true"')->identifier('phpunit.assertTrue')->build(), + RuleErrorBuilder::message('You should use assertTrue() instead of assertSame() when expecting "true"') + ->identifier('phpunit.assertTrue') + ->fixNode($node, static function (CallLike $node) { + $node->name = new Node\Identifier('assertTrue'); + + $args = $node->getArgs(); + unset($args[0]); + $node->args = $args; + + return $node; + }) + ->build(), ]; } if ($expectedArgumentValue->name->toLowerString() === 'false') { return [ - RuleErrorBuilder::message('You should use assertFalse() instead of assertSame() when expecting "false"')->identifier('phpunit.assertFalse')->build(), + RuleErrorBuilder::message('You should use assertFalse() instead of assertSame() when expecting "false"') + ->identifier('phpunit.assertFalse') + ->fixNode($node, static function (CallLike $node) { + $node->name = new Node\Identifier('assertFalse'); + + $args = $node->getArgs(); + unset($args[0]); + $node->args = $args; + + return $node; + }) + ->build(), ]; } diff --git a/tests/Rules/PHPUnit/AssertSameBooleanExpectedRuleTest.php b/tests/Rules/PHPUnit/AssertSameBooleanExpectedRuleTest.php index 1fe31df9..6dacd685 100644 --- a/tests/Rules/PHPUnit/AssertSameBooleanExpectedRuleTest.php +++ b/tests/Rules/PHPUnit/AssertSameBooleanExpectedRuleTest.php @@ -42,6 +42,11 @@ public function testRule(): void ]); } + public function testFix(): void + { + $this->fix(__DIR__ . '/data/assert-same-boolean-expected-fixable.php', __DIR__ . '/data/assert-same-boolean-expected-fixable.php.fixed'); + } + /** * @return string[] */ diff --git a/tests/Rules/PHPUnit/data/assert-same-boolean-expected-fixable.php b/tests/Rules/PHPUnit/data/assert-same-boolean-expected-fixable.php new file mode 100644 index 00000000..5d5a3ba4 --- /dev/null +++ b/tests/Rules/PHPUnit/data/assert-same-boolean-expected-fixable.php @@ -0,0 +1,21 @@ +assertSame(true, $this->returnBool()); + self::assertSame(false, $this->returnBool()); + } + +} diff --git a/tests/Rules/PHPUnit/data/assert-same-boolean-expected-fixable.php.fixed b/tests/Rules/PHPUnit/data/assert-same-boolean-expected-fixable.php.fixed new file mode 100644 index 00000000..d0bb802a --- /dev/null +++ b/tests/Rules/PHPUnit/data/assert-same-boolean-expected-fixable.php.fixed @@ -0,0 +1,21 @@ +assertTrue($this->returnBool()); + self::assertFalse($this->returnBool()); + } + +} From 7f1306e381993966e89a5ca96efa40d068e1cfea Mon Sep 17 00:00:00 2001 From: Markus Staab Date: Sun, 2 Nov 2025 08:05:22 +0100 Subject: [PATCH 2/2] Update AssertSameBooleanExpectedRule.php --- .../PHPUnit/AssertSameBooleanExpectedRule.php | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/Rules/PHPUnit/AssertSameBooleanExpectedRule.php b/src/Rules/PHPUnit/AssertSameBooleanExpectedRule.php index 97d1cf97..f185bdf7 100644 --- a/src/Rules/PHPUnit/AssertSameBooleanExpectedRule.php +++ b/src/Rules/PHPUnit/AssertSameBooleanExpectedRule.php @@ -51,10 +51,7 @@ public function processNode(Node $node, Scope $scope): array ->identifier('phpunit.assertTrue') ->fixNode($node, static function (CallLike $node) { $node->name = new Node\Identifier('assertTrue'); - - $args = $node->getArgs(); - unset($args[0]); - $node->args = $args; + $node->args = self::rewriteArgs($node->args); return $node; }) @@ -68,10 +65,7 @@ public function processNode(Node $node, Scope $scope): array ->identifier('phpunit.assertFalse') ->fixNode($node, static function (CallLike $node) { $node->name = new Node\Identifier('assertFalse'); - - $args = $node->getArgs(); - unset($args[0]); - $node->args = $args; + $node->args = self::rewriteArgs($node->args); return $node; }) @@ -82,4 +76,17 @@ public function processNode(Node $node, Scope $scope): array return []; } + /** + * @param array $args + * @return list + */ + private static function rewriteArgs(array $args): array + { + $newArgs = []; + for ($i = 1; $i < count($args); $i++) { + $newArgs[] = $args[$i]; + } + return $newArgs; + } + }