diff --git a/lib/TrendApplication.php b/lib/TrendApplication.php index c183e54..70669dc 100644 --- a/lib/TrendApplication.php +++ b/lib/TrendApplication.php @@ -123,16 +123,19 @@ private function createTrendResult(string $baselinePath, array $comparing, Analy return array($trendResult, $exitCode); } - $exitCode = $this->compare($trendResult, ResultPrinter::KEY_OVERALL_ERRORS, $reference->overallErrors, $comparing[$baselinePath]->overallErrors, $exitCode); - $exitCode = $this->compare($trendResult, ResultPrinter::KEY_CLASSES_COMPLEXITY, $reference->classesComplexity, $comparing[$baselinePath]->classesComplexity, $exitCode); - $exitCode = $this->compare($trendResult, ResultPrinter::KEY_DEPRECATIONS, $reference->deprecations, $comparing[$baselinePath]->deprecations, $exitCode); - $exitCode = $this->compare($trendResult, ResultPrinter::KEY_INVALID_PHPDOCS, $reference->invalidPhpdocs, $comparing[$baselinePath]->invalidPhpdocs, $exitCode); - $exitCode = $this->compare($trendResult, ResultPrinter::KEY_UNKNOWN_TYPES, $reference->unknownTypes, $comparing[$baselinePath]->unknownTypes, $exitCode); - $exitCode = $this->compare($trendResult, ResultPrinter::KEY_ANONYMOUS_VARIABLES, $reference->anonymousVariables, $comparing[$baselinePath]->anonymousVariables, $exitCode); - $exitCode = $this->compare($trendResult, ResultPrinter::KEY_UNUSED_SYMBOLS, $reference->unusedSymbols, $comparing[$baselinePath]->unusedSymbols, $exitCode); - $exitCode = $this->compare($trendResult, ResultPrinter::KEY_RETURN_TYPE_COVERAGE, $reference->returnTypeCoverage, $comparing[$baselinePath]->returnTypeCoverage, $exitCode); - $exitCode = $this->compare($trendResult, ResultPrinter::KEY_PROPERTY_TYPE_COVERAGE, $reference->propertyTypeCoverage, $comparing[$baselinePath]->propertyTypeCoverage, $exitCode); - $exitCode = $this->compare($trendResult, ResultPrinter::KEY_PARAM_TYPE_COVERAGE, $reference->paramTypeCoverage, $comparing[$baselinePath]->paramTypeCoverage, $exitCode); + // decreased trends are better (reference <-> compare) + $exitCode = $this->compareDecreasing($trendResult, ResultPrinter::KEY_OVERALL_ERRORS, $reference->overallErrors, $comparing[$baselinePath]->overallErrors, $exitCode); + $exitCode = $this->compareDecreasing($trendResult, ResultPrinter::KEY_CLASSES_COMPLEXITY, $reference->classesComplexity, $comparing[$baselinePath]->classesComplexity, $exitCode); + $exitCode = $this->compareDecreasing($trendResult, ResultPrinter::KEY_DEPRECATIONS, $reference->deprecations, $comparing[$baselinePath]->deprecations, $exitCode); + $exitCode = $this->compareDecreasing($trendResult, ResultPrinter::KEY_INVALID_PHPDOCS, $reference->invalidPhpdocs, $comparing[$baselinePath]->invalidPhpdocs, $exitCode); + $exitCode = $this->compareDecreasing($trendResult, ResultPrinter::KEY_UNKNOWN_TYPES, $reference->unknownTypes, $comparing[$baselinePath]->unknownTypes, $exitCode); + $exitCode = $this->compareDecreasing($trendResult, ResultPrinter::KEY_ANONYMOUS_VARIABLES, $reference->anonymousVariables, $comparing[$baselinePath]->anonymousVariables, $exitCode); + $exitCode = $this->compareDecreasing($trendResult, ResultPrinter::KEY_UNUSED_SYMBOLS, $reference->unusedSymbols, $comparing[$baselinePath]->unusedSymbols, $exitCode); + + // increased trends are better (compare <-> reference) + $exitCode = $this->compareIncreasing($trendResult, ResultPrinter::KEY_RETURN_TYPE_COVERAGE, $reference->returnTypeCoverage, $comparing[$baselinePath]->returnTypeCoverage, $exitCode); + $exitCode = $this->compareIncreasing($trendResult, ResultPrinter::KEY_PROPERTY_TYPE_COVERAGE, $reference->propertyTypeCoverage, $comparing[$baselinePath]->propertyTypeCoverage, $exitCode); + $exitCode = $this->compareIncreasing($trendResult, ResultPrinter::KEY_PARAM_TYPE_COVERAGE, $reference->paramTypeCoverage, $comparing[$baselinePath]->paramTypeCoverage, $exitCode); return array($trendResult, $exitCode); } @@ -145,7 +148,7 @@ private function createTrendResult(string $baselinePath, array $comparing, Analy * * @return self::EXIT_* */ - private function compare(TrendResult $trendResult, string $key, $referenceValue, $comparingValue, int $exitCode): int + private function compareDecreasing(TrendResult $trendResult, string $key, $referenceValue, $comparingValue, int $exitCode): int { if ($comparingValue > $referenceValue) { $trendResult->setKey($key, $referenceValue, $comparingValue, 'worse'); @@ -160,4 +163,28 @@ private function compare(TrendResult $trendResult, string $key, $referenceValue, return $exitCode; } + + /** + * @param ResultPrinter::KEY_* $key + * @param int $referenceValue + * @param int $comparingValue + * @param self::EXIT_* $exitCode + * + * @return self::EXIT_* + */ + private function compareIncreasing(TrendResult $trendResult, string $key, $referenceValue, $comparingValue, int $exitCode): int + { + if ($comparingValue > $referenceValue) { + $trendResult->setKey($key, $referenceValue, $comparingValue, 'improved'); + $exitCode = max($exitCode, self::EXIT_IMPROVED); + } elseif ($comparingValue < $referenceValue) { + $trendResult->setKey($key, $referenceValue, $comparingValue, 'worse'); + $exitCode = max($exitCode, self::EXIT_WORSE); + } else { + $trendResult->setKey($key, $referenceValue, $comparingValue, 'good'); + $exitCode = max($exitCode, self::EXIT_STEADY); + } + + return $exitCode; + } } diff --git a/tests/TrendApplicationTest.php b/tests/TrendApplicationTest.php index 8c4d4b3..afe3617 100644 --- a/tests/TrendApplicationTest.php +++ b/tests/TrendApplicationTest.php @@ -54,6 +54,9 @@ function testHigherTrend():void Unknown-Types: 5 -> 15 => worse Anonymous-Variables: 2 -> 5 => worse Unused-Symbols: 1 -> 10 => worse + Native-Return-Type-Coverage: 2 -> 20 => improved + Native-Property-Type-Coverage: 3 -> 30 => improved + Native-Param-Type-Coverage: 4 -> 40 => improved PHP; @@ -80,11 +83,14 @@ function testLowerTrend():void Unknown-Types: 5 -> 3 => improved Anonymous-Variables: 2 -> 1 => improved Unused-Symbols: 1 -> 0 => improved + Native-Return-Type-Coverage: 2 -> 1 => worse + Native-Property-Type-Coverage: 3 -> 2 => worse + Native-Param-Type-Coverage: 4 -> 3 => worse PHP; $this->assertSame($expected, $rendered); - $this->assertSame(TrendApplication::EXIT_IMPROVED, $exitCode); + $this->assertSame(TrendApplication::EXIT_WORSE, $exitCode); } function testSameTrendFormatJson():void @@ -98,7 +104,7 @@ function testSameTrendFormatJson():void $rendered = str_replace(__DIR__, '', $rendered); $expected = <<assertSame($expected, $rendered); diff --git a/tests/fixtures/compare-higher-result.json b/tests/fixtures/compare-higher-result.json index 779403c..8086786 100644 --- a/tests/fixtures/compare-higher-result.json +++ b/tests/fixtures/compare-higher-result.json @@ -1 +1 @@ -[{"\/fixtures\/all-in.neon":{"Overall-Errors":24,"Classes-Cognitive-Complexity":90,"Deprecations": 10,"Invalid-Phpdocs": 30,"Unknown-Types": 15,"Anonymous-Variables": 5,"Unused-Symbols": 10}}] \ No newline at end of file +[{"\/fixtures\/all-in.neon":{"Overall-Errors":24,"Classes-Cognitive-Complexity":90,"Deprecations": 10,"Invalid-Phpdocs": 30,"Unknown-Types": 15,"Anonymous-Variables": 5,"Unused-Symbols": 10,"Native-Return-Type-Coverage": 20,"Native-Property-Type-Coverage": 30,"Native-Param-Type-Coverage": 40}}] \ No newline at end of file diff --git a/tests/fixtures/compare-lower-result.json b/tests/fixtures/compare-lower-result.json index e31521d..7f903df 100644 --- a/tests/fixtures/compare-lower-result.json +++ b/tests/fixtures/compare-lower-result.json @@ -1 +1 @@ -[{"\/fixtures\/all-in.neon":{"Overall-Errors":10,"Classes-Cognitive-Complexity":50,"Invalid-Phpdocs": 1,"Unknown-Types": 3,"Anonymous-Variables": 1}}] \ No newline at end of file +[{"\/fixtures\/all-in.neon":{"Overall-Errors":10,"Classes-Cognitive-Complexity":50,"Invalid-Phpdocs": 1,"Unknown-Types": 3,"Anonymous-Variables": 1,"Unused-Symbols": 0,"Native-Return-Type-Coverage": 1,"Native-Property-Type-Coverage": 2,"Native-Param-Type-Coverage": 3}}] \ No newline at end of file