diff options
author | Ryan Mitchell <rtmitchell@google.com> | 2018-11-16 11:21:41 -0800 |
---|---|---|
committer | Ryan Mitchell <rtmitchell@google.com> | 2018-12-11 13:48:45 -0800 |
commit | 1bb1fe068a7e719711963c3cf3a50209e083a17f (patch) | |
tree | 70a6d9fbaa6e7f03626b92d345f73b48fcc3fa4a /tools/aapt2/ResourceParser_test.cpp | |
parent | c622083df99a87afef8348dd8e4bdfecf3050d94 (diff) |
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
Diffstat (limited to 'tools/aapt2/ResourceParser_test.cpp')
-rw-r--r-- | tools/aapt2/ResourceParser_test.cpp | 110 |
1 files changed, 43 insertions, 67 deletions
diff --git a/tools/aapt2/ResourceParser_test.cpp b/tools/aapt2/ResourceParser_test.cpp index c6f29ac53ca6..03e6197027cb 100644 --- a/tools/aapt2/ResourceParser_test.cpp +++ b/tools/aapt2/ResourceParser_test.cpp @@ -905,16 +905,16 @@ TEST_F(ResourceParserTest, ParseOverlayable) { auto search_result = table_.FindResource(test::ParseNameOrDie("string/foo")); ASSERT_TRUE(search_result); ASSERT_THAT(search_result.value().entry, NotNull()); - EXPECT_THAT(search_result.value().entry->visibility.level, Eq(Visibility::Level::kUndefined)); - EXPECT_THAT(search_result.value().entry->overlayable_declarations.size(), Eq(1)); - EXPECT_FALSE(search_result.value().entry->overlayable_declarations[0].policy); + ASSERT_TRUE(search_result.value().entry->overlayable); + EXPECT_THAT(search_result.value().entry->overlayable.value().policies, + Eq(Overlayable::Policy::kNone)); search_result = table_.FindResource(test::ParseNameOrDie("drawable/bar")); ASSERT_TRUE(search_result); ASSERT_THAT(search_result.value().entry, NotNull()); - EXPECT_THAT(search_result.value().entry->visibility.level, Eq(Visibility::Level::kUndefined)); - EXPECT_THAT(search_result.value().entry->overlayable_declarations.size(), Eq(1)); - EXPECT_FALSE(search_result.value().entry->overlayable_declarations[0].policy); + ASSERT_TRUE(search_result.value().entry->overlayable); + EXPECT_THAT(search_result.value().entry->overlayable.value().policies, + Eq(Overlayable::Policy::kNone)); } TEST_F(ResourceParserTest, ParseOverlayablePolicy) { @@ -945,49 +945,44 @@ TEST_F(ResourceParserTest, ParseOverlayablePolicy) { auto search_result = table_.FindResource(test::ParseNameOrDie("string/foo")); ASSERT_TRUE(search_result); ASSERT_THAT(search_result.value().entry, NotNull()); - EXPECT_THAT(search_result.value().entry->visibility.level, Eq(Visibility::Level::kUndefined)); - EXPECT_THAT(search_result.value().entry->overlayable_declarations.size(), Eq(1)); - EXPECT_FALSE(search_result.value().entry->overlayable_declarations[0].policy); + ASSERT_TRUE(search_result.value().entry->overlayable); + Overlayable& overlayable = search_result.value().entry->overlayable.value(); + EXPECT_THAT(overlayable.policies, Eq(Overlayable::Policy::kNone)); search_result = table_.FindResource(test::ParseNameOrDie("string/bar")); ASSERT_TRUE(search_result); ASSERT_THAT(search_result.value().entry, NotNull()); - EXPECT_THAT(search_result.value().entry->visibility.level, Eq(Visibility::Level::kUndefined)); - EXPECT_THAT(search_result.value().entry->overlayable_declarations.size(), Eq(1)); - EXPECT_THAT(search_result.value().entry->overlayable_declarations[0].policy, - Eq(Overlayable::Policy::kProduct)); + ASSERT_TRUE(search_result.value().entry->overlayable); + overlayable = search_result.value().entry->overlayable.value(); + EXPECT_THAT(overlayable.policies, Eq(Overlayable::Policy::kProduct)); search_result = table_.FindResource(test::ParseNameOrDie("string/baz")); ASSERT_TRUE(search_result); ASSERT_THAT(search_result.value().entry, NotNull()); - EXPECT_THAT(search_result.value().entry->visibility.level, Eq(Visibility::Level::kUndefined)); - EXPECT_THAT(search_result.value().entry->overlayable_declarations.size(), Eq(1)); - EXPECT_THAT(search_result.value().entry->overlayable_declarations[0].policy, - Eq(Overlayable::Policy::kProductServices)); + ASSERT_TRUE(search_result.value().entry->overlayable); + overlayable = search_result.value().entry->overlayable.value(); + EXPECT_THAT(overlayable.policies, Eq(Overlayable::Policy::kProductServices)); search_result = table_.FindResource(test::ParseNameOrDie("string/fiz")); ASSERT_TRUE(search_result); ASSERT_THAT(search_result.value().entry, NotNull()); - EXPECT_THAT(search_result.value().entry->visibility.level, Eq(Visibility::Level::kUndefined)); - EXPECT_THAT(search_result.value().entry->overlayable_declarations.size(), Eq(1)); - EXPECT_THAT(search_result.value().entry->overlayable_declarations[0].policy, - Eq(Overlayable::Policy::kSystem)); + ASSERT_TRUE(search_result.value().entry->overlayable); + overlayable = search_result.value().entry->overlayable.value(); + EXPECT_THAT(overlayable.policies, Eq(Overlayable::Policy::kSystem)); search_result = table_.FindResource(test::ParseNameOrDie("string/fuz")); ASSERT_TRUE(search_result); ASSERT_THAT(search_result.value().entry, NotNull()); - EXPECT_THAT(search_result.value().entry->visibility.level, Eq(Visibility::Level::kUndefined)); - EXPECT_THAT(search_result.value().entry->overlayable_declarations.size(), Eq(1)); - EXPECT_THAT(search_result.value().entry->overlayable_declarations[0].policy, - Eq(Overlayable::Policy::kVendor)); + ASSERT_TRUE(search_result.value().entry->overlayable); + overlayable = search_result.value().entry->overlayable.value(); + EXPECT_THAT(overlayable.policies, Eq(Overlayable::Policy::kVendor)); search_result = table_.FindResource(test::ParseNameOrDie("string/faz")); ASSERT_TRUE(search_result); ASSERT_THAT(search_result.value().entry, NotNull()); - EXPECT_THAT(search_result.value().entry->visibility.level, Eq(Visibility::Level::kUndefined)); - EXPECT_THAT(search_result.value().entry->overlayable_declarations.size(), Eq(1)); - EXPECT_THAT(search_result.value().entry->overlayable_declarations[0].policy, - Eq(Overlayable::Policy::kPublic)); + ASSERT_TRUE(search_result.value().entry->overlayable); + overlayable = search_result.value().entry->overlayable.value(); + EXPECT_THAT(overlayable.policies, Eq(Overlayable::Policy::kPublic)); } TEST_F(ResourceParserTest, ParseOverlayableBadPolicyError) { @@ -1031,22 +1026,18 @@ TEST_F(ResourceParserTest, ParseOverlayableMultiplePolicy) { auto search_result = table_.FindResource(test::ParseNameOrDie("string/foo")); ASSERT_TRUE(search_result); ASSERT_THAT(search_result.value().entry, NotNull()); - EXPECT_THAT(search_result.value().entry->visibility.level, Eq(Visibility::Level::kUndefined)); - EXPECT_THAT(search_result.value().entry->overlayable_declarations.size(), Eq(2)); - EXPECT_THAT(search_result.value().entry->overlayable_declarations[0].policy, - Eq(Overlayable::Policy::kVendor)); - EXPECT_THAT(search_result.value().entry->overlayable_declarations[1].policy, - Eq(Overlayable::Policy::kProductServices)); + ASSERT_TRUE(search_result.value().entry->overlayable); + Overlayable& overlayable = search_result.value().entry->overlayable.value(); + EXPECT_THAT(overlayable.policies, Eq(Overlayable::Policy::kVendor + | Overlayable::Policy::kProductServices)); search_result = table_.FindResource(test::ParseNameOrDie("string/bar")); ASSERT_TRUE(search_result); ASSERT_THAT(search_result.value().entry, NotNull()); - EXPECT_THAT(search_result.value().entry->visibility.level, Eq(Visibility::Level::kUndefined)); - EXPECT_THAT(search_result.value().entry->overlayable_declarations.size(), Eq(2)); - EXPECT_THAT(search_result.value().entry->overlayable_declarations[0].policy, - Eq(Overlayable::Policy::kProduct)); - EXPECT_THAT(search_result.value().entry->overlayable_declarations[1].policy, - Eq(Overlayable::Policy::kSystem)); + ASSERT_TRUE(search_result.value().entry->overlayable); + overlayable = search_result.value().entry->overlayable.value(); + EXPECT_THAT(overlayable.policies, Eq(Overlayable::Policy::kProduct + | Overlayable::Policy::kSystem)); } TEST_F(ResourceParserTest, DuplicateOverlayableIsError) { @@ -1067,7 +1058,7 @@ TEST_F(ResourceParserTest, DuplicateOverlayableIsError) { EXPECT_FALSE(TestParse(input)); input = R"( - <overlayable"> + <overlayable> <policy type="product"> <item type="string" name="foo" /> <item type="string" name="foo" /> @@ -1080,45 +1071,30 @@ TEST_F(ResourceParserTest, DuplicateOverlayableIsError) { <policy type="product"> <item type="string" name="foo" /> </policy> - </overlayable> + <item type="string" name="foo" /> + </overlayable>)"; + EXPECT_FALSE(TestParse(input)); + input = R"( <overlayable> <policy type="product"> <item type="string" name="foo" /> </policy> - </overlayable>)"; - EXPECT_FALSE(TestParse(input)); -} - -TEST_F(ResourceParserTest, PolicyAndNonPolicyOverlayableError) { - std::string input = R"( - <overlayable policy="product"> - <item type="string" name="foo" /> - </overlayable> - <overlayable policy=""> + <policy type="vendor"> <item type="string" name="foo" /> - </overlayable>)"; + </policy> + </overlayable>)"; EXPECT_FALSE(TestParse(input)); input = R"( - <overlayable policy=""> - <item type="string" name="foo" /> - </overlayable> - <overlayable policy="product"> - <item type="string" name="foo" /> - </overlayable>)"; - EXPECT_FALSE(TestParse(input)); -} - -TEST_F(ResourceParserTest, DuplicateOverlayableMultiplePolicyError) { - std::string input = R"( <overlayable> - <policy type="vendor|product"> + <policy type="product"> <item type="string" name="foo" /> </policy> </overlayable> + <overlayable> - <policy type="product_services|vendor"> + <policy type="product"> <item type="string" name="foo" /> </policy> </overlayable>)"; |