summaryrefslogtreecommitdiff
path: root/libs/androidfw/tests/DynamicRefTable_test.cpp
diff options
context:
space:
mode:
authorRyan Mitchell <rtmitchell@google.com>2018-08-22 11:22:54 -0700
committerRyan Mitchell <rtmitchell@google.com>2018-08-24 10:11:01 -0700
commitb9b540baf1d2dc028a12c0acba4dd01187c2e961 (patch)
treee395e3da86e5081755ef8a95c70e10bfcaea0739 /libs/androidfw/tests/DynamicRefTable_test.cpp
parent880b41cb009bce63e4fd4db1cb5070a5900ab87f (diff)
AFW: Lookup shared library resource ids
Shared libraries were failing to retrieve correct resource ids from the values of attributes in xml files. The packages of the shared ids were not changed from 0 to their runtime assigned package ids. Bug: 112776204 Test: atest FieldsClassificationTest#testGetAlgorithm Change-Id: I509bc7632f5ec3e9b644e590934e6cf569a4d938
Diffstat (limited to 'libs/androidfw/tests/DynamicRefTable_test.cpp')
-rw-r--r--libs/androidfw/tests/DynamicRefTable_test.cpp74
1 files changed, 74 insertions, 0 deletions
diff --git a/libs/androidfw/tests/DynamicRefTable_test.cpp b/libs/androidfw/tests/DynamicRefTable_test.cpp
new file mode 100644
index 000000000000..df44e343b2b4
--- /dev/null
+++ b/libs/androidfw/tests/DynamicRefTable_test.cpp
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2018 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/ResourceTypes.h"
+#include "utils/String8.h"
+
+#include "gtest/gtest.h"
+namespace android {
+
+TEST(DynamicRefTableTest, LookupSharedLibSelfReferences) {
+ // Shared library
+ DynamicRefTable shared_table(0x02, /* appAsLib */ false);
+ shared_table.addMapping(0x00, 0x02);
+ Res_value value;
+ value.dataType = Res_value::TYPE_REFERENCE;
+ value.data = 0x00010000;
+ ASSERT_EQ(shared_table.lookupResourceValue(&value), NO_ERROR);
+ EXPECT_EQ(value.data, 0x02010000);
+
+ // App loaded as a shared library
+ DynamicRefTable shared_app_table(0x02, /* appAsLib */ true);
+ shared_app_table.addMapping(0x7f, 0x02);
+ Res_value value2;
+ value2.dataType = Res_value::TYPE_REFERENCE;
+ value2.data = 0x7f010000;
+ ASSERT_EQ(shared_app_table.lookupResourceValue(&value2), NO_ERROR);
+ EXPECT_EQ(value2.data, 0x02010000);
+};
+
+TEST(DynamicRefTableTest, LookupDynamicReferences) {
+ // Shared library
+ DynamicRefTable shared_table(0x2, /* appAsLib */ false);
+ shared_table.addMapping(0x00, 0x02);
+ shared_table.addMapping(0x03, 0x05);
+ Res_value value;
+ value.dataType = Res_value::TYPE_DYNAMIC_REFERENCE;
+ value.data = 0x03010000;
+ ASSERT_EQ(shared_table.lookupResourceValue(&value), NO_ERROR);
+ EXPECT_EQ(value.data, 0x05010000);
+
+ // App loaded as a shared library
+ DynamicRefTable shared_app_table(0x2, /* appAsLib */ true);
+ shared_app_table.addMapping(0x03, 0x05);
+ shared_app_table.addMapping(0x7f, 0x2);
+ Res_value value2;
+ value2.dataType = Res_value::TYPE_DYNAMIC_REFERENCE;
+ value2.data = 0x03010000;
+ ASSERT_EQ(shared_app_table.lookupResourceValue(&value2), NO_ERROR);
+ EXPECT_EQ(value2.data, 0x05010000);
+
+ // Regular application
+ DynamicRefTable app_table(0x7f, /* appAsLib */ false);
+ app_table.addMapping(0x03, 0x05);
+ Res_value value3;
+ value3.dataType = Res_value::TYPE_REFERENCE;
+ value3.data = 0x03010000;
+ ASSERT_EQ(app_table.lookupResourceValue(&value3), NO_ERROR);
+ EXPECT_EQ(value3.data, 0x05010000);
+};
+
+} // namespace android \ No newline at end of file