From b5f500a23b25151e1c7ca30ebb4daa82da71fc9b Mon Sep 17 00:00:00 2001 From: Henry Bui Date: Fri, 31 Jan 2025 23:43:40 -0500 Subject: [PATCH] Fix broken Zucchini result JSONs being generated, resulting in failed tests yielding passes in Gradescope in some cases --- .../launcher/ZucchiniJson.java | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/src/main/java/io/zucchini/circuitsimtester/launcher/ZucchiniJson.java b/src/main/java/io/zucchini/circuitsimtester/launcher/ZucchiniJson.java index b063fa2..4ae5c94 100644 --- a/src/main/java/io/zucchini/circuitsimtester/launcher/ZucchiniJson.java +++ b/src/main/java/io/zucchini/circuitsimtester/launcher/ZucchiniJson.java @@ -2,9 +2,13 @@ import static org.junit.platform.engine.TestExecutionResult.Status.SUCCESSFUL; +import java.util.ArrayList; import java.util.Collection; +import java.util.Comparator; +import java.util.HashMap; import java.util.LinkedList; import java.util.List; +import java.util.Map; import com.google.gson.Gson; import com.google.gson.GsonBuilder; @@ -38,27 +42,24 @@ public void printResultsAsJson(TestClassResult classResult, Appendable out) { // Assumes results is sorted by method name private List collapseMethodResults( Collection results) { - List collapsed = new LinkedList<>(); + Map collapsed = new HashMap<>(); for (TestMethodResult result : results) { String methodName = result.getSource().getMethodName(); - ZucchiniJsonMethod tail; - if (collapsed.isEmpty() || - !(tail = collapsed.get(collapsed.size() - 1)).methodName - .equals(methodName)) { - // Time to start a new methodresult - collapsed.add(tail = new ZucchiniJsonMethod(methodName)); - } + ZucchiniJsonMethod method = collapsed.computeIfAbsent(methodName, ZucchiniJsonMethod::new); - tail.total++; + method.total++; if (result.getResult().getStatus() != SUCCESSFUL && - ++tail.failed <= maxFailuresPerTest) { - tail.partialFailures.add( + ++method.failed <= maxFailuresPerTest) { + method.partialFailures.add( ZucchiniJsonMethodFailure.fromMethodResult(result)); } } - return collapsed; + List objects = new ArrayList<>(collapsed.values()); + objects.sort(Comparator.comparing(m -> m.methodName)); + + return objects; } private static class ZucchiniJsonRoot {