dex_file_test.cc revision 9b1a4f425711c26d0465d54a1cb95ec4a813322a
11fb8620309a4e94d11879aabc33364acfa733904Carl Shapiro// Copyright 2011 Google Inc. All Rights Reserved. 21fb8620309a4e94d11879aabc33364acfa733904Carl Shapiro 3578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom#include "dex_file.h" 41fb8620309a4e94d11879aabc33364acfa733904Carl Shapiro 590a3369d3b6238f1a4c9b19ca68978dab1c39bc4Elliott Hughes#include "UniquePtr.h" 690a3369d3b6238f1a4c9b19ca68978dab1c39bc4Elliott Hughes#include "common_test.h" 790a3369d3b6238f1a4c9b19ca68978dab1c39bc4Elliott Hughes 81fb8620309a4e94d11879aabc33364acfa733904Carl Shapironamespace art { 91fb8620309a4e94d11879aabc33364acfa733904Carl Shapiro 109f30b38d74990286ce27c3a45368f73dbe3638f0Brian Carlstromclass DexFileTest : public CommonTest {}; 119f30b38d74990286ce27c3a45368f73dbe3638f0Brian Carlstrom 129f30b38d74990286ce27c3a45368f73dbe3638f0Brian CarlstromTEST_F(DexFileTest, Open) { 1390a3369d3b6238f1a4c9b19ca68978dab1c39bc4Elliott Hughes UniquePtr<const DexFile> dex(OpenTestDexFile("Nested")); 1490a3369d3b6238f1a4c9b19ca68978dab1c39bc4Elliott Hughes ASSERT_TRUE(dex.get() != NULL); 157e49dca262933bc30cbc8b9f07cfc8cce2343389Brian Carlstrom} 167e49dca262933bc30cbc8b9f07cfc8cce2343389Brian Carlstrom 179f30b38d74990286ce27c3a45368f73dbe3638f0Brian Carlstrom// Although this is the same content logically as the Nested test dex, 189f30b38d74990286ce27c3a45368f73dbe3638f0Brian Carlstrom// the DexFileHeader test is sensitive to subtle changes in the 199f30b38d74990286ce27c3a45368f73dbe3638f0Brian Carlstrom// contents due to the checksum etc, so we embed the exact input here. 209f30b38d74990286ce27c3a45368f73dbe3638f0Brian Carlstrom// 219f30b38d74990286ce27c3a45368f73dbe3638f0Brian Carlstrom// class Nested { 229f30b38d74990286ce27c3a45368f73dbe3638f0Brian Carlstrom// class Inner { 239f30b38d74990286ce27c3a45368f73dbe3638f0Brian Carlstrom// } 249f30b38d74990286ce27c3a45368f73dbe3638f0Brian Carlstrom// } 259f30b38d74990286ce27c3a45368f73dbe3638f0Brian Carlstromstatic const char kRawDex[] = 269f30b38d74990286ce27c3a45368f73dbe3638f0Brian Carlstrom "ZGV4CjAzNQAQedgAe7gM1B/WHsWJ6L7lGAISGC7yjD2IAwAAcAAAAHhWNBIAAAAAAAAAAMQCAAAP" 279f30b38d74990286ce27c3a45368f73dbe3638f0Brian Carlstrom "AAAAcAAAAAcAAACsAAAAAgAAAMgAAAABAAAA4AAAAAMAAADoAAAAAgAAAAABAABIAgAAQAEAAK4B" 289f30b38d74990286ce27c3a45368f73dbe3638f0Brian Carlstrom "AAC2AQAAvQEAAM0BAADXAQAA+wEAABsCAAA+AgAAUgIAAF8CAABiAgAAZgIAAHMCAAB5AgAAgQIA" 299f30b38d74990286ce27c3a45368f73dbe3638f0Brian Carlstrom "AAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAkAAAAJAAAABgAAAAAAAAAKAAAABgAAAKgBAAAAAAEA" 309f30b38d74990286ce27c3a45368f73dbe3638f0Brian Carlstrom "DQAAAAAAAQAAAAAAAQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAIAAAAiAEAAKsCAAAA" 319f30b38d74990286ce27c3a45368f73dbe3638f0Brian Carlstrom "AAAAAQAAAAAAAAAFAAAAAAAAAAgAAACYAQAAuAIAAAAAAAACAAAAlAIAAJoCAAABAAAAowIAAAIA" 329f30b38d74990286ce27c3a45368f73dbe3638f0Brian Carlstrom "AgABAAAAiAIAAAYAAABbAQAAcBACAAAADgABAAEAAQAAAI4CAAAEAAAAcBACAAAADgBAAQAAAAAA" 339f30b38d74990286ce27c3a45368f73dbe3638f0Brian Carlstrom "AAAAAAAAAAAATAEAAAAAAAAAAAAAAAAAAAEAAAABAAY8aW5pdD4ABUlubmVyAA5MTmVzdGVkJElu" 349f30b38d74990286ce27c3a45368f73dbe3638f0Brian Carlstrom "bmVyOwAITE5lc3RlZDsAIkxkYWx2aWsvYW5ub3RhdGlvbi9FbmNsb3NpbmdDbGFzczsAHkxkYWx2" 359f30b38d74990286ce27c3a45368f73dbe3638f0Brian Carlstrom "aWsvYW5ub3RhdGlvbi9Jbm5lckNsYXNzOwAhTGRhbHZpay9hbm5vdGF0aW9uL01lbWJlckNsYXNz" 369f30b38d74990286ce27c3a45368f73dbe3638f0Brian Carlstrom "ZXM7ABJMamF2YS9sYW5nL09iamVjdDsAC05lc3RlZC5qYXZhAAFWAAJWTAALYWNjZXNzRmxhZ3MA" 379f30b38d74990286ce27c3a45368f73dbe3638f0Brian Carlstrom "BG5hbWUABnRoaXMkMAAFdmFsdWUAAgEABw4AAQAHDjwAAgIBDhgBAgMCCwQADBcBAgQBDhwBGAAA" 389f30b38d74990286ce27c3a45368f73dbe3638f0Brian Carlstrom "AQEAAJAgAICABNQCAAABAAGAgATwAgAAEAAAAAAAAAABAAAAAAAAAAEAAAAPAAAAcAAAAAIAAAAH" 399f30b38d74990286ce27c3a45368f73dbe3638f0Brian Carlstrom "AAAArAAAAAMAAAACAAAAyAAAAAQAAAABAAAA4AAAAAUAAAADAAAA6AAAAAYAAAACAAAAAAEAAAMQ" 409f30b38d74990286ce27c3a45368f73dbe3638f0Brian Carlstrom "AAACAAAAQAEAAAEgAAACAAAAVAEAAAYgAAACAAAAiAEAAAEQAAABAAAAqAEAAAIgAAAPAAAArgEA" 419f30b38d74990286ce27c3a45368f73dbe3638f0Brian Carlstrom "AAMgAAACAAAAiAIAAAQgAAADAAAAlAIAAAAgAAACAAAAqwIAAAAQAAABAAAAxAIAAA=="; 429f30b38d74990286ce27c3a45368f73dbe3638f0Brian Carlstrom 439f30b38d74990286ce27c3a45368f73dbe3638f0Brian CarlstromTEST_F(DexFileTest, Header) { 4433f741eefef8f8012f6c190b39355f2e0430d535Brian Carlstrom ScratchFile tmp; 4533f741eefef8f8012f6c190b39355f2e0430d535Brian Carlstrom UniquePtr<const DexFile> raw(OpenDexFileBase64(kRawDex, tmp.GetFilename())); 4690a3369d3b6238f1a4c9b19ca68978dab1c39bc4Elliott Hughes ASSERT_TRUE(raw.get() != NULL); 477e49dca262933bc30cbc8b9f07cfc8cce2343389Brian Carlstrom 48f615a61aef972cfc1dc23931ac2ed0da14c3fedbBrian Carlstrom const DexFile::Header& header = raw->GetHeader(); 497e49dca262933bc30cbc8b9f07cfc8cce2343389Brian Carlstrom // TODO: header.magic_ 507e49dca262933bc30cbc8b9f07cfc8cce2343389Brian Carlstrom EXPECT_EQ(0x00d87910U, header.checksum_); 517e49dca262933bc30cbc8b9f07cfc8cce2343389Brian Carlstrom // TODO: header.signature_ 527e49dca262933bc30cbc8b9f07cfc8cce2343389Brian Carlstrom EXPECT_EQ(904U, header.file_size_); 537e49dca262933bc30cbc8b9f07cfc8cce2343389Brian Carlstrom EXPECT_EQ(112U, header.header_size_); 547e49dca262933bc30cbc8b9f07cfc8cce2343389Brian Carlstrom EXPECT_EQ(0U, header.link_size_); 557e49dca262933bc30cbc8b9f07cfc8cce2343389Brian Carlstrom EXPECT_EQ(0U, header.link_off_); 567e49dca262933bc30cbc8b9f07cfc8cce2343389Brian Carlstrom EXPECT_EQ(15U, header.string_ids_size_); 577e49dca262933bc30cbc8b9f07cfc8cce2343389Brian Carlstrom EXPECT_EQ(112U, header.string_ids_off_); 587e49dca262933bc30cbc8b9f07cfc8cce2343389Brian Carlstrom EXPECT_EQ(7U, header.type_ids_size_); 597e49dca262933bc30cbc8b9f07cfc8cce2343389Brian Carlstrom EXPECT_EQ(172U, header.type_ids_off_); 607e49dca262933bc30cbc8b9f07cfc8cce2343389Brian Carlstrom EXPECT_EQ(2U, header.proto_ids_size_); 617e49dca262933bc30cbc8b9f07cfc8cce2343389Brian Carlstrom EXPECT_EQ(200U, header.proto_ids_off_); 627e49dca262933bc30cbc8b9f07cfc8cce2343389Brian Carlstrom EXPECT_EQ(1U, header.field_ids_size_); 637e49dca262933bc30cbc8b9f07cfc8cce2343389Brian Carlstrom EXPECT_EQ(224U, header.field_ids_off_); 647e49dca262933bc30cbc8b9f07cfc8cce2343389Brian Carlstrom EXPECT_EQ(3U, header.method_ids_size_); 657e49dca262933bc30cbc8b9f07cfc8cce2343389Brian Carlstrom EXPECT_EQ(232U, header.method_ids_off_); 667e49dca262933bc30cbc8b9f07cfc8cce2343389Brian Carlstrom EXPECT_EQ(2U, header.class_defs_size_); 677e49dca262933bc30cbc8b9f07cfc8cce2343389Brian Carlstrom EXPECT_EQ(256U, header.class_defs_off_); 687e49dca262933bc30cbc8b9f07cfc8cce2343389Brian Carlstrom EXPECT_EQ(584U, header.data_size_); 697e49dca262933bc30cbc8b9f07cfc8cce2343389Brian Carlstrom EXPECT_EQ(320U, header.data_off_); 707e49dca262933bc30cbc8b9f07cfc8cce2343389Brian Carlstrom} 717e49dca262933bc30cbc8b9f07cfc8cce2343389Brian Carlstrom 729f30b38d74990286ce27c3a45368f73dbe3638f0Brian CarlstromTEST_F(DexFileTest, ClassDefs) { 7390a3369d3b6238f1a4c9b19ca68978dab1c39bc4Elliott Hughes UniquePtr<const DexFile> raw(OpenTestDexFile("Nested")); 7490a3369d3b6238f1a4c9b19ca68978dab1c39bc4Elliott Hughes ASSERT_TRUE(raw.get() != NULL); 757e49dca262933bc30cbc8b9f07cfc8cce2343389Brian Carlstrom EXPECT_EQ(2U, raw->NumClassDefs()); 76578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom 77f615a61aef972cfc1dc23931ac2ed0da14c3fedbBrian Carlstrom const DexFile::ClassDef& c0 = raw->GetClassDef(0); 787e49dca262933bc30cbc8b9f07cfc8cce2343389Brian Carlstrom EXPECT_STREQ("LNested$Inner;", raw->GetClassDescriptor(c0)); 79578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom 80f615a61aef972cfc1dc23931ac2ed0da14c3fedbBrian Carlstrom const DexFile::ClassDef& c1 = raw->GetClassDef(1); 817e49dca262933bc30cbc8b9f07cfc8cce2343389Brian Carlstrom EXPECT_STREQ("LNested;", raw->GetClassDescriptor(c1)); 821fb8620309a4e94d11879aabc33364acfa733904Carl Shapiro} 831fb8620309a4e94d11879aabc33364acfa733904Carl Shapiro 840571d357843c53e042f370f5f2c2e9aa3fe803a9Ian RogersTEST_F(DexFileTest, CreateMethodSignature) { 850571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers UniquePtr<const DexFile> raw(OpenTestDexFile("CreateMethodSignature")); 8690a3369d3b6238f1a4c9b19ca68978dab1c39bc4Elliott Hughes ASSERT_TRUE(raw.get() != NULL); 87419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapiro EXPECT_EQ(1U, raw->NumClassDefs()); 88419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapiro 89419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapiro const DexFile::ClassDef& class_def = raw->GetClassDef(0); 900571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers ASSERT_STREQ("LCreateMethodSignature;", raw->GetClassDescriptor(class_def)); 91419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapiro 92419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapiro const byte* class_data = raw->GetClassData(class_def); 93419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapiro ASSERT_TRUE(class_data != NULL); 940571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers ClassDataItemIterator it(*raw.get(), class_data); 95419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapiro 960571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers EXPECT_EQ(1u, it.NumDirectMethods()); 97419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapiro 980571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers // Check the signature for the static initializer. 99419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapiro { 1000571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers ASSERT_EQ(1U, it.NumDirectMethods()); 1010571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers const DexFile::MethodId& method_id = raw->GetMethodId(it.GetMemberIndex()); 102419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapiro uint32_t proto_idx = method_id.proto_idx_; 1030571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers const char* name = raw->StringDataByIdx(method_id.name_idx_); 104419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapiro ASSERT_STREQ("<init>", name); 105419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapiro int32_t length; 1060571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers std::string signature(raw->CreateMethodSignature(proto_idx, &length)); 1070571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers ASSERT_EQ("()V", signature); 108419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapiro } 109419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapiro 110419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapiro // Check both virtual methods. 1110571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers ASSERT_EQ(2U, it.NumVirtualMethods()); 112419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapiro { 1130571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers it.Next(); 1140571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers const DexFile::MethodId& method_id = raw->GetMethodId(it.GetMemberIndex()); 115419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapiro 1160571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers const char* name = raw->StringDataByIdx(method_id.name_idx_); 117419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapiro ASSERT_STREQ("m1", name); 118419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapiro 119419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapiro uint32_t proto_idx = method_id.proto_idx_; 120419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapiro int32_t length; 1210571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers std::string signature(raw->CreateMethodSignature(proto_idx, &length)); 1220571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers ASSERT_EQ("(IDJLjava/lang/Object;)Ljava/lang/Float;", signature); 123419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapiro } 124419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapiro 125419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapiro { 1260571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers it.Next(); 1270571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers const DexFile::MethodId& method_id = raw->GetMethodId(it.GetMemberIndex()); 128419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapiro 1290571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers const char* name = raw->StringDataByIdx(method_id.name_idx_); 130419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapiro ASSERT_STREQ("m2", name); 131419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapiro 132419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapiro uint32_t proto_idx = method_id.proto_idx_; 133419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapiro int32_t length; 1340571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers std::string signature(raw->CreateMethodSignature(proto_idx, &length)); 1350571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers ASSERT_EQ("(ZSC)LCreateMethodSignature;", signature); 1360571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers } 1370571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers} 1380571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers 1390571d357843c53e042f370f5f2c2e9aa3fe803a9Ian RogersTEST_F(DexFileTest, FindStringId) { 1400571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers UniquePtr<const DexFile> raw(OpenTestDexFile("CreateMethodSignature")); 1410571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers ASSERT_TRUE(raw.get() != NULL); 1420571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers EXPECT_EQ(1U, raw->NumClassDefs()); 1430571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers 1440571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers const char* strings[] = { "LCreateMethodSignature;", "Ljava/lang/Float;", "Ljava/lang/Object;", 1450571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers "D", "I", "J", NULL }; 1460571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers for (size_t i = 0; strings[i] != NULL; i++) { 1470571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers const char* str = strings[i]; 1480571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers const DexFile::StringId* str_id = raw->FindStringId(str); 1490571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers const char* dex_str = raw->GetStringData(*str_id); 1500571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers EXPECT_STREQ(dex_str, str); 1510571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers } 1520571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers} 1530571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers 1540571d357843c53e042f370f5f2c2e9aa3fe803a9Ian RogersTEST_F(DexFileTest, FindTypeId) { 1550571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers for (size_t i = 0; i < java_lang_dex_file_->NumTypeIds(); i++) { 1560571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers const char* type_str = java_lang_dex_file_->StringByTypeIdx(i); 1570571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers const DexFile::StringId* type_str_id = java_lang_dex_file_->FindStringId(type_str); 1580571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers ASSERT_TRUE(type_str_id != NULL); 1590571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers uint32_t type_str_idx = java_lang_dex_file_->GetIndexForStringId(*type_str_id); 1600571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers const DexFile::TypeId* type_id = java_lang_dex_file_->FindTypeId(type_str_idx); 1610571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers ASSERT_TRUE(type_id != NULL); 1620571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers EXPECT_EQ(java_lang_dex_file_->GetIndexForTypeId(*type_id), i); 1630571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers } 1640571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers} 1650571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers 1660571d357843c53e042f370f5f2c2e9aa3fe803a9Ian RogersTEST_F(DexFileTest, FindProtoId) { 1670571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers for (size_t i = 0; i < java_lang_dex_file_->NumProtoIds(); i++) { 1680571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers const DexFile::ProtoId& to_find = java_lang_dex_file_->GetProtoId(i); 1690571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers const DexFile::TypeList* to_find_tl = java_lang_dex_file_->GetProtoParameters(to_find); 1700571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers std::vector<uint16_t> to_find_types; 1710571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers if (to_find_tl != NULL) { 1720571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers for (size_t j = 0; j < to_find_tl->Size(); j++) { 1730571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers to_find_types.push_back(to_find_tl->GetTypeItem(j).type_idx_); 1740571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers } 1750571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers } 1760571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers const DexFile::ProtoId* found = 1770571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers java_lang_dex_file_->FindProtoId(to_find.return_type_idx_, to_find_types); 1780571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers ASSERT_TRUE(found != NULL); 1790571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers EXPECT_EQ(java_lang_dex_file_->GetIndexForProtoId(*found), i); 1800571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers } 1810571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers} 1820571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers 1830571d357843c53e042f370f5f2c2e9aa3fe803a9Ian RogersTEST_F(DexFileTest, FindMethodId) { 1840571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers for (size_t i = 0; i < java_lang_dex_file_->NumMethodIds(); i++) { 1850571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers const DexFile::MethodId& to_find = java_lang_dex_file_->GetMethodId(i); 1860571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers const DexFile::TypeId& klass = java_lang_dex_file_->GetTypeId(to_find.class_idx_); 1870571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers const DexFile::StringId& name = java_lang_dex_file_->GetStringId(to_find.name_idx_); 1880571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers const DexFile::ProtoId& signature = java_lang_dex_file_->GetProtoId(to_find.proto_idx_); 1890571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers const DexFile::MethodId* found = java_lang_dex_file_->FindMethodId(klass, name, signature); 1900571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers int32_t length; 1910571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers ASSERT_TRUE(found != NULL) << "Didn't find method " << i << ": " 1920571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers << java_lang_dex_file_->StringByTypeIdx(to_find.class_idx_) << "." 1930571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers << java_lang_dex_file_->GetStringData(name) 1940571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers << java_lang_dex_file_->CreateMethodSignature(to_find.proto_idx_, &length); 1950571d357843c53e042f370f5f2c2e9aa3fe803a9Ian Rogers EXPECT_EQ(java_lang_dex_file_->GetIndexForMethodId(*found), i); 196419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapiro } 197419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapiro} 198419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapiro 1999b1a4f425711c26d0465d54a1cb95ec4a813322aIan RogersTEST_F(DexFileTest, FindFieldId) { 2009b1a4f425711c26d0465d54a1cb95ec4a813322aIan Rogers for (size_t i = 0; i < java_lang_dex_file_->NumFieldIds(); i++) { 2019b1a4f425711c26d0465d54a1cb95ec4a813322aIan Rogers const DexFile::FieldId& to_find = java_lang_dex_file_->GetFieldId(i); 2029b1a4f425711c26d0465d54a1cb95ec4a813322aIan Rogers const DexFile::TypeId& klass = java_lang_dex_file_->GetTypeId(to_find.class_idx_); 2039b1a4f425711c26d0465d54a1cb95ec4a813322aIan Rogers const DexFile::StringId& name = java_lang_dex_file_->GetStringId(to_find.name_idx_); 2049b1a4f425711c26d0465d54a1cb95ec4a813322aIan Rogers const DexFile::TypeId& type = java_lang_dex_file_->GetTypeId(to_find.type_idx_); 2059b1a4f425711c26d0465d54a1cb95ec4a813322aIan Rogers const DexFile::FieldId* found = java_lang_dex_file_->FindFieldId(klass, name, type); 2069b1a4f425711c26d0465d54a1cb95ec4a813322aIan Rogers ASSERT_TRUE(found != NULL) << "Didn't find field " << i << ": " 2079b1a4f425711c26d0465d54a1cb95ec4a813322aIan Rogers << java_lang_dex_file_->StringByTypeIdx(to_find.type_idx_) << " " 2089b1a4f425711c26d0465d54a1cb95ec4a813322aIan Rogers << java_lang_dex_file_->StringByTypeIdx(to_find.class_idx_) << "." 2099b1a4f425711c26d0465d54a1cb95ec4a813322aIan Rogers << java_lang_dex_file_->GetStringData(name); 2109b1a4f425711c26d0465d54a1cb95ec4a813322aIan Rogers EXPECT_EQ(java_lang_dex_file_->GetIndexForFieldId(*found), i); 2119b1a4f425711c26d0465d54a1cb95ec4a813322aIan Rogers } 2129b1a4f425711c26d0465d54a1cb95ec4a813322aIan Rogers} 2139b1a4f425711c26d0465d54a1cb95ec4a813322aIan Rogers 2141fb8620309a4e94d11879aabc33364acfa733904Carl Shapiro} // namespace art 215