diff options
author | 2018-03-20 23:53:28 -0700 | |
---|---|---|
committer | 2018-03-20 23:55:01 -0700 | |
commit | c68645fda6198a46ac510c832c9b374ae3f20680 (patch) | |
tree | 18958f07c9489ab8de514289e0f90c8595e34610 /src/test | |
parent | c776a69b56c5b8117493d9a811ff230e18096b97 (diff) |
Allow android_library rule to also accept rules that provide the JavaInfo
provider as an input.
RELNOTES:
PiperOrigin-RevId: 189868401
Diffstat (limited to 'src/test')
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java | 44 | ||||
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/rules/android/AndroidLibraryTest.java | 50 |
2 files changed, 94 insertions, 0 deletions
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 e839a35278..5c292fb7fe 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 @@ -36,6 +36,7 @@ import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.actions.util.ActionsTestUtil; import com.google.devtools.build.lib.analysis.ConfiguredTarget; import com.google.devtools.build.lib.analysis.FilesToRunProvider; +import com.google.devtools.build.lib.analysis.OutputGroupInfo; import com.google.devtools.build.lib.analysis.actions.FileWriteAction; import com.google.devtools.build.lib.analysis.actions.SpawnAction; import com.google.devtools.build.lib.cmdline.RepositoryName; @@ -59,6 +60,7 @@ import com.google.devtools.build.lib.vfs.Path; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.List; import java.util.Set; import org.junit.Before; @@ -4364,4 +4366,46 @@ public class AndroidBinaryTest extends AndroidBuildViewTestCase { getGeneratingSpawnActionArgs(getFirstArtifactEndingWith(artifacts, "resource_files.zip")); assertThat(parsedResourceMergingArgs).contains("MERGE"); } + + @Test + public void skylarkJavaInfoToAndroidBinaryAttributes() throws Exception { + scratch.file( + "java/r/android/extension.bzl", + "def _impl(ctx):", + " dep_params = ctx.attr.dep[JavaInfo]", + " return [dep_params]", + "my_rule = rule(", + " _impl,", + " attrs = {", + " 'dep': attr.label(),", + " },", + ")"); + scratch.file( + "java/r/android/BUILD", + "load(':extension.bzl', 'my_rule')", + "android_library(", + " name = 'al_bottom_for_deps',", + " srcs = ['java/A.java'],", + ")", + "my_rule(", + " name = 'mya',", + " dep = ':al_bottom_for_deps',", + ")", + "android_binary(", + " name = 'foo_app',", + " srcs = ['java/B.java'],", + " deps = [':mya'],", + " manifest = 'AndroidManifest.xml',", + // TODO(b/75051107): Remove the following line when fixed. + " incremental_dexing = 0,", + ")"); + // Test that all bottom jars are on the runtime classpath of the app. + ConfiguredTarget target = getConfiguredTarget("//java/r/android:foo_app"); + Collection<Artifact> transitiveSrcJars = + OutputGroupInfo.get(target).getOutputGroup(JavaSemantics.SOURCE_JARS_OUTPUT_GROUP) + .toCollection(); + assertThat(ActionsTestUtil.baseArtifactNames(transitiveSrcJars)).containsExactly( + "libal_bottom_for_deps-src.jar", + "libfoo_app-src.jar"); + } } 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 ce677f1f2d..d1a3954e94 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 @@ -52,6 +52,7 @@ import com.google.devtools.build.lib.rules.java.JavaSemantics; import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData; import com.google.devtools.build.lib.vfs.PathFragment; import java.util.Arrays; +import java.util.Collection; import java.util.List; import java.util.Set; import org.junit.Test; @@ -1869,4 +1870,53 @@ public class AndroidLibraryTest extends AndroidBuildViewTestCase { Artifact paramFile = getFirstArtifactEndingWith(action.getInputs(), "-2.params"); return ((ParameterFileWriteAction) getGeneratingAction(paramFile)).getContents(); } + + @Test + public void skylarkJavaInfoToAndroidLibraryAttributes() throws Exception { + scratch.file( + "foo/extension.bzl", + "def _impl(ctx):", + " dep_params = ctx.attr.dep[JavaInfo]", + " return [dep_params]", + "my_rule = rule(", + " _impl,", + " attrs = {", + " 'dep': attr.label(),", + " },", + ")"); + scratch.file( + "foo/BUILD", + "load(':extension.bzl', 'my_rule')", + "android_library(", + " name = 'al_bottom_for_deps',", + " srcs = ['java/A.java'],", + ")", + "java_library(", + " name = 'jl_bottom_for_exports',", + " srcs = ['java/A2.java'],", + ")", + "my_rule(", + " name = 'mya',", + " dep = ':al_bottom_for_deps',", + ")", + "my_rule(", + " name = 'myb',", + " dep = ':jl_bottom_for_exports',", + ")", + "android_library(", + " name = 'lib_foo',", + " srcs = ['java/B.java'],", + " deps = [':mya'],", + " exports = [':myb'],", + ")"); + // Test that all bottom jars are on the runtime classpath of lib_android. + ConfiguredTarget target = getConfiguredTarget("//foo:lib_foo"); + Collection<Artifact> transitiveSrcJars = + OutputGroupInfo.get(target).getOutputGroup(JavaSemantics.SOURCE_JARS_OUTPUT_GROUP) + .toCollection(); + assertThat(ActionsTestUtil.baseArtifactNames(transitiveSrcJars)).containsExactly( + "libjl_bottom_for_exports-src.jar", + "libal_bottom_for_deps-src.jar", + "liblib_foo-src.jar"); + } } |