summaryrefslogtreecommitdiff
path: root/tools/aapt2/compile/IdAssigner_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/aapt2/compile/IdAssigner_test.cpp')
-rw-r--r--tools/aapt2/compile/IdAssigner_test.cpp90
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) {