From be0b23ebc8abe042818fb70d1921841fd8c42d36 Mon Sep 17 00:00:00 2001 From: Ulli Hafner Date: Wed, 22 Nov 2023 14:44:35 +0100 Subject: [PATCH 1/2] Copy test cases when copying class nodes. --- .../edu/hm/hafner/coverage/ClassNode.java | 4 ++- .../java/edu/hm/hafner/coverage/FileNode.java | 16 +++++------ .../java/edu/hm/hafner/coverage/TestCase.java | 28 +++++++++---------- .../edu/hm/hafner/coverage/ClassNodeTest.java | 12 ++++++++ .../coverage/parser/JunitParserTest.java | 4 +-- 5 files changed, 39 insertions(+), 25 deletions(-) diff --git a/src/main/java/edu/hm/hafner/coverage/ClassNode.java b/src/main/java/edu/hm/hafner/coverage/ClassNode.java index 1e3aca52..e568bcb2 100644 --- a/src/main/java/edu/hm/hafner/coverage/ClassNode.java +++ b/src/main/java/edu/hm/hafner/coverage/ClassNode.java @@ -23,7 +23,9 @@ public ClassNode(final String name) { @Override public ClassNode copy() { - return new ClassNode(getName()); + var copy = new ClassNode(getName()); + copy.testCases.addAll(testCases); + return copy; } /** diff --git a/src/main/java/edu/hm/hafner/coverage/FileNode.java b/src/main/java/edu/hm/hafner/coverage/FileNode.java index 0afd557a..60f54875 100644 --- a/src/main/java/edu/hm/hafner/coverage/FileNode.java +++ b/src/main/java/edu/hm/hafner/coverage/FileNode.java @@ -90,19 +90,19 @@ private Object readResolve() { @Override public FileNode copy() { - var file = new FileNode(getName(), relativePath); + var copy = new FileNode(getName(), relativePath); - file.coveredPerLine.putAll(coveredPerLine); - file.missedPerLine.putAll(missedPerLine); + copy.coveredPerLine.putAll(coveredPerLine); + copy.missedPerLine.putAll(missedPerLine); - file.modifiedLines.addAll(modifiedLines); + copy.modifiedLines.addAll(modifiedLines); - file.mutations.addAll(mutations); + copy.mutations.addAll(mutations); - file.indirectCoverageChanges.putAll(indirectCoverageChanges); - file.coverageDelta.putAll(coverageDelta); + copy.indirectCoverageChanges.putAll(indirectCoverageChanges); + copy.coverageDelta.putAll(coverageDelta); - return file; + return copy; } @Override diff --git a/src/main/java/edu/hm/hafner/coverage/TestCase.java b/src/main/java/edu/hm/hafner/coverage/TestCase.java index ad656bd4..250d708f 100644 --- a/src/main/java/edu/hm/hafner/coverage/TestCase.java +++ b/src/main/java/edu/hm/hafner/coverage/TestCase.java @@ -18,16 +18,16 @@ public final class TestCase implements Serializable { private final String testName; private final String className; - private final TestResult status; + private final TestResult result; private final String type; private final String message; private final String description; - private TestCase(final String testName, final String className, final TestResult status, + private TestCase(final String testName, final String className, final TestResult result, final String type, final String message, final String description) { this.testName = testName; this.className = className.intern(); - this.status = status; + this.result = result; this.type = type; this.message = message; this.description = description; @@ -41,8 +41,8 @@ public String getClassName() { return className; } - public TestResult getStatus() { - return status; + public TestResult getResult() { + return result; } public String getType() { @@ -74,7 +74,7 @@ public boolean equals(final Object o) { if (!className.equals(testCase.className)) { return false; } - if (status != testCase.status) { + if (result != testCase.result) { return false; } if (!type.equals(testCase.type)) { @@ -88,20 +88,20 @@ public boolean equals(final Object o) { @Override @Generated public String toString() { - return "TestCase{testName='" + testName + '\'' + ", className='" + className + '\'' + ", status=" + status + return "TestCase{testName='" + testName + '\'' + ", className='" + className + '\'' + ", status=" + result + ", type='" + type + '\'' + ", message='" + message + '\'' + ", description='" + description + '\'' + '}'; } @Override public int hashCode() { - int result = testName.hashCode(); - result = 31 * result + className.hashCode(); - result = 31 * result + status.hashCode(); - result = 31 * result + type.hashCode(); - result = 31 * result + message.hashCode(); - result = 31 * result + description.hashCode(); - return result; + int value = testName.hashCode(); + value = 31 * value + className.hashCode(); + value = 31 * value + this.result.hashCode(); + value = 31 * value + type.hashCode(); + value = 31 * value + message.hashCode(); + value = 31 * value + description.hashCode(); + return value; } /** diff --git a/src/test/java/edu/hm/hafner/coverage/ClassNodeTest.java b/src/test/java/edu/hm/hafner/coverage/ClassNodeTest.java index 3e5da54b..31c32172 100644 --- a/src/test/java/edu/hm/hafner/coverage/ClassNodeTest.java +++ b/src/test/java/edu/hm/hafner/coverage/ClassNodeTest.java @@ -2,6 +2,8 @@ import org.junit.jupiter.api.Test; +import edu.hm.hafner.coverage.TestCase.TestCaseBuilder; + import static edu.hm.hafner.coverage.assertions.Assertions.*; class ClassNodeTest extends AbstractNodeTest { @@ -29,4 +31,14 @@ void shouldHandleUnexpectedNodes() { .isNotPresent(); assertThat(classNode).isNotAggregation(); } + + @Test + void shouldCopyTests() { + var original = new ClassNode("Copy Me"); + var testCase = new TestCaseBuilder().withTestName("test").build(); + original.addTestCase(testCase); + + assertThat(original.getTestCases()).hasSize(1).contains(testCase); + assertThat(original.copy().getTestCases()).hasSize(1).contains(testCase); + } } diff --git a/src/test/java/edu/hm/hafner/coverage/parser/JunitParserTest.java b/src/test/java/edu/hm/hafner/coverage/parser/JunitParserTest.java index acaec1f5..4aa3a75f 100644 --- a/src/test/java/edu/hm/hafner/coverage/parser/JunitParserTest.java +++ b/src/test/java/edu/hm/hafner/coverage/parser/JunitParserTest.java @@ -73,7 +73,7 @@ void shouldReadWithNameOnly() { assertThat(tree.aggregateValues()).contains(new TestCount(141)); assertThat(tree.getTestCases()).hasSize(141) - .filteredOn(test -> test.getStatus() == TestResult.SKIPPED).hasSize(19); + .filteredOn(test -> test.getResult() == TestResult.SKIPPED).hasSize(19); } @Test @@ -206,7 +206,7 @@ private TestCase getFirstTest(final Node node) { .map(ClassNode.class::cast) .map(ClassNode::getTestCases) .flatMap(Collection::stream) - .filter(test -> test.getStatus() == TestResult.FAILED) + .filter(test -> test.getResult() == TestResult.FAILED) .findFirst() .orElseThrow(() -> new NoSuchElementException("No failed test found")); } From ac692bae9b99bda05f3be6e95416c071622588d6 Mon Sep 17 00:00:00 2001 From: Ulli Hafner Date: Wed, 22 Nov 2023 14:51:29 +0100 Subject: [PATCH 2/2] Fix naming of assertion. --- doc/dependency-graph.puml | 2 +- .../java/edu/hm/hafner/coverage/parser/JunitParserTest.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/dependency-graph.puml b/doc/dependency-graph.puml index c1cbbe07..30ca31dc 100644 --- a/doc/dependency-graph.puml +++ b/doc/dependency-graph.puml @@ -6,7 +6,7 @@ skinparam rectangle { BackgroundColor<> lightBlue BackgroundColor<> lightGray } -rectangle "coverage-model\n\n0.33.0" as edu_hm_hafner_coverage_model_jar +rectangle "coverage-model\n\n0.34.0-SNAPSHOT" as edu_hm_hafner_coverage_model_jar rectangle "spotbugs-annotations\n\n4.7.3" as com_github_spotbugs_spotbugs_annotations_jar rectangle "error_prone_annotations\n\n2.23.0" as com_google_errorprone_error_prone_annotations_jar rectangle "streamex\n\n0.8.2" as one_util_streamex_jar diff --git a/src/test/java/edu/hm/hafner/coverage/parser/JunitParserTest.java b/src/test/java/edu/hm/hafner/coverage/parser/JunitParserTest.java index 4aa3a75f..00f8214b 100644 --- a/src/test/java/edu/hm/hafner/coverage/parser/JunitParserTest.java +++ b/src/test/java/edu/hm/hafner/coverage/parser/JunitParserTest.java @@ -49,7 +49,7 @@ void shouldReadArchUnitTests() { assertThat(testClass.getTestCases()).hasSize(1); var testCase = getFirstTest(tree); - assertThat(testCase).hasStatus(TestResult.FAILED) + assertThat(testCase).hasResult(TestResult.FAILED) .hasClassName("Aufgabe3Test") .hasTestName("shouldSplitToEmptyRight(int)[1]") .hasType("org.opentest4j.AssertionFailedError");