summaryrefslogtreecommitdiff
path: root/tools/aapt2/process/SymbolTable_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/aapt2/process/SymbolTable_test.cpp')
-rw-r--r--tools/aapt2/process/SymbolTable_test.cpp68
1 files changed, 60 insertions, 8 deletions
diff --git a/tools/aapt2/process/SymbolTable_test.cpp b/tools/aapt2/process/SymbolTable_test.cpp
index fd8a5080278b..1f59d7034300 100644
--- a/tools/aapt2/process/SymbolTable_test.cpp
+++ b/tools/aapt2/process/SymbolTable_test.cpp
@@ -16,7 +16,15 @@
#include "process/SymbolTable.h"
+#include "SdkConstants.h"
+#include "format/binary/TableFlattener.h"
#include "test/Test.h"
+#include "util/BigBuffer.h"
+
+using ::testing::Eq;
+using ::testing::IsNull;
+using ::testing::Ne;
+using ::testing::NotNull;
namespace aapt {
@@ -30,13 +38,13 @@ TEST(ResourceTableSymbolSourceTest, FindSymbols) {
.Build();
ResourceTableSymbolSource symbol_source(table.get());
- EXPECT_NE(nullptr, symbol_source.FindByName(test::ParseNameOrDie("android:id/foo")));
- EXPECT_NE(nullptr, symbol_source.FindByName(test::ParseNameOrDie("android:id/bar")));
+ EXPECT_THAT(symbol_source.FindByName(test::ParseNameOrDie("android:id/foo")), NotNull());
+ EXPECT_THAT(symbol_source.FindByName(test::ParseNameOrDie("android:id/bar")), NotNull());
std::unique_ptr<SymbolTable::Symbol> s =
symbol_source.FindByName(test::ParseNameOrDie("android:attr/foo"));
- ASSERT_NE(nullptr, s);
- EXPECT_NE(nullptr, s->attribute);
+ ASSERT_THAT(s, NotNull());
+ EXPECT_THAT(s->attribute, NotNull());
}
TEST(ResourceTableSymbolSourceTest, FindPrivateAttrSymbol) {
@@ -49,8 +57,8 @@ TEST(ResourceTableSymbolSourceTest, FindPrivateAttrSymbol) {
ResourceTableSymbolSource symbol_source(table.get());
std::unique_ptr<SymbolTable::Symbol> s =
symbol_source.FindByName(test::ParseNameOrDie("android:attr/foo"));
- ASSERT_NE(nullptr, s);
- EXPECT_NE(nullptr, s->attribute);
+ ASSERT_THAT(s, NotNull());
+ EXPECT_THAT(s->attribute, NotNull());
}
TEST(SymbolTableTest, FindByName) {
@@ -64,8 +72,52 @@ TEST(SymbolTableTest, FindByName) {
SymbolTable symbol_table(&mangler);
symbol_table.AppendSource(util::make_unique<ResourceTableSymbolSource>(table.get()));
- EXPECT_NE(nullptr, symbol_table.FindByName(test::ParseNameOrDie("id/foo")));
- EXPECT_NE(nullptr, symbol_table.FindByName(test::ParseNameOrDie("com.android.lib:id/foo")));
+ EXPECT_THAT(symbol_table.FindByName(test::ParseNameOrDie("id/foo")), NotNull());
+ EXPECT_THAT(symbol_table.FindByName(test::ParseNameOrDie("com.android.lib:id/foo")), NotNull());
+}
+
+TEST(SymbolTableTest, FindByNameWhenSymbolIsMangledInResTable) {
+ using namespace android;
+
+ std::unique_ptr<IAaptContext> context =
+ test::ContextBuilder()
+ .SetCompilationPackage("com.android.app")
+ .SetPackageId(0x7f)
+ .SetPackageType(PackageType::kApp)
+ .SetMinSdkVersion(SDK_LOLLIPOP_MR1)
+ .SetNameManglerPolicy(NameManglerPolicy{"com.android.app"})
+ .Build();
+
+ // Create a ResourceTable with a mangled resource, simulating a static library being merged into
+ // the main application package.
+ std::unique_ptr<ResourceTable> table =
+ test::ResourceTableBuilder()
+ .AddSimple("com.android.app:id/" + NameMangler::MangleEntry("com.android.lib", "foo"),
+ ResourceId(0x7f020000))
+ .AddSimple("com.android.app:id/bar", ResourceId(0x7f020001))
+ .Build();
+
+ BigBuffer buffer(1024u);
+ TableFlattener flattener({}, &buffer);
+ ASSERT_TRUE(flattener.Consume(context.get(), table.get()));
+
+ std::unique_ptr<uint8_t[]> data = util::Copy(buffer);
+
+ // Construct the test AssetManager.
+ auto asset_manager_source = util::make_unique<AssetManagerSymbolSource>();
+ ResTable& res_table = const_cast<ResTable&>(
+ asset_manager_source->GetAssetManager()->getResources(false /*required*/));
+ ASSERT_THAT(res_table.add(data.get(), buffer.size()), Eq(NO_ERROR));
+
+ SymbolTable symbol_table(context->GetNameMangler());
+ symbol_table.AppendSource(std::move(asset_manager_source));
+
+ EXPECT_THAT(symbol_table.FindByName(test::ParseNameOrDie("com.android.lib:id/foo")), NotNull());
+ EXPECT_THAT(symbol_table.FindByName(test::ParseNameOrDie("com.android.app:id/bar")), NotNull());
+
+ EXPECT_THAT(symbol_table.FindByName(test::ParseNameOrDie("com.android.app:id/foo")), IsNull());
+ EXPECT_THAT(symbol_table.FindByName(test::ParseNameOrDie("com.android.lib:id/bar")), IsNull());
+ EXPECT_THAT(symbol_table.FindByName(test::ParseNameOrDie("com.android.other:id/foo")), IsNull());
}
} // namespace aapt