common_test.h revision 7a90959d4ef7a69f3bcb7b8763f646e12d9267d3
1934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom// Copyright 2011 Google Inc. All Rights Reserved.
2934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom
3578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom#include "base64.h"
4578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom#include "heap.h"
5578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom#include "thread.h"
6578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom#include "class_linker.h"
7578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom#include "dex_file.h"
8a331b3cc392132c7333d36649a8310f38f4822ccBrian Carlstrom
9a331b3cc392132c7333d36649a8310f38f4822ccBrian Carlstrom#include "gtest/gtest.h"
10a331b3cc392132c7333d36649a8310f38f4822ccBrian Carlstrom
11934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstromnamespace art {
12934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom
13a331b3cc392132c7333d36649a8310f38f4822ccBrian Carlstrom// package java.lang;
14a331b3cc392132c7333d36649a8310f38f4822ccBrian Carlstrom// public class Object {}
15913af1bd90a6e8fd56f1f851db1f098636dae6a5Brian Carlstrom
16913af1bd90a6e8fd56f1f851db1f098636dae6a5Brian Carlstrom// package java.lang;
17913af1bd90a6e8fd56f1f851db1f098636dae6a5Brian Carlstrom// public class Class {}
18913af1bd90a6e8fd56f1f851db1f098636dae6a5Brian Carlstrom//
19913af1bd90a6e8fd56f1f851db1f098636dae6a5Brian Carlstrom// package java.lang.reflect;
20913af1bd90a6e8fd56f1f851db1f098636dae6a5Brian Carlstrom// public class Field {}
21913af1bd90a6e8fd56f1f851db1f098636dae6a5Brian Carlstrom//
22913af1bd90a6e8fd56f1f851db1f098636dae6a5Brian Carlstrom// package java.lang.reflect;
23913af1bd90a6e8fd56f1f851db1f098636dae6a5Brian Carlstrom// public class Method {}
24a331b3cc392132c7333d36649a8310f38f4822ccBrian Carlstrom//
25a331b3cc392132c7333d36649a8310f38f4822ccBrian Carlstrom// package java.lang;
26a331b3cc392132c7333d36649a8310f38f4822ccBrian Carlstrom// public interface Cloneable {}
27a331b3cc392132c7333d36649a8310f38f4822ccBrian Carlstrom//
28a331b3cc392132c7333d36649a8310f38f4822ccBrian Carlstrom// package java.io;
29a331b3cc392132c7333d36649a8310f38f4822ccBrian Carlstrom// public interface Serializable {}
30a331b3cc392132c7333d36649a8310f38f4822ccBrian Carlstromstatic const char kJavaLangDex[] =
31913af1bd90a6e8fd56f1f851db1f098636dae6a5Brian Carlstrom  "ZGV4CjAzNQCgffHhLqornhe/ZtOPPH5jBex6xYfwloPAAwAAcAAAAHhWNBIAAAAAAAAAADgDAAAO"
32913af1bd90a6e8fd56f1f851db1f098636dae6a5Brian Carlstrom  "AAAAcAAAAAcAAACoAAAAAQAAAMQAAAAAAAAAAAAAAAQAAADQAAAABgAAAPAAAAAQAgAAsAEAAAwC"
33913af1bd90a6e8fd56f1f851db1f098636dae6a5Brian Carlstrom  "AAAUAgAAIAIAADACAAA8AgAAVAIAAGcCAAB+AgAAkgIAAK0CAADJAgAA1gIAAOMCAAD2AgAABAAA"
34913af1bd90a6e8fd56f1f851db1f098636dae6a5Brian Carlstrom  "AAUAAAAGAAAABwAAAAgAAAAJAAAADQAAAA0AAAAGAAAAAAAAAAEAAAAAAAAAAwAAAAAAAAAEAAAA"
35913af1bd90a6e8fd56f1f851db1f098636dae6a5Brian Carlstrom  "AAAAAAUAAAAAAAAAAwAAAAEAAAD/////AAAAAAsAAAAAAAAADQMAAAAAAAAAAAAAAQYAAAMAAAAA"
36913af1bd90a6e8fd56f1f851db1f098636dae6a5Brian Carlstrom  "AAAADAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAwAAAAAAAAABAAAAAAAAABcDAAAAAAAAAgAAAAEG"
37913af1bd90a6e8fd56f1f851db1f098636dae6a5Brian Carlstrom  "AAADAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAEAAAAAQAAAAMAAAAAAAAAAwAAAAAAAAAhAwAAAAAA"
38913af1bd90a6e8fd56f1f851db1f098636dae6a5Brian Carlstrom  "AAUAAAABAAAAAwAAAAAAAAAKAAAAAAAAACsDAAAAAAAAAQABAAAAAAD5AgAAAQAAAA4AAAABAAEA"
39913af1bd90a6e8fd56f1f851db1f098636dae6a5Brian Carlstrom  "AQAAAP4CAAAEAAAAcBABAAAADgABAAEAAQAAAAMDAAAEAAAAcBABAAAADgABAAEAAQAAAAgDAAAE"
40913af1bd90a6e8fd56f1f851db1f098636dae6a5Brian Carlstrom  "AAAAcBABAAAADgAGPGluaXQ+AApDbGFzcy5qYXZhAA5DbG9uZWFibGUuamF2YQAKRmllbGQuamF2"
41913af1bd90a6e8fd56f1f851db1f098636dae6a5Brian Carlstrom  "YQAWTGphdmEvaW8vU2VyaWFsaXphYmxlOwARTGphdmEvbGFuZy9DbGFzczsAFUxqYXZhL2xhbmcv"
42913af1bd90a6e8fd56f1f851db1f098636dae6a5Brian Carlstrom  "Q2xvbmVhYmxlOwASTGphdmEvbGFuZy9PYmplY3Q7ABlMamF2YS9sYW5nL3JlZmxlY3QvRmllbGQ7"
43913af1bd90a6e8fd56f1f851db1f098636dae6a5Brian Carlstrom  "ABpMamF2YS9sYW5nL3JlZmxlY3QvTWV0aG9kOwALTWV0aG9kLmphdmEAC09iamVjdC5qYXZhABFT"
44913af1bd90a6e8fd56f1f851db1f098636dae6a5Brian Carlstrom  "ZXJpYWxpemFibGUuamF2YQABVgADAAcOAAUABw4ABQAHDgAFAAcOAAAAAQABgYAEsAMAAAEAAIGA"
45913af1bd90a6e8fd56f1f851db1f098636dae6a5Brian Carlstrom  "BMQDAAABAAKBgATcAwAAAQADgYAE9AMAAAALAAAAAAAAAAEAAAAAAAAAAQAAAA4AAABwAAAAAgAA"
46913af1bd90a6e8fd56f1f851db1f098636dae6a5Brian Carlstrom  "AAcAAACoAAAAAwAAAAEAAADEAAAABQAAAAQAAADQAAAABgAAAAYAAADwAAAAASAAAAQAAACwAQAA"
47913af1bd90a6e8fd56f1f851db1f098636dae6a5Brian Carlstrom  "AiAAAA4AAAAMAgAAAyAAAAQAAAD5AgAAACAAAAQAAAANAwAAABAAAAEAAAA4AwAA";
48a331b3cc392132c7333d36649a8310f38f4822ccBrian Carlstrom
49934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom// package java.lang;
50934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom// public class Object {}
51934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom//
52934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom// class MyClass {}
53934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstromstatic const char kMyClassDex[] =
54934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "ZGV4CjAzNQA5Nm9IrCVm91COwepff7LhIE23GZIxGjgIAgAAcAAAAHhWNBIAAAAAAAAAAIABAAAG"
55934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AAAAcAAAAAMAAACIAAAAAQAAAJQAAAAAAAAAAAAAAAIAAACgAAAAAgAAALAAAAAYAQAA8AAAABwB"
56934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AAAkAQAALwEAAEMBAABRAQAAXgEAAAEAAAACAAAABQAAAAUAAAACAAAAAAAAAAAAAAAAAAAAAQAA"
57934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AAAAAAABAAAAAQAAAP////8AAAAABAAAAAAAAABrAQAAAAAAAAAAAAAAAAAAAQAAAAAAAAADAAAA"
58934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AAAAAHUBAAAAAAAAAQABAAAAAABhAQAAAQAAAA4AAAABAAEAAQAAAGYBAAAEAAAAcBABAAAADgAG"
59934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "PGluaXQ+AAlMTXlDbGFzczsAEkxqYXZhL2xhbmcvT2JqZWN0OwAMTXlDbGFzcy5qYXZhAAtPYmpl"
60934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "Y3QuamF2YQABVgACAAcOAAUABw4AAAABAAGBgATwAQAAAQAAgIAEhAIACwAAAAAAAAABAAAAAAAA"
61934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AAEAAAAGAAAAcAAAAAIAAAADAAAAiAAAAAMAAAABAAAAlAAAAAUAAAACAAAAoAAAAAYAAAACAAAA"
62934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "sAAAAAEgAAACAAAA8AAAAAIgAAAGAAAAHAEAAAMgAAACAAAAYQEAAAAgAAACAAAAawEAAAAQAAAB"
63934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AAAAgAEAAA==";
64934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom
65934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom// class Nested {
66934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom//     class Inner {
67934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom//     }
68934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom// }
69934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstromstatic const char kNestedDex[] =
70934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "ZGV4CjAzNQAQedgAe7gM1B/WHsWJ6L7lGAISGC7yjD2IAwAAcAAAAHhWNBIAAAAAAAAAAMQCAAAP"
71934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AAAAcAAAAAcAAACsAAAAAgAAAMgAAAABAAAA4AAAAAMAAADoAAAAAgAAAAABAABIAgAAQAEAAK4B"
72934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AAC2AQAAvQEAAM0BAADXAQAA+wEAABsCAAA+AgAAUgIAAF8CAABiAgAAZgIAAHMCAAB5AgAAgQIA"
73934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAkAAAAJAAAABgAAAAAAAAAKAAAABgAAAKgBAAAAAAEA"
74934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "DQAAAAAAAQAAAAAAAQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAIAAAAiAEAAKsCAAAA"
75934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AAAAAQAAAAAAAAAFAAAAAAAAAAgAAACYAQAAuAIAAAAAAAACAAAAlAIAAJoCAAABAAAAowIAAAIA"
76934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AgABAAAAiAIAAAYAAABbAQAAcBACAAAADgABAAEAAQAAAI4CAAAEAAAAcBACAAAADgBAAQAAAAAA"
77934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AAAAAAAAAAAATAEAAAAAAAAAAAAAAAAAAAEAAAABAAY8aW5pdD4ABUlubmVyAA5MTmVzdGVkJElu"
78934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "bmVyOwAITE5lc3RlZDsAIkxkYWx2aWsvYW5ub3RhdGlvbi9FbmNsb3NpbmdDbGFzczsAHkxkYWx2"
79934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "aWsvYW5ub3RhdGlvbi9Jbm5lckNsYXNzOwAhTGRhbHZpay9hbm5vdGF0aW9uL01lbWJlckNsYXNz"
80934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "ZXM7ABJMamF2YS9sYW5nL09iamVjdDsAC05lc3RlZC5qYXZhAAFWAAJWTAALYWNjZXNzRmxhZ3MA"
81934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "BG5hbWUABnRoaXMkMAAFdmFsdWUAAgEABw4AAQAHDjwAAgIBDhgBAgMCCwQADBcBAgQBDhwBGAAA"
82934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AQEAAJAgAICABNQCAAABAAGAgATwAgAAEAAAAAAAAAABAAAAAAAAAAEAAAAPAAAAcAAAAAIAAAAH"
83934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AAAArAAAAAMAAAACAAAAyAAAAAQAAAABAAAA4AAAAAUAAAADAAAA6AAAAAYAAAACAAAAAAEAAAMQ"
84934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AAACAAAAQAEAAAEgAAACAAAAVAEAAAYgAAACAAAAiAEAAAEQAAABAAAAqAEAAAIgAAAPAAAArgEA"
85934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AAMgAAACAAAAiAIAAAQgAAADAAAAlAIAAAAgAAACAAAAqwIAAAAQAAABAAAAxAIAAA==";
86934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom
87934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom// class ProtoCompare {
88934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom//     int m1(short x, int y, long z) { return x + y + (int)z; }
89934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom//     int m2(short x, int y, long z) { return x + y + (int)z; }
90934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom//     int m3(long x, int y, short z) { return (int)x + y + z; }
91934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom//     long m4(long x, int y, short z) { return x + y + z; }
92934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom// }
93934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstromstatic const char kProtoCompareDex[] =
94934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "ZGV4CjAzNQBLUetu+TVZ8gsYsCOFoij7ecsHaGSEGA8gAwAAcAAAAHhWNBIAAAAAAAAAAIwCAAAP"
95934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AAAAcAAAAAYAAACsAAAABAAAAMQAAAAAAAAAAAAAAAYAAAD0AAAAAQAAACQBAADcAQAARAEAAN4B"
96934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AADmAQAA6QEAAO8BAAD1AQAA+AEAAP4BAAAOAgAAIgIAADUCAAA4AgAAOwIAAD8CAABDAgAARwIA"
97934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AAEAAAAEAAAABgAAAAcAAAAJAAAACgAAAAIAAAAAAAAAyAEAAAMAAAAAAAAA1AEAAAUAAAABAAAA"
98934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "yAEAAAoAAAAFAAAAAAAAAAIAAwAAAAAAAgABAAsAAAACAAEADAAAAAIAAAANAAAAAgACAA4AAAAD"
99934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AAMAAAAAAAIAAAAAAAAAAwAAAAAAAAAIAAAAAAAAAHACAAAAAAAAAQABAAEAAABLAgAABAAAAHAQ"
100934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "BQAAAA4ABwAFAAAAAABQAgAABQAAAJAAAwSEUbAQDwAAAAcABQAAAAAAWAIAAAUAAACQAAMEhFGw"
101934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "EA8AAAAGAAUAAAAAAGACAAAEAAAAhCCwQLBQDwAJAAUAAAAAAGgCAAAFAAAAgXC7UIGCuyAQAAAA"
102934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AwAAAAEAAAAEAAAAAwAAAAQAAAABAAY8aW5pdD4AAUkABElKSVMABElTSUoAAUoABEpKSVMADkxQ"
103934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "cm90b0NvbXBhcmU7ABJMamF2YS9sYW5nL09iamVjdDsAEVByb3RvQ29tcGFyZS5qYXZhAAFTAAFW"
104934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AAJtMQACbTIAAm0zAAJtNAABAAcOAAIDAAAABw4AAwMAAAAHDgAEAwAAAAcOAAUDAAAABw4AAAAB"
105934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "BACAgATEAgEA3AIBAPgCAQCUAwEArAMAAAwAAAAAAAAAAQAAAAAAAAABAAAADwAAAHAAAAACAAAA"
106934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "BgAAAKwAAAADAAAABAAAAMQAAAAFAAAABgAAAPQAAAAGAAAAAQAAACQBAAABIAAABQAAAEQBAAAB"
107934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "EAAAAgAAAMgBAAACIAAADwAAAN4BAAADIAAABQAAAEsCAAAAIAAAAQAAAHACAAAAEAAAAQAAAIwC"
108934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AAA=";
109934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom
110934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom// class ProtoCompare2 {
111934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom//     int m1(short x, int y, long z) { return x + y + (int)z; }
112934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom//     int m2(short x, int y, long z) { return x + y + (int)z; }
113934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom//     int m3(long x, int y, short z) { return (int)x + y + z; }
114934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom//     long m4(long x, int y, short z) { return x + y + z; }
115934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom// }
116934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstromstatic const char kProtoCompare2Dex[] =
117934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "ZGV4CjAzNQDVUXj687EpyTTDJZEZPA8dEYnDlm0Ir6YgAwAAcAAAAHhWNBIAAAAAAAAAAIwCAAAP"
118934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AAAAcAAAAAYAAACsAAAABAAAAMQAAAAAAAAAAAAAAAYAAAD0AAAAAQAAACQBAADcAQAARAEAAN4B"
119934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AADmAQAA6QEAAO8BAAD1AQAA+AEAAP4BAAAPAgAAIwIAADcCAAA6AgAAPQIAAEECAABFAgAASQIA"
120934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AAEAAAAEAAAABgAAAAcAAAAJAAAACgAAAAIAAAAAAAAAyAEAAAMAAAAAAAAA1AEAAAUAAAABAAAA"
121934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "yAEAAAoAAAAFAAAAAAAAAAIAAwAAAAAAAgABAAsAAAACAAEADAAAAAIAAAANAAAAAgACAA4AAAAD"
122934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AAMAAAAAAAIAAAAAAAAAAwAAAAAAAAAIAAAAAAAAAHICAAAAAAAAAQABAAEAAABNAgAABAAAAHAQ"
123934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "BQAAAA4ABwAFAAAAAABSAgAABQAAAJAAAwSEUbAQDwAAAAcABQAAAAAAWgIAAAUAAACQAAMEhFGw"
124934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "EA8AAAAGAAUAAAAAAGICAAAEAAAAhCCwQLBQDwAJAAUAAAAAAGoCAAAFAAAAgXC7UIGCuyAQAAAA"
125934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AwAAAAEAAAAEAAAAAwAAAAQAAAABAAY8aW5pdD4AAUkABElKSVMABElTSUoAAUoABEpKSVMAD0xQ"
126934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "cm90b0NvbXBhcmUyOwASTGphdmEvbGFuZy9PYmplY3Q7ABJQcm90b0NvbXBhcmUyLmphdmEAAVMA"
127934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AVYAAm0xAAJtMgACbTMAAm00AAEABw4AAgMAAAAHDgADAwAAAAcOAAQDAAAABw4ABQMAAAAHDgAA"
128934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AAEEAICABMQCAQDcAgEA+AIBAJQDAQCsAwwAAAAAAAAAAQAAAAAAAAABAAAADwAAAHAAAAACAAAA"
129934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "BgAAAKwAAAADAAAABAAAAMQAAAAFAAAABgAAAPQAAAAGAAAAAQAAACQBAAABIAAABQAAAEQBAAAB"
130934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "EAAAAgAAAMgBAAACIAAADwAAAN4BAAADIAAABQAAAE0CAAAAIAAAAQAAAHICAAAAEAAAAQAAAIwC"
131934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AAA=";
132934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom
133b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers// javac MyClass.java && dx --dex --output=MyClass.dex
134b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers//   --core-library MyClass.class java/lang/Object.class && base64 MyClass.dex
135b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers// package java.lang;
136b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers// public class Object {}
137b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers// class MyClass {
138b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers//   native void foo();
139b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers//   native int fooI(int x);
140b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers//   native int fooII(int x, int y);
141b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers//   native double fooDD(double x, double y);
142b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers//   native Object fooIOO(int x, Object y, Object z);
143b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers//   static native Object fooSIOO(int x, Object y, Object z);
144df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers//   static synchronized native Object fooSSIOO(int x, Object y, Object z);
145b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers// }
146b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogersstatic const char kMyClassNativesDex[] =
147df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers  "ZGV4CjAzNQA4WWrpXgdlkoTHR8Yubx4LJO4HbGsX1p1EAwAAcAAAAHhWNBIAAAAAAAAAALACAAAT"
148df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers  "AAAAcAAAAAUAAAC8AAAABQAAANAAAAAAAAAAAAAAAAkAAAAMAQAAAgAAAFQBAACwAQAAlAEAAOIB"
149df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers  "AADqAQAA7QEAAPIBAAD1AQAA+QEAAP4BAAAEAgAADwIAACMCAAAxAgAAPgIAAEECAABGAgAATQIA"
150df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers  "AFMCAABaAgAAYgIAAGsCAAABAAAAAwAAAAcAAAAIAAAACwAAAAIAAAAAAAAAwAEAAAQAAAABAAAA"
151df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers  "yAEAAAUAAAABAAAA0AEAAAYAAAADAAAA2AEAAAsAAAAEAAAAAAAAAAIABAAAAAAAAgAEAAwAAAAC"
152df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers  "AAAADQAAAAIAAQAOAAAAAgACAA8AAAACAAMAEAAAAAIAAwARAAAAAgADABIAAAADAAQAAAAAAAMA"
153df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers  "AAABAAAA/////wAAAAAKAAAAAAAAAH8CAAAAAAAAAgAAAAAAAAADAAAAAAAAAAkAAAAAAAAAiQIA"
154df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers  "AAAAAAABAAEAAAAAAHUCAAABAAAADgAAAAEAAQABAAAAegIAAAQAAABwEAgAAAAOAAIAAAAAAAAA"
155df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers  "AQAAAAEAAAACAAAAAQABAAMAAAABAAMAAwAGPGluaXQ+AAFEAANEREQAAUkAAklJAANJSUkABExJ"
156df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers  "TEwACUxNeUNsYXNzOwASTGphdmEvbGFuZy9PYmplY3Q7AAxNeUNsYXNzLmphdmEAC09iamVjdC5q"
157df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers  "YXZhAAFWAANmb28ABWZvb0REAARmb29JAAVmb29JSQAGZm9vSU9PAAdmb29TSU9PAAhmb29TU0lP"
158df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers  "TwADAAcOAAEABw4AAAABAAiBgASUAwAAAwUAgIAEqAMGiAIAAaiCCAABgAIAAYACAAGAAgABgAIA"
159df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers  "AYACAAwAAAAAAAAAAQAAAAAAAAABAAAAEwAAAHAAAAACAAAABQAAALwAAAADAAAABQAAANAAAAAF"
160df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers  "AAAACQAAAAwBAAAGAAAAAgAAAFQBAAABIAAAAgAAAJQBAAABEAAABAAAAMABAAACIAAAEwAAAOIB"
161df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers  "AAADIAAAAgAAAHUCAAAAIAAAAgAAAH8CAAAAEAAAAQAAALACAAA=";
162b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers
163f615a61aef972cfc1dc23931ac2ed0da14c3fedbBrian Carlstromstatic inline DexFile* OpenDexFileBase64(const char* base64) {
164578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom  CHECK(base64 != NULL);
165578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom  size_t length;
166f615a61aef972cfc1dc23931ac2ed0da14c3fedbBrian Carlstrom  byte* dex_bytes = DecodeBase64(base64, &length);
167f615a61aef972cfc1dc23931ac2ed0da14c3fedbBrian Carlstrom  CHECK(dex_bytes != NULL);
168f615a61aef972cfc1dc23931ac2ed0da14c3fedbBrian Carlstrom  DexFile* dex_file = DexFile::OpenPtr(dex_bytes, length);
169578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom  CHECK(dex_file != NULL);
170f615a61aef972cfc1dc23931ac2ed0da14c3fedbBrian Carlstrom  return dex_file;
171578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom}
172578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom
173578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstromclass RuntimeTest : public testing::Test {
174578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom protected:
175578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom  virtual void SetUp() {
176f615a61aef972cfc1dc23931ac2ed0da14c3fedbBrian Carlstrom    java_lang_dex_file_.reset(OpenDexFileBase64(kJavaLangDex));
177578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom
178f615a61aef972cfc1dc23931ac2ed0da14c3fedbBrian Carlstrom    std::vector<DexFile*> boot_class_path;
179f615a61aef972cfc1dc23931ac2ed0da14c3fedbBrian Carlstrom    boot_class_path.push_back(java_lang_dex_file_.get());
180578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom
1817a90959d4ef7a69f3bcb7b8763f646e12d9267d3Carl Shapiro    runtime_.reset(Runtime::Create(boot_class_path));
1827a90959d4ef7a69f3bcb7b8763f646e12d9267d3Carl Shapiro    ASSERT_TRUE(runtime_ != NULL);
1837a90959d4ef7a69f3bcb7b8763f646e12d9267d3Carl Shapiro    class_linker_ = runtime_->GetClassLinker();
184578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom  }
185578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom
186f615a61aef972cfc1dc23931ac2ed0da14c3fedbBrian Carlstrom  scoped_ptr<DexFile> java_lang_dex_file_;
1877a90959d4ef7a69f3bcb7b8763f646e12d9267d3Carl Shapiro  scoped_ptr<Runtime> runtime_;
1887a90959d4ef7a69f3bcb7b8763f646e12d9267d3Carl Shapiro  ClassLinker* class_linker_;
189578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom};
190578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom
191934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom}  // namespace art
192