summaryrefslogtreecommitdiff
path: root/tools/aapt2/ResourceTable_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/aapt2/ResourceTable_test.cpp')
-rw-r--r--tools/aapt2/ResourceTable_test.cpp102
1 files changed, 95 insertions, 7 deletions
diff --git a/tools/aapt2/ResourceTable_test.cpp b/tools/aapt2/ResourceTable_test.cpp
index 1a1f73fa4bb9..7c28f07d0f66 100644
--- a/tools/aapt2/ResourceTable_test.cpp
+++ b/tools/aapt2/ResourceTable_test.cpp
@@ -242,21 +242,109 @@ TEST(ResourceTableTest, SetAllowNew) {
ASSERT_THAT(result.value().entry->allow_new.value().comment, StrEq("second"));
}
-TEST(ResourceTableTest, SetOverlayable) {
+TEST(ResourceTableTest, AddOverlayable) {
ResourceTable table;
const ResourceName name = test::ParseNameOrDie("android:string/foo");
Overlayable overlayable;
-
+ overlayable.policy = Overlayable::Policy::kProduct;
overlayable.comment = "first";
- ASSERT_TRUE(table.SetOverlayable(name, overlayable, test::GetDiagnostics()));
+ ASSERT_TRUE(table.AddOverlayable(name, overlayable, test::GetDiagnostics()));
Maybe<ResourceTable::SearchResult> result = table.FindResource(name);
ASSERT_TRUE(result);
- ASSERT_TRUE(result.value().entry->overlayable);
- ASSERT_THAT(result.value().entry->overlayable.value().comment, StrEq("first"));
+ ASSERT_THAT(result.value().entry->overlayable_declarations.size(), Eq(1));
+ ASSERT_THAT(result.value().entry->overlayable_declarations[0].comment, StrEq("first"));
+ ASSERT_THAT(result.value().entry->overlayable_declarations[0].policy,
+ Eq(Overlayable::Policy::kProduct));
+
+ Overlayable overlayable2;
+ overlayable2.comment = "second";
+ overlayable2.policy = Overlayable::Policy::kProductServices;
+ ASSERT_TRUE(table.AddOverlayable(name, overlayable2, test::GetDiagnostics()));
+ result = table.FindResource(name);
+ ASSERT_TRUE(result);
+ ASSERT_THAT(result.value().entry->overlayable_declarations.size(), Eq(2));
+ ASSERT_THAT(result.value().entry->overlayable_declarations[0].comment, StrEq("first"));
+ ASSERT_THAT(result.value().entry->overlayable_declarations[0].policy,
+ Eq(Overlayable::Policy::kProduct));
+ ASSERT_THAT(result.value().entry->overlayable_declarations[1].comment, StrEq("second"));
+ ASSERT_THAT(result.value().entry->overlayable_declarations[1].policy,
+ Eq(Overlayable::Policy::kProductServices));
+}
+
+TEST(ResourceTableTest, AddDuplicateOverlayableFail) {
+ ResourceTable table;
+ const ResourceName name = test::ParseNameOrDie("android:string/foo");
+
+ Overlayable overlayable;
+ overlayable.policy = Overlayable::Policy::kProduct;
+ ASSERT_TRUE(table.AddOverlayable(name, overlayable, test::GetDiagnostics()));
+
+ Overlayable overlayable2;
+ overlayable2.policy = Overlayable::Policy::kProduct;
+ ASSERT_FALSE(table.AddOverlayable(name, overlayable2, test::GetDiagnostics()));
+}
+
+TEST(ResourceTableTest, AddOverlayablePolicyAndNoneFirstFail) {
+ ResourceTable table;
+ const ResourceName name = test::ParseNameOrDie("android:string/foo");
+
+ ASSERT_TRUE(table.AddOverlayable(name, {}, test::GetDiagnostics()));
+
+ Overlayable overlayable2;
+ overlayable2.policy = Overlayable::Policy::kProduct;
+ ASSERT_FALSE(table.AddOverlayable(name, overlayable2, test::GetDiagnostics()));
+}
+
+TEST(ResourceTableTest, AddOverlayablePolicyAndNoneLastFail) {
+ ResourceTable table;
+ const ResourceName name = test::ParseNameOrDie("android:string/foo");
+
+ Overlayable overlayable;
+ overlayable.policy = Overlayable::Policy::kProduct;
+ ASSERT_TRUE(table.AddOverlayable(name, overlayable, test::GetDiagnostics()));
+
+ ASSERT_FALSE(table.AddOverlayable(name, {}, test::GetDiagnostics()));
+}
- overlayable.comment = "second";
- ASSERT_FALSE(table.SetOverlayable(name, overlayable, 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);
}
} // namespace aapt