From 58ddbd8c2da0e0c83787f6df4767a296a7dc6706 Mon Sep 17 00:00:00 2001 From: manumafe98 Date: Mon, 18 Mar 2024 13:51:26 -0300 Subject: [PATCH 1/3] 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 --- .../loglevels/LogLevelsAnalyzer.java | 11 +++++----- .../loglevels/UseSubstringMethod.java | 14 +++++++++++++ .../analyzer/AnalyzerIntegrationTest.java | 3 ++- ...HardCodingLogLevelsLowerCase.approved.txt} | 0 ....HardCodingLogLevelsUpperCase.approved.txt | 14 +++++++++++++ ...otUsingSubstringOnBothMethods.approved.txt | 11 +++++++++- ...s.NotUsingSubstringOnLogLevel.approved.txt | 4 +++- ...ls.NotUsingSubstringOnMessage.approved.txt | 4 +++- .../HardCodingLogLevelsLowerCase.java | 20 +++++++++++++++++++ ...java => HardCodingLogLevelsUpperCase.java} | 0 .../no-substring-used/expected_analysis.json | 4 +++- .../src/main/java/LogLevels.java | 3 +-- 12 files changed, 76 insertions(+), 12 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..c683db8e 100644 --- a/src/main/java/analyzer/exercises/loglevels/UseSubstringMethod.java +++ b/src/main/java/analyzer/exercises/loglevels/UseSubstringMethod.java @@ -2,16 +2,30 @@ import analyzer.Comment; +import java.util.Map; + /** * @see Markdown Template */ class UseSubstringMethod extends Comment { + private final String onMethod; + + public UseSubstringMethod(String onMethod) { + this.onMethod = onMethod; + } @Override public String getKey() { return "java.log-levels.use_substring_method"; } + @Override + public Map getParameters() { + return Map.of( + "onMethod", this.onMethod + ); + } + @Override public Type getType() { return Type.ACTIONABLE; 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..60a094aa 100644 --- a/src/test/resources/analyzer/AnalyzerIntegrationTest.loglevels.NotUsingSubstringOnBothMethods.approved.txt +++ b/src/test/resources/analyzer/AnalyzerIntegrationTest.loglevels.NotUsingSubstringOnBothMethods.approved.txt @@ -2,7 +2,16 @@ "comments": [ { "comment": "java.log-levels.use_substring_method", - "params": {}, + "params": { + "onMethod": "message" + }, + "type": "actionable" + }, + { + "comment": "java.log-levels.use_substring_method", + "params": { + "onMethod": "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..2f7de6ed 100644 --- a/src/test/resources/analyzer/AnalyzerIntegrationTest.loglevels.NotUsingSubstringOnLogLevel.approved.txt +++ b/src/test/resources/analyzer/AnalyzerIntegrationTest.loglevels.NotUsingSubstringOnLogLevel.approved.txt @@ -2,7 +2,9 @@ "comments": [ { "comment": "java.log-levels.use_substring_method", - "params": {}, + "params": { + "onMethod": "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..5358aeb1 100644 --- a/src/test/resources/analyzer/AnalyzerIntegrationTest.loglevels.NotUsingSubstringOnMessage.approved.txt +++ b/src/test/resources/analyzer/AnalyzerIntegrationTest.loglevels.NotUsingSubstringOnMessage.approved.txt @@ -2,7 +2,9 @@ "comments": [ { "comment": "java.log-levels.use_substring_method", - "params": {}, + "params": { + "onMethod": "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..2cf188b9 100644 --- a/tests/log-levels/no-substring-used/expected_analysis.json +++ b/tests/log-levels/no-substring-used/expected_analysis.json @@ -2,7 +2,9 @@ "comments": [ { "comment": "java.log-levels.use_substring_method", - "params": {}, + "params": { + "onMethod": "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) { From d6228ea5a3d4897cb77ceb9740c1a4da1d3c9a3b Mon Sep 17 00:00:00 2001 From: manumafe98 Date: Tue, 19 Mar 2024 10:14:18 -0300 Subject: [PATCH 2/3] Renaming parameter from onMethod to inMethod --- .../analyzer/exercises/loglevels/UseSubstringMethod.java | 9 ++++----- ...loglevels.NotUsingSubstringOnBothMethods.approved.txt | 4 ++-- ...st.loglevels.NotUsingSubstringOnLogLevel.approved.txt | 2 +- ...est.loglevels.NotUsingSubstringOnMessage.approved.txt | 2 +- .../log-levels/no-substring-used/expected_analysis.json | 2 +- 5 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/main/java/analyzer/exercises/loglevels/UseSubstringMethod.java b/src/main/java/analyzer/exercises/loglevels/UseSubstringMethod.java index c683db8e..13c23838 100644 --- a/src/main/java/analyzer/exercises/loglevels/UseSubstringMethod.java +++ b/src/main/java/analyzer/exercises/loglevels/UseSubstringMethod.java @@ -8,10 +8,10 @@ * @see Markdown Template */ class UseSubstringMethod extends Comment { - private final String onMethod; + private final String inMethod; - public UseSubstringMethod(String onMethod) { - this.onMethod = onMethod; + public UseSubstringMethod(String inMethod) { + this.inMethod = inMethod; } @Override @@ -22,8 +22,7 @@ public String getKey() { @Override public Map getParameters() { return Map.of( - "onMethod", this.onMethod - ); + "inMethod", this.inMethod); } @Override diff --git a/src/test/resources/analyzer/AnalyzerIntegrationTest.loglevels.NotUsingSubstringOnBothMethods.approved.txt b/src/test/resources/analyzer/AnalyzerIntegrationTest.loglevels.NotUsingSubstringOnBothMethods.approved.txt index 60a094aa..53709009 100644 --- a/src/test/resources/analyzer/AnalyzerIntegrationTest.loglevels.NotUsingSubstringOnBothMethods.approved.txt +++ b/src/test/resources/analyzer/AnalyzerIntegrationTest.loglevels.NotUsingSubstringOnBothMethods.approved.txt @@ -3,14 +3,14 @@ { "comment": "java.log-levels.use_substring_method", "params": { - "onMethod": "message" + "inMethod": "message" }, "type": "actionable" }, { "comment": "java.log-levels.use_substring_method", "params": { - "onMethod": "logLevel" + "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 2f7de6ed..476ea3f9 100644 --- a/src/test/resources/analyzer/AnalyzerIntegrationTest.loglevels.NotUsingSubstringOnLogLevel.approved.txt +++ b/src/test/resources/analyzer/AnalyzerIntegrationTest.loglevels.NotUsingSubstringOnLogLevel.approved.txt @@ -3,7 +3,7 @@ { "comment": "java.log-levels.use_substring_method", "params": { - "onMethod": "logLevel" + "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 5358aeb1..963062bb 100644 --- a/src/test/resources/analyzer/AnalyzerIntegrationTest.loglevels.NotUsingSubstringOnMessage.approved.txt +++ b/src/test/resources/analyzer/AnalyzerIntegrationTest.loglevels.NotUsingSubstringOnMessage.approved.txt @@ -3,7 +3,7 @@ { "comment": "java.log-levels.use_substring_method", "params": { - "onMethod": "message" + "inMethod": "message" }, "type": "actionable" }, diff --git a/tests/log-levels/no-substring-used/expected_analysis.json b/tests/log-levels/no-substring-used/expected_analysis.json index 2cf188b9..cc62ddbd 100644 --- a/tests/log-levels/no-substring-used/expected_analysis.json +++ b/tests/log-levels/no-substring-used/expected_analysis.json @@ -3,7 +3,7 @@ { "comment": "java.log-levels.use_substring_method", "params": { - "onMethod": "message" + "inMethod": "message" }, "type": "actionable" }, From b6bf4808d05a27db6772df0baa53f3c0dc1d94a0 Mon Sep 17 00:00:00 2001 From: manumafe98 Date: Wed, 20 Mar 2024 17:28:37 -0300 Subject: [PATCH 3/3] Updating substring comment used to v2 --- .../java/analyzer/exercises/loglevels/UseSubstringMethod.java | 4 ++-- ...Test.loglevels.NotUsingSubstringOnBothMethods.approved.txt | 4 ++-- ...ionTest.loglevels.NotUsingSubstringOnLogLevel.approved.txt | 2 +- ...tionTest.loglevels.NotUsingSubstringOnMessage.approved.txt | 2 +- tests/log-levels/no-substring-used/expected_analysis.json | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/analyzer/exercises/loglevels/UseSubstringMethod.java b/src/main/java/analyzer/exercises/loglevels/UseSubstringMethod.java index 13c23838..856a1672 100644 --- a/src/main/java/analyzer/exercises/loglevels/UseSubstringMethod.java +++ b/src/main/java/analyzer/exercises/loglevels/UseSubstringMethod.java @@ -5,7 +5,7 @@ import java.util.Map; /** - * @see Markdown Template + * @see Markdown Template */ class UseSubstringMethod extends Comment { private final String inMethod; @@ -16,7 +16,7 @@ public UseSubstringMethod(String inMethod) { @Override public String getKey() { - return "java.log-levels.use_substring_method"; + return "java.log-levels.use_substring_method_v2"; } @Override diff --git a/src/test/resources/analyzer/AnalyzerIntegrationTest.loglevels.NotUsingSubstringOnBothMethods.approved.txt b/src/test/resources/analyzer/AnalyzerIntegrationTest.loglevels.NotUsingSubstringOnBothMethods.approved.txt index 53709009..e5081148 100644 --- a/src/test/resources/analyzer/AnalyzerIntegrationTest.loglevels.NotUsingSubstringOnBothMethods.approved.txt +++ b/src/test/resources/analyzer/AnalyzerIntegrationTest.loglevels.NotUsingSubstringOnBothMethods.approved.txt @@ -1,14 +1,14 @@ { "comments": [ { - "comment": "java.log-levels.use_substring_method", + "comment": "java.log-levels.use_substring_method_v2", "params": { "inMethod": "message" }, "type": "actionable" }, { - "comment": "java.log-levels.use_substring_method", + "comment": "java.log-levels.use_substring_method_v2", "params": { "inMethod": "logLevel" }, diff --git a/src/test/resources/analyzer/AnalyzerIntegrationTest.loglevels.NotUsingSubstringOnLogLevel.approved.txt b/src/test/resources/analyzer/AnalyzerIntegrationTest.loglevels.NotUsingSubstringOnLogLevel.approved.txt index 476ea3f9..05a6be7d 100644 --- a/src/test/resources/analyzer/AnalyzerIntegrationTest.loglevels.NotUsingSubstringOnLogLevel.approved.txt +++ b/src/test/resources/analyzer/AnalyzerIntegrationTest.loglevels.NotUsingSubstringOnLogLevel.approved.txt @@ -1,7 +1,7 @@ { "comments": [ { - "comment": "java.log-levels.use_substring_method", + "comment": "java.log-levels.use_substring_method_v2", "params": { "inMethod": "logLevel" }, diff --git a/src/test/resources/analyzer/AnalyzerIntegrationTest.loglevels.NotUsingSubstringOnMessage.approved.txt b/src/test/resources/analyzer/AnalyzerIntegrationTest.loglevels.NotUsingSubstringOnMessage.approved.txt index 963062bb..fdc7e811 100644 --- a/src/test/resources/analyzer/AnalyzerIntegrationTest.loglevels.NotUsingSubstringOnMessage.approved.txt +++ b/src/test/resources/analyzer/AnalyzerIntegrationTest.loglevels.NotUsingSubstringOnMessage.approved.txt @@ -1,7 +1,7 @@ { "comments": [ { - "comment": "java.log-levels.use_substring_method", + "comment": "java.log-levels.use_substring_method_v2", "params": { "inMethod": "message" }, diff --git a/tests/log-levels/no-substring-used/expected_analysis.json b/tests/log-levels/no-substring-used/expected_analysis.json index cc62ddbd..307a4bf8 100644 --- a/tests/log-levels/no-substring-used/expected_analysis.json +++ b/tests/log-levels/no-substring-used/expected_analysis.json @@ -1,7 +1,7 @@ { "comments": [ { - "comment": "java.log-levels.use_substring_method", + "comment": "java.log-levels.use_substring_method_v2", "params": { "inMethod": "message" },