diff options
Diffstat (limited to 'tools/aapt2/compile/IdAssigner_test.cpp')
-rw-r--r-- | tools/aapt2/compile/IdAssigner_test.cpp | 90 |
1 files changed, 71 insertions, 19 deletions
diff --git a/tools/aapt2/compile/IdAssigner_test.cpp b/tools/aapt2/compile/IdAssigner_test.cpp index e25a17ab125e..d21fcba756ed 100644 --- a/tools/aapt2/compile/IdAssigner_test.cpp +++ b/tools/aapt2/compile/IdAssigner_test.cpp @@ -15,11 +15,7 @@ */ #include "compile/IdAssigner.h" - -#include "test/Context.h" -#include "test/Builders.h" - -#include <gtest/gtest.h> +#include "test/Test.h" namespace aapt { @@ -27,10 +23,10 @@ namespace aapt { TEST(IdAssignerTest, AssignIds) { std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() - .addSimple(u"@android:attr/foo") - .addSimple(u"@android:attr/bar") - .addSimple(u"@android:id/foo") - .setPackageId(u"android", 0x01) + .addSimple("android:attr/foo") + .addSimple("android:attr/bar") + .addSimple("android:id/foo") + .setPackageId("android", 0x01) .build(); std::unique_ptr<IAaptContext> context = test::ContextBuilder().build(); @@ -42,12 +38,17 @@ TEST(IdAssignerTest, AssignIds) { TEST(IdAssignerTest, AssignIdsWithReservedIds) { std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() - .addSimple(u"@android:attr/foo", ResourceId(0x01040006)) - .addSimple(u"@android:attr/bar") - .addSimple(u"@android:id/foo") - .addSimple(u"@app:id/biz") - .setPackageId(u"android", 0x01) - .setPackageId(u"app", 0x7f) + .addSimple("android:id/foo", ResourceId(0x01010000)) + .addSimple("android:dimen/two") + .addSimple("android:integer/three") + .addSimple("android:string/five") + .addSimple("android:attr/fun", ResourceId(0x01040000)) + .addSimple("android:attr/foo", ResourceId(0x01040006)) + .addSimple("android:attr/bar") + .addSimple("android:attr/baz") + .addSimple("app:id/biz") + .setPackageId("android", 0x01) + .setPackageId("app", 0x7f) .build(); std::unique_ptr<IAaptContext> context = test::ContextBuilder().build(); @@ -55,14 +56,42 @@ TEST(IdAssignerTest, AssignIdsWithReservedIds) { ASSERT_TRUE(assigner.consume(context.get(), table.get())); ASSERT_TRUE(verifyIds(table.get())); + + Maybe<ResourceTable::SearchResult> maybeResult; + + // Expect to fill in the gaps between 0x0101XXXX and 0x0104XXXX. + + maybeResult = table->findResource(test::parseNameOrDie("android:dimen/two")); + AAPT_ASSERT_TRUE(maybeResult); + EXPECT_EQ(make_value<uint8_t>(2), maybeResult.value().type->id); + + maybeResult = table->findResource(test::parseNameOrDie("android:integer/three")); + AAPT_ASSERT_TRUE(maybeResult); + EXPECT_EQ(make_value<uint8_t>(3), maybeResult.value().type->id); + + // Expect to bypass the reserved 0x0104XXXX IDs and use the next 0x0105XXXX IDs. + + maybeResult = table->findResource(test::parseNameOrDie("android:string/five")); + AAPT_ASSERT_TRUE(maybeResult); + EXPECT_EQ(make_value<uint8_t>(5), maybeResult.value().type->id); + + // Expect to fill in the gaps between 0x01040000 and 0x01040006. + + maybeResult = table->findResource(test::parseNameOrDie("android:attr/bar")); + AAPT_ASSERT_TRUE(maybeResult); + EXPECT_EQ(make_value<uint16_t>(1), maybeResult.value().entry->id); + + maybeResult = table->findResource(test::parseNameOrDie("android:attr/baz")); + AAPT_ASSERT_TRUE(maybeResult); + EXPECT_EQ(make_value<uint16_t>(2), maybeResult.value().entry->id); } TEST(IdAssignerTest, FailWhenNonUniqueIdsAssigned) { std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() - .addSimple(u"@android:attr/foo", ResourceId(0x01040006)) - .addSimple(u"@android:attr/bar", ResourceId(0x01040006)) - .setPackageId(u"android", 0x01) - .setPackageId(u"app", 0x7f) + .addSimple("android:attr/foo", ResourceId(0x01040006)) + .addSimple("android:attr/bar", ResourceId(0x01040006)) + .setPackageId("android", 0x01) + .setPackageId("app", 0x7f) .build(); std::unique_ptr<IAaptContext> context = test::ContextBuilder().build(); @@ -71,6 +100,29 @@ TEST(IdAssignerTest, FailWhenNonUniqueIdsAssigned) { ASSERT_FALSE(assigner.consume(context.get(), table.get())); } +TEST(IdAssignerTest, AssignIdsWithIdMap) { + std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() + .addSimple("android:attr/foo") + .addSimple("android:attr/bar") + .setPackageId("android", 0x01) + .build(); + + std::unique_ptr<IAaptContext> context = test::ContextBuilder().build(); + std::unordered_map<ResourceName, ResourceId> idMap = { + { test::parseNameOrDie("android:attr/foo"), ResourceId(0x01010002) } }; + IdAssigner assigner(&idMap); + ASSERT_TRUE(assigner.consume(context.get(), table.get())); + ASSERT_TRUE(verifyIds(table.get())); + Maybe<ResourceTable::SearchResult> result = table->findResource( + test::parseNameOrDie("android:attr/foo")); + AAPT_ASSERT_TRUE(result); + + const ResourceTable::SearchResult& searchResult = result.value(); + EXPECT_EQ(make_value<uint8_t>(0x01), searchResult.package->id); + EXPECT_EQ(make_value<uint8_t>(0x01), searchResult.type->id); + EXPECT_EQ(make_value<uint16_t>(0x0002), searchResult.entry->id); +} + ::testing::AssertionResult verifyIds(ResourceTable* table) { std::set<uint8_t> packageIds; for (auto& package : table->packages) { |