diff options
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"); + } } |