common_test.h revision 578bbdc684db8ed68e9fedbc678669d27fa68b6e
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 {}
15a331b3cc392132c7333d36649a8310f38f4822ccBrian Carlstrom//
16a331b3cc392132c7333d36649a8310f38f4822ccBrian Carlstrom// package java.lang;
17a331b3cc392132c7333d36649a8310f38f4822ccBrian Carlstrom// public interface Cloneable {}
18a331b3cc392132c7333d36649a8310f38f4822ccBrian Carlstrom//
19a331b3cc392132c7333d36649a8310f38f4822ccBrian Carlstrom// package java.io;
20a331b3cc392132c7333d36649a8310f38f4822ccBrian Carlstrom// public interface Serializable {}
21a331b3cc392132c7333d36649a8310f38f4822ccBrian Carlstromstatic const char kJavaLangDex[] =
22a331b3cc392132c7333d36649a8310f38f4822ccBrian Carlstrom  "ZGV4CjAzNQAdS5NB20pfz7Z3u9Jh2IVuB3Hxe6BzR9FAAgAAcAAAAHhWNBIAAAAAAAAAALgBAAAI"
23a331b3cc392132c7333d36649a8310f38f4822ccBrian Carlstrom  "AAAAcAAAAAQAAACQAAAAAQAAAKAAAAAAAAAAAAAAAAEAAACsAAAAAwAAALQAAAAsAQAAFAEAACgB"
24a331b3cc392132c7333d36649a8310f38f4822ccBrian Carlstrom  "AAAwAQAAQAEAAFgBAABvAQAAgwEAAJABAACjAQAAAgAAAAMAAAAEAAAABwAAAAcAAAADAAAAAAAA"
25a331b3cc392132c7333d36649a8310f38f4822ccBrian Carlstrom  "AAIAAAAAAAAAAgAAAAEAAAD/////AAAAAAUAAAAAAAAAqwEAAAAAAAAAAAAAAQYAAAIAAAAAAAAA"
26a331b3cc392132c7333d36649a8310f38f4822ccBrian Carlstrom  "BgAAAAAAAAAAAAAAAAAAAAEAAAABBgAAAgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQABAAAAAACm"
27a331b3cc392132c7333d36649a8310f38f4822ccBrian Carlstrom  "AQAAAQAAAA4AAAAGPGluaXQ+AA5DbG9uZWFibGUuamF2YQAWTGphdmEvaW8vU2VyaWFsaXphYmxl"
28a331b3cc392132c7333d36649a8310f38f4822ccBrian Carlstrom  "OwAVTGphdmEvbGFuZy9DbG9uZWFibGU7ABJMamF2YS9sYW5nL09iamVjdDsAC09iamVjdC5qYXZh"
29a331b3cc392132c7333d36649a8310f38f4822ccBrian Carlstrom  "ABFTZXJpYWxpemFibGUuamF2YQABVgADAAcOAAAAAQAAgYAElAIAAAALAAAAAAAAAAEAAAAAAAAA"
30a331b3cc392132c7333d36649a8310f38f4822ccBrian Carlstrom  "AQAAAAgAAABwAAAAAgAAAAQAAACQAAAAAwAAAAEAAACgAAAABQAAAAEAAACsAAAABgAAAAMAAAC0"
31a331b3cc392132c7333d36649a8310f38f4822ccBrian Carlstrom  "AAAAASAAAAEAAAAUAQAAAiAAAAgAAAAoAQAAAyAAAAEAAACmAQAAACAAAAEAAACrAQAAABAAAAEA"
32a331b3cc392132c7333d36649a8310f38f4822ccBrian Carlstrom  "AAC4AQAA";
33a331b3cc392132c7333d36649a8310f38f4822ccBrian Carlstrom
34934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom// package java.lang;
35934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom// public class Object {}
36934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom//
37934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom// class MyClass {}
38934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstromstatic const char kMyClassDex[] =
39934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "ZGV4CjAzNQA5Nm9IrCVm91COwepff7LhIE23GZIxGjgIAgAAcAAAAHhWNBIAAAAAAAAAAIABAAAG"
40934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AAAAcAAAAAMAAACIAAAAAQAAAJQAAAAAAAAAAAAAAAIAAACgAAAAAgAAALAAAAAYAQAA8AAAABwB"
41934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AAAkAQAALwEAAEMBAABRAQAAXgEAAAEAAAACAAAABQAAAAUAAAACAAAAAAAAAAAAAAAAAAAAAQAA"
42934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AAAAAAABAAAAAQAAAP////8AAAAABAAAAAAAAABrAQAAAAAAAAAAAAAAAAAAAQAAAAAAAAADAAAA"
43934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AAAAAHUBAAAAAAAAAQABAAAAAABhAQAAAQAAAA4AAAABAAEAAQAAAGYBAAAEAAAAcBABAAAADgAG"
44934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "PGluaXQ+AAlMTXlDbGFzczsAEkxqYXZhL2xhbmcvT2JqZWN0OwAMTXlDbGFzcy5qYXZhAAtPYmpl"
45934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "Y3QuamF2YQABVgACAAcOAAUABw4AAAABAAGBgATwAQAAAQAAgIAEhAIACwAAAAAAAAABAAAAAAAA"
46934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AAEAAAAGAAAAcAAAAAIAAAADAAAAiAAAAAMAAAABAAAAlAAAAAUAAAACAAAAoAAAAAYAAAACAAAA"
47934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "sAAAAAEgAAACAAAA8AAAAAIgAAAGAAAAHAEAAAMgAAACAAAAYQEAAAAgAAACAAAAawEAAAAQAAAB"
48934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AAAAgAEAAA==";
49934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom
50934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom// class Nested {
51934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom//     class Inner {
52934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom//     }
53934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom// }
54934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstromstatic const char kNestedDex[] =
55934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "ZGV4CjAzNQAQedgAe7gM1B/WHsWJ6L7lGAISGC7yjD2IAwAAcAAAAHhWNBIAAAAAAAAAAMQCAAAP"
56934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AAAAcAAAAAcAAACsAAAAAgAAAMgAAAABAAAA4AAAAAMAAADoAAAAAgAAAAABAABIAgAAQAEAAK4B"
57934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AAC2AQAAvQEAAM0BAADXAQAA+wEAABsCAAA+AgAAUgIAAF8CAABiAgAAZgIAAHMCAAB5AgAAgQIA"
58934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAkAAAAJAAAABgAAAAAAAAAKAAAABgAAAKgBAAAAAAEA"
59934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "DQAAAAAAAQAAAAAAAQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAIAAAAiAEAAKsCAAAA"
60934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AAAAAQAAAAAAAAAFAAAAAAAAAAgAAACYAQAAuAIAAAAAAAACAAAAlAIAAJoCAAABAAAAowIAAAIA"
61934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AgABAAAAiAIAAAYAAABbAQAAcBACAAAADgABAAEAAQAAAI4CAAAEAAAAcBACAAAADgBAAQAAAAAA"
62934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AAAAAAAAAAAATAEAAAAAAAAAAAAAAAAAAAEAAAABAAY8aW5pdD4ABUlubmVyAA5MTmVzdGVkJElu"
63934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "bmVyOwAITE5lc3RlZDsAIkxkYWx2aWsvYW5ub3RhdGlvbi9FbmNsb3NpbmdDbGFzczsAHkxkYWx2"
64934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "aWsvYW5ub3RhdGlvbi9Jbm5lckNsYXNzOwAhTGRhbHZpay9hbm5vdGF0aW9uL01lbWJlckNsYXNz"
65934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "ZXM7ABJMamF2YS9sYW5nL09iamVjdDsAC05lc3RlZC5qYXZhAAFWAAJWTAALYWNjZXNzRmxhZ3MA"
66934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "BG5hbWUABnRoaXMkMAAFdmFsdWUAAgEABw4AAQAHDjwAAgIBDhgBAgMCCwQADBcBAgQBDhwBGAAA"
67934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AQEAAJAgAICABNQCAAABAAGAgATwAgAAEAAAAAAAAAABAAAAAAAAAAEAAAAPAAAAcAAAAAIAAAAH"
68934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AAAArAAAAAMAAAACAAAAyAAAAAQAAAABAAAA4AAAAAUAAAADAAAA6AAAAAYAAAACAAAAAAEAAAMQ"
69934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AAACAAAAQAEAAAEgAAACAAAAVAEAAAYgAAACAAAAiAEAAAEQAAABAAAAqAEAAAIgAAAPAAAArgEA"
70934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AAMgAAACAAAAiAIAAAQgAAADAAAAlAIAAAAgAAACAAAAqwIAAAAQAAABAAAAxAIAAA==";
71934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom
72934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom// class ProtoCompare {
73934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom//     int m1(short x, int y, long z) { return x + y + (int)z; }
74934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom//     int m2(short x, int y, long z) { return x + y + (int)z; }
75934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom//     int m3(long x, int y, short z) { return (int)x + y + z; }
76934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom//     long m4(long x, int y, short z) { return x + y + z; }
77934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom// }
78934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstromstatic const char kProtoCompareDex[] =
79934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "ZGV4CjAzNQBLUetu+TVZ8gsYsCOFoij7ecsHaGSEGA8gAwAAcAAAAHhWNBIAAAAAAAAAAIwCAAAP"
80934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AAAAcAAAAAYAAACsAAAABAAAAMQAAAAAAAAAAAAAAAYAAAD0AAAAAQAAACQBAADcAQAARAEAAN4B"
81934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AADmAQAA6QEAAO8BAAD1AQAA+AEAAP4BAAAOAgAAIgIAADUCAAA4AgAAOwIAAD8CAABDAgAARwIA"
82934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AAEAAAAEAAAABgAAAAcAAAAJAAAACgAAAAIAAAAAAAAAyAEAAAMAAAAAAAAA1AEAAAUAAAABAAAA"
83934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "yAEAAAoAAAAFAAAAAAAAAAIAAwAAAAAAAgABAAsAAAACAAEADAAAAAIAAAANAAAAAgACAA4AAAAD"
84934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AAMAAAAAAAIAAAAAAAAAAwAAAAAAAAAIAAAAAAAAAHACAAAAAAAAAQABAAEAAABLAgAABAAAAHAQ"
85934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "BQAAAA4ABwAFAAAAAABQAgAABQAAAJAAAwSEUbAQDwAAAAcABQAAAAAAWAIAAAUAAACQAAMEhFGw"
86934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "EA8AAAAGAAUAAAAAAGACAAAEAAAAhCCwQLBQDwAJAAUAAAAAAGgCAAAFAAAAgXC7UIGCuyAQAAAA"
87934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AwAAAAEAAAAEAAAAAwAAAAQAAAABAAY8aW5pdD4AAUkABElKSVMABElTSUoAAUoABEpKSVMADkxQ"
88934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "cm90b0NvbXBhcmU7ABJMamF2YS9sYW5nL09iamVjdDsAEVByb3RvQ29tcGFyZS5qYXZhAAFTAAFW"
89934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AAJtMQACbTIAAm0zAAJtNAABAAcOAAIDAAAABw4AAwMAAAAHDgAEAwAAAAcOAAUDAAAABw4AAAAB"
90934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "BACAgATEAgEA3AIBAPgCAQCUAwEArAMAAAwAAAAAAAAAAQAAAAAAAAABAAAADwAAAHAAAAACAAAA"
91934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "BgAAAKwAAAADAAAABAAAAMQAAAAFAAAABgAAAPQAAAAGAAAAAQAAACQBAAABIAAABQAAAEQBAAAB"
92934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "EAAAAgAAAMgBAAACIAAADwAAAN4BAAADIAAABQAAAEsCAAAAIAAAAQAAAHACAAAAEAAAAQAAAIwC"
93934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AAA=";
94934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom
95934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom// class ProtoCompare2 {
96934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom//     int m1(short x, int y, long z) { return x + y + (int)z; }
97934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom//     int m2(short x, int y, long z) { return x + y + (int)z; }
98934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom//     int m3(long x, int y, short z) { return (int)x + y + z; }
99934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom//     long m4(long x, int y, short z) { return x + y + z; }
100934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom// }
101934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstromstatic const char kProtoCompare2Dex[] =
102934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "ZGV4CjAzNQDVUXj687EpyTTDJZEZPA8dEYnDlm0Ir6YgAwAAcAAAAHhWNBIAAAAAAAAAAIwCAAAP"
103934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AAAAcAAAAAYAAACsAAAABAAAAMQAAAAAAAAAAAAAAAYAAAD0AAAAAQAAACQBAADcAQAARAEAAN4B"
104934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AADmAQAA6QEAAO8BAAD1AQAA+AEAAP4BAAAPAgAAIwIAADcCAAA6AgAAPQIAAEECAABFAgAASQIA"
105934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AAEAAAAEAAAABgAAAAcAAAAJAAAACgAAAAIAAAAAAAAAyAEAAAMAAAAAAAAA1AEAAAUAAAABAAAA"
106934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "yAEAAAoAAAAFAAAAAAAAAAIAAwAAAAAAAgABAAsAAAACAAEADAAAAAIAAAANAAAAAgACAA4AAAAD"
107934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AAMAAAAAAAIAAAAAAAAAAwAAAAAAAAAIAAAAAAAAAHICAAAAAAAAAQABAAEAAABNAgAABAAAAHAQ"
108934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "BQAAAA4ABwAFAAAAAABSAgAABQAAAJAAAwSEUbAQDwAAAAcABQAAAAAAWgIAAAUAAACQAAMEhFGw"
109934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "EA8AAAAGAAUAAAAAAGICAAAEAAAAhCCwQLBQDwAJAAUAAAAAAGoCAAAFAAAAgXC7UIGCuyAQAAAA"
110934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AwAAAAEAAAAEAAAAAwAAAAQAAAABAAY8aW5pdD4AAUkABElKSVMABElTSUoAAUoABEpKSVMAD0xQ"
111934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "cm90b0NvbXBhcmUyOwASTGphdmEvbGFuZy9PYmplY3Q7ABJQcm90b0NvbXBhcmUyLmphdmEAAVMA"
112934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AVYAAm0xAAJtMgACbTMAAm00AAEABw4AAgMAAAAHDgADAwAAAAcOAAQDAAAABw4ABQMAAAAHDgAA"
113934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AAEEAICABMQCAQDcAgEA+AIBAJQDAQCsAwwAAAAAAAAAAQAAAAAAAAABAAAADwAAAHAAAAACAAAA"
114934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "BgAAAKwAAAADAAAABAAAAMQAAAAFAAAABgAAAPQAAAAGAAAAAQAAACQBAAABIAAABQAAAEQBAAAB"
115934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "EAAAAgAAAMgBAAACIAAADwAAAN4BAAADIAAABQAAAE0CAAAAIAAAAQAAAHICAAAAEAAAAQAAAIwC"
116934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom  "AAA=";
117934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom
118b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers// javac MyClass.java && dx --dex --output=MyClass.dex
119b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers//   --core-library MyClass.class java/lang/Object.class && base64 MyClass.dex
120b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers// package java.lang;
121b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers// public class Object {}
122b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers// class MyClass {
123b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers//   native void foo();
124b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers//   native int fooI(int x);
125b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers//   native int fooII(int x, int y);
126b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers//   native double fooDD(double x, double y);
127b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers//   native Object fooIOO(int x, Object y, Object z);
128b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers//   static native Object fooSIOO(int x, Object y, Object z);
129df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers//   static synchronized native Object fooSSIOO(int x, Object y, Object z);
130b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers// }
131b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogersstatic const char kMyClassNativesDex[] =
132df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers  "ZGV4CjAzNQA4WWrpXgdlkoTHR8Yubx4LJO4HbGsX1p1EAwAAcAAAAHhWNBIAAAAAAAAAALACAAAT"
133df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers  "AAAAcAAAAAUAAAC8AAAABQAAANAAAAAAAAAAAAAAAAkAAAAMAQAAAgAAAFQBAACwAQAAlAEAAOIB"
134df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers  "AADqAQAA7QEAAPIBAAD1AQAA+QEAAP4BAAAEAgAADwIAACMCAAAxAgAAPgIAAEECAABGAgAATQIA"
135df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers  "AFMCAABaAgAAYgIAAGsCAAABAAAAAwAAAAcAAAAIAAAACwAAAAIAAAAAAAAAwAEAAAQAAAABAAAA"
136df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers  "yAEAAAUAAAABAAAA0AEAAAYAAAADAAAA2AEAAAsAAAAEAAAAAAAAAAIABAAAAAAAAgAEAAwAAAAC"
137df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers  "AAAADQAAAAIAAQAOAAAAAgACAA8AAAACAAMAEAAAAAIAAwARAAAAAgADABIAAAADAAQAAAAAAAMA"
138df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers  "AAABAAAA/////wAAAAAKAAAAAAAAAH8CAAAAAAAAAgAAAAAAAAADAAAAAAAAAAkAAAAAAAAAiQIA"
139df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers  "AAAAAAABAAEAAAAAAHUCAAABAAAADgAAAAEAAQABAAAAegIAAAQAAABwEAgAAAAOAAIAAAAAAAAA"
140df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers  "AQAAAAEAAAACAAAAAQABAAMAAAABAAMAAwAGPGluaXQ+AAFEAANEREQAAUkAAklJAANJSUkABExJ"
141df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers  "TEwACUxNeUNsYXNzOwASTGphdmEvbGFuZy9PYmplY3Q7AAxNeUNsYXNzLmphdmEAC09iamVjdC5q"
142df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers  "YXZhAAFWAANmb28ABWZvb0REAARmb29JAAVmb29JSQAGZm9vSU9PAAdmb29TSU9PAAhmb29TU0lP"
143df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers  "TwADAAcOAAEABw4AAAABAAiBgASUAwAAAwUAgIAEqAMGiAIAAaiCCAABgAIAAYACAAGAAgABgAIA"
144df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers  "AYACAAwAAAAAAAAAAQAAAAAAAAABAAAAEwAAAHAAAAACAAAABQAAALwAAAADAAAABQAAANAAAAAF"
145df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers  "AAAACQAAAAwBAAAGAAAAAgAAAFQBAAABIAAAAgAAAJQBAAABEAAABAAAAMABAAACIAAAEwAAAOIB"
146df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers  "AAADIAAAAgAAAHUCAAAAIAAAAgAAAH8CAAAAEAAAAQAAALACAAA=";
147b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers
148578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstromstatic inline RawDexFile* OpenRawDexFileBase64(const char* base64) {
149578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom  CHECK(base64 != NULL);
150578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom  size_t length;
151578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom  byte* dex_file = DecodeBase64(base64, &length);
152578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom  CHECK(dex_file != NULL);
153578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom  RawDexFile* raw_dex_file = RawDexFile::OpenPtr(dex_file, length);
154578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom  CHECK(raw_dex_file != NULL);
155578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom  return raw_dex_file;
156578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom}
157578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom
158578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstromclass RuntimeTest : public testing::Test {
159578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom protected:
160578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom  virtual void SetUp() {
161578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom    ASSERT_TRUE(Thread::Init());
162578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom    ASSERT_TRUE(Thread::Attach() != NULL);
163578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom    ASSERT_TRUE(Heap::Init());
164578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom
165578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom    java_lang_raw_dex_file_.reset(OpenRawDexFileBase64(kJavaLangDex));
166578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom
167578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom    std::vector<RawDexFile*> boot_class_path;
168578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom    boot_class_path.push_back(java_lang_raw_dex_file_.get());
169578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom
170578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom    class_linker_.reset(ClassLinker::Create(boot_class_path));
171578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom    CHECK(class_linker_ != NULL);
172578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom  }
173578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom
174578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom  virtual void TearDown() {
175578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom    Heap::Destroy();
176578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom  }
177578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom
178578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom  scoped_ptr<RawDexFile> java_lang_raw_dex_file_;
179578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom  scoped_ptr<ClassLinker> class_linker_;
180578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom};
181578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom
182934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom}  // namespace art
183