From addcf0ce1cc0b71d46dd94c72f5ce0c6e60c41d6 Mon Sep 17 00:00:00 2001 From: Manuel Maxera <95315128+manumafe98@users.noreply.github.com> Date: Wed, 27 Mar 2024 12:43:22 -0300 Subject: [PATCH] Fixing log levels analyzer (#151) * Fixing log levels analyzer Updating substring comment to show on what method it should be applied Udating hardcoded message check, so first converts the string to lowercase * Renaming parameter from onMethod to inMethod * Updating substring comment used to v2 --- .../loglevels/LogLevelsAnalyzer.java | 11 +++++----- .../loglevels/UseSubstringMethod.java | 17 ++++++++++++++-- .../analyzer/AnalyzerIntegrationTest.java | 3 ++- ...HardCodingLogLevelsLowerCase.approved.txt} | 0 ....HardCodingLogLevelsUpperCase.approved.txt | 14 +++++++++++++ ...otUsingSubstringOnBothMethods.approved.txt | 13 ++++++++++-- ...s.NotUsingSubstringOnLogLevel.approved.txt | 6 ++++-- ...ls.NotUsingSubstringOnMessage.approved.txt | 6 ++++-- .../HardCodingLogLevelsLowerCase.java | 20 +++++++++++++++++++ ...java => HardCodingLogLevelsUpperCase.java} | 0 .../no-substring-used/expected_analysis.json | 6 ++++-- .../src/main/java/LogLevels.java | 3 +-- 12 files changed, 81 insertions(+), 18 deletions(-) rename src/test/resources/analyzer/{AnalyzerIntegrationTest.loglevels.HardCodingLogLevels.approved.txt => AnalyzerIntegrationTest.loglevels.HardCodingLogLevelsLowerCase.approved.txt} (100%) create mode 100644 src/test/resources/analyzer/AnalyzerIntegrationTest.loglevels.HardCodingLogLevelsUpperCase.approved.txt create mode 100644 src/test/resources/scenarios/log-levels/HardCodingLogLevelsLowerCase.java rename src/test/resources/scenarios/log-levels/{HardCodingLogLevels.java => HardCodingLogLevelsUpperCase.java} (100%) diff --git a/src/main/java/analyzer/exercises/loglevels/LogLevelsAnalyzer.java b/src/main/java/analyzer/exercises/loglevels/LogLevelsAnalyzer.java index 7107f522..cf30c11d 100644 --- a/src/main/java/analyzer/exercises/loglevels/LogLevelsAnalyzer.java +++ b/src/main/java/analyzer/exercises/loglevels/LogLevelsAnalyzer.java @@ -47,9 +47,9 @@ public void visit(MethodDeclaration node, OutputCollector output) { output.addComment(new AvoidHardCodedTestCases()); return; } - + if (!node.getNameAsString().equals(REFORMAT) && doesNotCallMethod(node, SUBSTRING)) { - output.addComment(new UseSubstringMethod()); + output.addComment(new UseSubstringMethod(node.getNameAsString())); return; } @@ -69,9 +69,10 @@ public void visit(MethodDeclaration node, OutputCollector output) { } private static boolean containsHarcodedString(MethodDeclaration node) { - List hardcodedStrings = node.findAll(StringLiteralExpr.class, - x -> x.getValue().contains("ERROR") || x.getValue().contains("WARNING") - || x.getValue().contains("INFO")); + List hardcodedStrings = node.findAll(StringLiteralExpr.class, x -> { + String value = x.getValue().toLowerCase(); + return value.contains("error") || value.contains("warning") || value.contains("info"); + }); return hardcodedStrings.size() > 1; } diff --git a/src/main/java/analyzer/exercises/loglevels/UseSubstringMethod.java b/src/main/java/analyzer/exercises/loglevels/UseSubstringMethod.java index c7388bf9..856a1672 100644 --- a/src/main/java/analyzer/exercises/loglevels/UseSubstringMethod.java +++ b/src/main/java/analyzer/exercises/loglevels/UseSubstringMethod.java @@ -2,14 +2,27 @@ import analyzer.Comment; +import java.util.Map; + /** - * @see Markdown Template + * @see Markdown Template */ class UseSubstringMethod extends Comment { + private final String inMethod; + + public UseSubstringMethod(String inMethod) { + this.inMethod = inMethod; + } @Override public String getKey() { - return "java.log-levels.use_substring_method"; + return "java.log-levels.use_substring_method_v2"; + } + + @Override + public Map getParameters() { + return Map.of( + "inMethod", this.inMethod); } @Override diff --git a/src/test/java/analyzer/AnalyzerIntegrationTest.java b/src/test/java/analyzer/AnalyzerIntegrationTest.java index 7534284d..5a1650ac 100644 --- a/src/test/java/analyzer/AnalyzerIntegrationTest.java +++ b/src/test/java/analyzer/AnalyzerIntegrationTest.java @@ -133,7 +133,8 @@ void needforspeed(String scenario) throws IOException { @ParameterizedTest @ValueSource(strings = { "ExemplarSolution", - "HardCodingLogLevels", + "HardCodingLogLevelsUpperCase", + "HardCodingLogLevelsLowerCase", "NoReuseLogLevel", "NoReuseMessage", "NoReuseOfBothMethods", diff --git a/src/test/resources/analyzer/AnalyzerIntegrationTest.loglevels.HardCodingLogLevels.approved.txt b/src/test/resources/analyzer/AnalyzerIntegrationTest.loglevels.HardCodingLogLevelsLowerCase.approved.txt similarity index 100% rename from src/test/resources/analyzer/AnalyzerIntegrationTest.loglevels.HardCodingLogLevels.approved.txt rename to src/test/resources/analyzer/AnalyzerIntegrationTest.loglevels.HardCodingLogLevelsLowerCase.approved.txt diff --git a/src/test/resources/analyzer/AnalyzerIntegrationTest.loglevels.HardCodingLogLevelsUpperCase.approved.txt b/src/test/resources/analyzer/AnalyzerIntegrationTest.loglevels.HardCodingLogLevelsUpperCase.approved.txt new file mode 100644 index 00000000..723cbd96 --- /dev/null +++ b/src/test/resources/analyzer/AnalyzerIntegrationTest.loglevels.HardCodingLogLevelsUpperCase.approved.txt @@ -0,0 +1,14 @@ +{ + "comments": [ + { + "comment": "java.general.avoid_hard_coded_test_cases", + "params": {}, + "type": "essential" + }, + { + "comment": "java.general.feedback_request", + "params": {}, + "type": "informative" + } + ] +} \ No newline at end of file diff --git a/src/test/resources/analyzer/AnalyzerIntegrationTest.loglevels.NotUsingSubstringOnBothMethods.approved.txt b/src/test/resources/analyzer/AnalyzerIntegrationTest.loglevels.NotUsingSubstringOnBothMethods.approved.txt index 4874f89c..e5081148 100644 --- a/src/test/resources/analyzer/AnalyzerIntegrationTest.loglevels.NotUsingSubstringOnBothMethods.approved.txt +++ b/src/test/resources/analyzer/AnalyzerIntegrationTest.loglevels.NotUsingSubstringOnBothMethods.approved.txt @@ -1,8 +1,17 @@ { "comments": [ { - "comment": "java.log-levels.use_substring_method", - "params": {}, + "comment": "java.log-levels.use_substring_method_v2", + "params": { + "inMethod": "message" + }, + "type": "actionable" + }, + { + "comment": "java.log-levels.use_substring_method_v2", + "params": { + "inMethod": "logLevel" + }, "type": "actionable" }, { diff --git a/src/test/resources/analyzer/AnalyzerIntegrationTest.loglevels.NotUsingSubstringOnLogLevel.approved.txt b/src/test/resources/analyzer/AnalyzerIntegrationTest.loglevels.NotUsingSubstringOnLogLevel.approved.txt index 4874f89c..05a6be7d 100644 --- a/src/test/resources/analyzer/AnalyzerIntegrationTest.loglevels.NotUsingSubstringOnLogLevel.approved.txt +++ b/src/test/resources/analyzer/AnalyzerIntegrationTest.loglevels.NotUsingSubstringOnLogLevel.approved.txt @@ -1,8 +1,10 @@ { "comments": [ { - "comment": "java.log-levels.use_substring_method", - "params": {}, + "comment": "java.log-levels.use_substring_method_v2", + "params": { + "inMethod": "logLevel" + }, "type": "actionable" }, { diff --git a/src/test/resources/analyzer/AnalyzerIntegrationTest.loglevels.NotUsingSubstringOnMessage.approved.txt b/src/test/resources/analyzer/AnalyzerIntegrationTest.loglevels.NotUsingSubstringOnMessage.approved.txt index 4874f89c..fdc7e811 100644 --- a/src/test/resources/analyzer/AnalyzerIntegrationTest.loglevels.NotUsingSubstringOnMessage.approved.txt +++ b/src/test/resources/analyzer/AnalyzerIntegrationTest.loglevels.NotUsingSubstringOnMessage.approved.txt @@ -1,8 +1,10 @@ { "comments": [ { - "comment": "java.log-levels.use_substring_method", - "params": {}, + "comment": "java.log-levels.use_substring_method_v2", + "params": { + "inMethod": "message" + }, "type": "actionable" }, { diff --git a/src/test/resources/scenarios/log-levels/HardCodingLogLevelsLowerCase.java b/src/test/resources/scenarios/log-levels/HardCodingLogLevelsLowerCase.java new file mode 100644 index 00000000..3cccf75c --- /dev/null +++ b/src/test/resources/scenarios/log-levels/HardCodingLogLevelsLowerCase.java @@ -0,0 +1,20 @@ +package scenarios.loglevels; + +public class LogLevels { + public static String message(String logLine) { + return logLine.substring(logLine.indexOf(":") + 1).trim(); + } + + public static String logLevel(String logLine) { + if (logLine.toLowerCase().contains("info")) + return "info"; + if (logLine.toLowerCase().contains("warning")) + return "warning"; + + return "error"; + } + + public static String reformat(String logLine) { + return message(logLine) + " (" + logLevel(logLine) + ")"; + } +} diff --git a/src/test/resources/scenarios/log-levels/HardCodingLogLevels.java b/src/test/resources/scenarios/log-levels/HardCodingLogLevelsUpperCase.java similarity index 100% rename from src/test/resources/scenarios/log-levels/HardCodingLogLevels.java rename to src/test/resources/scenarios/log-levels/HardCodingLogLevelsUpperCase.java diff --git a/tests/log-levels/no-substring-used/expected_analysis.json b/tests/log-levels/no-substring-used/expected_analysis.json index 0e0173d7..307a4bf8 100644 --- a/tests/log-levels/no-substring-used/expected_analysis.json +++ b/tests/log-levels/no-substring-used/expected_analysis.json @@ -1,8 +1,10 @@ { "comments": [ { - "comment": "java.log-levels.use_substring_method", - "params": {}, + "comment": "java.log-levels.use_substring_method_v2", + "params": { + "inMethod": "message" + }, "type": "actionable" }, { diff --git a/tests/log-levels/no-substring-used/src/main/java/LogLevels.java b/tests/log-levels/no-substring-used/src/main/java/LogLevels.java index 3ada8452..8cf407b0 100644 --- a/tests/log-levels/no-substring-used/src/main/java/LogLevels.java +++ b/tests/log-levels/no-substring-used/src/main/java/LogLevels.java @@ -1,7 +1,6 @@ class LogLevels { public static String message(String logLine) { - return logLine.split("]: ")[1] - .trim(); + return logLine.split("]: ")[1].trim(); } public static String logLevel(String logLine) {