Class AffectedTestTask
- All Implemented Interfaces:
Comparable<org.gradle.api.Task>,org.gradle.api.internal.DynamicObjectAware,org.gradle.api.internal.TaskInternal,org.gradle.api.Named,org.gradle.api.plugins.ExtensionAware,org.gradle.api.Task,org.gradle.util.Configurable<org.gradle.api.Task>
Execution flow:
- Detects git changes against the configured base ref
- Maps changed files to production/test classes
- Discovers which test classes are affected
- Groups FQNs by owning subproject and runs
:<module>:test --tests <fqn>once per module so that--testsfilters don't cross module boundaries
Not compatible with Configuration Cache: reads live git state and scans the file system at execution time. The task is also deliberately marked as never up-to-date so git changes always trigger a re-run.
-
Nested Class Summary
Nested classes/interfaces inherited from interface org.gradle.api.Named
org.gradle.api.Named.Namer -
Field Summary
Fields inherited from interface org.gradle.api.Task
TASK_ACTION, TASK_CONSTRUCTOR_ARGS, TASK_DEPENDS_ON, TASK_DESCRIPTION, TASK_GROUP, TASK_NAME, TASK_OVERWRITE, TASK_TYPE -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionabstract org.gradle.api.provider.Property<String> Git base ref to diff against.abstract org.gradle.api.provider.ListProperty<String> Deprecated.protected abstract org.gradle.process.ExecOperationsInjected by Gradle for executing the test subprocess.abstract org.gradle.api.provider.Property<Boolean> Whentrue, the task prints the full decision trace (buckets, situation, action, action source) and exits without running any tests.abstract org.gradle.api.provider.ListProperty<String> Glob patterns for files that must never influence test selection.abstract org.gradle.api.provider.ListProperty<String> Suffixes/prefixes for finding implementation classes.abstract org.gradle.api.provider.Property<Boolean> Whether to include tests for implementations of changed interfaces/base classes.abstract org.gradle.api.provider.Property<Boolean> Whether to include staged (added to index) changes in the diff.abstract org.gradle.api.provider.Property<Boolean> Whether to include uncommitted (unstaged) changes in the diff.abstract org.gradle.api.provider.Property<String> getMode()Execution profile name — one of"auto","local","ci","strict".abstract org.gradle.api.provider.Property<String> abstract org.gradle.api.provider.Property<String> abstract org.gradle.api.provider.Property<String> abstract org.gradle.api.provider.Property<String> abstract org.gradle.api.provider.Property<String> abstract org.gradle.api.provider.ListProperty<String> Production source directories the plugin must treat as out-of-scope.abstract org.gradle.api.provider.ListProperty<String> Test source directories (e.g.abstract org.gradle.api.file.DirectoryPropertyThe root project directory (resolved at configuration time).abstract org.gradle.api.provider.Property<Boolean> Whether to run the full test suite when no affected tests are found.abstract org.gradle.api.provider.Property<Boolean> Whether to force a full test run when the change set contains any file that cannot be resolved to a Java class under the configured source/test directories.abstract org.gradle.api.provider.ListProperty<String> Production source directories relative to each module root.abstract org.gradle.api.provider.ListProperty<String> Discovery strategies to use for finding affected tests.Map of subproject directory (relative to the root project, empty string for the root project itself) to the Gradle path of that subproject (e.g.abstract org.gradle.api.provider.ListProperty<String> Test source directories relative to each module root.abstract org.gradle.api.provider.ListProperty<String> Suffixes used by the naming strategy to find test classes.abstract org.gradle.api.provider.Property<Integer> How many levels of transitive dependencies to follow when thetransitivestrategy is enabled.voidDetects affected tests and executes them via a Gradle subprocess.Methods inherited from class org.gradle.api.DefaultTask
compareTo, configure, dependsOn, doFirst, doFirst, doFirst, doLast, doLast, doLast, finalizedBy, getActions, getAnt, getDependsOn, getDescription, getDestroyables, getDidWork, getEnabled, getExtensions, getFinalizedBy, getGroup, getInputs, getLocalState, getLogger, getLogging, getMustRunAfter, getName, getOutputs, getPath, getProject, getShouldRunAfter, getState, getTaskDependencies, getTemporaryDir, getTimeout, hasProperty, mustRunAfter, onlyIf, onlyIf, onlyIf, property, setActions, setDependsOn, setDescription, setDidWork, setEnabled, setFinalizedBy, setGroup, setMustRunAfter, setOnlyIf, setOnlyIf, setOnlyIf, setProperty, setShouldRunAfter, shouldRunAfter, usesServiceMethods inherited from class org.gradle.api.internal.AbstractTask
acceptServiceReferences, appendParallelSafeAction, doNotTrackState, getAsDynamicObject, getIdentityPath, getImpliesSubProjects, getLifecycleDependencies, getOnlyIf, getReasonNotToTrackState, getReasonTaskIsIncompatibleWithConfigurationCache, getRequiredServices, getServices, getSharedResources, getStandardOutputCapture, getTaskActions, getTaskIdentity, getTemporaryDirFactory, hasTaskActions, injectIntoNewInstance, isCompatibleWithConfigurationCache, isEnabled, isHasCustomActions, notCompatibleWithConfigurationCache, prependParallelSafeAction, setImpliesSubProjectsMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.gradle.api.Task
doNotTrackState, notCompatibleWithConfigurationCache
-
Constructor Details
-
AffectedTestTask
public AffectedTestTask()
-
-
Method Details
-
getBaseRef
Git base ref to diff against. Default:"origin/master". Override via-PaffectedTestsBaseRef=....- Returns:
- the base ref property
-
getIncludeUncommitted
Whether to include uncommitted (unstaged) changes in the diff. Default:false— committed-only, so a local run picks the same tests CI would pick on the same HEAD, and two runs on the same commit are deterministic. Flip totrueinbuild.gradleif you iterate on tests locally and want WIP to seed the diff.- Returns:
- the include uncommitted property
-
getIncludeStaged
Whether to include staged (added to index) changes in the diff. Default:false— seegetIncludeUncommitted()for the rationale; both knobs move together on the CI-first defaults.- Returns:
- the include staged property
-
getRunAllIfNoMatches
Whether to run the full test suite when no affected tests are found. v2 back-compat — translated intoSituation.EMPTY_DIFF,Situation.ALL_FILES_IGNORED,Situation.ALL_FILES_OUT_OF_SCOPE, andSituation.DISCOVERY_EMPTYactions by the core config builder when set. Unset means "let the v2 resolver pick defaults". Default: unset (matching pre-v2falseonce translated).Marked
@Optionalbecause the extension no longer installs a convention — the Gradle task must be free to leave the property unset when the user has not overridden the legacy boolean.- Returns:
- the run-all-if-no-matches property
-
getRunAllOnNonJavaChange
@Input @Optional public abstract org.gradle.api.provider.Property<Boolean> getRunAllOnNonJavaChange()Whether to force a full test run when the change set contains any file that cannot be resolved to a Java class under the configured source/test directories. v2 back-compat — translates intoSituation.UNMAPPED_FILE's action.Marked
@Optionalbecause the extension no longer installs a convention; leaving it unset is what lets the v2 resolver reach its own defaults.- Returns:
- the run-all-on-non-java-change property
-
getStrategies
Discovery strategies to use for finding affected tests. Valid values:"naming","usage","impl","transitive". Default: all four.- Returns:
- the strategies list property
-
getTransitiveDepth
How many levels of transitive dependencies to follow when thetransitivestrategy is enabled. Range: 0 (disabled) to 5. Default:4— matches the depth most Java controller → service → repository chains actually reach in Modulr-shaped codebases while leaving one level of margin. The pre-v2 default was2, which under-reached on any MR that crossed more than one seam; consumers reading this Javadoc were being told they still needed to set4explicitly — they do not.- Returns:
- the transitive depth property
-
getTestSuffixes
Suffixes used by the naming strategy to find test classes. Default:["Test", "IT", "ITTest", "IntegrationTest"].- Returns:
- the test suffixes list property
-
getSourceDirs
Production source directories relative to each module root. Default:["src/main/java"].- Returns:
- the source dirs list property
-
getTestDirs
Test source directories relative to each module root. Default:["src/test/java"].- Returns:
- the test dirs list property
-
getExcludePaths
@Input @Optional @Deprecated public abstract org.gradle.api.provider.ListProperty<String> getExcludePaths()Deprecated.prefergetIgnorePaths().v2 back-compat alias forgetIgnorePaths(). When neither is set, the core config's default ignore-path list applies.- Returns:
- the exclude paths list property
-
getIgnorePaths
Glob patterns for files that must never influence test selection. Optional — when unset, the core config's default list applies.- Returns:
- the ignore paths list property
-
getOutOfScopeTestDirs
@Input @Optional public abstract org.gradle.api.provider.ListProperty<String> getOutOfScopeTestDirs()Test source directories (e.g."api-test/src/test/java") whose contents the plugin must not dispatch via theaffectedTesttask.- Returns:
- the out-of-scope test dirs list property
-
getOutOfScopeSourceDirs
@Input @Optional public abstract org.gradle.api.provider.ListProperty<String> getOutOfScopeSourceDirs()Production source directories the plugin must treat as out-of-scope.- Returns:
- the out-of-scope source dirs list property
-
getIncludeImplementationTests
Whether to include tests for implementations of changed interfaces/base classes. Default:true.- Returns:
- the include implementation tests property
-
getImplementationNaming
Suffixes/prefixes for finding implementation classes. Default:["Impl", "Default"].- Returns:
- the implementation naming list property
-
getMode
Execution profile name — one of"auto","local","ci","strict". Unset leaves defaults in pre-v2 mode.- Returns:
- the mode property
-
getOnEmptyDiff
- Returns:
- the on-empty-diff situation action property
-
getOnAllFilesIgnored
- Returns:
- the on-all-files-ignored situation action property
-
getOnAllFilesOutOfScope
- Returns:
- the on-all-files-out-of-scope situation action property
-
getOnUnmappedFile
- Returns:
- the on-unmapped-file situation action property
-
getOnDiscoveryEmpty
- Returns:
- the on-discovery-empty situation action property
-
getExplain
Whentrue, the task prints the full decision trace (buckets, situation, action, action source) and exits without running any tests. Used by operators to answer "why did this MR land on that outcome?" without having to enable debug logs.Marked
@Internalrather than@Inputbecause flipping the explain flag must not invalidate a cached execution — it changes only the lifecycle logging, never the set of tests Gradle would actually run.- Returns:
- the explain flag property
-
getSubprojectPaths
Map of subproject directory (relative to the root project, empty string for the root project itself) to the Gradle path of that subproject (e.g.":services:payment"). Populated automatically by the plugin and used to group affected test FQNs by their owning module.- Returns:
- the subproject dirs map property
-
getRootDir
@Internal public abstract org.gradle.api.file.DirectoryProperty getRootDir()The root project directory (resolved at configuration time).- Returns:
- the root dir property
-
getExecOperations
@Inject protected abstract org.gradle.process.ExecOperations getExecOperations()Injected by Gradle for executing the test subprocess.- Returns:
- the exec operations service
-
runAffectedTests
public void runAffectedTests()Detects affected tests and executes them via a Gradle subprocess.
-
getIgnorePaths().