From 1bb1fe068a7e719711963c3cf3a50209e083a17f Mon Sep 17 00:00:00 2001 From: Ryan Mitchell Date: Fri, 16 Nov 2018 11:21:41 -0800 Subject: Refactor policy parsing This change removes the ability for an overlayable resource to be defined in multiple policy blocks within the same overlayable. This change also changes aapt2 to use a bit mask to keep track of the parsed policies. Bug: 110869880 Bug: 120298168 Test: aapt2_tests Change-Id: Ie26cd913f94a16c0b312f222bccfa48f62feceaa --- tools/aapt2/ResourceTable_test.cpp | 73 ++++++++++++++------------------------ 1 file changed, 27 insertions(+), 46 deletions(-) (limited to 'tools/aapt2/ResourceTable_test.cpp') diff --git a/tools/aapt2/ResourceTable_test.cpp b/tools/aapt2/ResourceTable_test.cpp index 7c28f07d0f66..31095c4d88c8 100644 --- a/tools/aapt2/ResourceTable_test.cpp +++ b/tools/aapt2/ResourceTable_test.cpp @@ -242,69 +242,50 @@ TEST(ResourceTableTest, SetAllowNew) { ASSERT_THAT(result.value().entry->allow_new.value().comment, StrEq("second")); } -TEST(ResourceTableTest, AddOverlayable) { +TEST(ResourceTableTest, SetOverlayable) { ResourceTable table; - const ResourceName name = test::ParseNameOrDie("android:string/foo"); - - Overlayable overlayable; - overlayable.policy = Overlayable::Policy::kProduct; - overlayable.comment = "first"; - ASSERT_TRUE(table.AddOverlayable(name, overlayable, test::GetDiagnostics())); - Maybe result = table.FindResource(name); - ASSERT_TRUE(result); - ASSERT_THAT(result.value().entry->overlayable_declarations.size(), Eq(1)); - ASSERT_THAT(result.value().entry->overlayable_declarations[0].comment, StrEq("first")); - ASSERT_THAT(result.value().entry->overlayable_declarations[0].policy, - Eq(Overlayable::Policy::kProduct)); - - Overlayable overlayable2; - overlayable2.comment = "second"; - overlayable2.policy = Overlayable::Policy::kProductServices; - ASSERT_TRUE(table.AddOverlayable(name, overlayable2, test::GetDiagnostics())); - result = table.FindResource(name); - ASSERT_TRUE(result); - ASSERT_THAT(result.value().entry->overlayable_declarations.size(), Eq(2)); - ASSERT_THAT(result.value().entry->overlayable_declarations[0].comment, StrEq("first")); - ASSERT_THAT(result.value().entry->overlayable_declarations[0].policy, - Eq(Overlayable::Policy::kProduct)); - ASSERT_THAT(result.value().entry->overlayable_declarations[1].comment, StrEq("second")); - ASSERT_THAT(result.value().entry->overlayable_declarations[1].policy, - Eq(Overlayable::Policy::kProductServices)); -} + Overlayable overlayable{}; + overlayable.policies |= Overlayable::Policy::kProduct; + overlayable.policies |= Overlayable::Policy::kProductServices; + overlayable.comment = "comment"; -TEST(ResourceTableTest, AddDuplicateOverlayableFail) { - ResourceTable table; const ResourceName name = test::ParseNameOrDie("android:string/foo"); + ASSERT_TRUE(table.SetOverlayable(name, overlayable, test::GetDiagnostics())); + Maybe search_result = table.FindResource(name); - Overlayable overlayable; - overlayable.policy = Overlayable::Policy::kProduct; - ASSERT_TRUE(table.AddOverlayable(name, overlayable, test::GetDiagnostics())); + ASSERT_TRUE(search_result); + ASSERT_TRUE(search_result.value().entry->overlayable); - Overlayable overlayable2; - overlayable2.policy = Overlayable::Policy::kProduct; - ASSERT_FALSE(table.AddOverlayable(name, overlayable2, test::GetDiagnostics())); + Overlayable& result_overlayable = search_result.value().entry->overlayable.value(); + ASSERT_THAT(result_overlayable.comment, StrEq("comment")); + EXPECT_THAT(result_overlayable.policies, Eq(Overlayable::Policy::kProduct + | Overlayable::Policy::kProductServices)); } -TEST(ResourceTableTest, AddOverlayablePolicyAndNoneFirstFail) { +TEST(ResourceTableTest, AddDuplicateOverlayableSamePolicyFail) { ResourceTable table; const ResourceName name = test::ParseNameOrDie("android:string/foo"); - ASSERT_TRUE(table.AddOverlayable(name, {}, test::GetDiagnostics())); + Overlayable overlayable{}; + overlayable.policies = Overlayable::Policy::kProduct; + ASSERT_TRUE(table.SetOverlayable(name, overlayable, test::GetDiagnostics())); - Overlayable overlayable2; - overlayable2.policy = Overlayable::Policy::kProduct; - ASSERT_FALSE(table.AddOverlayable(name, overlayable2, test::GetDiagnostics())); + Overlayable overlayable2{}; + overlayable2.policies = Overlayable::Policy::kProduct; + ASSERT_FALSE(table.SetOverlayable(name, overlayable2, test::GetDiagnostics())); } -TEST(ResourceTableTest, AddOverlayablePolicyAndNoneLastFail) { +TEST(ResourceTableTest, AddDuplicateOverlayableDifferentPolicyFail) { ResourceTable table; const ResourceName name = test::ParseNameOrDie("android:string/foo"); - Overlayable overlayable; - overlayable.policy = Overlayable::Policy::kProduct; - ASSERT_TRUE(table.AddOverlayable(name, overlayable, test::GetDiagnostics())); + Overlayable overlayable{}; + overlayable.policies = Overlayable::Policy::kProduct; + ASSERT_TRUE(table.SetOverlayable(name, overlayable, test::GetDiagnostics())); - ASSERT_FALSE(table.AddOverlayable(name, {}, test::GetDiagnostics())); + Overlayable overlayable2{}; + overlayable2.policies = Overlayable::Policy::kVendor; + ASSERT_FALSE(table.SetOverlayable(name, overlayable2, test::GetDiagnostics())); } TEST(ResourceTableTest, AllowDuplictaeResourcesNames) { -- cgit v1.2.3