diff --git a/subprojects/architecture-test/build.gradle.kts b/subprojects/architecture-test/build.gradle.kts index 79418156a3a7..b3cc32b481c8 100644 --- a/subprojects/architecture-test/build.gradle.kts +++ b/subprojects/architecture-test/build.gradle.kts @@ -17,6 +17,7 @@ dependencies { testImplementation(project(":model-core")) testImplementation(project(":file-temp")) testImplementation(project(":core")) + testImplementation(project(":testing-base")) testImplementation(libs.inject) testImplementation(libs.archunitJunit5) diff --git a/subprojects/architecture-test/src/test/java/org/gradle/architecture/test/ProviderMigrationArchitectureTest.java b/subprojects/architecture-test/src/test/java/org/gradle/architecture/test/ProviderMigrationArchitectureTest.java index 20533f48be86..0687e56758bd 100644 --- a/subprojects/architecture-test/src/test/java/org/gradle/architecture/test/ProviderMigrationArchitectureTest.java +++ b/subprojects/architecture-test/src/test/java/org/gradle/architecture/test/ProviderMigrationArchitectureTest.java @@ -38,6 +38,7 @@ import org.gradle.api.provider.Property; import org.gradle.api.provider.Provider; import org.gradle.api.resources.TextResource; +import org.gradle.api.tasks.testing.TestFailure; import org.gradle.internal.reflect.PropertyAccessorType; import javax.inject.Inject; @@ -77,6 +78,7 @@ public boolean test(JavaClass input) { .and(not(declaredIn(Configuration.class))) .and(not(declaredIn(FileCollection.class))) .and(not(declaredIn(ConfigurableFileCollection.class))) + .and(not(declaredIn(TestFailure.class))) // extends Throwable which has setter .and(are(declaredIn(class_with_any_mutable_property))) .and(are(getters)) .and(not(annotatedWith(Inject.class))) diff --git a/subprojects/testing-base/src/main/java/org/gradle/api/internal/tasks/testing/DefaultTestFailure.java b/subprojects/testing-base/src/main/java/org/gradle/api/internal/tasks/testing/DefaultTestFailure.java index 274170dd7b3b..c00cd1f7d058 100644 --- a/subprojects/testing-base/src/main/java/org/gradle/api/internal/tasks/testing/DefaultTestFailure.java +++ b/subprojects/testing-base/src/main/java/org/gradle/api/internal/tasks/testing/DefaultTestFailure.java @@ -27,20 +27,19 @@ public class DefaultTestFailure extends TestFailure { - private final Throwable rawFailure; private final TestFailureDetails details; private final List causes; public DefaultTestFailure(Throwable rawFailure, TestFailureDetails details, List causes) { - this.rawFailure = rawFailure; + super(rawFailure); this.details = details; this.causes = causes; } @Override public Throwable getRawFailure() { - return rawFailure; + return getCause(); } @Override @@ -64,7 +63,7 @@ public boolean equals(Object o) { DefaultTestFailure that = (DefaultTestFailure) o; - if (rawFailure != null ? !rawFailure.equals(that.rawFailure) : that.rawFailure != null) { + if (getCause() != null ? !getCause().equals(that.getCause()) : that.getCause() != null) { return false; } return details != null ? details.equals(that.details) : that.details == null; @@ -72,7 +71,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - int result = rawFailure != null ? rawFailure.hashCode() : 0; + int result = getCause() != null ? getCause().hashCode() : 0; result = 31 * result + (details != null ? details.hashCode() : 0); return result; } diff --git a/subprojects/testing-base/src/main/java/org/gradle/api/internal/tasks/testing/TestResultProcessor.java b/subprojects/testing-base/src/main/java/org/gradle/api/internal/tasks/testing/TestResultProcessor.java index 941b7c25a6c5..b3e8a85166af 100644 --- a/subprojects/testing-base/src/main/java/org/gradle/api/internal/tasks/testing/TestResultProcessor.java +++ b/subprojects/testing-base/src/main/java/org/gradle/api/internal/tasks/testing/TestResultProcessor.java @@ -16,7 +16,6 @@ package org.gradle.api.internal.tasks.testing; -import org.gradle.api.tasks.testing.TestFailure; import org.gradle.api.tasks.testing.TestOutputEvent; import org.gradle.internal.scan.UsedByScanPlugin; @@ -47,5 +46,5 @@ public interface TestResultProcessor { * Notifies this processor that a failure has occurred in the given test. */ @UsedByScanPlugin("test-distribution") - void failure(Object testId, TestFailure result); + void failure(Object testId, Throwable result); } diff --git a/subprojects/testing-base/src/main/java/org/gradle/api/internal/tasks/testing/processors/CaptureTestOutputTestResultProcessor.java b/subprojects/testing-base/src/main/java/org/gradle/api/internal/tasks/testing/processors/CaptureTestOutputTestResultProcessor.java index 6bfd2ce0abba..3e9222589a4f 100644 --- a/subprojects/testing-base/src/main/java/org/gradle/api/internal/tasks/testing/processors/CaptureTestOutputTestResultProcessor.java +++ b/subprojects/testing-base/src/main/java/org/gradle/api/internal/tasks/testing/processors/CaptureTestOutputTestResultProcessor.java @@ -20,7 +20,6 @@ import org.gradle.api.internal.tasks.testing.TestDescriptorInternal; import org.gradle.api.internal.tasks.testing.TestResultProcessor; import org.gradle.api.internal.tasks.testing.TestStartEvent; -import org.gradle.api.tasks.testing.TestFailure; import org.gradle.api.tasks.testing.TestOutputEvent; import java.util.Map; @@ -89,7 +88,7 @@ public void output(Object testId, TestOutputEvent event) { } @Override - public void failure(Object testId, TestFailure result) { + public void failure(Object testId, Throwable result) { processor.failure(testId, result); } } diff --git a/subprojects/testing-base/src/main/java/org/gradle/api/internal/tasks/testing/results/AttachParentTestResultProcessor.java b/subprojects/testing-base/src/main/java/org/gradle/api/internal/tasks/testing/results/AttachParentTestResultProcessor.java index d58225d4ece0..5f13fd09310c 100644 --- a/subprojects/testing-base/src/main/java/org/gradle/api/internal/tasks/testing/results/AttachParentTestResultProcessor.java +++ b/subprojects/testing-base/src/main/java/org/gradle/api/internal/tasks/testing/results/AttachParentTestResultProcessor.java @@ -20,7 +20,6 @@ import org.gradle.api.internal.tasks.testing.TestDescriptorInternal; import org.gradle.api.internal.tasks.testing.TestResultProcessor; import org.gradle.api.internal.tasks.testing.TestStartEvent; -import org.gradle.api.tasks.testing.TestFailure; import org.gradle.api.tasks.testing.TestOutputEvent; public class AttachParentTestResultProcessor implements TestResultProcessor { @@ -43,7 +42,7 @@ public void started(TestDescriptorInternal test, TestStartEvent event) { } @Override - public void failure(Object testId, TestFailure result) { + public void failure(Object testId, Throwable result) { processor.failure(testId, result); } diff --git a/subprojects/testing-base/src/main/java/org/gradle/api/internal/tasks/testing/results/StateTrackingTestResultProcessor.java b/subprojects/testing-base/src/main/java/org/gradle/api/internal/tasks/testing/results/StateTrackingTestResultProcessor.java index c859545cc4f6..0a136e2dd211 100644 --- a/subprojects/testing-base/src/main/java/org/gradle/api/internal/tasks/testing/results/StateTrackingTestResultProcessor.java +++ b/subprojects/testing-base/src/main/java/org/gradle/api/internal/tasks/testing/results/StateTrackingTestResultProcessor.java @@ -98,14 +98,18 @@ public final void completed(Object testId, TestCompleteEvent event) { } @Override - public final void failure(Object testId, TestFailure testFailure) { + public final void failure(Object testId, Throwable testFailure) { TestState testState = executing.get(testId); if (testState == null) { throw new IllegalArgumentException(String.format( "Received a failure event for test with unknown id '%s'. Registered test ids: '%s'", testId, executing.keySet())); } - testState.failures.add(testFailure); + if (testFailure instanceof TestFailure) { + testState.failures.add((TestFailure) testFailure); + } else { + testState.failures.add(TestFailure.fromTestFrameworkFailure(testFailure)); + } } @Override diff --git a/subprojects/testing-base/src/main/java/org/gradle/api/tasks/testing/TestFailure.java b/subprojects/testing-base/src/main/java/org/gradle/api/tasks/testing/TestFailure.java index 161641dd747b..50bdd465725e 100644 --- a/subprojects/testing-base/src/main/java/org/gradle/api/tasks/testing/TestFailure.java +++ b/subprojects/testing-base/src/main/java/org/gradle/api/tasks/testing/TestFailure.java @@ -27,7 +27,16 @@ * @since 7.6 */ @Incubating -public abstract class TestFailure { +public abstract class TestFailure extends Throwable { + + /** + * Constructor storing the raw failure. + * + * @since 7.6.1 + */ + protected TestFailure(Throwable rawFailure) { + super(rawFailure); + } /** * Returns the list of causes. diff --git a/subprojects/testing-jvm/src/main/java/org/gradle/api/internal/tasks/testing/junit/TestClassExecutionEventGenerator.java b/subprojects/testing-jvm/src/main/java/org/gradle/api/internal/tasks/testing/junit/TestClassExecutionEventGenerator.java index 89f747d4a774..84cb9fe91937 100644 --- a/subprojects/testing-jvm/src/main/java/org/gradle/api/internal/tasks/testing/junit/TestClassExecutionEventGenerator.java +++ b/subprojects/testing-jvm/src/main/java/org/gradle/api/internal/tasks/testing/junit/TestClassExecutionEventGenerator.java @@ -95,7 +95,7 @@ public void output(Object testId, TestOutputEvent event) { } @Override - public void failure(Object testId, TestFailure result) { + public void failure(Object testId, Throwable result) { resultProcessor.failure(testId, result); } }