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