From 233ee094b75402992aadd83ace468c5f5a925565 Mon Sep 17 00:00:00 2001 From: Oleg Zhulnev Date: Mon, 3 May 2021 22:40:21 +0300 Subject: [PATCH] Multiplication mutator should not mutate when return value is integer --- src/Mutator/Arithmetic/Multiplication.php | 16 +++++++++++++++- .../Mutator/Arithmetic/MultiplicationTest.php | 14 ++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/Mutator/Arithmetic/Multiplication.php b/src/Mutator/Arithmetic/Multiplication.php index b3f65eec8d..6014f5a302 100644 --- a/src/Mutator/Arithmetic/Multiplication.php +++ b/src/Mutator/Arithmetic/Multiplication.php @@ -39,6 +39,8 @@ use Infection\Mutator\GetMutatorName; use Infection\Mutator\Mutator; use Infection\Mutator\MutatorCategory; +use Infection\PhpParser\Visitor\ReflectionVisitor; +use function is_string; use PhpParser\Node; /** @@ -94,7 +96,19 @@ public function canMutate(Node $node): bool return false; } - return true; + $functionScope = $node->getAttribute(ReflectionVisitor::FUNCTION_SCOPE_KEY); + + if (!$functionScope instanceof Node\Stmt\ClassMethod) { + return true; + } + + $returnType = $functionScope->getReturnType(); + + if ($returnType instanceof Node\Identifier) { + $returnType = $returnType->name; + } + + return !(is_string($returnType) && $returnType === 'int'); } private function isNumericOne(Node $node): bool diff --git a/tests/phpunit/Mutator/Arithmetic/MultiplicationTest.php b/tests/phpunit/Mutator/Arithmetic/MultiplicationTest.php index 4aa62f2dce..6fbe76f657 100644 --- a/tests/phpunit/Mutator/Arithmetic/MultiplicationTest.php +++ b/tests/phpunit/Mutator/Arithmetic/MultiplicationTest.php @@ -135,6 +135,20 @@ public function mutationsProvider(): iterable [ + <<<'PHP' +