aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google/devtools/build/lib/rules/android/AndroidAssetsTest.java
diff options
context:
space:
mode:
authorGravatar asteinb <asteinb@google.com>2018-05-29 10:29:44 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-05-29 10:31:19 -0700
commit6d33f2874eb1647526557d291496e78163d94095 (patch)
treeeca449eee4152117e1edd0fa99055a60b5387600 /src/test/java/com/google/devtools/build/lib/rules/android/AndroidAssetsTest.java
parent4b9b530d7e99582e350fa1dfc9c67114134fa1a2 (diff)
Use independently passed assets in aapt2 packaging as well
Much earlier, I made a change that allowed passing assets without resources to aapt packaging. Do the same for aapt2 packaging too. The busybox seems to be expecting compiled symbols, so compile assets and pass the compiled version in. (Compiling assets doesn't save any time, but doesn't cost much either, and means that we'll eventually be able to phase out the parsed form entirely. Adapting the Busybox to take parsed assets would probably work too, but getting the code to handle it would be really messy.) RELNOTES: none PiperOrigin-RevId: 198417111
Diffstat (limited to 'src/test/java/com/google/devtools/build/lib/rules/android/AndroidAssetsTest.java')
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/android/AndroidAssetsTest.java124
1 files changed, 111 insertions, 13 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidAssetsTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidAssetsTest.java
index 1ee24231fa..3d47cb9b8e 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidAssetsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidAssetsTest.java
@@ -22,6 +22,7 @@ import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.collect.nestedset.Order;
+import com.google.devtools.build.lib.rules.android.AndroidConfiguration.AndroidAaptVersion;
import com.google.devtools.build.lib.vfs.PathFragment;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -34,7 +35,8 @@ public class AndroidAssetsTest extends ResourceTestBase {
public void testParse() throws Exception {
RuleContext ruleContext = getRuleContext();
AndroidAssets assets = getLocalAssets();
- ParsedAndroidAssets parsed = assets.parse(AndroidDataContext.forNative(ruleContext));
+ ParsedAndroidAssets parsed =
+ assets.parse(AndroidDataContext.forNative(ruleContext), AndroidAaptVersion.AAPT);
// Assets should be unchanged
assertThat(parsed.getAssets()).isEqualTo(assets.getAssets());
@@ -48,12 +50,48 @@ public class AndroidAssetsTest extends ResourceTestBase {
ruleContext,
/* inputs = */ assets.getAssets(),
/* outputs = */ ImmutableList.of(parsed.getSymbols()));
+
+ // There should be no compiled symbols
+ assertThat(parsed.getCompiledSymbols()).isNull();
+ }
+
+ @Test
+ public void testParseAapt2() throws Exception {
+ mockAndroidSdkWithAapt2();
+ useConfiguration("--android_sdk=//sdk:sdk");
+
+ RuleContext ruleContext = getRuleContext();
+ AndroidAssets assets = getLocalAssets();
+
+ ParsedAndroidAssets parsed =
+ assets.parse(AndroidDataContext.forNative(ruleContext), AndroidAaptVersion.AAPT2);
+
+ // Assets should be unchanged
+ assertThat(parsed.getAssets()).isEqualTo(assets.getAssets());
+ assertThat(parsed.getAssetRoots()).isEqualTo(assets.getAssetRoots());
+
+ // Label should be correct
+ assertThat(parsed.getLabel()).isEqualTo(ruleContext.getLabel());
+
+ // There should be compiled symbols
+ assertThat(parsed.getCompiledSymbols()).isNotNull();
+
+ // Symbols and compiled symbols files should be created from raw assets
+ assertActionArtifacts(
+ ruleContext,
+ /* inputs = */ assets.getAssets(),
+ /* outputs = */ ImmutableList.of(parsed.getSymbols()));
+ assertActionArtifacts(
+ ruleContext,
+ /* inputs = */ assets.getAssets(),
+ /* outputs = */ ImmutableList.of(parsed.getCompiledSymbols()));
}
@Test
public void testMergeNoDeps() throws Exception {
RuleContext ruleContext = getRuleContext();
- ParsedAndroidAssets parsed = getLocalAssets().parse(AndroidDataContext.forNative(ruleContext));
+ ParsedAndroidAssets parsed =
+ getLocalAssets().parse(AndroidDataContext.forNative(ruleContext), AndroidAaptVersion.AAPT);
MergedAndroidAssets merged = assertMerge(ruleContext, parsed, AssetDependencies.empty());
// The assets can be correctly built into a provider
@@ -70,8 +108,9 @@ public class AndroidAssetsTest extends ResourceTestBase {
@Test
public void testMergeNeverlink() throws Exception {
RuleContext ruleContext = getRuleContext();
- ParsedAndroidAssets parsed = getLocalAssets().parse(AndroidDataContext.forNative(ruleContext));
- AssetDependencies deps = makeDeps(ruleContext, /* neverlink = */ true);
+ ParsedAndroidAssets parsed =
+ getLocalAssets().parse(AndroidDataContext.forNative(ruleContext), AndroidAaptVersion.AAPT);
+ AssetDependencies deps = makeDeps(ruleContext, /* neverlink = */ true, AndroidAaptVersion.AAPT);
MergedAndroidAssets merged = assertMerge(ruleContext, parsed, deps);
@@ -83,13 +122,16 @@ public class AndroidAssetsTest extends ResourceTestBase {
assertThat(info.getSymbols()).isEmpty();
assertThat(info.getDirectParsedAssets()).isEmpty();
assertThat(info.getTransitiveParsedAssets()).isEmpty();
+ assertThat(info.getCompiledSymbols()).isEmpty();
}
@Test
public void testMerge() throws Exception {
RuleContext ruleContext = getRuleContext();
- ParsedAndroidAssets parsed = getLocalAssets().parse(AndroidDataContext.forNative(ruleContext));
- AssetDependencies deps = makeDeps(ruleContext, /* neverlink = */ false);
+ ParsedAndroidAssets parsed =
+ getLocalAssets().parse(AndroidDataContext.forNative(ruleContext), AndroidAaptVersion.AAPT);
+ AssetDependencies deps =
+ makeDeps(ruleContext, /* neverlink = */ false, AndroidAaptVersion.AAPT);
MergedAndroidAssets merged = assertMerge(ruleContext, parsed, deps);
@@ -109,13 +151,56 @@ public class AndroidAssetsTest extends ResourceTestBase {
.containsExactlyElementsIn(
Iterables.concat(deps.getTransitiveParsedAssets(), deps.getDirectParsedAssets()))
.inOrder();
+
+ // There should be no compiled symbols
+ assertThat(info.getCompiledSymbols()).isEmpty();
+ }
+
+ @Test
+ public void testMergeAapt2() throws Exception {
+ mockAndroidSdkWithAapt2();
+ useConfiguration("--android_sdk=//sdk:sdk");
+
+ RuleContext ruleContext = getRuleContext();
+ ParsedAndroidAssets parsed =
+ getLocalAssets().parse(AndroidDataContext.forNative(ruleContext), AndroidAaptVersion.AAPT2);
+ AssetDependencies deps =
+ makeDeps(ruleContext, /* neverlink = */ false, AndroidAaptVersion.AAPT2);
+
+ MergedAndroidAssets merged = assertMerge(ruleContext, parsed, deps);
+
+ AndroidAssetsInfo info = merged.toProvider();
+ assertThat(info.getLabel()).isEqualTo(merged.getLabel());
+
+ // The provider should have transitive and direct deps
+ assertThat(info.getAssets())
+ .containsExactlyElementsIn(Iterables.concat(parsed.getAssets(), deps.getTransitiveAssets()))
+ .inOrder();
+ assertThat(info.getSymbols())
+ .containsExactlyElementsIn(
+ Iterables.concat(ImmutableList.of(parsed.getSymbols()), deps.getTransitiveSymbols()))
+ .inOrder();
+ assertThat(info.getCompiledSymbols())
+ .containsExactlyElementsIn(
+ Iterables.concat(
+ ImmutableList.of(parsed.getCompiledSymbols()),
+ deps.getTransitiveCompiledSymbols()));
+ assertThat(info.getDirectParsedAssets()).containsExactly(parsed).inOrder();
+ assertThat(info.getTransitiveParsedAssets())
+ .containsExactlyElementsIn(
+ Iterables.concat(deps.getTransitiveParsedAssets(), deps.getDirectParsedAssets()))
+ .inOrder();
}
- private AssetDependencies makeDeps(RuleContext ruleContext, boolean neverlink) {
- ParsedAndroidAssets firstDirect = getDependencyAssets(ruleContext, "first_direct");
- ParsedAndroidAssets secondDirect = getDependencyAssets(ruleContext, "second_direct");
- ParsedAndroidAssets firstTransitive = getDependencyAssets(ruleContext, "first_transitive");
- ParsedAndroidAssets secondTransitive = getDependencyAssets(ruleContext, "second_transitive");
+ private AssetDependencies makeDeps(
+ RuleContext ruleContext, boolean neverlink, AndroidAaptVersion aaptVersion) {
+ ParsedAndroidAssets firstDirect = getDependencyAssets(ruleContext, "first_direct", aaptVersion);
+ ParsedAndroidAssets secondDirect =
+ getDependencyAssets(ruleContext, "second_direct", aaptVersion);
+ ParsedAndroidAssets firstTransitive =
+ getDependencyAssets(ruleContext, "first_transitive", aaptVersion);
+ ParsedAndroidAssets secondTransitive =
+ getDependencyAssets(ruleContext, "second_transitive", aaptVersion);
return AssetDependencies.of(
neverlink,
@@ -134,7 +219,16 @@ public class AndroidAssetsTest extends ResourceTestBase {
firstDirect.getSymbols(),
secondDirect.getSymbols(),
firstTransitive.getSymbols(),
- secondTransitive.getSymbols())));
+ secondTransitive.getSymbols())),
+ aaptVersion == AndroidAaptVersion.AAPT2
+ ? NestedSetBuilder.wrap(
+ Order.NAIVE_LINK_ORDER,
+ ImmutableList.of(
+ firstDirect.getCompiledSymbols(),
+ secondDirect.getCompiledSymbols(),
+ firstTransitive.getCompiledSymbols(),
+ secondTransitive.getCompiledSymbols()))
+ : NestedSetBuilder.emptySet(Order.NAIVE_LINK_ORDER));
}
private MergedAndroidAssets assertMerge(
@@ -167,13 +261,17 @@ public class AndroidAssetsTest extends ResourceTestBase {
"asset_dir");
}
- private ParsedAndroidAssets getDependencyAssets(RuleContext ruleContext, String depName) {
+ private ParsedAndroidAssets getDependencyAssets(
+ RuleContext ruleContext, String depName, AndroidAaptVersion aaptVersion) {
return ParsedAndroidAssets.of(
new AndroidAssets(
ImmutableList.of(getResource(depName + "_asset_1"), getResource(depName + "_asset_2")),
ImmutableList.of(PathFragment.create(depName)),
depName),
getResource("symbols_for_" + depName),
+ aaptVersion == AndroidAaptVersion.AAPT2
+ ? getResource("compiled_symbols_for_" + depName)
+ : null,
ruleContext.getLabel());
}