aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test
diff options
context:
space:
mode:
authorGravatar corysmith <corysmith@google.com>2018-08-06 09:03:18 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-08-06 09:05:02 -0700
commit1bb38e101456cd610d0a692595700197a21ce1df (patch)
treea5db5da9f427313fa724d3c30b566ec6ca2c2a30 /src/test
parente74c1e91e68ce7c8eca6ab62100647d4b49f4597 (diff)
Move maybeAddProvider to be part of the EnabledDataBindingContext.
RELNOTES: None PiperOrigin-RevId: 207553449
Diffstat (limited to 'src/test')
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/android/AndroidDataBindingTest.java255
1 files changed, 189 insertions, 66 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidDataBindingTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidDataBindingTest.java
index cc78d474ad..9892da364e 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidDataBindingTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidDataBindingTest.java
@@ -18,6 +18,7 @@ import static com.google.devtools.build.lib.actions.util.ActionsTestUtil.getFirs
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
+import com.google.common.truth.Truth;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.extra.JavaCompileInfo;
import com.google.devtools.build.lib.actions.util.ActionsTestUtil;
@@ -26,17 +27,17 @@ import com.google.devtools.build.lib.cmdline.RepositoryName;
import com.google.devtools.build.lib.rules.java.JavaCompileAction;
import java.util.List;
import java.util.Set;
+import java.util.stream.Collectors;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
-/**
- * Tests for Bazel's Android data binding support.
- */
+/** Tests for Bazel's Android data binding support. */
@RunWith(JUnit4.class)
public class AndroidDataBindingTest extends AndroidBuildViewTestCase {
private void writeDataBindingFiles() throws Exception {
- scratch.file("java/android/library/BUILD",
+ scratch.file(
+ "java/android/library/BUILD",
"android_library(",
" name = 'lib_with_data_binding',",
" enable_data_binding = 1,",
@@ -44,9 +45,10 @@ public class AndroidDataBindingTest extends AndroidBuildViewTestCase {
" srcs = ['MyLib.java'],",
" resource_files = [],",
")");
- scratch.file("java/android/library/MyLib.java",
- "package android.library; public class MyLib {};");
- scratch.file("java/android/binary/BUILD",
+ scratch.file(
+ "java/android/library/MyLib.java", "package android.library; public class MyLib {};");
+ scratch.file(
+ "java/android/binary/BUILD",
"android_binary(",
" name = 'app',",
" enable_data_binding = 1,",
@@ -54,12 +56,13 @@ public class AndroidDataBindingTest extends AndroidBuildViewTestCase {
" srcs = ['MyApp.java'],",
" deps = ['//java/android/library:lib_with_data_binding'],",
")");
- scratch.file("java/android/binary/MyApp.java",
- "package android.binary; public class MyApp {};");
+ scratch.file(
+ "java/android/binary/MyApp.java", "package android.binary; public class MyApp {};");
}
private void writeDataBindingFilesWithNoResourcesDep() throws Exception {
- scratch.file("java/android/lib_with_resource_files/BUILD",
+ scratch.file(
+ "java/android/lib_with_resource_files/BUILD",
"android_library(",
" name = 'lib_with_resource_files',",
" enable_data_binding = 1,",
@@ -67,20 +70,24 @@ public class AndroidDataBindingTest extends AndroidBuildViewTestCase {
" srcs = ['LibWithResourceFiles.java'],",
" resource_files = glob(['res/**']),",
")");
- scratch.file("java/android/lib_with_resource_files/LibWithResourceFiles.java",
+ scratch.file(
+ "java/android/lib_with_resource_files/LibWithResourceFiles.java",
"package android.lib_with_resource_files; public class LibWithResourceFiles {};");
- scratch.file("java/android/lib_no_resource_files/BUILD",
+ scratch.file(
+ "java/android/lib_no_resource_files/BUILD",
"android_library(",
" name = 'lib_no_resource_files',",
" enable_data_binding = 1,",
" srcs = ['LibNoResourceFiles.java'],",
" deps = ['//java/android/lib_with_resource_files'],",
")");
- scratch.file("java/android/lib_no_resource_files/LibNoResourceFiles.java",
+ scratch.file(
+ "java/android/lib_no_resource_files/LibNoResourceFiles.java",
"package android.lib_no_resource_files; public class LibNoResourceFiles {};");
- scratch.file("java/android/binary/BUILD",
+ scratch.file(
+ "java/android/binary/BUILD",
"android_binary(",
" name = 'app',",
" enable_data_binding = 1,",
@@ -88,8 +95,8 @@ public class AndroidDataBindingTest extends AndroidBuildViewTestCase {
" srcs = ['MyApp.java'],",
" deps = ['//java/android/lib_no_resource_files'],",
")");
- scratch.file("java/android/binary/MyApp.java",
- "package android.binary; public class MyApp {};");
+ scratch.file(
+ "java/android/binary/MyApp.java", "package android.binary; public class MyApp {};");
}
@Test
@@ -100,14 +107,15 @@ public class AndroidDataBindingTest extends AndroidBuildViewTestCase {
// "Data binding"-enabled targets invoke resource processing with a request for data binding
// output:
- Artifact libResourceInfoOutput = getFirstArtifactEndingWith(allArtifacts,
- "databinding/lib_with_data_binding/layout-info.zip");
+ Artifact libResourceInfoOutput =
+ getFirstArtifactEndingWith(
+ allArtifacts, "databinding/lib_with_data_binding/layout-info.zip");
assertThat(getGeneratingSpawnActionArgs(libResourceInfoOutput))
.containsAllOf("--dataBindingInfoOut", libResourceInfoOutput.getExecPathString())
.inOrder();
- Artifact binResourceInfoOutput = getFirstArtifactEndingWith(allArtifacts,
- "databinding/app/layout-info.zip");
+ Artifact binResourceInfoOutput =
+ getFirstArtifactEndingWith(allArtifacts, "databinding/app/layout-info.zip");
assertThat(getGeneratingSpawnActionArgs(binResourceInfoOutput))
.containsAllOf("--dataBindingInfoOut", binResourceInfoOutput.getExecPathString())
.inOrder();
@@ -115,8 +123,10 @@ public class AndroidDataBindingTest extends AndroidBuildViewTestCase {
// Java compilation includes the data binding annotation processor, the resource processor's
// output, and the auto-generated DataBindingInfo.java the annotation processor uses to figure
// out what to do:
- JavaCompileAction libCompileAction = (JavaCompileAction) getGeneratingAction(
- getFirstArtifactEndingWith(allArtifacts, "lib_with_data_binding.jar"));
+ JavaCompileAction libCompileAction =
+ (JavaCompileAction)
+ getGeneratingAction(
+ getFirstArtifactEndingWith(allArtifacts, "lib_with_data_binding.jar"));
assertThat(libCompileAction.getProcessorNames())
.contains("android.databinding.annotationprocessor.ProcessDataBinding");
assertThat(ActionsTestUtil.prettyArtifactNames(libCompileAction.getInputs()))
@@ -124,8 +134,9 @@ public class AndroidDataBindingTest extends AndroidBuildViewTestCase {
"java/android/library/databinding/lib_with_data_binding/layout-info.zip",
"java/android/library/databinding/lib_with_data_binding/DataBindingInfo.java");
- JavaCompileAction binCompileAction = (JavaCompileAction) getGeneratingAction(
- getFirstArtifactEndingWith(allArtifacts, "app.jar"));
+ JavaCompileAction binCompileAction =
+ (JavaCompileAction)
+ getGeneratingAction(getFirstArtifactEndingWith(allArtifacts, "app.jar"));
assertThat(binCompileAction.getProcessorNames())
.contains("android.databinding.annotationprocessor.ProcessDataBinding");
assertThat(ActionsTestUtil.prettyArtifactNames(binCompileAction.getInputs()))
@@ -143,26 +154,32 @@ public class AndroidDataBindingTest extends AndroidBuildViewTestCase {
// The library's compilation doesn't include any of the -setter_store.bin, layoutinfo.bin, etc.
// files that store a dependency's data binding results (since the library has no deps).
// We check that they don't appear as compilation inputs.
- JavaCompileAction libCompileAction = (JavaCompileAction)
- getGeneratingAction(getFirstArtifactEndingWith(allArtifacts, "lib_with_data_binding.jar"));
+ JavaCompileAction libCompileAction =
+ (JavaCompileAction)
+ getGeneratingAction(
+ getFirstArtifactEndingWith(allArtifacts, "lib_with_data_binding.jar"));
assertThat(
- Iterables.filter(libCompileAction.getInputs(),
- ActionsTestUtil.getArtifactSuffixMatcher(".bin")))
+ Iterables.filter(
+ libCompileAction.getInputs(), ActionsTestUtil.getArtifactSuffixMatcher(".bin")))
.isEmpty();
// The binary's compilation includes the library's data binding results.
- JavaCompileAction binCompileAction = (JavaCompileAction) getGeneratingAction(
- getFirstArtifactEndingWith(allArtifacts, "app.jar"));
- Iterable<Artifact> depMetadataInputs = Iterables.filter(
- binCompileAction.getInputs(), ActionsTestUtil.getArtifactSuffixMatcher(".bin"));
- final String depMetadataBaseDir = Iterables.getFirst(depMetadataInputs, null).getExecPath()
- .getParentDirectory().toString();
- ActionsTestUtil.execPaths(Iterables.filter(
- binCompileAction.getInputs(), ActionsTestUtil.getArtifactSuffixMatcher(".bin")));
- assertThat(ActionsTestUtil.execPaths(depMetadataInputs)).containsExactly(
- depMetadataBaseDir + "/android.library-android.library-setter_store.bin",
- depMetadataBaseDir + "/android.library-android.library-layoutinfo.bin",
- depMetadataBaseDir + "/android.library-android.library-br.bin");
+ JavaCompileAction binCompileAction =
+ (JavaCompileAction)
+ getGeneratingAction(getFirstArtifactEndingWith(allArtifacts, "app.jar"));
+ Iterable<Artifact> depMetadataInputs =
+ Iterables.filter(
+ binCompileAction.getInputs(), ActionsTestUtil.getArtifactSuffixMatcher(".bin"));
+ final String depMetadataBaseDir =
+ Iterables.getFirst(depMetadataInputs, null).getExecPath().getParentDirectory().toString();
+ ActionsTestUtil.execPaths(
+ Iterables.filter(
+ binCompileAction.getInputs(), ActionsTestUtil.getArtifactSuffixMatcher(".bin")));
+ assertThat(ActionsTestUtil.execPaths(depMetadataInputs))
+ .containsExactly(
+ depMetadataBaseDir + "/android.library-android.library-setter_store.bin",
+ depMetadataBaseDir + "/android.library-android.library-layoutinfo.bin",
+ depMetadataBaseDir + "/android.library-android.library-br.bin");
}
@Test
@@ -170,10 +187,15 @@ public class AndroidDataBindingTest extends AndroidBuildViewTestCase {
writeDataBindingFiles();
ConfiguredTarget ctapp = getConfiguredTarget("//java/android/binary:app");
Set<Artifact> allArtifacts = actionsTestUtil().artifactClosureOf(getFilesToBuild(ctapp));
- JavaCompileAction binCompileAction = (JavaCompileAction) getGeneratingAction(
- getFirstArtifactEndingWith(allArtifacts, "app.jar"));
- String dataBindingFilesDir = targetConfig.getBinDirectory(RepositoryName.MAIN).getExecPath()
- .getRelative("java/android/binary/databinding/app").getPathString();
+ JavaCompileAction binCompileAction =
+ (JavaCompileAction)
+ getGeneratingAction(getFirstArtifactEndingWith(allArtifacts, "app.jar"));
+ String dataBindingFilesDir =
+ targetConfig
+ .getBinDirectory(RepositoryName.MAIN)
+ .getExecPath()
+ .getRelative("java/android/binary/databinding/app")
+ .getPathString();
ImmutableList<String> expectedJavacopts =
ImmutableList.of(
"-Aandroid.databinding.bindingBuildFolder=" + dataBindingFilesDir,
@@ -202,24 +224,29 @@ public class AndroidDataBindingTest extends AndroidBuildViewTestCase {
Set<Artifact> allArtifacts = actionsTestUtil().artifactClosureOf(getFilesToBuild(ct));
// Data binding resource processing outputs are expected for the app and libs with resources.
- assertThat(getFirstArtifactEndingWith(allArtifacts,
- "databinding/lib_with_resource_files/layout-info.zip")).isNotNull();
+ assertThat(
+ getFirstArtifactEndingWith(
+ allArtifacts, "databinding/lib_with_resource_files/layout-info.zip"))
+ .isNotNull();
assertThat(getFirstArtifactEndingWith(allArtifacts, "databinding/app/layout-info.zip"))
.isNotNull();
// Compiling the app's Java source includes data binding metadata from the resource-equipped
// lib, but not the resource-empty one.
- JavaCompileAction binCompileAction = (JavaCompileAction) getGeneratingAction(
- getFirstArtifactEndingWith(allArtifacts, "app.jar"));
+ JavaCompileAction binCompileAction =
+ (JavaCompileAction)
+ getGeneratingAction(getFirstArtifactEndingWith(allArtifacts, "app.jar"));
List<String> appJarInputs = ActionsTestUtil.prettyArtifactNames(binCompileAction.getInputs());
- String libWithResourcesMetadataBaseDir = "java/android/binary/databinding/app/"
- + "dependent-lib-artifacts/java/android/lib_with_resource_files/databinding/"
- + "lib_with_resource_files/bin-files/android.lib_with_resource_files-";
- assertThat(appJarInputs).containsAllOf(
- "java/android/binary/databinding/app/layout-info.zip",
- libWithResourcesMetadataBaseDir + "android.lib_with_resource_files-setter_store.bin",
- libWithResourcesMetadataBaseDir + "android.lib_with_resource_files-layoutinfo.bin",
- libWithResourcesMetadataBaseDir + "android.lib_with_resource_files-br.bin");
+ String libWithResourcesMetadataBaseDir =
+ "java/android/binary/databinding/app/"
+ + "dependent-lib-artifacts/java/android/lib_with_resource_files/databinding/"
+ + "lib_with_resource_files/bin-files/android.lib_with_resource_files-";
+ assertThat(appJarInputs)
+ .containsAllOf(
+ "java/android/binary/databinding/app/layout-info.zip",
+ libWithResourcesMetadataBaseDir + "android.lib_with_resource_files-setter_store.bin",
+ libWithResourcesMetadataBaseDir + "android.lib_with_resource_files-layoutinfo.bin",
+ libWithResourcesMetadataBaseDir + "android.lib_with_resource_files-br.bin");
for (String compileInput : appJarInputs) {
assertThat(compileInput).doesNotMatch(".*lib_no_resource_files.*.bin");
}
@@ -239,23 +266,27 @@ public class AndroidDataBindingTest extends AndroidBuildViewTestCase {
assertThat(getFirstArtifactEndingWith(libArtifacts, "_resources.jar")).isNull();
assertThat(getFirstArtifactEndingWith(libArtifacts, "layout-info.zip")).isNull();
- JavaCompileAction libCompileAction = (JavaCompileAction) getGeneratingAction(
- getFirstArtifactEndingWith(libArtifacts, "lib_no_resource_files.jar"));
+ JavaCompileAction libCompileAction =
+ (JavaCompileAction)
+ getGeneratingAction(
+ getFirstArtifactEndingWith(libArtifacts, "lib_no_resource_files.jar"));
// The annotation processor is attached to the Java compilation:
assertThat(paramFileArgsForAction(libCompileAction))
.containsAllOf(
"--processors", "android.databinding.annotationprocessor.ProcessDataBinding");
// The dummy .java file with annotations that trigger the annotation process is present:
assertThat(ActionsTestUtil.prettyArtifactNames(libCompileAction.getInputs()))
- .contains("java/android/lib_no_resource_files/databinding/lib_no_resource_files/"
- + "DataBindingInfo.java");
+ .contains(
+ "java/android/lib_no_resource_files/databinding/lib_no_resource_files/"
+ + "DataBindingInfo.java");
}
@Test
public void missingDataBindingAttributeStillAnalyzes() throws Exception {
// When a library is missing enable_data_binding = 1, we expect it to fail in execution (because
// aapt doesn't know how to read the data binding expressions). But analysis should work.
- scratch.file("java/android/library/BUILD",
+ scratch.file(
+ "java/android/library/BUILD",
"android_library(",
" name = 'lib_with_data_binding',",
" enable_data_binding = 1,",
@@ -263,9 +294,10 @@ public class AndroidDataBindingTest extends AndroidBuildViewTestCase {
" srcs = ['MyLib.java'],",
" resource_files = [],",
")");
- scratch.file("java/android/library/MyLib.java",
- "package android.library; public class MyLib {};");
- scratch.file("java/android/binary/BUILD",
+ scratch.file(
+ "java/android/library/MyLib.java", "package android.library; public class MyLib {};");
+ scratch.file(
+ "java/android/binary/BUILD",
"android_binary(",
" name = 'app',",
" enable_data_binding = 0,",
@@ -273,8 +305,99 @@ public class AndroidDataBindingTest extends AndroidBuildViewTestCase {
" srcs = ['MyApp.java'],",
" deps = ['//java/android/library:lib_with_data_binding'],",
")");
- scratch.file("java/android/binary/MyApp.java",
- "package android.binary; public class MyApp {};");
+ scratch.file(
+ "java/android/binary/MyApp.java", "package android.binary; public class MyApp {};");
assertThat(getConfiguredTarget("//java/android/binary:app")).isNotNull();
}
+
+ @Test
+ public void dataBindingProviderIsProvided() throws Exception {
+ scratch.file(
+ "sdk/BUILD",
+ "android_sdk(",
+ " name = 'sdk',",
+ " aapt = 'aapt',",
+ " aapt2 = 'aapt2',",
+ " adb = 'adb',",
+ " aidl = 'aidl',",
+ " android_jar = 'android.jar',",
+ " apksigner = 'apksigner',",
+ " dx = 'dx',",
+ " framework_aidl = 'framework_aidl',",
+ " main_dex_classes = 'main_dex_classes',",
+ " main_dex_list_creator = 'main_dex_list_creator',",
+ " proguard = 'proguard',",
+ " shrinked_android_jar = 'shrinked_android_jar',",
+ " zipalign = 'zipalign')");
+ scratch.file(
+ "java/a/BUILD",
+ "android_library(",
+ " name = 'a', ",
+ " srcs = ['A.java'],",
+ " enable_data_binding = 1,",
+ " manifest = 'a/AndroidManifest.xml',",
+ " resource_files = [ 'res/values/a.xml' ]",
+ ")");
+
+ useConfiguration("--android_sdk=//sdk:sdk");
+ ConfiguredTarget a = getConfiguredTarget("//java/a:a");
+ final UsesDataBindingProvider usesDataBindingProvider = a.get(UsesDataBindingProvider.PROVIDER);
+
+ Truth.assertThat(usesDataBindingProvider)
+ .named(UsesDataBindingProvider.PROVIDER_NAME)
+ .isNotNull();
+
+ Truth.assertThat(
+ usesDataBindingProvider
+ .getMetadataOutputs()
+ .stream()
+ .map(Artifact::getRootRelativePathString)
+ .collect(Collectors.toList()))
+ .containsExactly(
+ "java/a/databinding/a/bin-files/a-a-setter_store.bin",
+ "java/a/databinding/a/bin-files/a-a-layoutinfo.bin",
+ "java/a/databinding/a/bin-files/a-a-br.bin");
+ }
+
+ @Test
+ public void ensureDataBindingProviderIsPropagatedThroughNonDataBindingLibs() throws Exception {
+ scratch.file(
+ "sdk/BUILD",
+ "android_sdk(",
+ " name = 'sdk',",
+ " aapt = 'aapt',",
+ " aapt2 = 'aapt2',",
+ " adb = 'adb',",
+ " aidl = 'aidl',",
+ " android_jar = 'android.jar',",
+ " apksigner = 'apksigner',",
+ " dx = 'dx',",
+ " framework_aidl = 'framework_aidl',",
+ " main_dex_classes = 'main_dex_classes',",
+ " main_dex_list_creator = 'main_dex_list_creator',",
+ " proguard = 'proguard',",
+ " shrinked_android_jar = 'shrinked_android_jar',",
+ " zipalign = 'zipalign')");
+ scratch.file(
+ "java/a/BUILD",
+ "android_library(",
+ " name = 'a', ",
+ " srcs = ['A.java'],",
+ " enable_data_binding = 1,",
+ " manifest = 'a/AndroidManifest.xml',",
+ " resource_files = [ 'res/values/a.xml' ]",
+ ")");
+ scratch.file(
+ "java/b/BUILD",
+ "android_library(",
+ " name = 'b', ",
+ " srcs = ['A.java'],",
+ " deps = [ '//java/a:a' ]",
+ ")");
+ useConfiguration("--android_sdk=//sdk:sdk");
+ ConfiguredTarget b = getConfiguredTarget("//java/b:b");
+ Truth.assertThat(b.get(UsesDataBindingProvider.PROVIDER))
+ .named("UsesDataBindingProvider")
+ .isNotNull();
+ }
}