diff options
-rw-r--r-- | tools/aapt2/ResourceParser_test.cpp | 16 | ||||
-rw-r--r-- | tools/aapt2/ResourceTable_test.cpp | 206 | ||||
-rw-r--r-- | tools/aapt2/cmd/Compile_test.cpp | 1 | ||||
-rw-r--r-- | tools/aapt2/cmd/Link_test.cpp | 8 | ||||
-rw-r--r-- | tools/aapt2/compile/IdAssigner_test.cpp | 185 | ||||
-rw-r--r-- | tools/aapt2/compile/PseudolocaleGenerator_test.cpp | 21 | ||||
-rw-r--r-- | tools/aapt2/format/binary/TableFlattener_test.cpp | 40 | ||||
-rw-r--r-- | tools/aapt2/format/proto/ProtoSerialize_test.cpp | 74 | ||||
-rw-r--r-- | tools/aapt2/java/JavaClassGenerator_test.cpp | 18 | ||||
-rw-r--r-- | tools/aapt2/java/ProguardRules_test.cpp | 6 | ||||
-rw-r--r-- | tools/aapt2/link/AutoVersioner_test.cpp | 1 | ||||
-rw-r--r-- | tools/aapt2/link/NoDefaultResourceRemover_test.cpp | 15 | ||||
-rw-r--r-- | tools/aapt2/link/ProductFilter_test.cpp | 77 | ||||
-rw-r--r-- | tools/aapt2/link/ReferenceLinker_test.cpp | 6 | ||||
-rw-r--r-- | tools/aapt2/link/TableMerger_test.cpp | 49 | ||||
-rw-r--r-- | tools/aapt2/split/TableSplitter_test.cpp | 26 | ||||
-rw-r--r-- | tools/aapt2/test/Builders.cpp | 36 | ||||
-rw-r--r-- | tools/aapt2/test/Builders.h | 2 |
18 files changed, 395 insertions, 392 deletions
diff --git a/tools/aapt2/ResourceParser_test.cpp b/tools/aapt2/ResourceParser_test.cpp index 9b70079a98c9..53bfa0b37475 100644 --- a/tools/aapt2/ResourceParser_test.cpp +++ b/tools/aapt2/ResourceParser_test.cpp @@ -831,25 +831,13 @@ TEST_F(ResourceParserTest, AutoIncrementIdsInPublicGroup) { Maybe<ResourceTable::SearchResult> result = table_.FindResource(test::ParseNameOrDie("attr/foo")); ASSERT_TRUE(result); - - ASSERT_TRUE(result.value().package->id); - ASSERT_TRUE(result.value().type->id); ASSERT_TRUE(result.value().entry->id); - ResourceId actual_id(result.value().package->id.value(), - result.value().type->id.value(), - result.value().entry->id.value()); - EXPECT_THAT(actual_id, Eq(ResourceId(0x01010040))); + EXPECT_THAT(result.value().entry->id.value(), Eq(ResourceId(0x01010040))); result = table_.FindResource(test::ParseNameOrDie("attr/bar")); ASSERT_TRUE(result); - - ASSERT_TRUE(result.value().package->id); - ASSERT_TRUE(result.value().type->id); ASSERT_TRUE(result.value().entry->id); - actual_id = ResourceId(result.value().package->id.value(), - result.value().type->id.value(), - result.value().entry->id.value()); - EXPECT_THAT(actual_id, Eq(ResourceId(0x01010041))); + EXPECT_THAT(result.value().entry->id.value(), Eq(ResourceId(0x01010041))); } TEST_F(ResourceParserTest, StrongestSymbolVisibilityWins) { diff --git a/tools/aapt2/ResourceTable_test.cpp b/tools/aapt2/ResourceTable_test.cpp index 9271a7e6bae1..38391c99f55a 100644 --- a/tools/aapt2/ResourceTable_test.cpp +++ b/tools/aapt2/ResourceTable_test.cpp @@ -37,31 +37,32 @@ namespace aapt { TEST(ResourceTableTest, FailToAddResourceWithBadName) { ResourceTable table; - EXPECT_FALSE(table.AddResource( - test::ParseNameOrDie("android:id/hey,there"), ConfigDescription{}, "", - test::ValueBuilder<Id>().SetSource("test.xml", 21u).Build(), - test::GetDiagnostics())); + EXPECT_FALSE( + table.AddResource(NewResourceBuilder(test::ParseNameOrDie("android:id/hey,there")).Build(), + test::GetDiagnostics())); - EXPECT_FALSE(table.AddResource( - test::ParseNameOrDie("android:id/hey:there"), ConfigDescription{}, "", - test::ValueBuilder<Id>().SetSource("test.xml", 21u).Build(), - test::GetDiagnostics())); + EXPECT_FALSE( + table.AddResource(NewResourceBuilder(test::ParseNameOrDie("android:id/hey:there")).Build(), + test::GetDiagnostics())); } TEST(ResourceTableTest, AddResourceWithWeirdNameWhenAddingMangledResources) { ResourceTable table; - EXPECT_TRUE(table.AddResourceMangled( - test::ParseNameOrDie("android:id/heythere "), ConfigDescription{}, "", - test::ValueBuilder<Id>().SetSource("test.xml", 21u).Build(), test::GetDiagnostics())); + EXPECT_TRUE( + table.AddResource(NewResourceBuilder(test::ParseNameOrDie("android:id/heythere ")) + .SetAllowMangled(true) + .Build(), + test::GetDiagnostics())); } TEST(ResourceTableTest, AddOneResource) { ResourceTable table; EXPECT_TRUE(table.AddResource( - test::ParseNameOrDie("android:attr/id"), ConfigDescription{}, "", - test::ValueBuilder<Id>().SetSource("test/path/file.xml", 23u).Build(), + NewResourceBuilder(test::ParseNameOrDie("android:attr/id")) + .SetValue(test::ValueBuilder<Id>().SetSource("test/path/file.xml", 23u).Build()) + .Build(), test::GetDiagnostics())); EXPECT_THAT(test::GetValue<Id>(&table, "android:attr/id"), NotNull()); @@ -70,32 +71,36 @@ TEST(ResourceTableTest, AddOneResource) { TEST(ResourceTableTest, AddMultipleResources) { ResourceTable table; - ConfigDescription config; ConfigDescription language_config; memcpy(language_config.language, "pl", sizeof(language_config.language)); EXPECT_TRUE(table.AddResource( - test::ParseNameOrDie("android:attr/layout_width"), config, "", - test::ValueBuilder<Id>().SetSource("test/path/file.xml", 10u).Build(), - test::GetDiagnostics())); - - EXPECT_TRUE(table.AddResource( - test::ParseNameOrDie("android:attr/id"), config, "", - test::ValueBuilder<Id>().SetSource("test/path/file.xml", 12u).Build(), + NewResourceBuilder(test::ParseNameOrDie("android:attr/layout_width")) + .SetValue(test::ValueBuilder<Id>().SetSource("test/path/file.xml", 10u).Build()) + .Build(), test::GetDiagnostics())); EXPECT_TRUE(table.AddResource( - test::ParseNameOrDie("android:string/ok"), config, "", - test::ValueBuilder<Id>().SetSource("test/path/file.xml", 14u).Build(), + NewResourceBuilder(test::ParseNameOrDie("android:attr/id")) + .SetValue(test::ValueBuilder<Id>().SetSource("test/path/file.xml", 12u).Build()) + .Build(), test::GetDiagnostics())); EXPECT_TRUE(table.AddResource( - test::ParseNameOrDie("android:string/ok"), language_config, "", - test::ValueBuilder<BinaryPrimitive>(android::Res_value{}) - .SetSource("test/path/file.xml", 20u) + NewResourceBuilder(test::ParseNameOrDie("android:string/ok")) + .SetValue(test::ValueBuilder<Id>().SetSource("test/path/file.xml", 14u).Build()) .Build(), test::GetDiagnostics())); + EXPECT_TRUE( + table.AddResource(NewResourceBuilder(test::ParseNameOrDie("android:string/ok")) + .SetValue(test::ValueBuilder<BinaryPrimitive>(android::Res_value{}) + .SetSource("test/path/file.xml", 20u) + .Build(), + language_config) + .Build(), + test::GetDiagnostics())); + EXPECT_THAT(test::GetValue<Id>(&table, "android:attr/layout_width"), NotNull()); EXPECT_THAT(test::GetValue<Id>(&table, "android:attr/id"), NotNull()); EXPECT_THAT(test::GetValue<Id>(&table, "android:string/ok"), NotNull()); @@ -104,17 +109,19 @@ TEST(ResourceTableTest, AddMultipleResources) { TEST(ResourceTableTest, OverrideWeakResourceValue) { ResourceTable table; - - ASSERT_TRUE(table.AddResource(test::ParseNameOrDie("android:attr/foo"), ConfigDescription{}, "", - test::AttributeBuilder().SetWeak(true).Build(), + ASSERT_TRUE(table.AddResource(NewResourceBuilder(test::ParseNameOrDie("android:attr/foo")) + .SetValue(test::AttributeBuilder().SetWeak(true).Build()) + .Build(), test::GetDiagnostics())); Attribute* attr = test::GetValue<Attribute>(&table, "android:attr/foo"); ASSERT_THAT(attr, NotNull()); EXPECT_TRUE(attr->IsWeak()); - ASSERT_TRUE(table.AddResource(test::ParseNameOrDie("android:attr/foo"), ConfigDescription{}, "", - util::make_unique<Attribute>(), test::GetDiagnostics())); + ASSERT_TRUE(table.AddResource(NewResourceBuilder(test::ParseNameOrDie("android:attr/foo")) + .SetValue(util::make_unique<Attribute>()) + .Build(), + test::GetDiagnostics())); attr = test::GetValue<Attribute>(&table, "android:attr/foo"); ASSERT_THAT(attr, NotNull()); @@ -130,23 +137,27 @@ TEST(ResourceTableTest, AllowCompatibleDuplicateAttributes) { Attribute attr_two(android::ResTable_map::TYPE_STRING | android::ResTable_map::TYPE_REFERENCE); attr_two.SetWeak(true); - ASSERT_TRUE(table.AddResource(name, ConfigDescription{}, "", - util::make_unique<Attribute>(attr_one), test::GetDiagnostics())); - ASSERT_TRUE(table.AddResource(name, ConfigDescription{}, "", - util::make_unique<Attribute>(attr_two), test::GetDiagnostics())); + ASSERT_TRUE(table.AddResource( + NewResourceBuilder(name).SetValue(util::make_unique<Attribute>(attr_one)).Build(), + test::GetDiagnostics())); + ASSERT_TRUE(table.AddResource( + NewResourceBuilder(name).SetValue(util::make_unique<Attribute>(attr_two)).Build(), + test::GetDiagnostics())); } TEST(ResourceTableTest, ProductVaryingValues) { ResourceTable table; + ASSERT_TRUE(table.AddResource( + NewResourceBuilder(test::ParseNameOrDie("android:string/foo")) + .SetValue(util::make_unique<Id>(), test::ParseConfigOrDie("land"), "tablet") + .Build(), + test::GetDiagnostics())); - EXPECT_TRUE(table.AddResource(test::ParseNameOrDie("android:string/foo"), - test::ParseConfigOrDie("land"), "tablet", - util::make_unique<Id>(), - test::GetDiagnostics())); - EXPECT_TRUE(table.AddResource(test::ParseNameOrDie("android:string/foo"), - test::ParseConfigOrDie("land"), "phone", - util::make_unique<Id>(), - test::GetDiagnostics())); + ASSERT_TRUE(table.AddResource( + NewResourceBuilder(test::ParseNameOrDie("android:string/foo")) + .SetValue(util::make_unique<Id>(), test::ParseConfigOrDie("land"), "phone") + .Build(), + test::GetDiagnostics())); EXPECT_THAT(test::GetValueForConfigAndProduct<Id>(&table, "android:string/foo",test::ParseConfigOrDie("land"), "tablet"), NotNull()); EXPECT_THAT(test::GetValueForConfigAndProduct<Id>(&table, "android:string/foo",test::ParseConfigOrDie("land"), "phone"), NotNull()); @@ -203,22 +214,26 @@ TEST(ResourceTableTest, SetVisibility) { Visibility visibility; visibility.level = Visibility::Level::kPrivate; visibility.comment = "private"; - ASSERT_TRUE(table.SetVisibility(name, visibility, test::GetDiagnostics())); + ASSERT_TRUE(table.AddResource(NewResourceBuilder(name).SetVisibility(visibility).Build(), + test::GetDiagnostics())); ASSERT_TRUE(VisibilityOfResource(table, name, Level::kPrivate, "private")); visibility.level = Visibility::Level::kUndefined; visibility.comment = "undefined"; - ASSERT_TRUE(table.SetVisibility(name, visibility, test::GetDiagnostics())); + ASSERT_TRUE(table.AddResource(NewResourceBuilder(name).SetVisibility(visibility).Build(), + test::GetDiagnostics())); ASSERT_TRUE(VisibilityOfResource(table, name, Level::kPrivate, "private")); visibility.level = Visibility::Level::kPublic; visibility.comment = "public"; - ASSERT_TRUE(table.SetVisibility(name, visibility, test::GetDiagnostics())); + ASSERT_TRUE(table.AddResource(NewResourceBuilder(name).SetVisibility(visibility).Build(), + test::GetDiagnostics())); ASSERT_TRUE(VisibilityOfResource(table, name, Level::kPublic, "public")); visibility.level = Visibility::Level::kPrivate; visibility.comment = "private"; - ASSERT_TRUE(table.SetVisibility(name, visibility, test::GetDiagnostics())); + ASSERT_TRUE(table.AddResource(NewResourceBuilder(name).SetVisibility(visibility).Build(), + test::GetDiagnostics())); ASSERT_TRUE(VisibilityOfResource(table, name, Level::kPublic, "public")); } @@ -230,14 +245,16 @@ TEST(ResourceTableTest, SetAllowNew) { Maybe<ResourceTable::SearchResult> result; allow_new.comment = "first"; - ASSERT_TRUE(table.SetAllowNew(name, allow_new, test::GetDiagnostics())); + ASSERT_TRUE(table.AddResource(NewResourceBuilder(name).SetAllowNew(allow_new).Build(), + test::GetDiagnostics())); result = table.FindResource(name); ASSERT_TRUE(result); ASSERT_TRUE(result.value().entry->allow_new); ASSERT_THAT(result.value().entry->allow_new.value().comment, StrEq("first")); allow_new.comment = "second"; - ASSERT_TRUE(table.SetAllowNew(name, allow_new, test::GetDiagnostics())); + ASSERT_TRUE(table.AddResource(NewResourceBuilder(name).SetAllowNew(allow_new).Build(), + test::GetDiagnostics())); result = table.FindResource(name); ASSERT_TRUE(result); ASSERT_TRUE(result.value().entry->allow_new); @@ -255,7 +272,8 @@ TEST(ResourceTableTest, SetOverlayable) { overlayable_item.source = Source("res/values/overlayable.xml", 42); const ResourceName name = test::ParseNameOrDie("android:string/foo"); - ASSERT_TRUE(table.SetOverlayable(name, overlayable_item, test::GetDiagnostics())); + ASSERT_TRUE(table.AddResource(NewResourceBuilder(name).SetOverlayable(overlayable_item).Build(), + test::GetDiagnostics())); Maybe<ResourceTable::SearchResult> search_result = table.FindResource(name); ASSERT_TRUE(search_result); @@ -280,17 +298,20 @@ TEST(ResourceTableTest, SetMultipleOverlayableResources) { auto group = std::make_shared<Overlayable>("Name", "overlay://theme"); OverlayableItem overlayable(group); overlayable.policies = PolicyFlags::PRODUCT_PARTITION; - ASSERT_TRUE(table.SetOverlayable(foo, overlayable, test::GetDiagnostics())); + ASSERT_TRUE(table.AddResource(NewResourceBuilder(foo).SetOverlayable(overlayable).Build(), + test::GetDiagnostics())); const ResourceName bar = test::ParseNameOrDie("android:string/bar"); OverlayableItem overlayable2(group); overlayable2.policies = PolicyFlags::PRODUCT_PARTITION; - ASSERT_TRUE(table.SetOverlayable(bar, overlayable2, test::GetDiagnostics())); + ASSERT_TRUE(table.AddResource(NewResourceBuilder(bar).SetOverlayable(overlayable2).Build(), + test::GetDiagnostics())); const ResourceName baz = test::ParseNameOrDie("android:string/baz"); OverlayableItem overlayable3(group); overlayable3.policies = PolicyFlags::VENDOR_PARTITION; - ASSERT_TRUE(table.SetOverlayable(baz, overlayable3, test::GetDiagnostics())); + ASSERT_TRUE(table.AddResource(NewResourceBuilder(baz).SetOverlayable(overlayable3).Build(), + test::GetDiagnostics())); } TEST(ResourceTableTest, SetOverlayableDifferentResourcesDifferentName) { @@ -299,12 +320,14 @@ TEST(ResourceTableTest, SetOverlayableDifferentResourcesDifferentName) { const ResourceName foo = test::ParseNameOrDie("android:string/foo"); OverlayableItem overlayable_item(std::make_shared<Overlayable>("Name", "overlay://theme")); overlayable_item.policies = PolicyFlags::PRODUCT_PARTITION; - ASSERT_TRUE(table.SetOverlayable(foo, overlayable_item, test::GetDiagnostics())); + ASSERT_TRUE(table.AddResource(NewResourceBuilder(foo).SetOverlayable(overlayable_item).Build(), + test::GetDiagnostics())); const ResourceName bar = test::ParseNameOrDie("android:string/bar"); OverlayableItem overlayable_item2(std::make_shared<Overlayable>("Name2", "overlay://theme")); overlayable_item2.policies = PolicyFlags::PRODUCT_PARTITION; - ASSERT_TRUE(table.SetOverlayable(bar, overlayable_item2, test::GetDiagnostics())); + ASSERT_TRUE(table.AddResource(NewResourceBuilder(bar).SetOverlayable(overlayable_item2).Build(), + test::GetDiagnostics())); } TEST(ResourceTableTest, SetOverlayableSameResourcesFail) { @@ -313,10 +336,12 @@ TEST(ResourceTableTest, SetOverlayableSameResourcesFail) { auto overlayable = std::make_shared<Overlayable>("Name", "overlay://theme"); OverlayableItem overlayable_item(overlayable); - ASSERT_TRUE(table.SetOverlayable(name, overlayable_item, test::GetDiagnostics())); + ASSERT_TRUE(table.AddResource(NewResourceBuilder(name).SetOverlayable(overlayable_item).Build(), + test::GetDiagnostics())); OverlayableItem overlayable_item2(overlayable); - ASSERT_FALSE(table.SetOverlayable(name, overlayable_item2, test::GetDiagnostics())); + ASSERT_FALSE(table.AddResource(NewResourceBuilder(name).SetOverlayable(overlayable_item2).Build(), + test::GetDiagnostics())); } TEST(ResourceTableTest, SetOverlayableSameResourcesDifferentNameFail) { @@ -325,51 +350,38 @@ TEST(ResourceTableTest, SetOverlayableSameResourcesDifferentNameFail) { auto overlayable = std::make_shared<Overlayable>("Name", "overlay://theme"); OverlayableItem overlayable_item(overlayable); - ASSERT_TRUE(table.SetOverlayable(name, overlayable_item, test::GetDiagnostics())); + ASSERT_TRUE(table.AddResource(NewResourceBuilder(name).SetOverlayable(overlayable_item).Build(), + test::GetDiagnostics())); auto overlayable2 = std::make_shared<Overlayable>("Other", "overlay://theme"); OverlayableItem overlayable_item2(overlayable2); - ASSERT_FALSE(table.SetOverlayable(name, overlayable_item2, test::GetDiagnostics())); + ASSERT_FALSE(table.AddResource(NewResourceBuilder(name).SetOverlayable(overlayable_item2).Build(), + test::GetDiagnostics())); } -TEST(ResourceTableTest, AllowDuplictaeResourcesNames) { - ResourceTable table(/* validate_resources */ false); - - const ResourceName foo_name = test::ParseNameOrDie("android:bool/foo"); - ASSERT_TRUE(table.AddResourceWithId(foo_name, ResourceId(0x7f0100ff), ConfigDescription{} , "", - test::BuildPrimitive(android::Res_value::TYPE_INT_BOOLEAN, 0), - test::GetDiagnostics())); - ASSERT_TRUE(table.AddResourceWithId(foo_name, ResourceId(0x7f010100), ConfigDescription{} , "", - test::BuildPrimitive(android::Res_value::TYPE_INT_BOOLEAN, 1), - test::GetDiagnostics())); - - ASSERT_TRUE(table.SetVisibilityWithId(foo_name, Visibility{Visibility::Level::kPublic}, - ResourceId(0x7f0100ff), test::GetDiagnostics())); - ASSERT_TRUE(table.SetVisibilityWithId(foo_name, Visibility{Visibility::Level::kPrivate}, - ResourceId(0x7f010100), test::GetDiagnostics())); - - auto package = table.FindPackageById(0x7f); - ASSERT_THAT(package, NotNull()); - auto type = package->FindType(ResourceType::kBool); - ASSERT_THAT(type, NotNull()); - - auto entry1 = type->FindEntry("foo", 0x00ff); - ASSERT_THAT(entry1, NotNull()); - ASSERT_THAT(entry1->id, Eq(0x00ff)); - ASSERT_THAT(entry1->values[0], NotNull()); - ASSERT_THAT(entry1->values[0]->value, NotNull()); - ASSERT_THAT(ValueCast<BinaryPrimitive>(entry1->values[0]->value.get()), NotNull()); - ASSERT_THAT(ValueCast<BinaryPrimitive>(entry1->values[0]->value.get())->value.data, Eq(0u)); - ASSERT_THAT(entry1->visibility.level, Visibility::Level::kPublic); - - auto entry2 = type->FindEntry("foo", 0x0100); - ASSERT_THAT(entry2, NotNull()); - ASSERT_THAT(entry2->id, Eq(0x0100)); - ASSERT_THAT(entry2->values[0], NotNull()); - ASSERT_THAT(entry1->values[0]->value, NotNull()); - ASSERT_THAT(ValueCast<BinaryPrimitive>(entry2->values[0]->value.get()), NotNull()); - ASSERT_THAT(ValueCast<BinaryPrimitive>(entry2->values[0]->value.get())->value.data, Eq(1u)); - ASSERT_THAT(entry2->visibility.level, Visibility::Level::kPrivate); +TEST(ResourceTableTest, ConflictingIds) { + ResourceTable table; + const ResourceName name = test::ParseNameOrDie("android:string/foo"); + ASSERT_TRUE(table.AddResource(NewResourceBuilder(name).SetId(0x01010000).Build(), + test::GetDiagnostics())); + ASSERT_FALSE(table.AddResource(NewResourceBuilder(name).SetId(0x01010001).Build(), + test::GetDiagnostics())); +} + +TEST(ResourceTableTest, ConflictingIdsCreateEntry) { + ResourceTable table; + const ResourceName name = test::ParseNameOrDie("android:string/foo"); + ASSERT_TRUE(table.AddResource( + NewResourceBuilder(name).SetId(0x01010000, OnIdConflict::CREATE_ENTRY).Build(), + test::GetDiagnostics())); + ASSERT_TRUE(table.AddResource( + NewResourceBuilder(name).SetId(0x01010001, OnIdConflict::CREATE_ENTRY).Build(), + test::GetDiagnostics())); + + // Non-ambiguous query + ASSERT_TRUE(table.AddResource( + NewResourceBuilder(name).SetId(0x01010001).SetValue(std::make_unique<Id>()).Build(), + test::GetDiagnostics())); } } // namespace aapt diff --git a/tools/aapt2/cmd/Compile_test.cpp b/tools/aapt2/cmd/Compile_test.cpp index 8cbd998f2ae2..89757134f3a7 100644 --- a/tools/aapt2/cmd/Compile_test.cpp +++ b/tools/aapt2/cmd/Compile_test.cpp @@ -217,6 +217,7 @@ static void AssertTranslations(CommandTestFixture *ctf, std::string file_name, }, compiled_files_dir, &diag)); std::unique_ptr<LoadedApk> apk = LoadedApk::LoadApkFromPath(out_apk, &diag); + ASSERT_NE(apk, nullptr); ResourceTable* table = apk->GetResourceTable(); ASSERT_NE(table, nullptr); diff --git a/tools/aapt2/cmd/Link_test.cpp b/tools/aapt2/cmd/Link_test.cpp index 73072a963d09..27cbe88fde38 100644 --- a/tools/aapt2/cmd/Link_test.cpp +++ b/tools/aapt2/cmd/Link_test.cpp @@ -47,6 +47,8 @@ TEST_F(LinkTest, RemoveRawXmlStrings) { // Load the binary xml tree android::ResXMLTree tree; std::unique_ptr<LoadedApk> apk = LoadedApk::LoadApkFromPath(out_apk, &diag); + ASSERT_THAT(apk, Ne(nullptr)); + std::unique_ptr<io::IData> data = OpenFileAsData(apk.get(), "res/xml/test.xml"); ASSERT_THAT(data, Ne(nullptr)); AssertLoadXml(apk.get(), data.get(), &tree); @@ -73,6 +75,8 @@ TEST_F(LinkTest, KeepRawXmlStrings) { // Load the binary xml tree android::ResXMLTree tree; std::unique_ptr<LoadedApk> apk = LoadedApk::LoadApkFromPath(out_apk, &diag); + ASSERT_THAT(apk, Ne(nullptr)); + std::unique_ptr<io::IData> data = OpenFileAsData(apk.get(), "res/xml/test.xml"); ASSERT_THAT(data, Ne(nullptr)); AssertLoadXml(apk.get(), data.get(), &tree); @@ -208,6 +212,8 @@ TEST_F(LinkTest, OverlayStyles) { ASSERT_TRUE(Link(link_args, compiled_files_dir, &diag)); std::unique_ptr<LoadedApk> apk = LoadedApk::LoadApkFromPath(out_apk, &diag); + ASSERT_THAT(apk, Ne(nullptr)); + const Style* actual_style = test::GetValue<Style>( apk->GetResourceTable(), std::string(kDefaultPackageName) + ":style/MyStyle"); ASSERT_NE(actual_style, nullptr); @@ -250,6 +256,8 @@ TEST_F(LinkTest, OverrideStylesInsteadOfOverlaying) { ASSERT_TRUE(Link(link_args, compiled_files_dir, &diag)); std::unique_ptr<LoadedApk> apk = LoadedApk::LoadApkFromPath(out_apk, &diag); + ASSERT_THAT(apk, Ne(nullptr)); + const Style* actual_style = test::GetValue<Style>( apk->GetResourceTable(), std::string(kDefaultPackageName) + ":style/MyStyle"); ASSERT_NE(actual_style, nullptr); diff --git a/tools/aapt2/compile/IdAssigner_test.cpp b/tools/aapt2/compile/IdAssigner_test.cpp index 5cff0048c062..0065a224bfa7 100644 --- a/tools/aapt2/compile/IdAssigner_test.cpp +++ b/tools/aapt2/compile/IdAssigner_test.cpp @@ -20,42 +20,40 @@ namespace aapt { -::testing::AssertionResult VerifyIds(ResourceTable* table); +struct IdAssignerTests : public ::testing::Test { + void SetUp() override { + context = test::ContextBuilder().SetCompilationPackage("android").SetPackageId(0x01).Build(); + } + std::unique_ptr<IAaptContext> context; +}; -TEST(IdAssignerTest, AssignIds) { - std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() - .AddSimple("android:attr/foo") - .AddSimple("android:attr/bar") - .AddSimple("android:id/foo") - .SetPackageId("android", 0x01) - .Build(); +::testing::AssertionResult VerifyIds(ResourceTable* table); - std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build(); +TEST_F(IdAssignerTests, AssignIds) { + auto table = test::ResourceTableBuilder() + .AddSimple("android:attr/foo") + .AddSimple("android:attr/bar") + .AddSimple("android:id/foo") + .Build(); IdAssigner assigner; ASSERT_TRUE(assigner.Consume(context.get(), table.get())); ASSERT_TRUE(VerifyIds(table.get())); } -TEST(IdAssignerTest, AssignIdsWithReservedIds) { - std::unique_ptr<ResourceTable> table = - test::ResourceTableBuilder() - .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(); - IdAssigner assigner; +TEST_F(IdAssignerTests, AssignIdsWithReservedIds) { + auto table = test::ResourceTableBuilder() + .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") + .Build(); + IdAssigner assigner; ASSERT_TRUE(assigner.Consume(context.get(), table.get())); ASSERT_TRUE(VerifyIds(table.get())); @@ -65,12 +63,12 @@ TEST(IdAssignerTest, AssignIdsWithReservedIds) { maybe_result = table->FindResource(test::ParseNameOrDie("android:dimen/two")); ASSERT_TRUE(maybe_result); - EXPECT_EQ(make_value<uint8_t>(2), maybe_result.value().type->id); + EXPECT_EQ(make_value<ResourceId>(0x01020000), maybe_result.value().entry->id); maybe_result = table->FindResource(test::ParseNameOrDie("android:integer/three")); ASSERT_TRUE(maybe_result); - EXPECT_EQ(make_value<uint8_t>(3), maybe_result.value().type->id); + EXPECT_EQ(make_value<ResourceId>(0x01030000), maybe_result.value().entry->id); // Expect to bypass the reserved 0x0104XXXX IDs and use the next 0x0105XXXX // IDs. @@ -78,103 +76,126 @@ TEST(IdAssignerTest, AssignIdsWithReservedIds) { maybe_result = table->FindResource(test::ParseNameOrDie("android:string/five")); ASSERT_TRUE(maybe_result); - EXPECT_EQ(make_value<uint8_t>(5), maybe_result.value().type->id); + EXPECT_EQ(make_value<ResourceId>(0x01050000), maybe_result.value().entry->id); // Expect to fill in the gaps between 0x01040000 and 0x01040006. maybe_result = table->FindResource(test::ParseNameOrDie("android:attr/bar")); ASSERT_TRUE(maybe_result); - EXPECT_EQ(make_value<uint16_t>(1), maybe_result.value().entry->id); + EXPECT_EQ(make_value<ResourceId>(0x01040001), maybe_result.value().entry->id); maybe_result = table->FindResource(test::ParseNameOrDie("android:attr/baz")); ASSERT_TRUE(maybe_result); - EXPECT_EQ(make_value<uint16_t>(2), maybe_result.value().entry->id); + EXPECT_EQ(make_value<ResourceId>(0x01040002), maybe_result.value().entry->id); } -TEST(IdAssignerTest, FailWhenNonUniqueIdsAssigned) { - std::unique_ptr<ResourceTable> table = - test::ResourceTableBuilder() - .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(); +TEST_F(IdAssignerTests, FailWhenNonUniqueIdsAssigned) { + auto table = test::ResourceTableBuilder() + .AddSimple("android:attr/foo", ResourceId(0x01040006)) + .AddSimple("android:attr/bar", ResourceId(0x01040006)) + .Build(); IdAssigner assigner; - 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(); +TEST_F(IdAssignerTests, AssignIdsWithIdMap) { + auto table = test::ResourceTableBuilder() + .AddSimple("android:attr/foo") + .AddSimple("android:attr/bar") + .Build(); std::unordered_map<ResourceName, ResourceId> id_map = { {test::ParseNameOrDie("android:attr/foo"), ResourceId(0x01010002)}}; IdAssigner assigner(&id_map); ASSERT_TRUE(assigner.Consume(context.get(), table.get())); ASSERT_TRUE(VerifyIds(table.get())); - Maybe<ResourceTable::SearchResult> result = - table->FindResource(test::ParseNameOrDie("android:attr/foo")); + auto result = table->FindResource(test::ParseNameOrDie("android:attr/foo")); ASSERT_TRUE(result); const ResourceTable::SearchResult& search_result = result.value(); - EXPECT_EQ(make_value<uint8_t>(0x01), search_result.package->id); - EXPECT_EQ(make_value<uint8_t>(0x01), search_result.type->id); - EXPECT_EQ(make_value<uint16_t>(0x0002), search_result.entry->id); + EXPECT_EQ(make_value<ResourceId>(0x01010002), search_result.entry->id); +} + +TEST_F(IdAssignerTests, UseAllEntryIds) { + ResourceTable table; + const size_t max_entry_id = std::numeric_limits<uint16_t>::max(); + for (size_t i = 0; i <= max_entry_id; i++) { + ASSERT_TRUE( + table.AddResource(NewResourceBuilder("android:attr/res" + std::to_string(i)).Build(), + context->GetDiagnostics())); + } + IdAssigner assigner; + ASSERT_TRUE(assigner.Consume(context.get(), &table)); +} + +TEST_F(IdAssignerTests, ExaustEntryIds) { + ResourceTable table; + const size_t max_entry_id = std::numeric_limits<uint16_t>::max() + 1u; + for (size_t i = 0; i <= max_entry_id; i++) { + ASSERT_TRUE( + table.AddResource(NewResourceBuilder("android:attr/res" + std::to_string(i)).Build(), + context->GetDiagnostics())); + } + IdAssigner assigner; + ASSERT_FALSE(assigner.Consume(context.get(), &table)); +} + +TEST_F(IdAssignerTests, ExaustEntryIdsLastIdIsPublic) { + ResourceTable table; + ASSERT_TRUE(table.AddResource(NewResourceBuilder("android:attr/res").SetId(0x0101ffff).Build(), + context->GetDiagnostics())); + const size_t max_entry_id = std::numeric_limits<uint16_t>::max(); + for (size_t i = 0; i <= max_entry_id; i++) { + ASSERT_TRUE( + table.AddResource(NewResourceBuilder("android:attr/res" + std::to_string(i)).Build(), + context->GetDiagnostics())); + } + IdAssigner assigner; + ASSERT_FALSE(assigner.Consume(context.get(), &table)); } ::testing::AssertionResult VerifyIds(ResourceTable* table) { std::set<uint8_t> package_ids; - for (auto& package : table->packages) { - if (!package->id) { - return ::testing::AssertionFailure() << "package " << package->name - << " has no ID"; + auto table_view = table->GetPartitionedView(); + for (auto& package : table_view.packages) { + if (!package.id) { + return ::testing::AssertionFailure() << "package " << package.name << " has no ID"; } - if (!package_ids.insert(package->id.value()).second) { - return ::testing::AssertionFailure() - << "package " << package->name << " has non-unique ID " << std::hex - << (int)package->id.value() << std::dec; + if (!package_ids.insert(package.id.value()).second) { + return ::testing::AssertionFailure() << "package " << package.name << " has non-unique ID " + << std::hex << (int)package.id.value() << std::dec; } } - for (auto& package : table->packages) { + for (auto& package : table_view.packages) { std::set<uint8_t> type_ids; - for (auto& type : package->types) { - if (!type->id) { - return ::testing::AssertionFailure() << "type " << type->type - << " of package " << package->name - << " has no ID"; + for (auto& type : package.types) { + if (!type.id) { + return ::testing::AssertionFailure() + << "type " << type.type << " of package " << package.name << " has no ID"; } - if (!type_ids.insert(type->id.value()).second) { + if (!type_ids.insert(type.id.value()).second) { return ::testing::AssertionFailure() - << "type " << type->type << " of package " << package->name - << " has non-unique ID " << std::hex << (int)type->id.value() - << std::dec; + << "type " << type.type << " of package " << package.name << " has non-unique ID " + << std::hex << (int)type.id.value() << std::dec; } } - for (auto& type : package->types) { - std::set<uint16_t> entry_ids; - for (auto& entry : type->entries) { + for (auto& type : package.types) { + std::set<ResourceId> entry_ids; + for (auto& entry : type.entries) { if (!entry->id) { return ::testing::AssertionFailure() - << "entry " << entry->name << " of type " << type->type - << " of package " << package->name << " has no ID"; + << "entry " << entry->name << " of type " << type.type << " of package " + << package.name << " has no ID"; } if (!entry_ids.insert(entry->id.value()).second) { return ::testing::AssertionFailure() - << "entry " << entry->name << " of type " << type->type - << " of package " << package->name << " has non-unique ID " - << std::hex << (int)entry->id.value() << std::dec; + << "entry " << entry->name << " of type " << type.type << " of package " + << package.name << " has non-unique ID " << std::hex << entry->id.value() + << std::dec; } } } diff --git a/tools/aapt2/compile/PseudolocaleGenerator_test.cpp b/tools/aapt2/compile/PseudolocaleGenerator_test.cpp index e816c86e20a8..432d7bfdad49 100644 --- a/tools/aapt2/compile/PseudolocaleGenerator_test.cpp +++ b/tools/aapt2/compile/PseudolocaleGenerator_test.cpp @@ -236,13 +236,14 @@ TEST(PseudolocaleGeneratorTest, PseudolocalizeOnlyDefaultConfigs) { TEST(PseudolocaleGeneratorTest, PluralsArePseudolocalized) { std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build(); - std::unique_ptr<ResourceTable> table = - test::ResourceTableBuilder().SetPackageId("com.pkg", 0x7F).Build(); + std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder().Build(); std::unique_ptr<Plural> plural = util::make_unique<Plural>(); plural->values = {util::make_unique<String>(table->string_pool.MakeRef("zero")), util::make_unique<String>(table->string_pool.MakeRef("one"))}; - ASSERT_TRUE(table->AddResource(test::ParseNameOrDie("com.pkg:plurals/foo"), ConfigDescription{}, - {}, std::move(plural), context->GetDiagnostics())); + ASSERT_TRUE(table->AddResource(NewResourceBuilder(test::ParseNameOrDie("com.pkg:plurals/foo")) + .SetValue(std::move(plural)) + .Build(), + context->GetDiagnostics())); std::unique_ptr<Plural> expected = util::make_unique<Plural>(); expected->values = {util::make_unique<String>(table->string_pool.MakeRef("[žéŕö one]")), util::make_unique<String>(table->string_pool.MakeRef("[öñé one]"))}; @@ -252,6 +253,7 @@ TEST(PseudolocaleGeneratorTest, PluralsArePseudolocalized) { const auto* actual = test::GetValueForConfig<Plural>(table.get(), "com.pkg:plurals/foo", test::ParseConfigOrDie("en-rXA")); + ASSERT_NE(nullptr, actual); EXPECT_TRUE(actual->Equals(expected.get())); } @@ -273,11 +275,14 @@ TEST(PseudolocaleGeneratorTest, RespectUntranslateableSections) { auto string = util::make_unique<String>(table->string_pool.MakeRef(original_style.str)); string->untranslatable_sections.push_back(UntranslatableSection{6u, 11u}); - ASSERT_TRUE(table->AddResource(test::ParseNameOrDie("android:string/foo"), ConfigDescription{}, - {} /* product */, std::move(styled_string), + ASSERT_TRUE(table->AddResource(NewResourceBuilder(test::ParseNameOrDie("android:string/foo")) + .SetValue(std::move(styled_string)) + .Build(), + context->GetDiagnostics())); + ASSERT_TRUE(table->AddResource(NewResourceBuilder(test::ParseNameOrDie("android:string/bar")) + .SetValue(std::move(string)) + .Build(), context->GetDiagnostics())); - ASSERT_TRUE(table->AddResource(test::ParseNameOrDie("android:string/bar"), ConfigDescription{}, - {} /* product */, std::move(string), context->GetDiagnostics())); } PseudolocaleGenerator generator; diff --git a/tools/aapt2/format/binary/TableFlattener_test.cpp b/tools/aapt2/format/binary/TableFlattener_test.cpp index f8b8a1c4e35b..f5fe5e30bf0f 100644 --- a/tools/aapt2/format/binary/TableFlattener_test.cpp +++ b/tools/aapt2/format/binary/TableFlattener_test.cpp @@ -155,7 +155,6 @@ class TableFlattenerTest : public ::testing::Test { TEST_F(TableFlattenerTest, FlattenFullyLinkedTable) { std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() - .SetPackageId("com.app.test", 0x7f) .AddSimple("com.app.test:id/one", ResourceId(0x7f020000)) .AddSimple("com.app.test:id/two", ResourceId(0x7f020001)) .AddValue("com.app.test:id/three", ResourceId(0x7f020002), @@ -204,7 +203,6 @@ TEST_F(TableFlattenerTest, FlattenFullyLinkedTable) { TEST_F(TableFlattenerTest, FlattenEntriesWithGapsInIds) { std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() - .SetPackageId("com.app.test", 0x7f) .AddSimple("com.app.test:id/one", ResourceId(0x7f020001)) .AddSimple("com.app.test:id/three", ResourceId(0x7f020003)) .Build(); @@ -225,7 +223,6 @@ TEST_F(TableFlattenerTest, FlattenMinMaxAttributes) { attr.max_int = 23; std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() - .SetPackageId("android", 0x01) .AddValue("android:attr/foo", ResourceId(0x01010000), util::make_unique<Attribute>(attr)) .Build(); @@ -248,7 +245,6 @@ TEST_F(TableFlattenerTest, FlattenArray) { 2u)); std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() - .SetPackageId("android", 0x01) .AddValue("android:array/foo", ResourceId(0x01010000), std::move(array)) .Build(); @@ -300,7 +296,6 @@ static std::unique_ptr<ResourceTable> BuildTableWithSparseEntries( IAaptContext* context, const ConfigDescription& sparse_config, float load) { std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() - .SetPackageId(context->GetCompilationPackage(), context->GetPackageId()) .Build(); // Add regular entries. @@ -311,15 +306,20 @@ static std::unique_ptr<ResourceTable> BuildTableWithSparseEntries( const ResourceId resid(context->GetPackageId(), 0x02, static_cast<uint16_t>(i)); const auto value = util::make_unique<BinaryPrimitive>(Res_value::TYPE_INT_DEC, static_cast<uint32_t>(i)); - CHECK(table->AddResourceWithId(name, resid, ConfigDescription::DefaultConfig(), "", - std::unique_ptr<Value>(value->Clone(nullptr)), - context->GetDiagnostics())); + CHECK(table->AddResource(NewResourceBuilder(name) + .SetId(resid) + .SetValue(std::unique_ptr<Value>(value->Clone(nullptr))) + .Build(), + context->GetDiagnostics())); // Every few entries, write out a sparse_config value. This will give us the desired load. if (i % stride == 0) { - CHECK(table->AddResourceWithId(name, resid, sparse_config, "", - std::unique_ptr<Value>(value->Clone(nullptr)), - context->GetDiagnostics())); + CHECK(table->AddResource( + NewResourceBuilder(name) + .SetId(resid) + .SetValue(std::unique_ptr<Value>(value->Clone(nullptr)), sparse_config) + .Build(), + context->GetDiagnostics())); } } return table; @@ -417,7 +417,6 @@ TEST_F(TableFlattenerTest, FlattenSharedLibrary) { test::ContextBuilder().SetCompilationPackage("lib").SetPackageId(0x00).Build(); std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() - .SetPackageId("lib", 0x00) .AddValue("lib:id/foo", ResourceId(0x00010000), util::make_unique<Id>()) .Build(); ResourceTable result; @@ -426,7 +425,7 @@ TEST_F(TableFlattenerTest, FlattenSharedLibrary) { Maybe<ResourceTable::SearchResult> search_result = result.FindResource(test::ParseNameOrDie("lib:id/foo")); ASSERT_TRUE(search_result); - EXPECT_EQ(0x00u, search_result.value().package->id.value()); + EXPECT_EQ(0x00u, search_result.value().entry->id.value().package_id()); auto iter = result.included_packages_.find(0x00); ASSERT_NE(result.included_packages_.end(), iter); @@ -438,7 +437,6 @@ TEST_F(TableFlattenerTest, FlattenSharedLibraryWithStyle) { test::ContextBuilder().SetCompilationPackage("lib").SetPackageId(0x00).Build(); std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() - .SetPackageId("lib", 0x00) .AddValue("lib:style/Theme", ResourceId(0x00030001), test::StyleBuilder() @@ -458,9 +456,7 @@ TEST_F(TableFlattenerTest, FlattenSharedLibraryWithStyle) { Maybe<ResourceTable::SearchResult> search_result = result.FindResource(test::ParseNameOrDie("lib:style/Theme")); ASSERT_TRUE(search_result); - EXPECT_EQ(0x00u, search_result.value().package->id.value()); - EXPECT_EQ(0x03u, search_result.value().type->id.value()); - EXPECT_EQ(0x01u, search_result.value().entry->id.value()); + EXPECT_EQ(0x00030001u, search_result.value().entry->id.value()); ASSERT_EQ(1u, search_result.value().entry->values.size()); Value* value = search_result.value().entry->values[0]->value.get(); Style* style = ValueCast<Style>(value); @@ -479,7 +475,6 @@ TEST_F(TableFlattenerTest, FlattenTableReferencingSharedLibraries) { test::ContextBuilder().SetCompilationPackage("app").SetPackageId(0x7f).Build(); std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() - .SetPackageId("app", 0x7f) .AddValue("app:id/foo", ResourceId(0x7f010000), test::BuildReference("lib_one:id/foo", ResourceId(0x02010000))) .AddValue("app:id/bar", ResourceId(0x7f010001), @@ -509,7 +504,6 @@ TEST_F(TableFlattenerTest, PackageWithNonStandardIdHasDynamicRefTable) { std::unique_ptr<IAaptContext> context = test::ContextBuilder().SetCompilationPackage("app").SetPackageId(0x80).Build(); std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() - .SetPackageId("app", 0x80) .AddSimple("app:id/foo", ResourceId(0x80010000)) .Build(); @@ -532,7 +526,6 @@ TEST_F(TableFlattenerTest, LongPackageNameIsTruncated) { test::ContextBuilder().SetCompilationPackage(kPackageName).SetPackageId(0x7f).Build(); std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() - .SetPackageId(kPackageName, 0x7f) .AddSimple(kPackageName + ":id/foo", ResourceId(0x7f010000)) .Build(); @@ -553,7 +546,6 @@ TEST_F(TableFlattenerTest, LongSharedLibraryPackageNameIsIllegal) { .Build(); std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() - .SetPackageId(kPackageName, 0x7f) .AddSimple(kPackageName + ":id/foo", ResourceId(0x7f010000)) .Build(); @@ -564,7 +556,6 @@ TEST_F(TableFlattenerTest, LongSharedLibraryPackageNameIsIllegal) { TEST_F(TableFlattenerTest, ObfuscatingResourceNamesNoNameCollapseExemptionsSucceeds) { std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() - .SetPackageId("com.app.test", 0x7f) .AddSimple("com.app.test:id/one", ResourceId(0x7f020000)) .AddSimple("com.app.test:id/two", ResourceId(0x7f020001)) .AddValue("com.app.test:id/three", ResourceId(0x7f020002), @@ -618,7 +609,6 @@ TEST_F(TableFlattenerTest, ObfuscatingResourceNamesNoNameCollapseExemptionsSucce TEST_F(TableFlattenerTest, ObfuscatingResourceNamesWithNameCollapseExemptionsSucceeds) { std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() - .SetPackageId("com.app.test", 0x7f) .AddSimple("com.app.test:id/one", ResourceId(0x7f020000)) .AddSimple("com.app.test:id/two", ResourceId(0x7f020001)) .AddValue("com.app.test:id/three", ResourceId(0x7f020002), @@ -680,7 +670,6 @@ TEST_F(TableFlattenerTest, FlattenOverlayable) { std::string name = "com.app.test:integer/overlayable"; std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() - .SetPackageId("com.app.test", 0x7f) .AddSimple(name, ResourceId(0x7f020000)) .SetOverlayable(name, overlayable_item) .Build(); @@ -717,7 +706,6 @@ TEST_F(TableFlattenerTest, FlattenMultipleOverlayablePolicies) { std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() - .SetPackageId("com.app.test", 0x7f) .AddSimple(name_zero, ResourceId(0x7f020000)) .SetOverlayable(name_zero, overlayable_item_zero) .AddSimple(name_one, ResourceId(0x7f020001)) @@ -780,7 +768,6 @@ TEST_F(TableFlattenerTest, FlattenMultipleOverlayable) { std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() - .SetPackageId("com.app.test", 0x7f) .AddSimple(name_zero, ResourceId(0x7f020000)) .SetOverlayable(name_zero, overlayable_item_zero) .AddSimple(name_one, ResourceId(0x7f020001)) @@ -842,7 +829,6 @@ TEST_F(TableFlattenerTest, FlattenOverlayableNoPolicyFails) { std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() - .SetPackageId("com.app.test", 0x7f) .AddSimple(name_zero, ResourceId(0x7f020000)) .SetOverlayable(name_zero, overlayable_item_zero) .Build(); diff --git a/tools/aapt2/format/proto/ProtoSerialize_test.cpp b/tools/aapt2/format/proto/ProtoSerialize_test.cpp index fe4c8aa065f1..ad5ed4db55b6 100644 --- a/tools/aapt2/format/proto/ProtoSerialize_test.cpp +++ b/tools/aapt2/format/proto/ProtoSerialize_test.cpp @@ -40,18 +40,20 @@ class MockFileCollection : public io::IFileCollection { MOCK_METHOD0(GetDirSeparator, char()); }; -ResourceEntry* GetEntry(ResourceTable* table, const ResourceNameRef& res_name, - uint32_t id) { - ResourceTablePackage* package = table->FindPackage(res_name.package); - ResourceTableType* type = package->FindType(res_name.type); - return type->FindEntry(res_name.entry, id); +ResourceEntry* GetEntry(ResourceTable* table, const ResourceNameRef& res_name) { + auto result = table->FindResource(res_name); + return (result) ? result.value().entry : nullptr; +} + +ResourceEntry* GetEntry(ResourceTable* table, const ResourceNameRef& res_name, ResourceId id) { + auto result = table->FindResource(res_name, id); + return (result) ? result.value().entry : nullptr; } TEST(ProtoSerializeTest, SerializeSinglePackage) { std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build(); std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() - .SetPackageId("com.app.a", 0x7f) .AddFileReference("com.app.a:layout/main", ResourceId(0x7f020000), "res/layout/main.xml") .AddReference("com.app.a:layout/other", ResourceId(0x7f020001), "com.app.a:layout/main") .AddString("com.app.a:string/text", {}, "hi") @@ -60,11 +62,11 @@ TEST(ProtoSerializeTest, SerializeSinglePackage) { true /*allow_new*/) .Build(); - Visibility public_symbol; - public_symbol.level = Visibility::Level::kPublic; - ASSERT_TRUE(table->SetVisibilityWithId(test::ParseNameOrDie("com.app.a:layout/main"), - public_symbol, ResourceId(0x7f020000), - context->GetDiagnostics())); + ASSERT_TRUE(table->AddResource(NewResourceBuilder(test::ParseNameOrDie("com.app.a:layout/main")) + .SetId(0x7f020000) + .SetVisibility({Visibility::Level::kPublic}) + .Build(), + context->GetDiagnostics())); Id* id = test::GetValue<Id>(table.get(), "com.app.a:id/foo"); ASSERT_THAT(id, NotNull()); @@ -72,25 +74,35 @@ TEST(ProtoSerializeTest, SerializeSinglePackage) { // Make a plural. std::unique_ptr<Plural> plural = util::make_unique<Plural>(); plural->values[Plural::One] = util::make_unique<String>(table->string_pool.MakeRef("one")); - ASSERT_TRUE(table->AddResource(test::ParseNameOrDie("com.app.a:plurals/hey"), ConfigDescription{}, - {}, std::move(plural), context->GetDiagnostics())); + ASSERT_TRUE(table->AddResource(NewResourceBuilder(test::ParseNameOrDie("com.app.a:plurals/hey")) + .SetValue(std::move(plural)) + .Build(), + context->GetDiagnostics())); // Make a styled string. StyleString style_string; style_string.str = "hello"; style_string.spans.push_back(Span{"b", 0u, 4u}); + ASSERT_TRUE(table->AddResource( + NewResourceBuilder(test::ParseNameOrDie("com.app.a:string/styled")) + .SetValue(util::make_unique<StyledString>(table->string_pool.MakeRef(style_string))) + .Build(), + context->GetDiagnostics())); + + // Make a resource with different products. ASSERT_TRUE( - table->AddResource(test::ParseNameOrDie("com.app.a:string/styled"), ConfigDescription{}, {}, - util::make_unique<StyledString>(table->string_pool.MakeRef(style_string)), + table->AddResource(NewResourceBuilder(test::ParseNameOrDie("com.app.a:integer/one")) + .SetValue(test::BuildPrimitive(android::Res_value::TYPE_INT_DEC, 123u), + test::ParseConfigOrDie("land")) + .Build(), context->GetDiagnostics())); - // Make a resource with different products. - ASSERT_TRUE(table->AddResource( - test::ParseNameOrDie("com.app.a:integer/one"), test::ParseConfigOrDie("land"), {}, - test::BuildPrimitive(android::Res_value::TYPE_INT_DEC, 123u), context->GetDiagnostics())); - ASSERT_TRUE(table->AddResource( - test::ParseNameOrDie("com.app.a:integer/one"), test::ParseConfigOrDie("land"), "tablet", - test::BuildPrimitive(android::Res_value::TYPE_INT_HEX, 321u), context->GetDiagnostics())); + ASSERT_TRUE( + table->AddResource(NewResourceBuilder(test::ParseNameOrDie("com.app.a:integer/one")) + .SetValue(test::BuildPrimitive(android::Res_value::TYPE_INT_HEX, 321u), + test::ParseConfigOrDie("land"), "tablet") + .Build(), + context->GetDiagnostics())); // Make a reference with both resource name and resource ID. // The reference should point to a resource outside of this table to test that both name and id @@ -98,16 +110,20 @@ TEST(ProtoSerializeTest, SerializeSinglePackage) { Reference expected_ref; expected_ref.name = test::ParseNameOrDie("android:layout/main"); expected_ref.id = ResourceId(0x01020000); - ASSERT_TRUE(table->AddResource( - test::ParseNameOrDie("com.app.a:layout/abc"), ConfigDescription::DefaultConfig(), {}, - util::make_unique<Reference>(expected_ref), context->GetDiagnostics())); + ASSERT_TRUE(table->AddResource(NewResourceBuilder(test::ParseNameOrDie("com.app.a:layout/abc")) + .SetValue(util::make_unique<Reference>(expected_ref)) + .Build(), + context->GetDiagnostics())); // Make an overlayable resource. OverlayableItem overlayable_item(std::make_shared<Overlayable>( "OverlayableName", "overlay://theme", Source("res/values/overlayable.xml", 40))); overlayable_item.source = Source("res/values/overlayable.xml", 42); - ASSERT_TRUE(table->SetOverlayable(test::ParseNameOrDie("com.app.a:integer/overlayable"), - overlayable_item, test::GetDiagnostics())); + ASSERT_TRUE( + table->AddResource(NewResourceBuilder(test::ParseNameOrDie("com.app.a:integer/overlayable")) + .SetOverlayable(overlayable_item) + .Build(), + context->GetDiagnostics())); pb::ResourceTable pb_table; SerializeTableToPb(*table, &pb_table, context->GetDiagnostics()); @@ -680,7 +696,6 @@ TEST(ProtoSerializeTest, CollapsingResourceNamesNoNameCollapseExemptionsSucceeds std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build(); std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() - .SetPackageId("com.app.test", 0x7f) .AddSimple("com.app.test:id/one", ResourceId(id_one_id)) .AddSimple("com.app.test:id/two", ResourceId(id_two_id)) .AddValue("com.app.test:id/three", ResourceId(id_three_id), @@ -714,7 +729,7 @@ TEST(ProtoSerializeTest, CollapsingResourceNamesNoNameCollapseExemptionsSucceeds ResourceName real_id_resource( "com.app.test", ResourceType::kId, "one"); - EXPECT_THAT(GetEntry(&new_table, real_id_resource, id_one_id), IsNull()); + EXPECT_THAT(GetEntry(&new_table, real_id_resource), IsNull()); ResourceName obfuscated_id_resource( "com.app.test", ResourceType::kId, "0_resource_name_obfuscated"); @@ -767,7 +782,6 @@ TEST(ProtoSerializeTest, ObfuscatingResourceNamesWithNameCollapseExemptionsSucce std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build(); std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() - .SetPackageId("com.app.test", 0x7f) .AddSimple("com.app.test:id/one", ResourceId(id_one_id)) .AddSimple("com.app.test:id/two", ResourceId(id_two_id)) .AddValue("com.app.test:id/three", ResourceId(id_three_id), diff --git a/tools/aapt2/java/JavaClassGenerator_test.cpp b/tools/aapt2/java/JavaClassGenerator_test.cpp index ec5b4151b1a6..8bb3ee93d312 100644 --- a/tools/aapt2/java/JavaClassGenerator_test.cpp +++ b/tools/aapt2/java/JavaClassGenerator_test.cpp @@ -34,7 +34,6 @@ namespace aapt { TEST(JavaClassGeneratorTest, FailWhenEntryIsJavaKeyword) { std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() - .SetPackageId("android", 0x01) .AddSimple("android:id/class", ResourceId(0x01020000)) .Build(); @@ -54,7 +53,6 @@ TEST(JavaClassGeneratorTest, FailWhenEntryIsJavaKeyword) { TEST(JavaClassGeneratorTest, TransformInvalidJavaIdentifierCharacter) { std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() - .SetPackageId("android", 0x01) .AddSimple("android:id/hey-man", ResourceId(0x01020000)) .AddValue("android:attr/cool.attr", ResourceId(0x01010000), test::AttributeBuilder().Build()) @@ -84,7 +82,6 @@ TEST(JavaClassGeneratorTest, TransformInvalidJavaIdentifierCharacter) { TEST(JavaClassGeneratorTest, CorrectPackageNameIsUsed) { std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() - .SetPackageId("android", 0x01) .AddSimple("android:id/one", ResourceId(0x01020000)) .AddSimple("android:id/com.foo$two", ResourceId(0x01020001)) .Build(); @@ -110,8 +107,6 @@ TEST(JavaClassGeneratorTest, CorrectPackageNameIsUsed) { TEST(JavaClassGeneratorTest, StyleableAttributesWithDifferentPackageName) { std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() - .SetPackageId("android", 0x01) - .SetPackageId("app", 0x7f) .AddValue("app:attr/foo", ResourceId(0x7f010000), test::AttributeBuilder().Build()) .AddValue("app:attr/bar", ResourceId(0x7f010001), @@ -159,7 +154,6 @@ TEST(JavaClassGeneratorTest, StyleableAttributesWithDifferentPackageName) { TEST(JavaClassGeneratorTest, AttrPrivateIsWrittenAsAttr) { std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() - .SetPackageId("android", 0x01) .AddSimple("android:attr/two", ResourceId(0x01010001)) .AddSimple("android:^attr-private/one", ResourceId(0x01010000)) .Build(); @@ -184,7 +178,6 @@ TEST(JavaClassGeneratorTest, OnlyWritePublicResources) { StdErrDiagnostics diag; std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() - .SetPackageId("android", 0x01) .AddSimple("android:id/one", ResourceId(0x01020000)) .AddSimple("android:id/two", ResourceId(0x01020001)) .AddSimple("android:id/three", ResourceId(0x01020002)) @@ -276,8 +269,6 @@ ResourceId>()), TEST(JavaClassGeneratorTest, EmitOtherPackagesAttributesInStyleable) { std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() - .SetPackageId("android", 0x01) - .SetPackageId("com.lib", 0x02) .AddValue("android:attr/bar", ResourceId(0x01010000), test::AttributeBuilder().Build()) .AddValue("com.lib:attr/bar", ResourceId(0x02010000), test::AttributeBuilder().Build()) .AddValue("android:styleable/foo", ResourceId(0x01030000), @@ -306,7 +297,6 @@ TEST(JavaClassGeneratorTest, EmitOtherPackagesAttributesInStyleable) { TEST(JavaClassGeneratorTest, CommentsForSimpleResourcesArePresent) { std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() - .SetPackageId("android", 0x01) .AddSimple("android:id/foo", ResourceId(0x01010000)) .Build(); test::GetValue<Id>(table.get(), "android:id/foo") @@ -346,7 +336,6 @@ TEST(JavaClassGeneratorTest, CommentsForStyleablesAndNestedAttributesArePresent) std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() - .SetPackageId("android", 0x01) .AddValue("android:attr/one", util::make_unique<Attribute>(attr)) .AddValue("android:styleable/Container", std::unique_ptr<Styleable>(styleable.Clone(nullptr))) @@ -384,7 +373,6 @@ TEST(JavaClassGeneratorTest, CommentsForStyleableHiddenAttributesAreNotPresent) std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() - .SetPackageId("android", 0x01) .AddValue("android:attr/one", util::make_unique<Attribute>(attr)) .AddValue("android:styleable/Container", std::unique_ptr<Styleable>(styleable.Clone(nullptr))) @@ -415,7 +403,6 @@ TEST(JavaClassGeneratorTest, CommentsForStyleableHiddenAttributesAreNotPresent) TEST(JavaClassGeneratorTest, StyleableAndIndicesAreColocated) { std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() - .SetPackageId("android", 0x01) .AddValue("android:attr/layout_gravity", util::make_unique<Attribute>()) .AddValue("android:attr/background", util::make_unique<Attribute>()) .AddValue("android:styleable/ActionBar", @@ -467,7 +454,6 @@ TEST(JavaClassGeneratorTest, CommentsForRemovedAttributesAreNotPresentInClass) { std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() - .SetPackageId("android", 0x01) .AddValue("android:attr/one", util::make_unique<Attribute>(attr)) .Build(); @@ -499,7 +485,6 @@ TEST(JavaClassGeneratorTest, CommentsForRemovedAttributesAreNotPresentInClass) { TEST(JavaClassGeneratorTest, GenerateOnResourcesLoadedCallbackForSharedLibrary) { std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() - .SetPackageId("android", 0x00) .AddValue("android:attr/foo", ResourceId(0x00010000), util::make_unique<Attribute>()) .AddValue("android:id/foo", ResourceId(0x00020000), util::make_unique<Id>()) .AddValue( @@ -536,7 +521,6 @@ TEST(JavaClassGeneratorTest, GenerateOnResourcesLoadedCallbackForSharedLibrary) TEST(JavaClassGeneratorTest, OnlyGenerateRText) { std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() - .SetPackageId("android", 0x01) .AddValue("android:attr/foo", ResourceId(0x01010000), util::make_unique<Attribute>()) .AddValue("android:styleable/hey.dude", ResourceId(0x01020000), test::StyleableBuilder() @@ -554,8 +538,6 @@ TEST(JavaClassGeneratorTest, OnlyGenerateRText) { TEST(JavaClassGeneratorTest, SortsDynamicAttributesAfterFrameworkAttributes) { std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() - .SetPackageId("android", 0x01) - .SetPackageId("lib", 0x00) .AddValue("android:attr/framework_attr", ResourceId(0x01010000), test::AttributeBuilder().Build()) .AddValue("lib:attr/dynamic_attr", ResourceId(0x00010000), diff --git a/tools/aapt2/java/ProguardRules_test.cpp b/tools/aapt2/java/ProguardRules_test.cpp index c7ae0b6a75cc..b7dfec3a6b28 100644 --- a/tools/aapt2/java/ProguardRules_test.cpp +++ b/tools/aapt2/java/ProguardRules_test.cpp @@ -247,8 +247,10 @@ TEST(ProguardRulesTest, IncludedLayoutRulesAreConditional) { ResourceTable table; StdErrDiagnostics errDiagnostics; - table.AddResource(bar_layout->file.name, ConfigDescription::DefaultConfig(), "", - util::make_unique<FileReference>(), &errDiagnostics); + table.AddResource(NewResourceBuilder(bar_layout->file.name) + .SetValue(util::make_unique<FileReference>()) + .Build(), + &errDiagnostics); std::unique_ptr<IAaptContext> context = test::ContextBuilder() diff --git a/tools/aapt2/link/AutoVersioner_test.cpp b/tools/aapt2/link/AutoVersioner_test.cpp index 1117472f104b..02fd00bba439 100644 --- a/tools/aapt2/link/AutoVersioner_test.cpp +++ b/tools/aapt2/link/AutoVersioner_test.cpp @@ -54,7 +54,6 @@ TEST(AutoVersionerTest, GenerateVersionedResourceWhenHigherVersionExists) { TEST(AutoVersionerTest, VersionStylesForTable) { std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() - .SetPackageId("app", 0x7f) .AddValue( "app:style/Foo", test::ParseConfigOrDie("v4"), ResourceId(0x7f020000), diff --git a/tools/aapt2/link/NoDefaultResourceRemover_test.cpp b/tools/aapt2/link/NoDefaultResourceRemover_test.cpp index d129c9ac8db7..3179fefc3fd0 100644 --- a/tools/aapt2/link/NoDefaultResourceRemover_test.cpp +++ b/tools/aapt2/link/NoDefaultResourceRemover_test.cpp @@ -21,10 +21,9 @@ namespace aapt { TEST(NoDefaultResourceRemoverTest, RemoveEntryWithNoDefaultAndOnlyLocales) { - std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build(); + std::unique_ptr<IAaptContext> context = test::ContextBuilder().SetPackageId(0x01).Build(); std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() - .SetPackageId("android", 0x01) .AddSimple("android:string/foo") .AddSimple("android:string/foo", test::ParseConfigOrDie("en-rGB")) .AddSimple("android:string/foo", test::ParseConfigOrDie("fr-rFR")) @@ -47,10 +46,10 @@ TEST(NoDefaultResourceRemoverTest, RemoveEntryWithNoDefaultAndOnlyLocales) { } TEST(NoDefaultResourceRemoverTest, KeepEntryWithLocalesAndDensities) { - std::unique_ptr<IAaptContext> context = test::ContextBuilder().SetMinSdkVersion(26).Build(); + std::unique_ptr<IAaptContext> context = + test::ContextBuilder().SetPackageId(0x01).SetMinSdkVersion(26).Build(); std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() - .SetPackageId("android", 0x01) .AddSimple("android:drawable/keep1", test::ParseConfigOrDie("mdpi")) // v4 .AddSimple("android:drawable/keep1", test::ParseConfigOrDie("en-rGB")) .AddSimple("android:drawable/keep1", test::ParseConfigOrDie("fr-rFR")) @@ -71,10 +70,10 @@ TEST(NoDefaultResourceRemoverTest, KeepEntryWithLocalesAndDensities) { } TEST(NoDefaultResourceRemoverTest, RemoveEntryWithLocalesAndDensitiesLowVersion) { - std::unique_ptr<IAaptContext> context = test::ContextBuilder().SetMinSdkVersion(3).Build(); + std::unique_ptr<IAaptContext> context = + test::ContextBuilder().SetPackageId(0x01).SetMinSdkVersion(3).Build(); std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() - .SetPackageId("android", 0x01) .AddSimple("android:drawable/remove1", test::ParseConfigOrDie("mdpi")) // v4 .AddSimple("android:drawable/remove1", test::ParseConfigOrDie("en-rGB")) .AddSimple("android:drawable/remove1", test::ParseConfigOrDie("fr-rFR")) @@ -87,10 +86,10 @@ TEST(NoDefaultResourceRemoverTest, RemoveEntryWithLocalesAndDensitiesLowVersion) } TEST(NoDefaultResourceRemoverTest, KeepEntryWithVersion) { - std::unique_ptr<IAaptContext> context = test::ContextBuilder().SetMinSdkVersion(8).Build(); + std::unique_ptr<IAaptContext> context = + test::ContextBuilder().SetPackageId(0x01).SetMinSdkVersion(8).Build(); std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() - .SetPackageId("android", 0x01) .AddSimple("android:drawable/keep1", test::ParseConfigOrDie("v8")) .AddSimple("android:drawable/keep1", test::ParseConfigOrDie("en-rGB")) .AddSimple("android:drawable/keep1", test::ParseConfigOrDie("fr-rFR")) diff --git a/tools/aapt2/link/ProductFilter_test.cpp b/tools/aapt2/link/ProductFilter_test.cpp index dd4767463711..4f78bbcece33 100644 --- a/tools/aapt2/link/ProductFilter_test.cpp +++ b/tools/aapt2/link/ProductFilter_test.cpp @@ -30,21 +30,29 @@ TEST(ProductFilterTest, SelectTwoProducts) { ResourceTable table; ASSERT_TRUE(table.AddResource( - test::ParseNameOrDie("android:string/one"), land, "", - test::ValueBuilder<Id>().SetSource(Source("land/default.xml")).Build(), + NewResourceBuilder(test::ParseNameOrDie("android:string/one")) + .SetValue(test::ValueBuilder<Id>().SetSource(Source("land/default.xml")).Build(), land) + .Build(), context->GetDiagnostics())); + ASSERT_TRUE(table.AddResource( - test::ParseNameOrDie("android:string/one"), land, "tablet", - test::ValueBuilder<Id>().SetSource(Source("land/tablet.xml")).Build(), + NewResourceBuilder(test::ParseNameOrDie("android:string/one")) + .SetValue(test::ValueBuilder<Id>().SetSource(Source("land/tablet.xml")).Build(), land, + "tablet") + .Build(), context->GetDiagnostics())); ASSERT_TRUE(table.AddResource( - test::ParseNameOrDie("android:string/one"), port, "", - test::ValueBuilder<Id>().SetSource(Source("port/default.xml")).Build(), + NewResourceBuilder(test::ParseNameOrDie("android:string/one")) + .SetValue(test::ValueBuilder<Id>().SetSource(Source("port/default.xml")).Build(), port) + .Build(), context->GetDiagnostics())); + ASSERT_TRUE(table.AddResource( - test::ParseNameOrDie("android:string/one"), port, "tablet", - test::ValueBuilder<Id>().SetSource(Source("port/tablet.xml")).Build(), + NewResourceBuilder(test::ParseNameOrDie("android:string/one")) + .SetValue(test::ValueBuilder<Id>().SetSource(Source("port/tablet.xml")).Build(), port, + "tablet") + .Build(), context->GetDiagnostics())); ProductFilter filter({"tablet"}); @@ -65,15 +73,17 @@ TEST(ProductFilterTest, SelectDefaultProduct) { ResourceTable table; ASSERT_TRUE(table.AddResource( - test::ParseNameOrDie("android:string/one"), - ConfigDescription::DefaultConfig(), "", - test::ValueBuilder<Id>().SetSource(Source("default.xml")).Build(), + NewResourceBuilder(test::ParseNameOrDie("android:string/one")) + .SetValue(test::ValueBuilder<Id>().SetSource(Source("default.xml")).Build()) + .Build(), context->GetDiagnostics())); + ASSERT_TRUE(table.AddResource( - test::ParseNameOrDie("android:string/one"), - ConfigDescription::DefaultConfig(), "tablet", - test::ValueBuilder<Id>().SetSource(Source("tablet.xml")).Build(), + NewResourceBuilder(test::ParseNameOrDie("android:string/one")) + .SetValue(test::ValueBuilder<Id>().SetSource(Source("tablet.xml")).Build(), {}, "tablet") + .Build(), context->GetDiagnostics())); + ; ProductFilter filter(std::unordered_set<std::string>{}); ASSERT_TRUE(filter.Consume(context.get(), &table)); @@ -91,19 +101,22 @@ TEST(ProductFilterTest, FailOnAmbiguousProduct) { ResourceTable table; ASSERT_TRUE(table.AddResource( - test::ParseNameOrDie("android:string/one"), - ConfigDescription::DefaultConfig(), "", - test::ValueBuilder<Id>().SetSource(Source("default.xml")).Build(), + NewResourceBuilder(test::ParseNameOrDie("android:string/one")) + .SetValue(test::ValueBuilder<Id>().SetSource(Source("default.xml")).Build()) + .Build(), context->GetDiagnostics())); + ASSERT_TRUE(table.AddResource( - test::ParseNameOrDie("android:string/one"), - ConfigDescription::DefaultConfig(), "tablet", - test::ValueBuilder<Id>().SetSource(Source("tablet.xml")).Build(), + NewResourceBuilder(test::ParseNameOrDie("android:string/one")) + .SetValue(test::ValueBuilder<Id>().SetSource(Source("tablet.xml")).Build(), {}, "tablet") + .Build(), context->GetDiagnostics())); + ASSERT_TRUE(table.AddResource( - test::ParseNameOrDie("android:string/one"), - ConfigDescription::DefaultConfig(), "no-sdcard", - test::ValueBuilder<Id>().SetSource(Source("no-sdcard.xml")).Build(), + NewResourceBuilder(test::ParseNameOrDie("android:string/one")) + .SetValue(test::ValueBuilder<Id>().SetSource(Source("no-sdcard.xml")).Build(), {}, + "no-sdcard") + .Build(), context->GetDiagnostics())); ProductFilter filter({"tablet", "no-sdcard"}); @@ -114,15 +127,17 @@ TEST(ProductFilterTest, FailOnMultipleDefaults) { std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build(); ResourceTable table; + ASSERT_TRUE( + table.AddResource(NewResourceBuilder(test::ParseNameOrDie("android:string/one")) + .SetValue(test::ValueBuilder<Id>().SetSource(Source(".xml")).Build()) + .Build(), + context->GetDiagnostics())); + ASSERT_TRUE(table.AddResource( - test::ParseNameOrDie("android:string/one"), - ConfigDescription::DefaultConfig(), "", - test::ValueBuilder<Id>().SetSource(Source(".xml")).Build(), - context->GetDiagnostics())); - ASSERT_TRUE(table.AddResource( - test::ParseNameOrDie("android:string/one"), - ConfigDescription::DefaultConfig(), "default", - test::ValueBuilder<Id>().SetSource(Source("default.xml")).Build(), + NewResourceBuilder(test::ParseNameOrDie("android:string/one")) + .SetValue(test::ValueBuilder<Id>().SetSource(Source("default.xml")).Build(), {}, + "default") + .Build(), context->GetDiagnostics())); ProductFilter filter(std::unordered_set<std::string>{}); diff --git a/tools/aapt2/link/ReferenceLinker_test.cpp b/tools/aapt2/link/ReferenceLinker_test.cpp index a31ce9496d0c..228c5bd743a0 100644 --- a/tools/aapt2/link/ReferenceLinker_test.cpp +++ b/tools/aapt2/link/ReferenceLinker_test.cpp @@ -28,7 +28,6 @@ namespace aapt { TEST(ReferenceLinkerTest, LinkSimpleReferences) { std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() - .SetPackageId("com.app.test", 0x7f) .AddReference("com.app.test:string/foo", ResourceId(0x7f020000), "com.app.test:string/bar") @@ -75,7 +74,6 @@ TEST(ReferenceLinkerTest, LinkSimpleReferences) { TEST(ReferenceLinkerTest, LinkStyleAttributes) { std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() - .SetPackageId("com.app.test", 0x7f) .AddValue("com.app.test:style/Theme", test::StyleBuilder() .SetParent("android:style/Theme.Material") @@ -155,7 +153,6 @@ TEST(ReferenceLinkerTest, LinkMangledReferencesAndAttributes) { std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() - .SetPackageId("com.app.test", 0x7f) .AddValue("com.app.test:style/Theme", ResourceId(0x7f020000), test::StyleBuilder() .AddItem("com.android.support:attr/foo", @@ -176,7 +173,6 @@ TEST(ReferenceLinkerTest, LinkMangledReferencesAndAttributes) { TEST(ReferenceLinkerTest, FailToLinkPrivateSymbols) { std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() - .SetPackageId("com.app.test", 0x7f) .AddReference("com.app.test:string/foo", ResourceId(0x7f020000), "android:string/hidden") .Build(); @@ -201,7 +197,6 @@ TEST(ReferenceLinkerTest, FailToLinkPrivateSymbols) { TEST(ReferenceLinkerTest, FailToLinkPrivateMangledSymbols) { std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() - .SetPackageId("com.app.test", 0x7f) .AddReference("com.app.test:string/foo", ResourceId(0x7f020000), "com.app.lib:string/hidden") .Build(); @@ -229,7 +224,6 @@ TEST(ReferenceLinkerTest, FailToLinkPrivateMangledSymbols) { TEST(ReferenceLinkerTest, FailToLinkPrivateStyleAttributes) { std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() - .SetPackageId("com.app.test", 0x7f) .AddValue("com.app.test:style/Theme", test::StyleBuilder() .AddItem("android:attr/hidden", diff --git a/tools/aapt2/link/TableMerger_test.cpp b/tools/aapt2/link/TableMerger_test.cpp index 69cf5ee7002b..4358fb565a7d 100644 --- a/tools/aapt2/link/TableMerger_test.cpp +++ b/tools/aapt2/link/TableMerger_test.cpp @@ -55,16 +55,13 @@ struct TableMergerTest : public ::testing::Test { TEST_F(TableMergerTest, SimpleMerge) { std::unique_ptr<ResourceTable> table_a = test::ResourceTableBuilder() - .SetPackageId("com.app.a", 0x7f) .AddReference("com.app.a:id/foo", "com.app.a:id/bar") .AddReference("com.app.a:id/bar", "com.app.b:id/foo") - .AddValue( - "com.app.a:styleable/view", - test::StyleableBuilder().AddItem("com.app.b:id/foo").Build()) + .AddValue("com.app.a:styleable/view", + test::StyleableBuilder().AddItem("com.app.b:id/foo").Build()) .Build(); std::unique_ptr<ResourceTable> table_b = test::ResourceTableBuilder() - .SetPackageId("com.app.b", 0x7f) .AddSimple("com.app.b:id/foo") .Build(); @@ -129,12 +126,10 @@ TEST_F(TableMergerTest, MergeFileReferences) { std::unique_ptr<ResourceTable> table_a = test::ResourceTableBuilder() - .SetPackageId("com.app.a", 0x7f) .AddFileReference("com.app.a:xml/file", "res/xml/file.xml", &file_a) .Build(); std::unique_ptr<ResourceTable> table_b = test::ResourceTableBuilder() - .SetPackageId("com.app.b", 0x7f) .AddFileReference("com.app.b:xml/file", "res/xml/file.xml", &file_b) .Build(); @@ -158,12 +153,10 @@ TEST_F(TableMergerTest, MergeFileReferences) { TEST_F(TableMergerTest, OverrideResourceWithOverlay) { std::unique_ptr<ResourceTable> base = test::ResourceTableBuilder() - .SetPackageId("", 0x00) .AddValue("bool/foo", ResourceUtils::TryParseBool("true")) .Build(); std::unique_ptr<ResourceTable> overlay = test::ResourceTableBuilder() - .SetPackageId("", 0x00) .AddValue("bool/foo", ResourceUtils::TryParseBool("false")) .Build(); @@ -194,14 +187,12 @@ TEST_F(TableMergerTest, DoNotOverrideResourceComment) { std::unique_ptr<ResourceTable> base = test::ResourceTableBuilder() - .SetPackageId("", 0x00) .AddValue("bool/foo", std::move(foo_original)) .AddValue("bool/bar", std::move(bar_original)) .Build(); std::unique_ptr<ResourceTable> overlay = test::ResourceTableBuilder() - .SetPackageId("", 0x00) .AddValue("bool/foo", std::move(foo_overlay)) .AddValue("bool/bar", std::move(bar_overlay)) .AddValue("bool/baz", std::move(baz_overlay)) @@ -226,12 +217,10 @@ TEST_F(TableMergerTest, DoNotOverrideResourceComment) { TEST_F(TableMergerTest, OverrideSameResourceIdsWithOverlay) { std::unique_ptr<ResourceTable> base = test::ResourceTableBuilder() - .SetPackageId("", 0x7f) .SetSymbolState("bool/foo", ResourceId(0x7f, 0x01, 0x0001), Visibility::Level::kPublic) .Build(); std::unique_ptr<ResourceTable> overlay = test::ResourceTableBuilder() - .SetPackageId("", 0x7f) .SetSymbolState("bool/foo", ResourceId(0x7f, 0x01, 0x0001), Visibility::Level::kPublic) .Build(); @@ -247,12 +236,10 @@ TEST_F(TableMergerTest, OverrideSameResourceIdsWithOverlay) { TEST_F(TableMergerTest, FailToOverrideConflictingTypeIdsWithOverlay) { std::unique_ptr<ResourceTable> base = test::ResourceTableBuilder() - .SetPackageId("", 0x7f) .SetSymbolState("bool/foo", ResourceId(0x7f, 0x01, 0x0001), Visibility::Level::kPublic) .Build(); std::unique_ptr<ResourceTable> overlay = test::ResourceTableBuilder() - .SetPackageId("", 0x7f) .SetSymbolState("bool/foo", ResourceId(0x7f, 0x02, 0x0001), Visibility::Level::kPublic) .Build(); @@ -268,12 +255,10 @@ TEST_F(TableMergerTest, FailToOverrideConflictingTypeIdsWithOverlay) { TEST_F(TableMergerTest, FailToOverrideConflictingEntryIdsWithOverlay) { std::unique_ptr<ResourceTable> base = test::ResourceTableBuilder() - .SetPackageId("", 0x7f) .SetSymbolState("bool/foo", ResourceId(0x7f, 0x01, 0x0001), Visibility::Level::kPublic) .Build(); std::unique_ptr<ResourceTable> overlay = test::ResourceTableBuilder() - .SetPackageId("", 0x7f) .SetSymbolState("bool/foo", ResourceId(0x7f, 0x01, 0x0002), Visibility::Level::kPublic) .Build(); @@ -289,12 +274,10 @@ TEST_F(TableMergerTest, FailToOverrideConflictingEntryIdsWithOverlay) { TEST_F(TableMergerTest, FailConflictingVisibility) { std::unique_ptr<ResourceTable> base = test::ResourceTableBuilder() - .SetPackageId("", 0x7f) .SetSymbolState("bool/foo", ResourceId(0x7f, 0x01, 0x0001), Visibility::Level::kPublic) .Build(); std::unique_ptr<ResourceTable> overlay = test::ResourceTableBuilder() - .SetPackageId("", 0x7f) .SetSymbolState("bool/foo", ResourceId(0x7f, 0x01, 0x0001), Visibility::Level::kPrivate) .Build(); @@ -318,11 +301,9 @@ TEST_F(TableMergerTest, FailConflictingVisibility) { } TEST_F(TableMergerTest, MergeAddResourceFromOverlay) { - std::unique_ptr<ResourceTable> table_a = - test::ResourceTableBuilder().SetPackageId("", 0x7f).Build(); + std::unique_ptr<ResourceTable> table_a = test::ResourceTableBuilder().Build(); std::unique_ptr<ResourceTable> table_b = test::ResourceTableBuilder() - .SetPackageId("", 0x7f) .SetSymbolState("bool/foo", {}, Visibility::Level::kUndefined, true /*allow new overlay*/) .AddValue("bool/foo", ResourceUtils::TryParseBool("true")) .Build(); @@ -337,11 +318,9 @@ TEST_F(TableMergerTest, MergeAddResourceFromOverlay) { } TEST_F(TableMergerTest, MergeAddResourceFromOverlayWithAutoAddOverlay) { - std::unique_ptr<ResourceTable> table_a = - test::ResourceTableBuilder().SetPackageId("", 0x7f).Build(); + std::unique_ptr<ResourceTable> table_a = test::ResourceTableBuilder().Build(); std::unique_ptr<ResourceTable> table_b = test::ResourceTableBuilder() - .SetPackageId("", 0x7f) .AddValue("bool/foo", ResourceUtils::TryParseBool("true")) .Build(); @@ -355,11 +334,9 @@ TEST_F(TableMergerTest, MergeAddResourceFromOverlayWithAutoAddOverlay) { } TEST_F(TableMergerTest, FailToMergeNewResourceWithoutAutoAddOverlay) { - std::unique_ptr<ResourceTable> table_a = - test::ResourceTableBuilder().SetPackageId("", 0x7f).Build(); + std::unique_ptr<ResourceTable> table_a = test::ResourceTableBuilder().Build(); std::unique_ptr<ResourceTable> table_b = test::ResourceTableBuilder() - .SetPackageId("", 0x7f) .AddValue("bool/foo", ResourceUtils::TryParseBool("true")) .Build(); @@ -375,7 +352,6 @@ TEST_F(TableMergerTest, FailToMergeNewResourceWithoutAutoAddOverlay) { TEST_F(TableMergerTest, OverlaidStyleablesAndStylesShouldBeMerged) { std::unique_ptr<ResourceTable> table_a = test::ResourceTableBuilder() - .SetPackageId("com.app.a", 0x7f) .AddValue("com.app.a:styleable/Foo", test::StyleableBuilder() .AddItem("com.app.a:attr/bar") @@ -391,7 +367,6 @@ TEST_F(TableMergerTest, OverlaidStyleablesAndStylesShouldBeMerged) { std::unique_ptr<ResourceTable> table_b = test::ResourceTableBuilder() - .SetPackageId("com.app.a", 0x7f) .AddValue("com.app.a:styleable/Foo", test::StyleableBuilder() .AddItem("com.app.a:attr/bat") .AddItem("com.app.a:attr/foo") @@ -441,7 +416,6 @@ TEST_F(TableMergerTest, OverlaidStyleablesAndStylesShouldBeMerged) { TEST_F(TableMergerTest, OverrideStyleInsteadOfOverlaying) { std::unique_ptr<ResourceTable> table_a = test::ResourceTableBuilder() - .SetPackageId("com.app.a", 0x7f) .AddValue( "com.app.a:styleable/MyWidget", test::StyleableBuilder().AddItem("com.app.a:attr/foo", ResourceId(0x1234)).Build()) @@ -452,7 +426,6 @@ TEST_F(TableMergerTest, OverrideStyleInsteadOfOverlaying) { .Build(); std::unique_ptr<ResourceTable> table_b = test::ResourceTableBuilder() - .SetPackageId("com.app.a", 0x7f) .AddValue( "com.app.a:styleable/MyWidget", test::StyleableBuilder().AddItem("com.app.a:attr/bar", ResourceId(0x5678)).Build()) @@ -494,13 +467,11 @@ TEST_F(TableMergerTest, SetOverlayable) { std::unique_ptr<ResourceTable> table_a = test::ResourceTableBuilder() - .SetPackageId("com.app.a", 0x7f) .SetOverlayable("bool/foo", overlayable_item) .Build(); std::unique_ptr<ResourceTable> table_b = test::ResourceTableBuilder() - .SetPackageId("com.app.a", 0x7f) .AddSimple("bool/foo") .Build(); @@ -527,7 +498,6 @@ TEST_F(TableMergerTest, SetOverlayableLater) { "overlay://customization"); std::unique_ptr<ResourceTable> table_a = test::ResourceTableBuilder() - .SetPackageId("com.app.a", 0x7f) .AddSimple("bool/foo") .Build(); @@ -536,7 +506,6 @@ TEST_F(TableMergerTest, SetOverlayableLater) { overlayable_item.policies |= PolicyFlags::SYSTEM_PARTITION; std::unique_ptr<ResourceTable> table_b = test::ResourceTableBuilder() - .SetPackageId("com.app.a", 0x7f) .SetOverlayable("bool/foo", overlayable_item) .Build(); @@ -565,7 +534,6 @@ TEST_F(TableMergerTest, SameResourceDifferentNameFail) { overlayable_item_first.policies |= PolicyFlags::PRODUCT_PARTITION; std::unique_ptr<ResourceTable> table_a = test::ResourceTableBuilder() - .SetPackageId("com.app.a", 0x7f) .SetOverlayable("bool/foo", overlayable_item_first) .Build(); @@ -575,7 +543,6 @@ TEST_F(TableMergerTest, SameResourceDifferentNameFail) { overlayable_item_second.policies |= PolicyFlags::PRODUCT_PARTITION; std::unique_ptr<ResourceTable> table_b = test::ResourceTableBuilder() - .SetPackageId("com.app.a", 0x7f) .SetOverlayable("bool/foo", overlayable_item_second) .Build(); @@ -594,7 +561,6 @@ TEST_F(TableMergerTest, SameResourceDifferentActorFail) { overlayable_item_first.policies |= PolicyFlags::PRODUCT_PARTITION; std::unique_ptr<ResourceTable> table_a = test::ResourceTableBuilder() - .SetPackageId("com.app.a", 0x7f) .SetOverlayable("bool/foo", overlayable_item_first) .Build(); @@ -604,7 +570,6 @@ TEST_F(TableMergerTest, SameResourceDifferentActorFail) { overlayable_item_second.policies |= PolicyFlags::PRODUCT_PARTITION; std::unique_ptr<ResourceTable> table_b = test::ResourceTableBuilder() - .SetPackageId("com.app.a", 0x7f) .SetOverlayable("bool/foo", overlayable_item_second) .Build(); @@ -623,7 +588,6 @@ TEST_F(TableMergerTest, SameResourceDifferentPoliciesFail) { overlayable_item_first.policies |= PolicyFlags::PRODUCT_PARTITION; std::unique_ptr<ResourceTable> table_a = test::ResourceTableBuilder() - .SetPackageId("com.app.a", 0x7f) .SetOverlayable("bool/foo", overlayable_item_first) .Build(); @@ -633,7 +597,6 @@ TEST_F(TableMergerTest, SameResourceDifferentPoliciesFail) { overlayable_item_second.policies |= PolicyFlags::SIGNATURE; std::unique_ptr<ResourceTable> table_b = test::ResourceTableBuilder() - .SetPackageId("com.app.a", 0x7f) .SetOverlayable("bool/foo", overlayable_item_second) .Build(); @@ -653,7 +616,6 @@ TEST_F(TableMergerTest, SameResourceSameOverlayable) { overlayable_item_first.policies |= PolicyFlags::PRODUCT_PARTITION; std::unique_ptr<ResourceTable> table_a = test::ResourceTableBuilder() - .SetPackageId("com.app.a", 0x7f) .SetOverlayable("bool/foo", overlayable_item_first) .Build(); @@ -661,7 +623,6 @@ TEST_F(TableMergerTest, SameResourceSameOverlayable) { overlayable_item_second.policies |= PolicyFlags::PRODUCT_PARTITION; std::unique_ptr<ResourceTable> table_b = test::ResourceTableBuilder() - .SetPackageId("com.app.a", 0x7f) .SetOverlayable("bool/foo", overlayable_item_second) .Build(); diff --git a/tools/aapt2/split/TableSplitter_test.cpp b/tools/aapt2/split/TableSplitter_test.cpp index cdf07386c70f..c6a2ff33979b 100644 --- a/tools/aapt2/split/TableSplitter_test.cpp +++ b/tools/aapt2/split/TableSplitter_test.cpp @@ -193,15 +193,23 @@ TEST(TableSplitterTest, SplitTableByConfigAndDensity) { ResourceTable table; const ResourceName foo = test::ParseNameOrDie("android:string/foo"); - ASSERT_TRUE(table.AddResource(foo, test::ParseConfigOrDie("land-hdpi"), {}, - util::make_unique<Id>(), - test::GetDiagnostics())); - ASSERT_TRUE(table.AddResource(foo, test::ParseConfigOrDie("land-xhdpi"), {}, - util::make_unique<Id>(), - test::GetDiagnostics())); - ASSERT_TRUE(table.AddResource(foo, test::ParseConfigOrDie("land-xxhdpi"), {}, - util::make_unique<Id>(), - test::GetDiagnostics())); + ASSERT_TRUE( + table.AddResource(NewResourceBuilder(foo) + .SetValue(util::make_unique<Id>(), test::ParseConfigOrDie("land-hdpi")) + .Build(), + test::GetDiagnostics())); + + ASSERT_TRUE( + table.AddResource(NewResourceBuilder(foo) + .SetValue(util::make_unique<Id>(), test::ParseConfigOrDie("land-xhdpi")) + .Build(), + test::GetDiagnostics())); + + ASSERT_TRUE(table.AddResource( + NewResourceBuilder(foo) + .SetValue(util::make_unique<Id>(), test::ParseConfigOrDie("land-xxhdpi")) + .Build(), + test::GetDiagnostics())); std::vector<SplitConstraints> constraints; constraints.push_back( diff --git a/tools/aapt2/test/Builders.cpp b/tools/aapt2/test/Builders.cpp index 9a93f2a7476c..4816596da487 100644 --- a/tools/aapt2/test/Builders.cpp +++ b/tools/aapt2/test/Builders.cpp @@ -34,13 +34,6 @@ using ::android::StringPiece; namespace aapt { namespace test { -ResourceTableBuilder& ResourceTableBuilder::SetPackageId(const StringPiece& package_name, - uint8_t id) { - ResourceTablePackage* package = table_->CreatePackage(package_name, id); - CHECK(package != nullptr); - return *this; -} - ResourceTableBuilder& ResourceTableBuilder::AddSimple(const StringPiece& name, const ResourceId& id) { return AddValue(name, id, util::make_unique<Id>()); @@ -118,8 +111,13 @@ ResourceTableBuilder& ResourceTableBuilder::AddValue(const StringPiece& name, const ResourceId& id, std::unique_ptr<Value> value) { ResourceName res_name = ParseNameOrDie(name); - CHECK(table_->AddResourceWithIdMangled(res_name, id, config, {}, std::move(value), - GetDiagnostics())); + NewResourceBuilder builder(res_name); + builder.SetValue(std::move(value), config).SetAllowMangled(true); + if (id.id != 0U) { + builder.SetId(id); + } + + CHECK(table_->AddResource(builder.Build(), GetDiagnostics())); return *this; } @@ -128,10 +126,13 @@ ResourceTableBuilder& ResourceTableBuilder::SetSymbolState(const StringPiece& na Visibility::Level level, bool allow_new) { ResourceName res_name = ParseNameOrDie(name); - Visibility visibility; - visibility.level = level; - CHECK(table_->SetVisibilityWithIdMangled(res_name, visibility, id, GetDiagnostics())); - CHECK(table_->SetAllowNewMangled(res_name, AllowNew{}, GetDiagnostics())); + NewResourceBuilder builder(res_name); + builder.SetVisibility({level}).SetAllowNew({}).SetAllowMangled(true); + if (id.id != 0U) { + builder.SetId(id); + } + + CHECK(table_->AddResource(builder.Build(), GetDiagnostics())); return *this; } @@ -139,7 +140,14 @@ ResourceTableBuilder& ResourceTableBuilder::SetOverlayable(const StringPiece& na const OverlayableItem& overlayable) { ResourceName res_name = ParseNameOrDie(name); - CHECK(table_->SetOverlayable(res_name, overlayable, GetDiagnostics())); + CHECK(table_->AddResource( + NewResourceBuilder(res_name).SetOverlayable(overlayable).SetAllowMangled(true).Build(), + GetDiagnostics())); + return *this; +} + +ResourceTableBuilder& ResourceTableBuilder::Add(NewResource&& res) { + CHECK(table_->AddResource(std::move(res), GetDiagnostics())); return *this; } diff --git a/tools/aapt2/test/Builders.h b/tools/aapt2/test/Builders.h index c971a1b47fd5..3ff955d65f24 100644 --- a/tools/aapt2/test/Builders.h +++ b/tools/aapt2/test/Builders.h @@ -39,7 +39,6 @@ class ResourceTableBuilder { public: ResourceTableBuilder() = default; - ResourceTableBuilder& SetPackageId(const android::StringPiece& package_name, uint8_t id); ResourceTableBuilder& AddSimple(const android::StringPiece& name, const ResourceId& id = {}); ResourceTableBuilder& AddSimple(const android::StringPiece& name, const android::ConfigDescription& config, @@ -75,6 +74,7 @@ class ResourceTableBuilder { Visibility::Level level, bool allow_new = false); ResourceTableBuilder& SetOverlayable(const android::StringPiece& name, const OverlayableItem& overlayable); + ResourceTableBuilder& Add(NewResource&& res); StringPool* string_pool(); std::unique_ptr<ResourceTable> Build(); |