aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java9
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java39
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/android/AndroidLibraryTest.java33
4 files changed, 87 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java
index e7b9c7c1cd..0e98955657 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java
@@ -35,8 +35,10 @@ import com.google.devtools.build.lib.analysis.config.BuildConfiguration.StrictDe
import com.google.devtools.build.lib.collect.ImmutableIterable;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
+import com.google.devtools.build.lib.packages.AttributeMap;
import com.google.devtools.build.lib.rules.java.JavaConfiguration.JavaClasspathMode;
import com.google.devtools.build.lib.rules.test.InstrumentedFilesCollector;
+import com.google.devtools.build.lib.syntax.Type;
import com.google.devtools.build.lib.util.FileType;
import com.google.devtools.build.lib.util.Preconditions;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
@@ -222,6 +224,10 @@ public final class JavaCompilationHelper {
builder.setTargetLabel(
attributes.getTargetLabel() == null
? ruleContext.getLabel() : attributes.getTargetLabel());
+ AttributeMap attributeMap = ruleContext.attributes();
+ if (attributeMap.has("testonly", Type.BOOLEAN)) {
+ builder.setTestOnly(attributeMap.get("testonly", Type.BOOLEAN));
+ }
getAnalysisEnvironment().registerAction(builder.build());
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java
index 2e3a7ca0f6..d11345aa80 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java
@@ -523,6 +523,7 @@ public final class JavaCompileAction extends SpawnAction {
private final List<String> processorFlags = new ArrayList<>();
private String ruleKind;
private Label targetLabel;
+ private boolean testOnly = false;
/**
* Creates a Builder from an owner and a build configuration.
@@ -736,6 +737,9 @@ public final class JavaCompileAction extends SpawnAction {
result.add("@" + targetLabel);
}
}
+ if (testOnly) {
+ result.add("--testonly");
+ }
if (!classpathEntries.isEmpty()) {
result.addJoinExecPaths(
@@ -974,5 +978,10 @@ public final class JavaCompileAction extends SpawnAction {
this.targetLabel = targetLabel;
return this;
}
+
+ public Builder setTestOnly(boolean testOnly) {
+ this.testOnly = testOnly;
+ return this;
+ }
}
}
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java
index 3715c0c45c..4948c8bfa5 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java
@@ -2777,4 +2777,43 @@ public class AndroidBinaryTest extends AndroidBuildViewTestCase {
.containsAllOf("--nocompress_suffixes", ".apk", ".so")
.inOrder();
}
+
+ @Test
+ public void testAndroidBinaryWithTestOnlySetsTestOnly() throws Exception {
+ scratch.file(
+ "java/com/google/android/foo/BUILD",
+ "android_binary(",
+ " name = 'foo',",
+ " srcs = ['Foo.java'],",
+ " testonly = 1,",
+ " manifest = 'AndroidManifest.xml',",
+ " resource_files = ['res/raw/foo.apk'],",
+ " nocompress_extensions = ['.apk', '.so'],",
+ ")");
+ JavaCompileAction javacAction =
+ (JavaCompileAction)
+ getGeneratingAction(
+ getBinArtifact("libfoo.jar", getConfiguredTarget("//java/com/google/android/foo")));
+
+ assertThat(javacAction.buildCommandLine()).contains("--testonly");
+ }
+
+ @Test
+ public void testAndroidBinaryWithoutTestOnlyDoesntSetTestOnly() throws Exception {
+ scratch.file(
+ "java/com/google/android/foo/BUILD",
+ "android_binary(",
+ " name = 'foo',",
+ " srcs = ['Foo.java'],",
+ " manifest = 'AndroidManifest.xml',",
+ " resource_files = ['res/raw/foo.apk'],",
+ " nocompress_extensions = ['.apk', '.so'],",
+ ")");
+ JavaCompileAction javacAction =
+ (JavaCompileAction)
+ getGeneratingAction(
+ getBinArtifact("libfoo.jar", getConfiguredTarget("//java/com/google/android/foo")));
+
+ assertThat(javacAction.buildCommandLine()).doesNotContain("--testonly");
+ }
}
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidLibraryTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidLibraryTest.java
index ea30deb73f..706c08c748 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidLibraryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidLibraryTest.java
@@ -1467,4 +1467,37 @@ public class AndroidLibraryTest extends AndroidBuildViewTestCase {
assertThat(provider).isNotNull();
assertThat(provider.getTransitiveAars()).hasSize(1);
}
+
+ @Test
+ public void testAndroidLibraryWithTestOnlySetsTestOnly() throws Exception {
+ scratch.file(
+ "java/com/google/android/foo/BUILD",
+ "android_library(",
+ " name = 'foo',",
+ " srcs = ['Foo.java'],",
+ " testonly = 1,",
+ ")");
+ JavaCompileAction javacAction =
+ (JavaCompileAction)
+ getGeneratingAction(
+ getBinArtifact("libfoo.jar", getConfiguredTarget("//java/com/google/android/foo")));
+
+ assertThat(javacAction.buildCommandLine()).contains("--testonly");
+ }
+
+ @Test
+ public void testAndroidLibraryWithoutTestOnlyDoesntSetTestOnly() throws Exception {
+ scratch.file(
+ "java/com/google/android/foo/BUILD",
+ "android_library(",
+ " name = 'foo',",
+ " srcs = ['Foo.java'],",
+ ")");
+ JavaCompileAction javacAction =
+ (JavaCompileAction)
+ getGeneratingAction(
+ getBinArtifact("libfoo.jar", getConfiguredTarget("//java/com/google/android/foo")));
+
+ assertThat(javacAction.buildCommandLine()).doesNotContain("--testonly");
+ }
}