summaryrefslogtreecommitdiff
path: root/libs/androidfw/tests
diff options
context:
space:
mode:
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
commit11bdd5b10b5f921b657283fa94463263171218d5 (patch)
treef439482e80559f310178bb050de770ca86fb0b23 /libs/androidfw/tests
parenta9a3e24835b08828aa252bf079067a5f810a0792 (diff)
parent06d8b7b8d216cbfcd4cd987649672a5856ccd797 (diff)
Merge commit '06d8b7b8' into manualmerge
Conflicts: core/jni/android_util_AssetManager.cpp Change-Id: I77b72d0d3ec8184ccd97419e4c76b7d55b1a52ca
Diffstat (limited to 'libs/androidfw/tests')
-rw-r--r--libs/androidfw/tests/Android.mk1
-rw-r--r--libs/androidfw/tests/AttributeFinder_test.cpp111
2 files changed, 112 insertions, 0 deletions
diff --git a/libs/androidfw/tests/Android.mk b/libs/androidfw/tests/Android.mk
index dd452009aa86..58b78b5f4469 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 000000000000..664709c4ae8c
--- /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));
+}