Make TestProvider provide the list of test outputs

The plan is to use this in a follow up CL to determine outputs of a test for the purposes of staging them locally when using remote execution.

Closes #8944.

PiperOrigin-RevId: 259291416
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/test/TestActionBuilder.java b/src/main/java/com/google/devtools/build/lib/analysis/test/TestActionBuilder.java
index 6e8ee8d..0022330 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/test/TestActionBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/test/TestActionBuilder.java
@@ -20,6 +20,7 @@
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Lists;
+import com.google.devtools.build.lib.actions.ActionInput;
 import com.google.devtools.build.lib.actions.Artifact;
 import com.google.devtools.build.lib.actions.ArtifactRoot;
 import com.google.devtools.build.lib.analysis.AnalysisEnvironment;
@@ -330,6 +331,7 @@
     List<Artifact.DerivedArtifact> results =
         Lists.newArrayListWithCapacity(runsPerTest * shardRuns);
     ImmutableList.Builder<Artifact> coverageArtifacts = ImmutableList.builder();
+    ImmutableList.Builder<ActionInput> testOutputs = ImmutableList.builder();
 
     for (int run = 0; run < runsPerTest; run++) {
       // Use a 1-based index for user friendliness.
@@ -358,7 +360,7 @@
           coverageArtifacts.add(coverageArtifact);
         }
 
-        env.registerAction(
+        TestRunnerAction testRunnerAction =
             new TestRunnerAction(
                 ruleContext.getActionOwner(),
                 inputs,
@@ -379,7 +381,13 @@
                 (!isUsingTestWrapperInsteadOfTestSetupScript
                         || executionSettings.needsShell(isExecutedOnWindows))
                     ? ShToolchain.getPathOrError(ruleContext)
-                    : null));
+                    : null);
+
+        testOutputs.addAll(testRunnerAction.getSpawnOutputs());
+        testOutputs.addAll(testRunnerAction.getOutputs());
+
+        env.registerAction(testRunnerAction);
+
         results.add(cacheStatus);
       }
     }
@@ -394,8 +402,14 @@
       reportGenerator = reportGeneratorTarget.getProvider(FilesToRunProvider.class);
     }
 
-    return new TestParams(runsPerTest, shards, TestTimeout.getTestTimeout(ruleContext.getRule()),
-        ruleContext.getRule().getRuleClass(), ImmutableList.copyOf(results),
-        coverageArtifacts.build(), reportGenerator);
+    return new TestParams(
+        runsPerTest,
+        shards,
+        TestTimeout.getTestTimeout(ruleContext.getRule()),
+        ruleContext.getRule().getRuleClass(),
+        ImmutableList.copyOf(results),
+        coverageArtifacts.build(),
+        reportGenerator,
+        testOutputs.build());
   }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/test/TestProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/test/TestProvider.java
index cc64055..1be1bde 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/test/TestProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/test/TestProvider.java
@@ -15,6 +15,7 @@
 package com.google.devtools.build.lib.analysis.test;
 
 import com.google.common.collect.ImmutableList;
+import com.google.devtools.build.lib.actions.ActionInput;
 import com.google.devtools.build.lib.actions.Artifact;
 import com.google.devtools.build.lib.analysis.FilesToRunProvider;
 import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
@@ -74,6 +75,7 @@
     private final ImmutableList<Artifact.DerivedArtifact> testStatusArtifacts;
     private final ImmutableList<Artifact> coverageArtifacts;
     private final FilesToRunProvider coverageReportGenerator;
+    private final ImmutableList<ActionInput> outputs;
 
     /**
      * Don't call this directly. Instead use {@link
@@ -86,7 +88,8 @@
         String testRuleClass,
         ImmutableList<Artifact.DerivedArtifact> testStatusArtifacts,
         ImmutableList<Artifact> coverageArtifacts,
-        FilesToRunProvider coverageReportGenerator) {
+        FilesToRunProvider coverageReportGenerator,
+        ImmutableList<ActionInput> outputs) {
       this.runs = runs;
       this.shards = shards;
       this.timeout = timeout;
@@ -94,6 +97,7 @@
       this.testStatusArtifacts = testStatusArtifacts;
       this.coverageArtifacts = coverageArtifacts;
       this.coverageReportGenerator = coverageReportGenerator;
+      this.outputs = outputs;
     }
 
     /**
@@ -145,5 +149,10 @@
     public FilesToRunProvider getCoverageReportGenerator() {
       return coverageReportGenerator;
     }
+
+    /** Returns the list of mandatory and optional test outputs. */
+    public ImmutableList<ActionInput> getOutputs() {
+      return outputs;
+    }
   }
 }