diff options
| author | 2017-01-23 12:58:11 -0800 | |
|---|---|---|
| committer | 2017-02-15 10:50:23 -0800 | |
| commit | d1ecd7af687bcad0f87c37fe33515ff6c5ea0f1d (patch) | |
| tree | 63822987507c52532481ca86333751e4fb329953 /libs/androidfw/tests | |
| parent | c535d122c6a58a152ff2581f936070c2695c45ba (diff) | |
AssetManager2: Various fixes
- Use FileMaps to open Assets (prevents closing of ApkAssets underlying
zip)
- Implement OpenDir and List methods
- Fix issue where DynamicRefTable wasn't properly constructed
Test: make libandroidfw_tests
Change-Id: Ib21a84e1114d028120744aa3bc1c6eb9d9399fa8
Diffstat (limited to 'libs/androidfw/tests')
| -rw-r--r-- | libs/androidfw/tests/ApkAssets_test.cpp | 40 | ||||
| -rw-r--r-- | libs/androidfw/tests/AssetManager2_test.cpp | 8 | ||||
| -rw-r--r-- | libs/androidfw/tests/data/basic/assets/uncompressed.txt | 2 | ||||
| -rw-r--r-- | libs/androidfw/tests/data/basic/basic.apk | bin | 3055 -> 3207 bytes | |||
| -rwxr-xr-x | libs/androidfw/tests/data/basic/build | 9 |
5 files changed, 54 insertions, 5 deletions
diff --git a/libs/androidfw/tests/ApkAssets_test.cpp b/libs/androidfw/tests/ApkAssets_test.cpp index 6b4a7199eba4..c85b0b98ca5e 100644 --- a/libs/androidfw/tests/ApkAssets_test.cpp +++ b/libs/androidfw/tests/ApkAssets_test.cpp @@ -16,6 +16,9 @@ #include "androidfw/ApkAssets.h" +#include "android-base/file.h" +#include "android-base/unique_fd.h" + #include "TestHelpers.h" #include "data/basic/R.h" @@ -51,4 +54,41 @@ TEST(ApkAssetsTest, LoadApkAsSharedLibrary) { EXPECT_TRUE(loaded_arsc->GetPackages()[0]->IsDynamic()); } +TEST(ApkAssetsTest, CreateAndDestroyAssetKeepsApkAssetsOpen) { + std::unique_ptr<const ApkAssets> loaded_apk = + ApkAssets::Load(GetTestDataPath() + "/basic/basic.apk"); + ASSERT_NE(nullptr, loaded_apk); + + { + std::unique_ptr<Asset> assets = loaded_apk->Open("res/layout/main.xml", Asset::ACCESS_BUFFER); + ASSERT_NE(nullptr, assets); + } + + { + std::unique_ptr<Asset> assets = loaded_apk->Open("res/layout/main.xml", Asset::ACCESS_BUFFER); + ASSERT_NE(nullptr, assets); + } +} + +TEST(ApkAssetsTest, OpenUncompressedAssetFd) { + std::unique_ptr<const ApkAssets> loaded_apk = + ApkAssets::Load(GetTestDataPath() + "/basic/basic.apk"); + ASSERT_NE(nullptr, loaded_apk); + + auto asset = loaded_apk->Open("assets/uncompressed.txt", Asset::ACCESS_UNKNOWN); + ASSERT_NE(nullptr, asset); + + off64_t start, length; + base::unique_fd fd(asset->openFileDescriptor(&start, &length)); + EXPECT_GE(fd.get(), 0); + + lseek64(fd.get(), start, SEEK_SET); + + std::string buffer; + buffer.resize(length); + ASSERT_TRUE(base::ReadFully(fd.get(), &*buffer.begin(), length)); + + EXPECT_EQ("This should be uncompressed.\n\n", buffer); +} + } // namespace android diff --git a/libs/androidfw/tests/AssetManager2_test.cpp b/libs/androidfw/tests/AssetManager2_test.cpp index 78fbb0f85f68..d8e5abfe8ce9 100644 --- a/libs/androidfw/tests/AssetManager2_test.cpp +++ b/libs/androidfw/tests/AssetManager2_test.cpp @@ -312,12 +312,12 @@ TEST_F(AssetManager2Test, ResolveReferenceToResource) { EXPECT_EQ(Res_value::TYPE_REFERENCE, value.dataType); EXPECT_EQ(basic::R::integer::ref2, value.data); - ResTable_ref last_ref; + uint32_t last_ref; cookie = assetmanager.ResolveReference(cookie, &value, &selected_config, &flags, &last_ref); ASSERT_NE(kInvalidCookie, cookie); EXPECT_EQ(Res_value::TYPE_INT_DEC, value.dataType); EXPECT_EQ(12000u, value.data); - EXPECT_EQ(basic::R::integer::ref2, last_ref.ident); + EXPECT_EQ(basic::R::integer::ref2, last_ref); } TEST_F(AssetManager2Test, ResolveReferenceToBag) { @@ -335,12 +335,12 @@ TEST_F(AssetManager2Test, ResolveReferenceToBag) { EXPECT_EQ(Res_value::TYPE_REFERENCE, value.dataType); EXPECT_EQ(basic::R::array::integerArray1, value.data); - ResTable_ref last_ref; + uint32_t last_ref; cookie = assetmanager.ResolveReference(cookie, &value, &selected_config, &flags, &last_ref); ASSERT_NE(kInvalidCookie, cookie); EXPECT_EQ(Res_value::TYPE_REFERENCE, value.dataType); EXPECT_EQ(basic::R::array::integerArray1, value.data); - EXPECT_EQ(basic::R::array::integerArray1, last_ref.ident); + EXPECT_EQ(basic::R::array::integerArray1, last_ref); } static bool IsConfigurationPresent(const std::set<ResTable_config>& configurations, diff --git a/libs/androidfw/tests/data/basic/assets/uncompressed.txt b/libs/androidfw/tests/data/basic/assets/uncompressed.txt new file mode 100644 index 000000000000..c3d39c5200c3 --- /dev/null +++ b/libs/androidfw/tests/data/basic/assets/uncompressed.txt @@ -0,0 +1,2 @@ +This should be uncompressed. + diff --git a/libs/androidfw/tests/data/basic/basic.apk b/libs/androidfw/tests/data/basic/basic.apk Binary files differindex 7ee6734e0d6a..0c17328e86b2 100644 --- a/libs/androidfw/tests/data/basic/basic.apk +++ b/libs/androidfw/tests/data/basic/basic.apk diff --git a/libs/androidfw/tests/data/basic/build b/libs/androidfw/tests/data/basic/build index af0fd8787f48..d619800d6fc5 100755 --- a/libs/androidfw/tests/data/basic/build +++ b/libs/androidfw/tests/data/basic/build @@ -19,4 +19,11 @@ set -e PATH_TO_FRAMEWORK_RES=${ANDROID_BUILD_TOP}/prebuilts/sdk/current/android.jar -aapt package -M AndroidManifest.xml -S res -I $PATH_TO_FRAMEWORK_RES --split hdpi --split xhdpi --split xxhdpi --split fr,de -F basic.apk -f +aapt package \ + -M AndroidManifest.xml \ + -S res \ + -A assets \ + -I $PATH_TO_FRAMEWORK_RES \ + --split hdpi --split xhdpi --split xxhdpi --split fr,de \ + -F basic.apk \ + -f |