summaryrefslogtreecommitdiff
path: root/tools/aapt2/java/ProguardRules_test.cpp
diff options
context:
space:
mode:
authorRyan Mitchell <rtmitchell@google.com>2018-05-23 14:23:18 -0700
committerRyan Mitchell <rtmitchell@google.com>2018-05-24 09:58:27 -0700
commit9a2f6e60c6a8aba61dadc66c20f13d00327dca46 (patch)
treeeaff99a6c0e3e4db0e9a2f6da0af767038314b8d /tools/aapt2/java/ProguardRules_test.cpp
parent5cfe061ed5644de4addbf43775963c5c5306ef20 (diff)
AAPT2: Add Proguard rules for nav fragments
Adds generation of proguard rules for fragments in res/navigation. All android:name attributes have keep rules generated for the classes they reference. Bug: 69929974 Test: aapt2_tests Change-Id: I05a87484ab357ea5629b73caad8488182f474e1f
Diffstat (limited to 'tools/aapt2/java/ProguardRules_test.cpp')
-rw-r--r--tools/aapt2/java/ProguardRules_test.cpp48
1 files changed, 38 insertions, 10 deletions
diff --git a/tools/aapt2/java/ProguardRules_test.cpp b/tools/aapt2/java/ProguardRules_test.cpp
index 37d1a5fbaeb8..876c7a76d3f5 100644
--- a/tools/aapt2/java/ProguardRules_test.cpp
+++ b/tools/aapt2/java/ProguardRules_test.cpp
@@ -42,7 +42,7 @@ TEST(ProguardRulesTest, FragmentNameRuleIsEmitted) {
layout->file.name = test::ParseNameOrDie("layout/foo");
proguard::KeepSet set;
- ASSERT_TRUE(proguard::CollectProguardRules(layout.get(), &set));
+ ASSERT_TRUE(proguard::CollectProguardRules(context.get(), layout.get(), &set));
std::string actual = GetKeepSetString(set);
@@ -56,7 +56,7 @@ TEST(ProguardRulesTest, FragmentClassRuleIsEmitted) {
layout->file.name = test::ParseNameOrDie("layout/foo");
proguard::KeepSet set;
- ASSERT_TRUE(proguard::CollectProguardRules(layout.get(), &set));
+ ASSERT_TRUE(proguard::CollectProguardRules(context.get(), layout.get(), &set));
std::string actual = GetKeepSetString(set);
@@ -72,7 +72,7 @@ TEST(ProguardRulesTest, FragmentNameAndClassRulesAreEmitted) {
layout->file.name = test::ParseNameOrDie("layout/foo");
proguard::KeepSet set;
- ASSERT_TRUE(proguard::CollectProguardRules(layout.get(), &set));
+ ASSERT_TRUE(proguard::CollectProguardRules(context.get(), layout.get(), &set));
std::string actual = GetKeepSetString(set);
@@ -80,6 +80,34 @@ TEST(ProguardRulesTest, FragmentNameAndClassRulesAreEmitted) {
EXPECT_THAT(actual, HasSubstr("com.foo.Baz"));
}
+TEST(ProguardRulesTest, NavigationFragmentNameAndClassRulesAreEmitted) {
+ std::unique_ptr<IAaptContext> context = test::ContextBuilder()
+ .SetCompilationPackage("com.base").Build();
+ std::unique_ptr<xml::XmlResource> navigation = test::BuildXmlDom(R"(
+ <navigation
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto">
+ <custom android:id="@id/foo"
+ android:name="com.package.Foo"/>
+ <fragment android:id="@id/bar"
+ android:name="com.package.Bar">
+ <nested android:id="@id/nested"
+ android:name=".Nested"/>
+ </fragment>
+ </navigation>
+ )");
+
+ navigation->file.name = test::ParseNameOrDie("navigation/graph.xml");
+
+ proguard::KeepSet set;
+ ASSERT_TRUE(proguard::CollectProguardRules(context.get(), navigation.get(), &set));
+
+ std::string actual = GetKeepSetString(set);
+ EXPECT_THAT(actual, HasSubstr("com.package.Foo"));
+ EXPECT_THAT(actual, HasSubstr("com.package.Bar"));
+ EXPECT_THAT(actual, HasSubstr("com.base.Nested"));
+}
+
TEST(ProguardRulesTest, CustomViewRulesAreEmitted) {
std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build();
std::unique_ptr<xml::XmlResource> layout = test::BuildXmlDom(R"(
@@ -89,7 +117,7 @@ TEST(ProguardRulesTest, CustomViewRulesAreEmitted) {
layout->file.name = test::ParseNameOrDie("layout/foo");
proguard::KeepSet set;
- ASSERT_TRUE(proguard::CollectProguardRules(layout.get(), &set));
+ ASSERT_TRUE(proguard::CollectProguardRules(context.get(), layout.get(), &set));
std::string actual = GetKeepSetString(set);
@@ -125,8 +153,8 @@ TEST(ProguardRulesTest, IncludedLayoutRulesAreConditional) {
ASSERT_TRUE(xml_linker.Consume(context.get(), foo_layout.get()));
proguard::KeepSet set = proguard::KeepSet(true);
- ASSERT_TRUE(proguard::CollectProguardRules(bar_layout.get(), &set));
- ASSERT_TRUE(proguard::CollectProguardRules(foo_layout.get(), &set));
+ ASSERT_TRUE(proguard::CollectProguardRules(context.get(), bar_layout.get(), &set));
+ ASSERT_TRUE(proguard::CollectProguardRules(context.get(), foo_layout.get(), &set));
std::string actual = GetKeepSetString(set);
@@ -147,7 +175,7 @@ TEST(ProguardRulesTest, AliasedLayoutRulesAreConditional) {
proguard::KeepSet set = proguard::KeepSet(true);
set.AddReference({test::ParseNameOrDie("layout/bar"), {}}, layout->file.name);
- ASSERT_TRUE(proguard::CollectProguardRules(layout.get(), &set));
+ ASSERT_TRUE(proguard::CollectProguardRules(context.get(), layout.get(), &set));
std::string actual = GetKeepSetString(set);
@@ -168,7 +196,7 @@ TEST(ProguardRulesTest, NonLayoutReferencesAreUnconditional) {
proguard::KeepSet set = proguard::KeepSet(true);
set.AddReference({test::ParseNameOrDie("style/MyStyle"), {}}, layout->file.name);
- ASSERT_TRUE(proguard::CollectProguardRules(layout.get(), &set));
+ ASSERT_TRUE(proguard::CollectProguardRules(context.get(), layout.get(), &set));
std::string actual = GetKeepSetString(set);
@@ -184,7 +212,7 @@ TEST(ProguardRulesTest, ViewOnClickRuleIsEmitted) {
layout->file.name = test::ParseNameOrDie("layout/foo");
proguard::KeepSet set;
- ASSERT_TRUE(proguard::CollectProguardRules(layout.get(), &set));
+ ASSERT_TRUE(proguard::CollectProguardRules(context.get(), layout.get(), &set));
std::string actual = GetKeepSetString(set);
@@ -203,7 +231,7 @@ TEST(ProguardRulesTest, MenuRulesAreEmitted) {
menu->file.name = test::ParseNameOrDie("menu/foo");
proguard::KeepSet set;
- ASSERT_TRUE(proguard::CollectProguardRules(menu.get(), &set));
+ ASSERT_TRUE(proguard::CollectProguardRules(context.get(), menu.get(), &set));
std::string actual = GetKeepSetString(set);