aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2018-03-20 23:53:28 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-03-20 23:55:01 -0700
commitc68645fda6198a46ac510c832c9b374ae3f20680 (patch)
tree18958f07c9489ab8de514289e0f90c8595e34610 /src/test
parentc776a69b56c5b8117493d9a811ff230e18096b97 (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.java44
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/android/AndroidLibraryTest.java50
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");
+ }
}