From 6098842bc8db14bd1a3f7658ca1e37a93558602d Mon Sep 17 00:00:00 2001 From: Sander Ploegsma Date: Sun, 21 Jan 2024 20:20:51 +0100 Subject: [PATCH 1/5] Add analyzer for Lasagna --- bin/run-tests.sh | 8 +-- src/main/java/analyzer/AnalyzerRoot.java | 10 ++-- .../analyzer/comments/OptimalSolution.java | 32 ++++++++++++ .../exercises/lasagna/LasagnaAnalyzer.java | 49 +++++++++++++++++++ .../analyzer/exercises/lasagna/ReuseCode.java | 37 ++++++++++++++ .../optimal-solution/.meta/config.json | 23 +++++++++ .../optimal-solution/expected_analysis.json | 5 ++ .../optimal-solution/expected_tags.json | 1 + .../src/main/java/Lasagna.java | 17 +++++++ .../reuse-code/both-methods/.meta/config.json | 23 +++++++++ .../both-methods/expected_analysis.json | 22 +++++++++ .../both-methods/expected_tags.json | 1 + .../both-methods/src/main/java/Lasagna.java | 17 +++++++ .../.meta/config.json | 23 +++++++++ .../expected_analysis.json | 14 ++++++ .../expected_tags.json | 1 + .../src/main/java/Lasagna.java | 17 +++++++ .../total-time-in-minutes/.meta/config.json | 23 +++++++++ .../expected_analysis.json | 14 ++++++ .../total-time-in-minutes/expected_tags.json | 1 + .../src/main/java/Lasagna.java | 17 +++++++ 21 files changed, 347 insertions(+), 8 deletions(-) create mode 100644 src/main/java/analyzer/comments/OptimalSolution.java create mode 100644 src/main/java/analyzer/exercises/lasagna/LasagnaAnalyzer.java create mode 100644 src/main/java/analyzer/exercises/lasagna/ReuseCode.java create mode 100644 tests/lasagna/optimal-solution/.meta/config.json create mode 100644 tests/lasagna/optimal-solution/expected_analysis.json create mode 100644 tests/lasagna/optimal-solution/expected_tags.json create mode 100644 tests/lasagna/optimal-solution/src/main/java/Lasagna.java create mode 100644 tests/lasagna/reuse-code/both-methods/.meta/config.json create mode 100644 tests/lasagna/reuse-code/both-methods/expected_analysis.json create mode 100644 tests/lasagna/reuse-code/both-methods/expected_tags.json create mode 100644 tests/lasagna/reuse-code/both-methods/src/main/java/Lasagna.java create mode 100644 tests/lasagna/reuse-code/remaining-minutes-in-oven/.meta/config.json create mode 100644 tests/lasagna/reuse-code/remaining-minutes-in-oven/expected_analysis.json create mode 100644 tests/lasagna/reuse-code/remaining-minutes-in-oven/expected_tags.json create mode 100644 tests/lasagna/reuse-code/remaining-minutes-in-oven/src/main/java/Lasagna.java create mode 100644 tests/lasagna/reuse-code/total-time-in-minutes/.meta/config.json create mode 100644 tests/lasagna/reuse-code/total-time-in-minutes/expected_analysis.json create mode 100644 tests/lasagna/reuse-code/total-time-in-minutes/expected_tags.json create mode 100644 tests/lasagna/reuse-code/total-time-in-minutes/src/main/java/Lasagna.java diff --git a/bin/run-tests.sh b/bin/run-tests.sh index 8060ca08..20fff693 100755 --- a/bin/run-tests.sh +++ b/bin/run-tests.sh @@ -14,15 +14,15 @@ exit_code=0 # Iterate over all test directories -for test_dir in tests/*; do - test_dir_name=$(basename "${test_dir}") +for test_dir in $(find tests -name expected_analysis.json | rev | cut -d '/' -f 2- | rev); do test_dir_path=$(realpath "${test_dir}") + test_slug=$(echo "${test_dir}" | awk -F/ '{ print $2 }') - bin/run.sh "${test_dir_name}" "${test_dir_path}/" "${test_dir_path}/" + bin/run.sh "${test_slug}" "${test_dir_path}/" "${test_dir_path}/" for file in analysis.json tags.json; do expected_file="expected_${file}" - echo "${test_dir_name}: comparing ${file} to ${expected_file}" + echo "${test_dir}: comparing ${file} to ${expected_file}" if ! diff "${test_dir_path}/${file}" "${test_dir_path}/${expected_file}"; then exit_code=1 diff --git a/src/main/java/analyzer/AnalyzerRoot.java b/src/main/java/analyzer/AnalyzerRoot.java index 57a37914..88d705a2 100644 --- a/src/main/java/analyzer/AnalyzerRoot.java +++ b/src/main/java/analyzer/AnalyzerRoot.java @@ -3,6 +3,7 @@ import analyzer.comments.FeedbackRequest; import analyzer.exercises.GlobalAnalyzer; import analyzer.exercises.hamming.HammingAnalyzer; +import analyzer.exercises.lasagna.LasagnaAnalyzer; import analyzer.exercises.twofer.TwoferAnalyzer; import com.github.javaparser.ast.CompilationUnit; @@ -18,23 +19,24 @@ public static Analysis analyze(String slug, List compilationUni analyzer.analyze(compilationUnits, analysis); } - if (!analysis.getComments().isEmpty()) { + if (analysis.getComments().stream().anyMatch(x -> x.getType() != CommentType.CELEBRATORY)) { analysis.addComment(new FeedbackRequest()); } - + return analysis; } private static List createAnalyzers(String slug) { var analyzers = new ArrayList(); + analyzers.add(new GlobalAnalyzer()); + switch (slug) { case "hamming" -> analyzers.add(new HammingAnalyzer()); + case "lasagna" -> analyzers.add(new LasagnaAnalyzer()); case "two-fer" -> analyzers.add(new TwoferAnalyzer()); } - analyzers.add(new GlobalAnalyzer()); - return List.copyOf(analyzers); } } diff --git a/src/main/java/analyzer/comments/OptimalSolution.java b/src/main/java/analyzer/comments/OptimalSolution.java new file mode 100644 index 00000000..9092715a --- /dev/null +++ b/src/main/java/analyzer/comments/OptimalSolution.java @@ -0,0 +1,32 @@ +package analyzer.comments; + +import analyzer.Comment; +import analyzer.CommentType; + +import java.util.Map; + +/** + * @see Markdown Template + */ +public class OptimalSolution extends Comment { + private final String exerciseName; + + public OptimalSolution(String exerciseName) { + this.exerciseName = exerciseName; + } + + @Override + public String getKey() { + return "java.general.optimal_solution"; + } + + @Override + public Map getParameters() { + return Map.of("exerciseName", this.exerciseName); + } + + @Override + public CommentType getType() { + return CommentType.CELEBRATORY; + } +} diff --git a/src/main/java/analyzer/exercises/lasagna/LasagnaAnalyzer.java b/src/main/java/analyzer/exercises/lasagna/LasagnaAnalyzer.java new file mode 100644 index 00000000..60e30adb --- /dev/null +++ b/src/main/java/analyzer/exercises/lasagna/LasagnaAnalyzer.java @@ -0,0 +1,49 @@ +package analyzer.exercises.lasagna; + +import analyzer.Analysis; +import analyzer.Analyzer; +import analyzer.comments.OptimalSolution; +import com.github.javaparser.ast.CompilationUnit; +import com.github.javaparser.ast.body.MethodDeclaration; +import com.github.javaparser.ast.expr.MethodCallExpr; +import com.github.javaparser.ast.visitor.VoidVisitorAdapter; + +import java.util.List; + +public class LasagnaAnalyzer extends VoidVisitorAdapter implements Analyzer { + private static final String EXERCISE_NAME = "Lasagna"; + private static final String EXPECTED_MINUTES_IN_OVEN = "expectedMinutesInOven"; + private static final String REMAINING_MINUTES_IN_OVEN = "remainingMinutesInOven"; + private static final String PREPARATION_TIME_IN_MINUTES = "preparationTimeInMinutes"; + private static final String TOTAL_TIME_IN_MINUTES = "totalTimeInMinutes"; + + @Override + public void analyze(List compilationUnits, Analysis analysis) { + for (CompilationUnit compilationUnit : compilationUnits) { + compilationUnit.accept(this, analysis); + } + + if (analysis.getComments().isEmpty()) { + analysis.addComment(new OptimalSolution(EXERCISE_NAME)); + } + } + + @Override + public void visit(MethodDeclaration node, Analysis analysis) { + if (node.getNameAsString().equals(REMAINING_MINUTES_IN_OVEN) + && doesNotCallMethod(node, EXPECTED_MINUTES_IN_OVEN)) { + analysis.addComment(new ReuseCode(REMAINING_MINUTES_IN_OVEN, EXPECTED_MINUTES_IN_OVEN)); + } + + if (node.getNameAsString().equals(TOTAL_TIME_IN_MINUTES) + && doesNotCallMethod(node, PREPARATION_TIME_IN_MINUTES)) { + analysis.addComment(new ReuseCode(TOTAL_TIME_IN_MINUTES, PREPARATION_TIME_IN_MINUTES)); + } + + super.visit(node, analysis); + } + + private static boolean doesNotCallMethod(MethodDeclaration node, String otherMethodName) { + return node.findAll(MethodCallExpr.class, x -> x.getNameAsString().contains(otherMethodName)).isEmpty(); + } +} diff --git a/src/main/java/analyzer/exercises/lasagna/ReuseCode.java b/src/main/java/analyzer/exercises/lasagna/ReuseCode.java new file mode 100644 index 00000000..6dbd3bbb --- /dev/null +++ b/src/main/java/analyzer/exercises/lasagna/ReuseCode.java @@ -0,0 +1,37 @@ +package analyzer.exercises.lasagna; + +import analyzer.Comment; +import analyzer.CommentType; + +import java.util.Map; + +/** + * @see Markdown Template + */ +class ReuseCode extends Comment { + private final String callingMethod; + private final String methodToCall; + + ReuseCode(String callingMethod, String methodToCall) { + this.callingMethod = callingMethod; + this.methodToCall = methodToCall; + } + + @Override + public String getKey() { + return "java.lasagna.reuse_code"; + } + + @Override + public Map getParameters() { + return Map.of( + "callingMethod", this.callingMethod, + "methodToCall", this.methodToCall + ); + } + + @Override + public CommentType getType() { + return CommentType.ACTIONABLE; + } +} diff --git a/tests/lasagna/optimal-solution/.meta/config.json b/tests/lasagna/optimal-solution/.meta/config.json new file mode 100644 index 00000000..e59df45d --- /dev/null +++ b/tests/lasagna/optimal-solution/.meta/config.json @@ -0,0 +1,23 @@ +{ + "authors": [ + "mirkoperillo" + ], + "files": { + "solution": [ + "src/main/java/Lasagna.java" + ], + "test": [ + "src/test/java/LasagnaTest.java" + ], + "exemplar": [ + ".meta/src/reference/java/Lasagna.java" + ], + "invalidator": [ + "build.gradle" + ] + }, + "forked_from": [ + "csharp/lucians-luscious-lasagna" + ], + "blurb": "Learn about the basics of Java by following a lasagna recipe." +} \ No newline at end of file diff --git a/tests/lasagna/optimal-solution/expected_analysis.json b/tests/lasagna/optimal-solution/expected_analysis.json new file mode 100644 index 00000000..a8ad2c4e --- /dev/null +++ b/tests/lasagna/optimal-solution/expected_analysis.json @@ -0,0 +1,5 @@ +{"comments": [{ + "comment": "java.general.optimal_solution", + "type": "celebratory", + "params": {"exerciseName": "Lasagna"} +}]} \ No newline at end of file diff --git a/tests/lasagna/optimal-solution/expected_tags.json b/tests/lasagna/optimal-solution/expected_tags.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/tests/lasagna/optimal-solution/expected_tags.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/tests/lasagna/optimal-solution/src/main/java/Lasagna.java b/tests/lasagna/optimal-solution/src/main/java/Lasagna.java new file mode 100644 index 00000000..c19aa836 --- /dev/null +++ b/tests/lasagna/optimal-solution/src/main/java/Lasagna.java @@ -0,0 +1,17 @@ +public class Lasagna { + public int expectedMinutesInOven() { + return 40; + } + + public int remainingMinutesInOven(int actualMinutesInOven) { + return expectedMinutesInOven() - actualMinutesInOven; + } + + public int preparationTimeInMinutes(int numberOfLayers) { + return numberOfLayers * 2; + } + + public int totalTimeInMinutes(int numberOfLayers, int actualMinutesInOven) { + return preparationTimeInMinutes(numberOfLayers) + actualMinutesInOven; + } +} diff --git a/tests/lasagna/reuse-code/both-methods/.meta/config.json b/tests/lasagna/reuse-code/both-methods/.meta/config.json new file mode 100644 index 00000000..e59df45d --- /dev/null +++ b/tests/lasagna/reuse-code/both-methods/.meta/config.json @@ -0,0 +1,23 @@ +{ + "authors": [ + "mirkoperillo" + ], + "files": { + "solution": [ + "src/main/java/Lasagna.java" + ], + "test": [ + "src/test/java/LasagnaTest.java" + ], + "exemplar": [ + ".meta/src/reference/java/Lasagna.java" + ], + "invalidator": [ + "build.gradle" + ] + }, + "forked_from": [ + "csharp/lucians-luscious-lasagna" + ], + "blurb": "Learn about the basics of Java by following a lasagna recipe." +} \ No newline at end of file diff --git a/tests/lasagna/reuse-code/both-methods/expected_analysis.json b/tests/lasagna/reuse-code/both-methods/expected_analysis.json new file mode 100644 index 00000000..0c027c57 --- /dev/null +++ b/tests/lasagna/reuse-code/both-methods/expected_analysis.json @@ -0,0 +1,22 @@ +{"comments": [ + { + "comment": "java.lasagna.reuse_code", + "type": "actionable", + "params": { + "callingMethod": "remainingMinutesInOven", + "methodToCall": "expectedMinutesInOven" + } + }, + { + "comment": "java.lasagna.reuse_code", + "type": "actionable", + "params": { + "callingMethod": "totalTimeInMinutes", + "methodToCall": "preparationTimeInMinutes" + } + }, + { + "comment": "java.general.feedback_request", + "type": "informative" + } +]} \ No newline at end of file diff --git a/tests/lasagna/reuse-code/both-methods/expected_tags.json b/tests/lasagna/reuse-code/both-methods/expected_tags.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/tests/lasagna/reuse-code/both-methods/expected_tags.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/tests/lasagna/reuse-code/both-methods/src/main/java/Lasagna.java b/tests/lasagna/reuse-code/both-methods/src/main/java/Lasagna.java new file mode 100644 index 00000000..7f31cf99 --- /dev/null +++ b/tests/lasagna/reuse-code/both-methods/src/main/java/Lasagna.java @@ -0,0 +1,17 @@ +public class Lasagna { + public int expectedMinutesInOven() { + return 40; + } + + public int remainingMinutesInOven(int actualMinutesInOven) { + return 40 - actualMinutesInOven; + } + + public int preparationTimeInMinutes(int numberOfLayers) { + return numberOfLayers * 2; + } + + public int totalTimeInMinutes(int numberOfLayers, int actualMinutesInOven) { + return 2 * numberOfLayers + actualMinutesInOven; + } +} diff --git a/tests/lasagna/reuse-code/remaining-minutes-in-oven/.meta/config.json b/tests/lasagna/reuse-code/remaining-minutes-in-oven/.meta/config.json new file mode 100644 index 00000000..e59df45d --- /dev/null +++ b/tests/lasagna/reuse-code/remaining-minutes-in-oven/.meta/config.json @@ -0,0 +1,23 @@ +{ + "authors": [ + "mirkoperillo" + ], + "files": { + "solution": [ + "src/main/java/Lasagna.java" + ], + "test": [ + "src/test/java/LasagnaTest.java" + ], + "exemplar": [ + ".meta/src/reference/java/Lasagna.java" + ], + "invalidator": [ + "build.gradle" + ] + }, + "forked_from": [ + "csharp/lucians-luscious-lasagna" + ], + "blurb": "Learn about the basics of Java by following a lasagna recipe." +} \ No newline at end of file diff --git a/tests/lasagna/reuse-code/remaining-minutes-in-oven/expected_analysis.json b/tests/lasagna/reuse-code/remaining-minutes-in-oven/expected_analysis.json new file mode 100644 index 00000000..0bc1fb09 --- /dev/null +++ b/tests/lasagna/reuse-code/remaining-minutes-in-oven/expected_analysis.json @@ -0,0 +1,14 @@ +{"comments": [ + { + "comment": "java.lasagna.reuse_code", + "type": "actionable", + "params": { + "callingMethod": "remainingMinutesInOven", + "methodToCall": "expectedMinutesInOven" + } + }, + { + "comment": "java.general.feedback_request", + "type": "informative" + } +]} \ No newline at end of file diff --git a/tests/lasagna/reuse-code/remaining-minutes-in-oven/expected_tags.json b/tests/lasagna/reuse-code/remaining-minutes-in-oven/expected_tags.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/tests/lasagna/reuse-code/remaining-minutes-in-oven/expected_tags.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/tests/lasagna/reuse-code/remaining-minutes-in-oven/src/main/java/Lasagna.java b/tests/lasagna/reuse-code/remaining-minutes-in-oven/src/main/java/Lasagna.java new file mode 100644 index 00000000..53cf548d --- /dev/null +++ b/tests/lasagna/reuse-code/remaining-minutes-in-oven/src/main/java/Lasagna.java @@ -0,0 +1,17 @@ +public class Lasagna { + public int expectedMinutesInOven() { + return 40; + } + + public int remainingMinutesInOven(int actualMinutesInOven) { + return 40 - actualMinutesInOven; + } + + public int preparationTimeInMinutes(int numberOfLayers) { + return numberOfLayers * 2; + } + + public int totalTimeInMinutes(int numberOfLayers, int actualMinutesInOven) { + return preparationTimeInMinutes(numberOfLayers) + actualMinutesInOven; + } +} diff --git a/tests/lasagna/reuse-code/total-time-in-minutes/.meta/config.json b/tests/lasagna/reuse-code/total-time-in-minutes/.meta/config.json new file mode 100644 index 00000000..e59df45d --- /dev/null +++ b/tests/lasagna/reuse-code/total-time-in-minutes/.meta/config.json @@ -0,0 +1,23 @@ +{ + "authors": [ + "mirkoperillo" + ], + "files": { + "solution": [ + "src/main/java/Lasagna.java" + ], + "test": [ + "src/test/java/LasagnaTest.java" + ], + "exemplar": [ + ".meta/src/reference/java/Lasagna.java" + ], + "invalidator": [ + "build.gradle" + ] + }, + "forked_from": [ + "csharp/lucians-luscious-lasagna" + ], + "blurb": "Learn about the basics of Java by following a lasagna recipe." +} \ No newline at end of file diff --git a/tests/lasagna/reuse-code/total-time-in-minutes/expected_analysis.json b/tests/lasagna/reuse-code/total-time-in-minutes/expected_analysis.json new file mode 100644 index 00000000..519628b9 --- /dev/null +++ b/tests/lasagna/reuse-code/total-time-in-minutes/expected_analysis.json @@ -0,0 +1,14 @@ +{"comments": [ + { + "comment": "java.lasagna.reuse_code", + "type": "actionable", + "params": { + "callingMethod": "totalTimeInMinutes", + "methodToCall": "preparationTimeInMinutes" + } + }, + { + "comment": "java.general.feedback_request", + "type": "informative" + } +]} \ No newline at end of file diff --git a/tests/lasagna/reuse-code/total-time-in-minutes/expected_tags.json b/tests/lasagna/reuse-code/total-time-in-minutes/expected_tags.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/tests/lasagna/reuse-code/total-time-in-minutes/expected_tags.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/tests/lasagna/reuse-code/total-time-in-minutes/src/main/java/Lasagna.java b/tests/lasagna/reuse-code/total-time-in-minutes/src/main/java/Lasagna.java new file mode 100644 index 00000000..0ea924a3 --- /dev/null +++ b/tests/lasagna/reuse-code/total-time-in-minutes/src/main/java/Lasagna.java @@ -0,0 +1,17 @@ +public class Lasagna { + public int expectedMinutesInOven() { + return 40; + } + + public int remainingMinutesInOven(int actualMinutesInOven) { + return expectedMinutesInOven() - actualMinutesInOven; + } + + public int preparationTimeInMinutes(int numberOfLayers) { + return numberOfLayers * 2; + } + + public int totalTimeInMinutes(int numberOfLayers, int actualMinutesInOven) { + return 2 * numberOfLayers + actualMinutesInOven; + } +} From f303b1992b0442278f48793f74e301bd6c9566bf Mon Sep 17 00:00:00 2001 From: Sander Ploegsma Date: Mon, 22 Jan 2024 14:07:25 +0100 Subject: [PATCH 2/5] Rename general comment to java.general.exemplar --- .../{OptimalSolution.java => ExemplarSolution.java} | 8 ++++---- .../java/analyzer/exercises/lasagna/LasagnaAnalyzer.java | 4 ++-- .../.meta/config.json | 0 .../expected_analysis.json | 2 +- .../expected_tags.json | 0 .../src/main/java/Lasagna.java | 0 6 files changed, 7 insertions(+), 7 deletions(-) rename src/main/java/analyzer/comments/{OptimalSolution.java => ExemplarSolution.java} (70%) rename tests/lasagna/{optimal-solution => exemplar-solution}/.meta/config.json (100%) rename tests/lasagna/{optimal-solution => exemplar-solution}/expected_analysis.json (64%) rename tests/lasagna/{optimal-solution => exemplar-solution}/expected_tags.json (100%) rename tests/lasagna/{optimal-solution => exemplar-solution}/src/main/java/Lasagna.java (100%) diff --git a/src/main/java/analyzer/comments/OptimalSolution.java b/src/main/java/analyzer/comments/ExemplarSolution.java similarity index 70% rename from src/main/java/analyzer/comments/OptimalSolution.java rename to src/main/java/analyzer/comments/ExemplarSolution.java index 9092715a..fee8c1bb 100644 --- a/src/main/java/analyzer/comments/OptimalSolution.java +++ b/src/main/java/analyzer/comments/ExemplarSolution.java @@ -6,18 +6,18 @@ import java.util.Map; /** - * @see Markdown Template + * @see Markdown Template */ -public class OptimalSolution extends Comment { +public class ExemplarSolution extends Comment { private final String exerciseName; - public OptimalSolution(String exerciseName) { + public ExemplarSolution(String exerciseName) { this.exerciseName = exerciseName; } @Override public String getKey() { - return "java.general.optimal_solution"; + return "java.general.exemplar"; } @Override diff --git a/src/main/java/analyzer/exercises/lasagna/LasagnaAnalyzer.java b/src/main/java/analyzer/exercises/lasagna/LasagnaAnalyzer.java index 60e30adb..b0b3ec3d 100644 --- a/src/main/java/analyzer/exercises/lasagna/LasagnaAnalyzer.java +++ b/src/main/java/analyzer/exercises/lasagna/LasagnaAnalyzer.java @@ -2,7 +2,7 @@ import analyzer.Analysis; import analyzer.Analyzer; -import analyzer.comments.OptimalSolution; +import analyzer.comments.ExemplarSolution; import com.github.javaparser.ast.CompilationUnit; import com.github.javaparser.ast.body.MethodDeclaration; import com.github.javaparser.ast.expr.MethodCallExpr; @@ -24,7 +24,7 @@ public void analyze(List compilationUnits, Analysis analysis) { } if (analysis.getComments().isEmpty()) { - analysis.addComment(new OptimalSolution(EXERCISE_NAME)); + analysis.addComment(new ExemplarSolution(EXERCISE_NAME)); } } diff --git a/tests/lasagna/optimal-solution/.meta/config.json b/tests/lasagna/exemplar-solution/.meta/config.json similarity index 100% rename from tests/lasagna/optimal-solution/.meta/config.json rename to tests/lasagna/exemplar-solution/.meta/config.json diff --git a/tests/lasagna/optimal-solution/expected_analysis.json b/tests/lasagna/exemplar-solution/expected_analysis.json similarity index 64% rename from tests/lasagna/optimal-solution/expected_analysis.json rename to tests/lasagna/exemplar-solution/expected_analysis.json index a8ad2c4e..65bb122a 100644 --- a/tests/lasagna/optimal-solution/expected_analysis.json +++ b/tests/lasagna/exemplar-solution/expected_analysis.json @@ -1,5 +1,5 @@ {"comments": [{ - "comment": "java.general.optimal_solution", + "comment": "java.general.exemplar", "type": "celebratory", "params": {"exerciseName": "Lasagna"} }]} \ No newline at end of file diff --git a/tests/lasagna/optimal-solution/expected_tags.json b/tests/lasagna/exemplar-solution/expected_tags.json similarity index 100% rename from tests/lasagna/optimal-solution/expected_tags.json rename to tests/lasagna/exemplar-solution/expected_tags.json diff --git a/tests/lasagna/optimal-solution/src/main/java/Lasagna.java b/tests/lasagna/exemplar-solution/src/main/java/Lasagna.java similarity index 100% rename from tests/lasagna/optimal-solution/src/main/java/Lasagna.java rename to tests/lasagna/exemplar-solution/src/main/java/Lasagna.java From 8cf7fe95dde0778caa5c5ceaf8f44fc446eab7de Mon Sep 17 00:00:00 2001 From: Sander Ploegsma Date: Mon, 22 Jan 2024 14:13:30 +0100 Subject: [PATCH 3/5] Instruct to remove TODO comments from solution --- .../analyzer/comments/RemoveTodoComments.java | 19 +++++++++++++++ .../exercises/lasagna/LasagnaAnalyzer.java | 9 ++++++++ .../todos-not-removed/.meta/config.json | 23 +++++++++++++++++++ .../todos-not-removed/expected_analysis.json | 10 ++++++++ .../todos-not-removed/expected_tags.json | 1 + .../src/main/java/Lasagna.java | 21 +++++++++++++++++ 6 files changed, 83 insertions(+) create mode 100644 src/main/java/analyzer/comments/RemoveTodoComments.java create mode 100644 tests/lasagna/todos-not-removed/.meta/config.json create mode 100644 tests/lasagna/todos-not-removed/expected_analysis.json create mode 100644 tests/lasagna/todos-not-removed/expected_tags.json create mode 100644 tests/lasagna/todos-not-removed/src/main/java/Lasagna.java diff --git a/src/main/java/analyzer/comments/RemoveTodoComments.java b/src/main/java/analyzer/comments/RemoveTodoComments.java new file mode 100644 index 00000000..2279b5ae --- /dev/null +++ b/src/main/java/analyzer/comments/RemoveTodoComments.java @@ -0,0 +1,19 @@ +package analyzer.comments; + +import analyzer.Comment; +import analyzer.CommentType; + +/** + * @see Markdown Template + */ +public class RemoveTodoComments extends Comment { + @Override + public String getKey() { + return "java.general.remove_todo_comments"; + } + + @Override + public CommentType getType() { + return CommentType.ACTIONABLE; + } +} diff --git a/src/main/java/analyzer/exercises/lasagna/LasagnaAnalyzer.java b/src/main/java/analyzer/exercises/lasagna/LasagnaAnalyzer.java index b0b3ec3d..bf55a429 100644 --- a/src/main/java/analyzer/exercises/lasagna/LasagnaAnalyzer.java +++ b/src/main/java/analyzer/exercises/lasagna/LasagnaAnalyzer.java @@ -3,8 +3,10 @@ import analyzer.Analysis; import analyzer.Analyzer; import analyzer.comments.ExemplarSolution; +import analyzer.comments.RemoveTodoComments; import com.github.javaparser.ast.CompilationUnit; import com.github.javaparser.ast.body.MethodDeclaration; +import com.github.javaparser.ast.comments.LineComment; import com.github.javaparser.ast.expr.MethodCallExpr; import com.github.javaparser.ast.visitor.VoidVisitorAdapter; @@ -46,4 +48,11 @@ && doesNotCallMethod(node, PREPARATION_TIME_IN_MINUTES)) { private static boolean doesNotCallMethod(MethodDeclaration node, String otherMethodName) { return node.findAll(MethodCallExpr.class, x -> x.getNameAsString().contains(otherMethodName)).isEmpty(); } + + @Override + public void visit(LineComment node, Analysis analysis) { + if (node.getContent().contains("TODO")) { + analysis.addComment(new RemoveTodoComments()); + } + } } diff --git a/tests/lasagna/todos-not-removed/.meta/config.json b/tests/lasagna/todos-not-removed/.meta/config.json new file mode 100644 index 00000000..e59df45d --- /dev/null +++ b/tests/lasagna/todos-not-removed/.meta/config.json @@ -0,0 +1,23 @@ +{ + "authors": [ + "mirkoperillo" + ], + "files": { + "solution": [ + "src/main/java/Lasagna.java" + ], + "test": [ + "src/test/java/LasagnaTest.java" + ], + "exemplar": [ + ".meta/src/reference/java/Lasagna.java" + ], + "invalidator": [ + "build.gradle" + ] + }, + "forked_from": [ + "csharp/lucians-luscious-lasagna" + ], + "blurb": "Learn about the basics of Java by following a lasagna recipe." +} \ No newline at end of file diff --git a/tests/lasagna/todos-not-removed/expected_analysis.json b/tests/lasagna/todos-not-removed/expected_analysis.json new file mode 100644 index 00000000..fdc4bc89 --- /dev/null +++ b/tests/lasagna/todos-not-removed/expected_analysis.json @@ -0,0 +1,10 @@ +{"comments": [ + { + "comment": "java.lasagna.remove_todo_comments", + "type": "actionable" + }, + { + "comment": "java.general.feedback_request", + "type": "informative" + } +]} \ No newline at end of file diff --git a/tests/lasagna/todos-not-removed/expected_tags.json b/tests/lasagna/todos-not-removed/expected_tags.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/tests/lasagna/todos-not-removed/expected_tags.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/tests/lasagna/todos-not-removed/src/main/java/Lasagna.java b/tests/lasagna/todos-not-removed/src/main/java/Lasagna.java new file mode 100644 index 00000000..41f9aeb6 --- /dev/null +++ b/tests/lasagna/todos-not-removed/src/main/java/Lasagna.java @@ -0,0 +1,21 @@ +public class Lasagna { + // TODO: define the 'expectedMinutesInOven()' method + public int expectedMinutesInOven() { + return 40; + } + + // TODO: define the 'remainingMinutesInOven()' method + public int remainingMinutesInOven(int actualMinutesInOven) { + return expectedMinutesInOven() - actualMinutesInOven; + } + + // TODO: define the 'preparationTimeInMinutes()' method + public int preparationTimeInMinutes(int numberOfLayers) { + return numberOfLayers * 2; + } + + // TODO: define the 'totalTimeInMinutes()' method + public int totalTimeInMinutes(int numberOfLayers, int actualMinutesInOven) { + return preparationTimeInMinutes(numberOfLayers) + actualMinutesInOven; + } +} From c221f844f3fecc45ac979e1ed389dff59a4b8776 Mon Sep 17 00:00:00 2001 From: Sander Ploegsma Date: Mon, 22 Jan 2024 14:31:13 +0100 Subject: [PATCH 4/5] Fix typo in todos-not-removed/expected_analysis.json --- tests/lasagna/todos-not-removed/expected_analysis.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/lasagna/todos-not-removed/expected_analysis.json b/tests/lasagna/todos-not-removed/expected_analysis.json index fdc4bc89..9c4825d2 100644 --- a/tests/lasagna/todos-not-removed/expected_analysis.json +++ b/tests/lasagna/todos-not-removed/expected_analysis.json @@ -1,6 +1,6 @@ {"comments": [ { - "comment": "java.lasagna.remove_todo_comments", + "comment": "java.general.remove_todo_comments", "type": "actionable" }, { From 64e918bf6d6761a290bf067298a28710787ee3d5 Mon Sep 17 00:00:00 2001 From: Sander Ploegsma Date: Mon, 22 Jan 2024 15:45:39 +0100 Subject: [PATCH 5/5] Add unit tests --- src/test/java/analyzer/AnalyzerTest.java | 17 ++++++- .../exercises/GlobalAnalyzerTest.java | 8 ++-- .../hamming/HammingAnalyzerTest.java | 10 ++--- .../lasagna/LasagnaAnalyzerTest.java | 44 +++++++++++++++++++ .../exercises/twofer/TwoferAnalyzerTest.java | 10 ++--- .../exercises/lasagna/ExemplarSolution.java | 17 +++++++ .../ExemplarSolutionWithTodoComments.java | 21 +++++++++ .../lasagna/NoReuseOfBothMethods.java | 0 .../NoReuseOfExpectedMinutesInOven.java | 0 .../NoReuseOfPreparationTimeInMinutes.java | 0 .../.meta/config.json | 0 .../expected_analysis.json | 0 .../expected_tags.json | 0 .../no-code-reuse/src/main/java/Lasagna.java | 17 +++++++ .../.meta/config.json | 23 ---------- .../expected_analysis.json | 14 ------ .../expected_tags.json | 1 - .../total-time-in-minutes/.meta/config.json | 23 ---------- .../expected_analysis.json | 14 ------ .../total-time-in-minutes/expected_tags.json | 1 - 20 files changed, 125 insertions(+), 95 deletions(-) create mode 100644 src/test/java/analyzer/exercises/lasagna/LasagnaAnalyzerTest.java create mode 100644 src/test/resources/analyzer/exercises/lasagna/ExemplarSolution.java create mode 100644 src/test/resources/analyzer/exercises/lasagna/ExemplarSolutionWithTodoComments.java rename tests/lasagna/reuse-code/both-methods/src/main/java/Lasagna.java => src/test/resources/analyzer/exercises/lasagna/NoReuseOfBothMethods.java (100%) rename tests/lasagna/reuse-code/remaining-minutes-in-oven/src/main/java/Lasagna.java => src/test/resources/analyzer/exercises/lasagna/NoReuseOfExpectedMinutesInOven.java (100%) rename tests/lasagna/reuse-code/total-time-in-minutes/src/main/java/Lasagna.java => src/test/resources/analyzer/exercises/lasagna/NoReuseOfPreparationTimeInMinutes.java (100%) rename tests/lasagna/{reuse-code/both-methods => no-code-reuse}/.meta/config.json (100%) rename tests/lasagna/{reuse-code/both-methods => no-code-reuse}/expected_analysis.json (100%) rename tests/lasagna/{reuse-code/both-methods => no-code-reuse}/expected_tags.json (100%) create mode 100644 tests/lasagna/no-code-reuse/src/main/java/Lasagna.java delete mode 100644 tests/lasagna/reuse-code/remaining-minutes-in-oven/.meta/config.json delete mode 100644 tests/lasagna/reuse-code/remaining-minutes-in-oven/expected_analysis.json delete mode 100644 tests/lasagna/reuse-code/remaining-minutes-in-oven/expected_tags.json delete mode 100644 tests/lasagna/reuse-code/total-time-in-minutes/.meta/config.json delete mode 100644 tests/lasagna/reuse-code/total-time-in-minutes/expected_analysis.json delete mode 100644 tests/lasagna/reuse-code/total-time-in-minutes/expected_tags.json diff --git a/src/test/java/analyzer/AnalyzerTest.java b/src/test/java/analyzer/AnalyzerTest.java index 899653f6..5c657e81 100644 --- a/src/test/java/analyzer/AnalyzerTest.java +++ b/src/test/java/analyzer/AnalyzerTest.java @@ -3,10 +3,15 @@ import com.github.javaparser.StaticJavaParser; import com.github.javaparser.ast.CompilationUnit; +import java.lang.reflect.InvocationTargetException; import java.util.List; -public abstract class AnalyzerTest { - protected abstract Analyzer getAnalyzer(); +public class AnalyzerTest { + private final Class analyzerClass; + + public AnalyzerTest(Class analyzerClass) { + this.analyzerClass = analyzerClass; + } protected Analysis analyzeResourceFile(String resourceFileName) { var resource = getClass().getResourceAsStream(resourceFileName); @@ -22,4 +27,12 @@ private Analysis analyze(CompilationUnit compilationUnit) { getAnalyzer().analyze(List.of(compilationUnit), analysis); return analysis; } + + private T getAnalyzer() { + try { + return this.analyzerClass.getConstructor().newInstance(); + } catch (NoSuchMethodException | InstantiationException | IllegalAccessException | InvocationTargetException ex) { + throw new AssertionError("Unable to create instance of " + this.analyzerClass.getName(), ex); + } + } } diff --git a/src/test/java/analyzer/exercises/GlobalAnalyzerTest.java b/src/test/java/analyzer/exercises/GlobalAnalyzerTest.java index 33885058..610e200d 100644 --- a/src/test/java/analyzer/exercises/GlobalAnalyzerTest.java +++ b/src/test/java/analyzer/exercises/GlobalAnalyzerTest.java @@ -1,6 +1,5 @@ package analyzer.exercises; -import analyzer.Analyzer; import analyzer.AnalyzerTest; import analyzer.comments.AvoidPrintStatements; import analyzer.comments.DoNotUseMainMethod; @@ -11,10 +10,9 @@ import static org.assertj.core.api.Assertions.assertThat; -public class GlobalAnalyzerTest extends AnalyzerTest { - @Override - protected Analyzer getAnalyzer() { - return new GlobalAnalyzer(); +public class GlobalAnalyzerTest extends AnalyzerTest { + public GlobalAnalyzerTest() { + super(GlobalAnalyzer.class); } @MethodSource diff --git a/src/test/java/analyzer/exercises/hamming/HammingAnalyzerTest.java b/src/test/java/analyzer/exercises/hamming/HammingAnalyzerTest.java index 91bd901f..31933f5b 100644 --- a/src/test/java/analyzer/exercises/hamming/HammingAnalyzerTest.java +++ b/src/test/java/analyzer/exercises/hamming/HammingAnalyzerTest.java @@ -1,8 +1,7 @@ package analyzer.exercises.hamming; -import analyzer.Analyzer; -import analyzer.Comment; import analyzer.AnalyzerTest; +import analyzer.Comment; import analyzer.comments.ConstructorTooLong; import analyzer.comments.MethodTooLong; import analyzer.comments.UseProperClassName; @@ -15,10 +14,9 @@ import static org.assertj.core.api.Assertions.assertThat; -public class HammingAnalyzerTest extends AnalyzerTest { - @Override - protected Analyzer getAnalyzer() { - return new HammingAnalyzer(); +public class HammingAnalyzerTest extends AnalyzerTest { + public HammingAnalyzerTest() { + super(HammingAnalyzer.class); } private static Stream testCases() { diff --git a/src/test/java/analyzer/exercises/lasagna/LasagnaAnalyzerTest.java b/src/test/java/analyzer/exercises/lasagna/LasagnaAnalyzerTest.java new file mode 100644 index 00000000..59392a44 --- /dev/null +++ b/src/test/java/analyzer/exercises/lasagna/LasagnaAnalyzerTest.java @@ -0,0 +1,44 @@ +package analyzer.exercises.lasagna; + +import analyzer.AnalyzerTest; +import analyzer.Comment; +import analyzer.comments.ExemplarSolution; +import analyzer.comments.RemoveTodoComments; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; + +import java.util.List; +import java.util.stream.Stream; + +import static org.assertj.core.api.Assertions.assertThat; + +public class LasagnaAnalyzerTest extends AnalyzerTest { + public LasagnaAnalyzerTest() { + super(LasagnaAnalyzer.class); + } + + private static Stream testCases() { + return Stream.of( + Arguments.of("ExemplarSolution.java", List.of(new ExemplarSolution("Lasagna"))), + Arguments.of("ExemplarSolutionWithTodoComments.java", List.of(new RemoveTodoComments())), + Arguments.of("NoReuseOfExpectedMinutesInOven.java", + List.of(new ReuseCode("remainingMinutesInOven", "expectedMinutesInOven"))), + Arguments.of("NoReuseOfPreparationTimeInMinutes.java", + List.of(new ReuseCode("totalTimeInMinutes", "preparationTimeInMinutes"))), + Arguments.of("NoReuseOfBothMethods.java", + List.of( + new ReuseCode("remainingMinutesInOven", "expectedMinutesInOven"), + new ReuseCode("totalTimeInMinutes", "preparationTimeInMinutes") + ) + ) + ); + } + + @ParameterizedTest(name = "{0}") + @MethodSource("testCases") + public void testCommentsOnSolution(String filename, List expectedComments) { + var analysis = analyzeResourceFile("/analyzer/exercises/lasagna/" + filename); + assertThat(analysis.getComments()).containsExactlyInAnyOrder(expectedComments.toArray(Comment[]::new)); + } +} diff --git a/src/test/java/analyzer/exercises/twofer/TwoferAnalyzerTest.java b/src/test/java/analyzer/exercises/twofer/TwoferAnalyzerTest.java index 594c8096..fc568b6d 100644 --- a/src/test/java/analyzer/exercises/twofer/TwoferAnalyzerTest.java +++ b/src/test/java/analyzer/exercises/twofer/TwoferAnalyzerTest.java @@ -1,8 +1,7 @@ package analyzer.exercises.twofer; -import analyzer.Analyzer; -import analyzer.Comment; import analyzer.AnalyzerTest; +import analyzer.Comment; import analyzer.comments.AvoidHardCodedTestCases; import analyzer.comments.UseProperClassName; import analyzer.comments.UseProperMethodName; @@ -14,11 +13,10 @@ import static org.assertj.core.api.Assertions.assertThat; -public class TwoferAnalyzerTest extends AnalyzerTest { +public class TwoferAnalyzerTest extends AnalyzerTest { - @Override - protected Analyzer getAnalyzer() { - return new TwoferAnalyzer(); + public TwoferAnalyzerTest() { + super(TwoferAnalyzer.class); } private static Stream testCases() { diff --git a/src/test/resources/analyzer/exercises/lasagna/ExemplarSolution.java b/src/test/resources/analyzer/exercises/lasagna/ExemplarSolution.java new file mode 100644 index 00000000..c19aa836 --- /dev/null +++ b/src/test/resources/analyzer/exercises/lasagna/ExemplarSolution.java @@ -0,0 +1,17 @@ +public class Lasagna { + public int expectedMinutesInOven() { + return 40; + } + + public int remainingMinutesInOven(int actualMinutesInOven) { + return expectedMinutesInOven() - actualMinutesInOven; + } + + public int preparationTimeInMinutes(int numberOfLayers) { + return numberOfLayers * 2; + } + + public int totalTimeInMinutes(int numberOfLayers, int actualMinutesInOven) { + return preparationTimeInMinutes(numberOfLayers) + actualMinutesInOven; + } +} diff --git a/src/test/resources/analyzer/exercises/lasagna/ExemplarSolutionWithTodoComments.java b/src/test/resources/analyzer/exercises/lasagna/ExemplarSolutionWithTodoComments.java new file mode 100644 index 00000000..41f9aeb6 --- /dev/null +++ b/src/test/resources/analyzer/exercises/lasagna/ExemplarSolutionWithTodoComments.java @@ -0,0 +1,21 @@ +public class Lasagna { + // TODO: define the 'expectedMinutesInOven()' method + public int expectedMinutesInOven() { + return 40; + } + + // TODO: define the 'remainingMinutesInOven()' method + public int remainingMinutesInOven(int actualMinutesInOven) { + return expectedMinutesInOven() - actualMinutesInOven; + } + + // TODO: define the 'preparationTimeInMinutes()' method + public int preparationTimeInMinutes(int numberOfLayers) { + return numberOfLayers * 2; + } + + // TODO: define the 'totalTimeInMinutes()' method + public int totalTimeInMinutes(int numberOfLayers, int actualMinutesInOven) { + return preparationTimeInMinutes(numberOfLayers) + actualMinutesInOven; + } +} diff --git a/tests/lasagna/reuse-code/both-methods/src/main/java/Lasagna.java b/src/test/resources/analyzer/exercises/lasagna/NoReuseOfBothMethods.java similarity index 100% rename from tests/lasagna/reuse-code/both-methods/src/main/java/Lasagna.java rename to src/test/resources/analyzer/exercises/lasagna/NoReuseOfBothMethods.java diff --git a/tests/lasagna/reuse-code/remaining-minutes-in-oven/src/main/java/Lasagna.java b/src/test/resources/analyzer/exercises/lasagna/NoReuseOfExpectedMinutesInOven.java similarity index 100% rename from tests/lasagna/reuse-code/remaining-minutes-in-oven/src/main/java/Lasagna.java rename to src/test/resources/analyzer/exercises/lasagna/NoReuseOfExpectedMinutesInOven.java diff --git a/tests/lasagna/reuse-code/total-time-in-minutes/src/main/java/Lasagna.java b/src/test/resources/analyzer/exercises/lasagna/NoReuseOfPreparationTimeInMinutes.java similarity index 100% rename from tests/lasagna/reuse-code/total-time-in-minutes/src/main/java/Lasagna.java rename to src/test/resources/analyzer/exercises/lasagna/NoReuseOfPreparationTimeInMinutes.java diff --git a/tests/lasagna/reuse-code/both-methods/.meta/config.json b/tests/lasagna/no-code-reuse/.meta/config.json similarity index 100% rename from tests/lasagna/reuse-code/both-methods/.meta/config.json rename to tests/lasagna/no-code-reuse/.meta/config.json diff --git a/tests/lasagna/reuse-code/both-methods/expected_analysis.json b/tests/lasagna/no-code-reuse/expected_analysis.json similarity index 100% rename from tests/lasagna/reuse-code/both-methods/expected_analysis.json rename to tests/lasagna/no-code-reuse/expected_analysis.json diff --git a/tests/lasagna/reuse-code/both-methods/expected_tags.json b/tests/lasagna/no-code-reuse/expected_tags.json similarity index 100% rename from tests/lasagna/reuse-code/both-methods/expected_tags.json rename to tests/lasagna/no-code-reuse/expected_tags.json diff --git a/tests/lasagna/no-code-reuse/src/main/java/Lasagna.java b/tests/lasagna/no-code-reuse/src/main/java/Lasagna.java new file mode 100644 index 00000000..7f31cf99 --- /dev/null +++ b/tests/lasagna/no-code-reuse/src/main/java/Lasagna.java @@ -0,0 +1,17 @@ +public class Lasagna { + public int expectedMinutesInOven() { + return 40; + } + + public int remainingMinutesInOven(int actualMinutesInOven) { + return 40 - actualMinutesInOven; + } + + public int preparationTimeInMinutes(int numberOfLayers) { + return numberOfLayers * 2; + } + + public int totalTimeInMinutes(int numberOfLayers, int actualMinutesInOven) { + return 2 * numberOfLayers + actualMinutesInOven; + } +} diff --git a/tests/lasagna/reuse-code/remaining-minutes-in-oven/.meta/config.json b/tests/lasagna/reuse-code/remaining-minutes-in-oven/.meta/config.json deleted file mode 100644 index e59df45d..00000000 --- a/tests/lasagna/reuse-code/remaining-minutes-in-oven/.meta/config.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "authors": [ - "mirkoperillo" - ], - "files": { - "solution": [ - "src/main/java/Lasagna.java" - ], - "test": [ - "src/test/java/LasagnaTest.java" - ], - "exemplar": [ - ".meta/src/reference/java/Lasagna.java" - ], - "invalidator": [ - "build.gradle" - ] - }, - "forked_from": [ - "csharp/lucians-luscious-lasagna" - ], - "blurb": "Learn about the basics of Java by following a lasagna recipe." -} \ No newline at end of file diff --git a/tests/lasagna/reuse-code/remaining-minutes-in-oven/expected_analysis.json b/tests/lasagna/reuse-code/remaining-minutes-in-oven/expected_analysis.json deleted file mode 100644 index 0bc1fb09..00000000 --- a/tests/lasagna/reuse-code/remaining-minutes-in-oven/expected_analysis.json +++ /dev/null @@ -1,14 +0,0 @@ -{"comments": [ - { - "comment": "java.lasagna.reuse_code", - "type": "actionable", - "params": { - "callingMethod": "remainingMinutesInOven", - "methodToCall": "expectedMinutesInOven" - } - }, - { - "comment": "java.general.feedback_request", - "type": "informative" - } -]} \ No newline at end of file diff --git a/tests/lasagna/reuse-code/remaining-minutes-in-oven/expected_tags.json b/tests/lasagna/reuse-code/remaining-minutes-in-oven/expected_tags.json deleted file mode 100644 index 9e26dfee..00000000 --- a/tests/lasagna/reuse-code/remaining-minutes-in-oven/expected_tags.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/tests/lasagna/reuse-code/total-time-in-minutes/.meta/config.json b/tests/lasagna/reuse-code/total-time-in-minutes/.meta/config.json deleted file mode 100644 index e59df45d..00000000 --- a/tests/lasagna/reuse-code/total-time-in-minutes/.meta/config.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "authors": [ - "mirkoperillo" - ], - "files": { - "solution": [ - "src/main/java/Lasagna.java" - ], - "test": [ - "src/test/java/LasagnaTest.java" - ], - "exemplar": [ - ".meta/src/reference/java/Lasagna.java" - ], - "invalidator": [ - "build.gradle" - ] - }, - "forked_from": [ - "csharp/lucians-luscious-lasagna" - ], - "blurb": "Learn about the basics of Java by following a lasagna recipe." -} \ No newline at end of file diff --git a/tests/lasagna/reuse-code/total-time-in-minutes/expected_analysis.json b/tests/lasagna/reuse-code/total-time-in-minutes/expected_analysis.json deleted file mode 100644 index 519628b9..00000000 --- a/tests/lasagna/reuse-code/total-time-in-minutes/expected_analysis.json +++ /dev/null @@ -1,14 +0,0 @@ -{"comments": [ - { - "comment": "java.lasagna.reuse_code", - "type": "actionable", - "params": { - "callingMethod": "totalTimeInMinutes", - "methodToCall": "preparationTimeInMinutes" - } - }, - { - "comment": "java.general.feedback_request", - "type": "informative" - } -]} \ No newline at end of file diff --git a/tests/lasagna/reuse-code/total-time-in-minutes/expected_tags.json b/tests/lasagna/reuse-code/total-time-in-minutes/expected_tags.json deleted file mode 100644 index 9e26dfee..00000000 --- a/tests/lasagna/reuse-code/total-time-in-minutes/expected_tags.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file