Skip to content

Commit 73849a9

Browse files
committed
Add onRetry
1 parent dfd2d5e commit 73849a9

File tree

5 files changed

+45
-0
lines changed

5 files changed

+45
-0
lines changed

plugin/src/main/java/org/gradle/testretry/TestRetryTaskExtension.java

+9
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
import org.gradle.api.provider.Property;
2020
import org.gradle.api.provider.SetProperty;
2121
import org.gradle.api.tasks.testing.Test;
22+
import org.gradle.process.JavaForkOptions;
23+
import org.jetbrains.annotations.Nullable;
2224

2325
/**
2426
* Allows configuring test retry mechanics.
@@ -91,6 +93,13 @@ public interface TestRetryTaskExtension {
9193
*/
9294
void filter(Action<? super Filter> action);
9395

96+
/**
97+
* Invoked when test are retried.
98+
*/
99+
void onRetry(Action<? super JavaForkOptions> action);
100+
101+
@Nullable Action<? super JavaForkOptions> getOnRetry();
102+
94103
/**
95104
* A filter for specifying which tests may be retried.
96105
* <p>

plugin/src/main/java/org/gradle/testretry/internal/config/DefaultTestRetryTaskExtension.java

+15
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,10 @@
1919
import org.gradle.api.model.ObjectFactory;
2020
import org.gradle.api.provider.Property;
2121
import org.gradle.api.provider.SetProperty;
22+
import org.gradle.api.tasks.testing.Test;
23+
import org.gradle.process.JavaForkOptions;
2224
import org.gradle.testretry.TestRetryTaskExtension;
25+
import org.jetbrains.annotations.Nullable;
2326

2427
import javax.inject.Inject;
2528

@@ -33,6 +36,8 @@ public class DefaultTestRetryTaskExtension implements TestRetryTaskExtension {
3336

3437
private final ClassRetryCriteria classRetryCriteria;
3538

39+
private Action<? super JavaForkOptions> onRetry;
40+
3641
@Inject
3742
public DefaultTestRetryTaskExtension(ObjectFactory objects) {
3843
this.failOnPassedAfterRetry = objects.property(Boolean.class);
@@ -79,6 +84,16 @@ public void classRetry(Action<? super ClassRetryCriteria> action) {
7984
action.execute(classRetryCriteria);
8085
}
8186

87+
@Override
88+
public void onRetry(Action<? super JavaForkOptions> action) {
89+
onRetry = action;
90+
}
91+
92+
@Override
93+
public @Nullable Action<? super JavaForkOptions> getOnRetry() {
94+
return onRetry;
95+
}
96+
8297
private static final class FilterImpl implements Filter {
8398

8499
private final SetProperty<String> includeClasses;

plugin/src/main/java/org/gradle/testretry/internal/config/TestRetryTaskExtensionAccessor.java

+5
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@
1515
*/
1616
package org.gradle.testretry.internal.config;
1717

18+
import org.gradle.api.Action;
19+
import org.gradle.api.tasks.testing.Test;
20+
import org.gradle.process.JavaForkOptions;
21+
1822
import java.util.Set;
1923

2024
public interface TestRetryTaskExtensionAccessor {
@@ -41,4 +45,5 @@ public interface TestRetryTaskExtensionAccessor {
4145

4246
boolean getSimulateNotRetryableTest();
4347

48+
Action<? super JavaForkOptions> getOnRetry();
4449
}

plugin/src/main/java/org/gradle/testretry/internal/config/TestRetryTaskExtensionAdapter.java

+8
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,13 @@
1515
*/
1616
package org.gradle.testretry.internal.config;
1717

18+
import org.gradle.api.Action;
1819
import org.gradle.api.provider.Property;
1920
import org.gradle.api.provider.Provider;
2021
import org.gradle.api.provider.ProviderFactory;
2122
import org.gradle.api.provider.SetProperty;
23+
import org.gradle.api.tasks.testing.Test;
24+
import org.gradle.process.JavaForkOptions;
2225
import org.gradle.testretry.TestRetryTaskExtension;
2326
import org.gradle.util.GradleVersion;
2427

@@ -164,6 +167,11 @@ public boolean getSimulateNotRetryableTest() {
164167
return simulateNotRetryableTest;
165168
}
166169

170+
@Override
171+
public Action<? super JavaForkOptions> getOnRetry() {
172+
return extension.getOnRetry();
173+
}
174+
167175
private <T> T read(Property<T> property, T defaultValue) {
168176
return useConventions ? property.get() : property.getOrElse(defaultValue);
169177
}

plugin/src/main/java/org/gradle/testretry/internal/executer/RetryTestExecuter.java

+8
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,15 @@
1515
*/
1616
package org.gradle.testretry.internal.executer;
1717

18+
import org.gradle.api.Action;
1819
import org.gradle.api.internal.tasks.testing.JvmTestExecutionSpec;
1920
import org.gradle.api.internal.tasks.testing.TestExecuter;
2021
import org.gradle.api.internal.tasks.testing.TestFramework;
2122
import org.gradle.api.internal.tasks.testing.TestResultProcessor;
2223
import org.gradle.api.model.ObjectFactory;
2324
import org.gradle.api.tasks.testing.Test;
2425
import org.gradle.internal.reflect.Instantiator;
26+
import org.gradle.process.JavaForkOptions;
2527
import org.gradle.testretry.internal.config.TestRetryTaskExtensionAccessor;
2628
import org.gradle.testretry.internal.executer.framework.TestFrameworkStrategy;
2729
import org.gradle.testretry.internal.filter.AnnotationInspectorImpl;
@@ -115,6 +117,12 @@ public void execute(JvmTestExecutionSpec spec, TestResultProcessor testResultPro
115117
JvmTestExecutionSpec testExecutionSpec = spec;
116118

117119
while (true) {
120+
if (retryCount == 1) {
121+
Action<? super JavaForkOptions> onRetry = extension.getOnRetry();
122+
if (onRetry != null) {
123+
onRetry.execute(testExecutionSpec.getJavaForkOptions());
124+
}
125+
}
118126
delegate.execute(testExecutionSpec, retryTestResultProcessor);
119127
RoundResult result = retryTestResultProcessor.getResult();
120128
lastResult = result;

0 commit comments

Comments
 (0)