Refactor aapt2 tests ResourceTable changes
This changes refactors tests to use the NewResourceBuilder class that makes it easier to construct resource entries. Bug: 183102797 Test: aapt2_tests Change-Id: I851f9fb99a003769f8df8c1876997eee0864822a
This commit is contained in:
parent
9634efb6f4
commit
1d008d1d2a
@ -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) {
|
||||
|
@ -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(),
|
||||
test::GetDiagnostics()));
|
||||
|
||||
EXPECT_TRUE(table.AddResource(
|
||||
test::ParseNameOrDie("android:string/ok"), config, "",
|
||||
test::ValueBuilder<Id>().SetSource("test/path/file.xml", 14u).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:attr/layout_width"))
|
||||
.SetValue(test::ValueBuilder<Id>().SetSource("test/path/file.xml", 10u).Build())
|
||||
.Build(),
|
||||
test::GetDiagnostics()));
|
||||
|
||||
EXPECT_TRUE(table.AddResource(
|
||||
NewResourceBuilder(test::ParseNameOrDie("android:attr/id"))
|
||||
.SetValue(test::ValueBuilder<Id>().SetSource("test/path/file.xml", 12u).Build())
|
||||
.Build(),
|
||||
test::GetDiagnostics()));
|
||||
|
||||
EXPECT_TRUE(table.AddResource(
|
||||
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);
|
||||
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()));
|
||||
}
|
||||
|
||||
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()));
|
||||
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()));
|
||||
|
||||
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);
|
||||
// Non-ambiguous query
|
||||
ASSERT_TRUE(table.AddResource(
|
||||
NewResourceBuilder(name).SetId(0x01010001).SetValue(std::make_unique<Id>()).Build(),
|
||||
test::GetDiagnostics()));
|
||||
}
|
||||
|
||||
} // namespace aapt
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -20,42 +20,40 @@
|
||||
|
||||
namespace aapt {
|
||||
|
||||
struct IdAssignerTests : public ::testing::Test {
|
||||
void SetUp() override {
|
||||
context = test::ContextBuilder().SetCompilationPackage("android").SetPackageId(0x01).Build();
|
||||
}
|
||||
std::unique_ptr<IAaptContext> context;
|
||||
};
|
||||
|
||||
::testing::AssertionResult VerifyIds(ResourceTable* table);
|
||||
|
||||
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();
|
||||
|
||||
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();
|
||||
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();
|
||||
|
||||
std::unique_ptr<IAaptContext> context = test::ContextBuilder().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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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();
|
||||
|
@ -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(test::ParseNameOrDie("com.app.a:string/styled"), ConfigDescription{}, {},
|
||||
util::make_unique<StyledString>(table->string_pool.MakeRef(style_string)),
|
||||
context->GetDiagnostics()));
|
||||
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: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_DEC, 123u),
|
||||
test::ParseConfigOrDie("land"))
|
||||
.Build(),
|
||||
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),
|
||||
|
@ -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),
|
||||
|
@ -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()
|
||||
|
@ -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),
|
||||
|
@ -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"))
|
||||
|
@ -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(),
|
||||
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/default.xml")).Build(), land)
|
||||
.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("land/tablet.xml")).Build(), land,
|
||||
"tablet")
|
||||
.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/default.xml")).Build(), port)
|
||||
.Build(),
|
||||
context->GetDiagnostics()));
|
||||
|
||||
ASSERT_TRUE(table.AddResource(
|
||||
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>{});
|
||||
|
@ -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",
|
||||
|
@ -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();
|
||||
|
||||
|
@ -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(
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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();
|
||||
|
Loading…
x
Reference in New Issue
Block a user