diff options
author | Adam Lesinski <adamlesinski@google.com> | 2014-11-17 12:17:16 -0800 |
---|---|---|
committer | Adam Lesinski <adamlesinski@google.com> | 2014-11-17 12:17:16 -0800 |
commit | 11bdd5b10b5f921b657283fa94463263171218d5 (patch) | |
tree | f439482e80559f310178bb050de770ca86fb0b23 /libs/androidfw | |
parent | a9a3e24835b08828aa252bf079067a5f810a0792 (diff) | |
parent | 06d8b7b8d216cbfcd4cd987649672a5856ccd797 (diff) | |
download | frameworks_base-11bdd5b10b5f921b657283fa94463263171218d5.zip frameworks_base-11bdd5b10b5f921b657283fa94463263171218d5.tar.gz frameworks_base-11bdd5b10b5f921b657283fa94463263171218d5.tar.bz2 |
Merge commit '06d8b7b8' into manualmerge
Conflicts:
core/jni/android_util_AssetManager.cpp
Change-Id: I77b72d0d3ec8184ccd97419e4c76b7d55b1a52ca
Diffstat (limited to 'libs/androidfw')
-rw-r--r-- | libs/androidfw/ResourceTypes.cpp | 10 | ||||
-rw-r--r-- | libs/androidfw/tests/Android.mk | 1 | ||||
-rw-r--r-- | libs/androidfw/tests/AttributeFinder_test.cpp | 111 |
3 files changed, 119 insertions, 3 deletions
diff --git a/libs/androidfw/ResourceTypes.cpp b/libs/androidfw/ResourceTypes.cpp index 39f175f..5d4e12f 100644 --- a/libs/androidfw/ResourceTypes.cpp +++ b/libs/androidfw/ResourceTypes.cpp @@ -1220,7 +1220,11 @@ uint32_t ResXMLParser::getAttributeNameResID(size_t idx) const { int32_t id = getAttributeNameID(idx); if (id >= 0 && (size_t)id < mTree.mNumResIds) { - return dtohl(mTree.mResIds[id]); + uint32_t resId = dtohl(mTree.mResIds[id]); + if (mTree.mDynamicRefTable != NULL) { + mTree.mDynamicRefTable->lookupResourceId(&resId); + } + return resId; } return 0; } @@ -6142,11 +6146,11 @@ status_t DynamicRefTable::lookupResourceId(uint32_t* resId) const { // Do a proper lookup. uint8_t translatedId = mLookupTable[packageId]; if (translatedId == 0) { - ALOGE("DynamicRefTable(0x%02x): No mapping for build-time package ID 0x%02x.", + ALOGV("DynamicRefTable(0x%02x): No mapping for build-time package ID 0x%02x.", (uint8_t)mAssignedPackageId, (uint8_t)packageId); for (size_t i = 0; i < 256; i++) { if (mLookupTable[i] != 0) { - ALOGE("e[0x%02x] -> 0x%02x", (uint8_t)i, mLookupTable[i]); + ALOGV("e[0x%02x] -> 0x%02x", (uint8_t)i, mLookupTable[i]); } } return UNKNOWN_ERROR; diff --git a/libs/androidfw/tests/Android.mk b/libs/androidfw/tests/Android.mk index dd45200..58b78b5 100644 --- a/libs/androidfw/tests/Android.mk +++ b/libs/androidfw/tests/Android.mk @@ -20,6 +20,7 @@ # ========================================================== LOCAL_PATH:= $(call my-dir) testFiles := \ + AttributeFinder_test.cpp \ ByteBucketArray_test.cpp \ Config_test.cpp \ ConfigLocale_test.cpp \ diff --git a/libs/androidfw/tests/AttributeFinder_test.cpp b/libs/androidfw/tests/AttributeFinder_test.cpp new file mode 100644 index 0000000..664709c --- /dev/null +++ b/libs/androidfw/tests/AttributeFinder_test.cpp @@ -0,0 +1,111 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include <androidfw/AttributeFinder.h> + +#include <gtest/gtest.h> + +using android::BackTrackingAttributeFinder; + +class MockAttributeFinder : public BackTrackingAttributeFinder<MockAttributeFinder, int> { +public: + MockAttributeFinder(const uint32_t* attrs, int len) + : BackTrackingAttributeFinder(0, len) { + mAttrs = new uint32_t[len]; + memcpy(mAttrs, attrs, sizeof(*attrs) * len); + } + + ~MockAttributeFinder() { + delete mAttrs; + } + + inline uint32_t getAttribute(const int index) const { + return mAttrs[index]; + } + +private: + uint32_t* mAttrs; +}; + +static const uint32_t sortedAttributes[] = { + 0x01010000, 0x01010001, 0x01010002, 0x01010004, + 0x02010001, 0x02010010, 0x7f010001 +}; + +static const uint32_t packageUnsortedAttributes[] = { + 0x02010001, 0x02010010, 0x01010000, 0x01010001, + 0x01010002, 0x01010004, 0x7f010001 +}; + +TEST(AttributeFinderTest, IteratesSequentially) { + const int end = sizeof(sortedAttributes) / sizeof(*sortedAttributes); + MockAttributeFinder finder(sortedAttributes, end); + + EXPECT_EQ(0, finder.find(0x01010000)); + EXPECT_EQ(1, finder.find(0x01010001)); + EXPECT_EQ(2, finder.find(0x01010002)); + EXPECT_EQ(3, finder.find(0x01010004)); + EXPECT_EQ(4, finder.find(0x02010001)); + EXPECT_EQ(5, finder.find(0x02010010)); + EXPECT_EQ(6, finder.find(0x7f010001)); + EXPECT_EQ(end, finder.find(0x7f010002)); +} + +TEST(AttributeFinderTest, PackagesAreOutOfOrder) { + const int end = sizeof(sortedAttributes) / sizeof(*sortedAttributes); + MockAttributeFinder finder(sortedAttributes, end); + + EXPECT_EQ(6, finder.find(0x7f010001)); + EXPECT_EQ(end, finder.find(0x7f010002)); + EXPECT_EQ(4, finder.find(0x02010001)); + EXPECT_EQ(5, finder.find(0x02010010)); + EXPECT_EQ(0, finder.find(0x01010000)); + EXPECT_EQ(1, finder.find(0x01010001)); + EXPECT_EQ(2, finder.find(0x01010002)); + EXPECT_EQ(3, finder.find(0x01010004)); +} + +TEST(AttributeFinderTest, SomeAttributesAreNotFound) { + const int end = sizeof(sortedAttributes) / sizeof(*sortedAttributes); + MockAttributeFinder finder(sortedAttributes, end); + + EXPECT_EQ(0, finder.find(0x01010000)); + EXPECT_EQ(1, finder.find(0x01010001)); + EXPECT_EQ(2, finder.find(0x01010002)); + EXPECT_EQ(end, finder.find(0x01010003)); + EXPECT_EQ(3, finder.find(0x01010004)); + EXPECT_EQ(end, finder.find(0x01010005)); + EXPECT_EQ(end, finder.find(0x01010006)); + EXPECT_EQ(4, finder.find(0x02010001)); + EXPECT_EQ(end, finder.find(0x02010002)); +} + +TEST(AttributeFinderTest, FindAttributesInPackageUnsortedAttributeList) { + const int end = sizeof(packageUnsortedAttributes) / sizeof(*packageUnsortedAttributes); + MockAttributeFinder finder(packageUnsortedAttributes, end); + + EXPECT_EQ(2, finder.find(0x01010000)); + EXPECT_EQ(3, finder.find(0x01010001)); + EXPECT_EQ(4, finder.find(0x01010002)); + EXPECT_EQ(end, finder.find(0x01010003)); + EXPECT_EQ(5, finder.find(0x01010004)); + EXPECT_EQ(end, finder.find(0x01010005)); + EXPECT_EQ(end, finder.find(0x01010006)); + EXPECT_EQ(0, finder.find(0x02010001)); + EXPECT_EQ(end, finder.find(0x02010002)); + EXPECT_EQ(1, finder.find(0x02010010)); + EXPECT_EQ(6, finder.find(0x7f010001)); +} |