blob: ccac3961a9b7e1cb4b80134598fb7c8c7804a76e [file] [log] [blame]
Carl Shapiro1fb86202011-06-27 17:43:13 -07001// Copyright 2011 Google Inc. All Rights Reserved.
2
3#include "src/dex_file.h"
Carl Shapiro0e5d75d2011-07-06 18:28:37 -07004#include "src/object.h"
Carl Shapiro1fb86202011-06-27 17:43:13 -07005#include "src/scoped_ptr.h"
6
7#include <stdio.h>
8#include "gtest/gtest.h"
9
10namespace art {
11
Carl Shapiro80d4dde2011-06-28 16:24:07 -070012// class Nested {
13// class Inner {
14// }
15// }
16static const char kNestedDex[] =
17 "ZGV4CjAzNQAQedgAe7gM1B/WHsWJ6L7lGAISGC7yjD2IAwAAcAAAAHhWNBIAAAAAAAAAAMQCAAAP"
18 "AAAAcAAAAAcAAACsAAAAAgAAAMgAAAABAAAA4AAAAAMAAADoAAAAAgAAAAABAABIAgAAQAEAAK4B"
19 "AAC2AQAAvQEAAM0BAADXAQAA+wEAABsCAAA+AgAAUgIAAF8CAABiAgAAZgIAAHMCAAB5AgAAgQIA"
20 "AAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAkAAAAJAAAABgAAAAAAAAAKAAAABgAAAKgBAAAAAAEA"
21 "DQAAAAAAAQAAAAAAAQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAIAAAAiAEAAKsCAAAA"
22 "AAAAAQAAAAAAAAAFAAAAAAAAAAgAAACYAQAAuAIAAAAAAAACAAAAlAIAAJoCAAABAAAAowIAAAIA"
23 "AgABAAAAiAIAAAYAAABbAQAAcBACAAAADgABAAEAAQAAAI4CAAAEAAAAcBACAAAADgBAAQAAAAAA"
24 "AAAAAAAAAAAATAEAAAAAAAAAAAAAAAAAAAEAAAABAAY8aW5pdD4ABUlubmVyAA5MTmVzdGVkJElu"
25 "bmVyOwAITE5lc3RlZDsAIkxkYWx2aWsvYW5ub3RhdGlvbi9FbmNsb3NpbmdDbGFzczsAHkxkYWx2"
26 "aWsvYW5ub3RhdGlvbi9Jbm5lckNsYXNzOwAhTGRhbHZpay9hbm5vdGF0aW9uL01lbWJlckNsYXNz"
27 "ZXM7ABJMamF2YS9sYW5nL09iamVjdDsAC05lc3RlZC5qYXZhAAFWAAJWTAALYWNjZXNzRmxhZ3MA"
28 "BG5hbWUABnRoaXMkMAAFdmFsdWUAAgEABw4AAQAHDjwAAgIBDhgBAgMCCwQADBcBAgQBDhwBGAAA"
29 "AQEAAJAgAICABNQCAAABAAGAgATwAgAAEAAAAAAAAAABAAAAAAAAAAEAAAAPAAAAcAAAAAIAAAAH"
30 "AAAArAAAAAMAAAACAAAAyAAAAAQAAAABAAAA4AAAAAUAAAADAAAA6AAAAAYAAAACAAAAAAEAAAMQ"
31 "AAACAAAAQAEAAAEgAAACAAAAVAEAAAYgAAACAAAAiAEAAAEQAAABAAAAqAEAAAIgAAAPAAAArgEA"
32 "AAMgAAACAAAAiAIAAAQgAAADAAAAlAIAAAAgAAACAAAAqwIAAAAQAAABAAAAxAIAAA==";
Carl Shapiro1fb86202011-06-27 17:43:13 -070033
34TEST(DexFile, Open) {
Carl Shapiro80d4dde2011-06-28 16:24:07 -070035 scoped_ptr<DexFile> dex(DexFile::OpenBase64(kNestedDex));
Carl Shapiro1fb86202011-06-27 17:43:13 -070036 ASSERT_TRUE(dex != NULL);
37}
38
39TEST(DexFile, LoadNonexistent) {
Carl Shapiro80d4dde2011-06-28 16:24:07 -070040 scoped_ptr<DexFile> dex(DexFile::OpenBase64(kNestedDex));
Carl Shapiro1fb86202011-06-27 17:43:13 -070041 ASSERT_TRUE(dex != NULL);
42
Carl Shapiro565f5072011-07-10 13:39:43 -070043 scoped_ptr<Class> klass(reinterpret_cast<Class*>(new byte[sizeof(Class)]));
44 bool result = dex->LoadClass("NoSuchClass", klass.get());
45 ASSERT_FALSE(result);
Carl Shapiro1fb86202011-06-27 17:43:13 -070046}
47
48TEST(DexFile, Load) {
Carl Shapiro80d4dde2011-06-28 16:24:07 -070049 scoped_ptr<DexFile> dex(DexFile::OpenBase64(kNestedDex));
Carl Shapiro1fb86202011-06-27 17:43:13 -070050 ASSERT_TRUE(dex != NULL);
51
Carl Shapiro565f5072011-07-10 13:39:43 -070052 scoped_ptr<Class> klass(reinterpret_cast<Class*>(new byte[sizeof(Class)]));
53 bool result = dex->LoadClass("LNested;", klass.get());
54 ASSERT_TRUE(result);
Carl Shapiro3ee755d2011-06-28 12:11:04 -070055
56 uint32_t vmeth = klass->NumVirtualMethods();
57 EXPECT_EQ(vmeth, 0U);
58
59 uint32_t dmeth = klass->NumDirectMethods();
60 EXPECT_EQ(dmeth, 1U);
Carl Shapiro1fb86202011-06-27 17:43:13 -070061}
62
63} // namespace art