diff options
author | Haamed Gheibi <haamed@google.com> | 2022-03-09 12:05:14 -0800 |
---|---|---|
committer | Weijie Wang <quic_weijiew@quicinc.com> | 2022-03-15 15:38:25 +0800 |
commit | 12bb6d3cbf05cea529a165917c7430af607056f2 (patch) | |
tree | ff322630f9716306236ca70ecae1f265ae2aa2c6 /libs/androidfw/tests/LoadedArsc_test.cpp | |
parent | a42412b7fc93a0eb852d8bf1a4d001f7df7f43b3 (diff) |
Merge SP2A.220305.013
Bug: 220074017
Change-Id: Idfdd94e902f656ac65a2a75dfdd199f6f85ba472
Diffstat (limited to 'libs/androidfw/tests/LoadedArsc_test.cpp')
-rw-r--r-- | libs/androidfw/tests/LoadedArsc_test.cpp | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/libs/androidfw/tests/LoadedArsc_test.cpp b/libs/androidfw/tests/LoadedArsc_test.cpp index f356c8130080..d214e2dfef7b 100644 --- a/libs/androidfw/tests/LoadedArsc_test.cpp +++ b/libs/androidfw/tests/LoadedArsc_test.cpp @@ -95,6 +95,38 @@ TEST(LoadedArscTest, LoadSparseEntryApp) { ASSERT_TRUE(LoadedPackage::GetEntry(type.type, entry_index).has_value()); } +TEST(LoadedArscTest, FindSparseEntryApp) { + std::string contents; + ASSERT_TRUE(ReadFileFromZipToString(GetTestDataPath() + "/sparse/sparse.apk", "resources.arsc", + &contents)); + + std::unique_ptr<const LoadedArsc> loaded_arsc = LoadedArsc::Load(contents.data(), + contents.length()); + ASSERT_THAT(loaded_arsc, NotNull()); + + const LoadedPackage* package = + loaded_arsc->GetPackageById(get_package_id(sparse::R::string::only_v26)); + ASSERT_THAT(package, NotNull()); + + const uint8_t type_index = get_type_id(sparse::R::string::only_v26) - 1; + const uint16_t entry_index = get_entry_id(sparse::R::string::only_v26); + + const TypeSpec* type_spec = package->GetTypeSpecByTypeIndex(type_index); + ASSERT_THAT(type_spec, NotNull()); + ASSERT_THAT(type_spec->type_entries.size(), Ge(1u)); + + // Ensure that AAPT2 sparsely encoded the v26 config as expected. + auto type_entry = std::find_if( + type_spec->type_entries.begin(), type_spec->type_entries.end(), + [](const TypeSpec::TypeEntry& x) { return x.config.sdkVersion == 26; }); + ASSERT_NE(type_entry, type_spec->type_entries.end()); + ASSERT_NE(type_entry->type->flags & ResTable_type::FLAG_SPARSE, 0); + + // Test fetching a resource with only sparsely encoded configs by name. + auto id = package->FindEntryByName(u"string", u"only_v26"); + ASSERT_EQ(id.value(), fix_package_id(sparse::R::string::only_v26, 0)); +} + TEST(LoadedArscTest, LoadSharedLibrary) { std::string contents; ASSERT_TRUE(ReadFileFromZipToString(GetTestDataPath() + "/lib_one/lib_one.apk", "resources.arsc", |