aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com
diff options
context:
space:
mode:
authorGravatar corysmith <corysmith@google.com>2017-07-20 16:39:08 +0200
committerGravatar Klaus Aehlig <aehlig@google.com>2017-07-21 09:11:59 +0200
commit1afbac0775d277625a07e318d4eae4627b093225 (patch)
tree3e8659e3d33128026989847d7074eebf2620ff15 /src/test/java/com
parent79816f6cd178eaeb665fac21f5c6b60f7c52483c (diff)
Allow the aapt2 code paths to be enabled by either flag or attribute.
RELNOTES: None PiperOrigin-RevId: 162613289
Diffstat (limited to 'src/test/java/com')
-rw-r--r--src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java8
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java136
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/android/AndroidLibraryTest.java83
3 files changed, 226 insertions, 1 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java
index 20b779ccff..a95510a33c 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java
@@ -1909,9 +1909,15 @@ public abstract class BuildViewTestCase extends FoundationTestCase {
protected Artifact getImplicitOutputArtifact(
ConfiguredTarget target, SafeImplicitOutputsFunction outputFunction) {
+ return getImplicitOutputArtifact(target, target.getConfiguration(), outputFunction);
+ }
+
+ protected Artifact getImplicitOutputArtifact(
+ ConfiguredTarget target,
+ BuildConfiguration configuration,
+ SafeImplicitOutputsFunction outputFunction) {
Rule associatedRule = target.getTarget().getAssociatedRule();
RepositoryName repository = associatedRule.getRepository();
- BuildConfiguration configuration = target.getConfiguration();
Root root;
if (associatedRule.hasBinaryOutput()) {
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 a7c1a36c30..a64f633f2b 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
@@ -3050,4 +3050,140 @@ public class AndroidBinaryTest extends AndroidBuildViewTestCase {
assertThat(getConfiguredTarget("//java/com/google/android/foo:foo")).isNotNull();
assertNoEvents();
}
+
+ @Test
+ public void testAapt2WithoutAndroidSdk() throws Exception {
+ checkError(
+ "java/a",
+ "a",
+ "aapt2 processing requested but not available on the android_sdk",
+ "android_binary(",
+ " name = 'a',",
+ " srcs = ['A.java'],",
+ " manifest = 'AndroidManifest.xml',",
+ " resource_files = [ 'res/values/values.xml' ], ",
+ " aapt_version = 'aapt2'",
+ ")");
+ }
+
+ @Test
+ public void testAapt2FlagWithoutAndroidSdk() throws Exception {
+ useConfiguration("--android_aapt=aapt2");
+ checkError(
+ "java/a",
+ "a",
+ "aapt2 processing requested but not available on the android_sdk",
+ "android_binary(",
+ " name = 'a',",
+ " srcs = ['A.java'],",
+ " manifest = 'AndroidManifest.xml',",
+ " resource_files = [ 'res/values/values.xml' ], ",
+ ")");
+ }
+
+ @Test
+ public void testAapt2WithAndroidSdk() throws Exception {
+ scratch.file(
+ "sdk/BUILD",
+ "android_sdk(",
+ " name = 'sdk',",
+ " aapt = 'aapt',",
+ " aapt2 = 'aapt2',",
+ " adb = 'adb',",
+ " aidl = 'aidl',",
+ " android_jar = 'android.jar',",
+ " annotations_jar = 'annotations_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',",
+ " resource_extractor = 'resource_extractor')");
+
+ scratch.file(
+ "java/a/BUILD",
+ "android_binary(",
+ " name = 'a',",
+ " srcs = ['A.java'],",
+ " manifest = 'AndroidManifest.xml',",
+ " resource_files = [ 'res/values/values.xml' ], ",
+ " aapt_version = 'aapt2'",
+ ")");
+
+ useConfiguration("--android_sdk=//sdk:sdk");
+ ConfiguredTarget a = getConfiguredTarget("//java/a:a");
+ Artifact apk = getImplicitOutputArtifact(a, AndroidRuleClasses.ANDROID_RESOURCES_APK);
+
+ SpawnAction apkAction = getGeneratingSpawnAction(apk);
+ assertThat(apkAction.getArguments())
+ .containsAllOf("--aapt2", "sdk/aapt2", "--tool", "AAPT2_PACKAGE");
+ }
+
+ @Test
+ public void testAapt2WithAndroidSdkAndDependencies() throws Exception {
+ scratch.file(
+ "sdk/BUILD",
+ "android_sdk(",
+ " name = 'sdk',",
+ " aapt = 'aapt',",
+ " aapt2 = 'aapt2',",
+ " adb = 'adb',",
+ " aidl = 'aidl',",
+ " android_jar = 'android.jar',",
+ " annotations_jar = 'annotations_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',",
+ " resource_extractor = 'resource_extractor')");
+
+ scratch.file(
+ "java/b/BUILD",
+ "android_library(",
+ " name = 'b',",
+ " srcs = ['B.java'],",
+ " manifest = 'AndroidManifest.xml',",
+ " resource_files = [ 'res/values/values.xml' ], ",
+ ")");
+
+ scratch.file(
+ "java/a/BUILD",
+ "android_binary(",
+ " name = 'a',",
+ " srcs = ['A.java'],",
+ " manifest = 'AndroidManifest.xml',",
+ " deps = [ '//java/b:b' ],",
+ " resource_files = [ 'res/values/values.xml' ], ",
+ " aapt_version = 'aapt2'",
+ ")");
+
+ useConfiguration("--android_sdk=//sdk:sdk");
+ ConfiguredTarget a = getConfiguredTarget("//java/a:a");
+ ConfiguredTarget b = getDirectPrerequisite(a, "//java/b:b");
+
+ Artifact classJar =
+ getImplicitOutputArtifact(a, AndroidRuleClasses.ANDROID_RESOURCES_CLASS_JAR);
+ Artifact rTxt = getImplicitOutputArtifact(a, AndroidRuleClasses.ANDROID_R_TXT);
+ Artifact apk = getImplicitOutputArtifact(a, AndroidRuleClasses.ANDROID_RESOURCES_APK);
+
+ SpawnAction apkAction = getGeneratingSpawnAction(apk);
+ assertThat(apkAction.getArguments())
+ .containsAllOf("--aapt2", "sdk/aapt2", "--tool", "AAPT2_PACKAGE");
+
+ assertThat(apkAction.getInputs())
+ .contains(
+ getImplicitOutputArtifact(b, AndroidRuleClasses.ANDROID_RESOURCES_AAPT2_LIBRARY_APK));
+
+ SpawnAction classAction = getGeneratingSpawnAction(classJar);
+ assertThat(classAction.getInputs())
+ .containsAllOf(
+ rTxt, getImplicitOutputArtifact(b, AndroidRuleClasses.ANDROID_RESOURCES_AAPT2_R_TXT));
+ }
}
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 b21353a1ce..ebdb4bbd08 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
@@ -1489,4 +1489,87 @@ public class AndroidLibraryTest extends AndroidBuildViewTestCase {
assertThat(javacAction.buildCommandLine()).doesNotContain("--testonly");
}
+
+ @Test
+ public void aapt2ArtifactGenerationWhenSdkIsDefined() throws Exception {
+ scratch.file(
+ "sdk/BUILD",
+ "android_sdk(",
+ " name = 'sdk',",
+ " aapt = 'aapt',",
+ " aapt2 = 'aapt2',",
+ " adb = 'adb',",
+ " aidl = 'aidl',",
+ " android_jar = 'android.jar',",
+ " annotations_jar = 'annotations_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',",
+ " resource_extractor = 'resource_extractor')");
+ scratch.file(
+ "java/a/BUILD",
+ "android_library(",
+ " name = 'a', ",
+ " srcs = ['A.java'],",
+ " deps = [':b'],",
+ " manifest = 'a/AndroidManifest.xml',",
+ " resource_files = [ 'res/values/a.xml' ]",
+ ")",
+ "android_library(",
+ " name = 'b', ",
+ " srcs = ['B.java'],",
+ " manifest = 'b/AndroidManifest.xml',",
+ " resource_files = [ 'res/values/b.xml' ]",
+ ")");
+
+ useConfiguration("--android_sdk=//sdk:sdk");
+ ConfiguredTarget a = getConfiguredTarget("//java/a:a");
+ ConfiguredTarget b = getConfiguredTarget("//java/a:b");
+ SpawnAction compileAction =
+ getGeneratingSpawnAction(
+ getImplicitOutputArtifact(a, AndroidRuleClasses.ANDROID_COMPILED_SYMBOLS));
+ assertThat(compileAction).isNotNull();
+
+ SpawnAction linkAction =
+ getGeneratingSpawnAction(
+ getImplicitOutputArtifact(a, AndroidRuleClasses.ANDROID_RESOURCES_AAPT2_LIBRARY_APK));
+ assertThat(linkAction).isNotNull();
+ assertThat(linkAction.getInputs())
+ .containsAllOf(
+ getImplicitOutputArtifact(a, AndroidRuleClasses.ANDROID_COMPILED_SYMBOLS),
+ getImplicitOutputArtifact(
+ b, a.getConfiguration(), AndroidRuleClasses.ANDROID_RESOURCES_AAPT2_LIBRARY_APK));
+ assertThat(linkAction.getOutputs())
+ .containsAllOf(
+ getImplicitOutputArtifact(a, AndroidRuleClasses.ANDROID_RESOURCES_AAPT2_R_TXT),
+ getImplicitOutputArtifact(a, AndroidRuleClasses.ANDROID_RESOURCES_AAPT2_SOURCE_JAR));
+ }
+
+ @Test
+ public void aapt2ArtifactGenerationSkippedWhenSdkIsNotDefined() throws Exception {
+ scratch.file(
+ "java/a/BUILD",
+ "android_library(",
+ " name = 'a', ",
+ " srcs = ['A.java'],",
+ " manifest = 'a/AndroidManifest.xml',",
+ " resource_files = [ 'res/values/a.xml' ]",
+ ")");
+
+ ConfiguredTarget a = getConfiguredTarget("//java/a:a");
+ SpawnAction compileAction =
+ getGeneratingSpawnAction(
+ getImplicitOutputArtifact(a, AndroidRuleClasses.ANDROID_COMPILED_SYMBOLS));
+ assertThat(compileAction).isNull();
+
+ SpawnAction linkAction =
+ getGeneratingSpawnAction(
+ getImplicitOutputArtifact(a, AndroidRuleClasses.ANDROID_RESOURCES_AAPT2_LIBRARY_APK));
+ assertThat(linkAction).isNull();
+ }
}