common_test.h revision f734cf55d510976f4862b15e35fc86eae2a3daf8
1934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom// Copyright 2011 Google Inc. All Rights Reserved. 2934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom 3b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom#include <dirent.h> 40af5543f8ea20c3e655b2d748a1b7dcf283792feElliott Hughes#include <dlfcn.h> 5b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom#include <sys/stat.h> 6b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom#include <sys/types.h> 7b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom 8578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom#include "base64.h" 9578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom#include "heap.h" 10578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom#include "thread.h" 11ac5b9e22d32c4f986783a2207b08ade769619f6fJesse Wilson#include "stringprintf.h" 12578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom#include "class_linker.h" 13578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom#include "dex_file.h" 14a331b3cc392132c7333d36649a8310f38f4822ccBrian Carlstrom 150af5543f8ea20c3e655b2d748a1b7dcf283792feElliott Hughes#include "unicode/uclean.h" 160af5543f8ea20c3e655b2d748a1b7dcf283792feElliott Hughes#include "unicode/uvernum.h" 170af5543f8ea20c3e655b2d748a1b7dcf283792feElliott Hughes 18a331b3cc392132c7333d36649a8310f38f4822ccBrian Carlstrom#include "gtest/gtest.h" 19a331b3cc392132c7333d36649a8310f38f4822ccBrian Carlstrom 20934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstromnamespace art { 21934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom 22a331b3cc392132c7333d36649a8310f38f4822ccBrian Carlstrom// package java.lang; 23a331b3cc392132c7333d36649a8310f38f4822ccBrian Carlstrom// public class Object {} 24934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom// 25934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom// class MyClass {} 26934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstromstatic const char kMyClassDex[] = 27934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "ZGV4CjAzNQA5Nm9IrCVm91COwepff7LhIE23GZIxGjgIAgAAcAAAAHhWNBIAAAAAAAAAAIABAAAG" 28934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "AAAAcAAAAAMAAACIAAAAAQAAAJQAAAAAAAAAAAAAAAIAAACgAAAAAgAAALAAAAAYAQAA8AAAABwB" 29934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "AAAkAQAALwEAAEMBAABRAQAAXgEAAAEAAAACAAAABQAAAAUAAAACAAAAAAAAAAAAAAAAAAAAAQAA" 30934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "AAAAAAABAAAAAQAAAP////8AAAAABAAAAAAAAABrAQAAAAAAAAAAAAAAAAAAAQAAAAAAAAADAAAA" 31934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "AAAAAHUBAAAAAAAAAQABAAAAAABhAQAAAQAAAA4AAAABAAEAAQAAAGYBAAAEAAAAcBABAAAADgAG" 32934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "PGluaXQ+AAlMTXlDbGFzczsAEkxqYXZhL2xhbmcvT2JqZWN0OwAMTXlDbGFzcy5qYXZhAAtPYmpl" 33934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "Y3QuamF2YQABVgACAAcOAAUABw4AAAABAAGBgATwAQAAAQAAgIAEhAIACwAAAAAAAAABAAAAAAAA" 34934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "AAEAAAAGAAAAcAAAAAIAAAADAAAAiAAAAAMAAAABAAAAlAAAAAUAAAACAAAAoAAAAAYAAAACAAAA" 35934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "sAAAAAEgAAACAAAA8AAAAAIgAAAGAAAAHAEAAAMgAAACAAAAYQEAAAAgAAACAAAAawEAAAAQAAAB" 36934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "AAAAgAEAAA=="; 37934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom 38934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom// class Nested { 39934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom// class Inner { 40934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom// } 41934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom// } 42934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstromstatic const char kNestedDex[] = 43934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "ZGV4CjAzNQAQedgAe7gM1B/WHsWJ6L7lGAISGC7yjD2IAwAAcAAAAHhWNBIAAAAAAAAAAMQCAAAP" 44934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "AAAAcAAAAAcAAACsAAAAAgAAAMgAAAABAAAA4AAAAAMAAADoAAAAAgAAAAABAABIAgAAQAEAAK4B" 45934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "AAC2AQAAvQEAAM0BAADXAQAA+wEAABsCAAA+AgAAUgIAAF8CAABiAgAAZgIAAHMCAAB5AgAAgQIA" 46934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "AAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAkAAAAJAAAABgAAAAAAAAAKAAAABgAAAKgBAAAAAAEA" 47934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "DQAAAAAAAQAAAAAAAQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAIAAAAiAEAAKsCAAAA" 48934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "AAAAAQAAAAAAAAAFAAAAAAAAAAgAAACYAQAAuAIAAAAAAAACAAAAlAIAAJoCAAABAAAAowIAAAIA" 49934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "AgABAAAAiAIAAAYAAABbAQAAcBACAAAADgABAAEAAQAAAI4CAAAEAAAAcBACAAAADgBAAQAAAAAA" 50934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "AAAAAAAAAAAATAEAAAAAAAAAAAAAAAAAAAEAAAABAAY8aW5pdD4ABUlubmVyAA5MTmVzdGVkJElu" 51934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "bmVyOwAITE5lc3RlZDsAIkxkYWx2aWsvYW5ub3RhdGlvbi9FbmNsb3NpbmdDbGFzczsAHkxkYWx2" 52934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "aWsvYW5ub3RhdGlvbi9Jbm5lckNsYXNzOwAhTGRhbHZpay9hbm5vdGF0aW9uL01lbWJlckNsYXNz" 53934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "ZXM7ABJMamF2YS9sYW5nL09iamVjdDsAC05lc3RlZC5qYXZhAAFWAAJWTAALYWNjZXNzRmxhZ3MA" 54934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "BG5hbWUABnRoaXMkMAAFdmFsdWUAAgEABw4AAQAHDjwAAgIBDhgBAgMCCwQADBcBAgQBDhwBGAAA" 55934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "AQEAAJAgAICABNQCAAABAAGAgATwAgAAEAAAAAAAAAABAAAAAAAAAAEAAAAPAAAAcAAAAAIAAAAH" 56934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "AAAArAAAAAMAAAACAAAAyAAAAAQAAAABAAAA4AAAAAUAAAADAAAA6AAAAAYAAAACAAAAAAEAAAMQ" 57934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "AAACAAAAQAEAAAEgAAACAAAAVAEAAAYgAAACAAAAiAEAAAEQAAABAAAAqAEAAAIgAAAPAAAArgEA" 58934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "AAMgAAACAAAAiAIAAAQgAAADAAAAlAIAAAAgAAACAAAAqwIAAAAQAAABAAAAxAIAAA=="; 59934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom 60934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom// class ProtoCompare { 61934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom// int m1(short x, int y, long z) { return x + y + (int)z; } 62934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom// int m2(short x, int y, long z) { return x + y + (int)z; } 63934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom// int m3(long x, int y, short z) { return (int)x + y + z; } 64934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom// long m4(long x, int y, short z) { return x + y + z; } 65934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom// } 66934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstromstatic const char kProtoCompareDex[] = 67934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "ZGV4CjAzNQBLUetu+TVZ8gsYsCOFoij7ecsHaGSEGA8gAwAAcAAAAHhWNBIAAAAAAAAAAIwCAAAP" 68934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "AAAAcAAAAAYAAACsAAAABAAAAMQAAAAAAAAAAAAAAAYAAAD0AAAAAQAAACQBAADcAQAARAEAAN4B" 69934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "AADmAQAA6QEAAO8BAAD1AQAA+AEAAP4BAAAOAgAAIgIAADUCAAA4AgAAOwIAAD8CAABDAgAARwIA" 70934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "AAEAAAAEAAAABgAAAAcAAAAJAAAACgAAAAIAAAAAAAAAyAEAAAMAAAAAAAAA1AEAAAUAAAABAAAA" 71934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "yAEAAAoAAAAFAAAAAAAAAAIAAwAAAAAAAgABAAsAAAACAAEADAAAAAIAAAANAAAAAgACAA4AAAAD" 72934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "AAMAAAAAAAIAAAAAAAAAAwAAAAAAAAAIAAAAAAAAAHACAAAAAAAAAQABAAEAAABLAgAABAAAAHAQ" 73934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "BQAAAA4ABwAFAAAAAABQAgAABQAAAJAAAwSEUbAQDwAAAAcABQAAAAAAWAIAAAUAAACQAAMEhFGw" 74934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "EA8AAAAGAAUAAAAAAGACAAAEAAAAhCCwQLBQDwAJAAUAAAAAAGgCAAAFAAAAgXC7UIGCuyAQAAAA" 75934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "AwAAAAEAAAAEAAAAAwAAAAQAAAABAAY8aW5pdD4AAUkABElKSVMABElTSUoAAUoABEpKSVMADkxQ" 76934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "cm90b0NvbXBhcmU7ABJMamF2YS9sYW5nL09iamVjdDsAEVByb3RvQ29tcGFyZS5qYXZhAAFTAAFW" 77934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "AAJtMQACbTIAAm0zAAJtNAABAAcOAAIDAAAABw4AAwMAAAAHDgAEAwAAAAcOAAUDAAAABw4AAAAB" 78934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "BACAgATEAgEA3AIBAPgCAQCUAwEArAMAAAwAAAAAAAAAAQAAAAAAAAABAAAADwAAAHAAAAACAAAA" 79934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "BgAAAKwAAAADAAAABAAAAMQAAAAFAAAABgAAAPQAAAAGAAAAAQAAACQBAAABIAAABQAAAEQBAAAB" 80934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "EAAAAgAAAMgBAAACIAAADwAAAN4BAAADIAAABQAAAEsCAAAAIAAAAQAAAHACAAAAEAAAAQAAAIwC" 81934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "AAA="; 82934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom 83934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom// class ProtoCompare2 { 84934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom// int m1(short x, int y, long z) { return x + y + (int)z; } 85934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom// int m2(short x, int y, long z) { return x + y + (int)z; } 86934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom// int m3(long x, int y, short z) { return (int)x + y + z; } 87934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom// long m4(long x, int y, short z) { return x + y + z; } 88934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom// } 89934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstromstatic const char kProtoCompare2Dex[] = 90934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "ZGV4CjAzNQDVUXj687EpyTTDJZEZPA8dEYnDlm0Ir6YgAwAAcAAAAHhWNBIAAAAAAAAAAIwCAAAP" 91934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "AAAAcAAAAAYAAACsAAAABAAAAMQAAAAAAAAAAAAAAAYAAAD0AAAAAQAAACQBAADcAQAARAEAAN4B" 92934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "AADmAQAA6QEAAO8BAAD1AQAA+AEAAP4BAAAPAgAAIwIAADcCAAA6AgAAPQIAAEECAABFAgAASQIA" 93934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "AAEAAAAEAAAABgAAAAcAAAAJAAAACgAAAAIAAAAAAAAAyAEAAAMAAAAAAAAA1AEAAAUAAAABAAAA" 94934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "yAEAAAoAAAAFAAAAAAAAAAIAAwAAAAAAAgABAAsAAAACAAEADAAAAAIAAAANAAAAAgACAA4AAAAD" 95934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "AAMAAAAAAAIAAAAAAAAAAwAAAAAAAAAIAAAAAAAAAHICAAAAAAAAAQABAAEAAABNAgAABAAAAHAQ" 96934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "BQAAAA4ABwAFAAAAAABSAgAABQAAAJAAAwSEUbAQDwAAAAcABQAAAAAAWgIAAAUAAACQAAMEhFGw" 97934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "EA8AAAAGAAUAAAAAAGICAAAEAAAAhCCwQLBQDwAJAAUAAAAAAGoCAAAFAAAAgXC7UIGCuyAQAAAA" 98934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "AwAAAAEAAAAEAAAAAwAAAAQAAAABAAY8aW5pdD4AAUkABElKSVMABElTSUoAAUoABEpKSVMAD0xQ" 99934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "cm90b0NvbXBhcmUyOwASTGphdmEvbGFuZy9PYmplY3Q7ABJQcm90b0NvbXBhcmUyLmphdmEAAVMA" 100934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "AVYAAm0xAAJtMgACbTMAAm00AAEABw4AAgMAAAAHDgADAwAAAAcOAAQDAAAABw4ABQMAAAAHDgAA" 101934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "AAEEAICABMQCAQDcAgEA+AIBAJQDAQCsAwwAAAAAAAAAAQAAAAAAAAABAAAADwAAAHAAAAACAAAA" 102934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "BgAAAKwAAAADAAAABAAAAMQAAAAFAAAABgAAAPQAAAAGAAAAAQAAACQBAAABIAAABQAAAEQBAAAB" 103934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "EAAAAgAAAMgBAAACIAAADwAAAN4BAAADIAAABQAAAE0CAAAAIAAAAQAAAHICAAAAEAAAAQAAAIwC" 104934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom "AAA="; 105934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom 106b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers// javac MyClass.java && dx --dex --output=MyClass.dex 107b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers// --core-library MyClass.class java/lang/Object.class && base64 MyClass.dex 108b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers// package java.lang; 109b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers// public class Object {} 110b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers// class MyClass { 111b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers// native void foo(); 112b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers// native int fooI(int x); 113b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers// native int fooII(int x, int y); 114b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers// native double fooDD(double x, double y); 115b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers// native Object fooIOO(int x, Object y, Object z); 116b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers// static native Object fooSIOO(int x, Object y, Object z); 117df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers// static synchronized native Object fooSSIOO(int x, Object y, Object z); 118b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers// } 119b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogersstatic const char kMyClassNativesDex[] = 120df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers "ZGV4CjAzNQA4WWrpXgdlkoTHR8Yubx4LJO4HbGsX1p1EAwAAcAAAAHhWNBIAAAAAAAAAALACAAAT" 121df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers "AAAAcAAAAAUAAAC8AAAABQAAANAAAAAAAAAAAAAAAAkAAAAMAQAAAgAAAFQBAACwAQAAlAEAAOIB" 122df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers "AADqAQAA7QEAAPIBAAD1AQAA+QEAAP4BAAAEAgAADwIAACMCAAAxAgAAPgIAAEECAABGAgAATQIA" 123df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers "AFMCAABaAgAAYgIAAGsCAAABAAAAAwAAAAcAAAAIAAAACwAAAAIAAAAAAAAAwAEAAAQAAAABAAAA" 124df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers "yAEAAAUAAAABAAAA0AEAAAYAAAADAAAA2AEAAAsAAAAEAAAAAAAAAAIABAAAAAAAAgAEAAwAAAAC" 125df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers "AAAADQAAAAIAAQAOAAAAAgACAA8AAAACAAMAEAAAAAIAAwARAAAAAgADABIAAAADAAQAAAAAAAMA" 126df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers "AAABAAAA/////wAAAAAKAAAAAAAAAH8CAAAAAAAAAgAAAAAAAAADAAAAAAAAAAkAAAAAAAAAiQIA" 127df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers "AAAAAAABAAEAAAAAAHUCAAABAAAADgAAAAEAAQABAAAAegIAAAQAAABwEAgAAAAOAAIAAAAAAAAA" 128df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers "AQAAAAEAAAACAAAAAQABAAMAAAABAAMAAwAGPGluaXQ+AAFEAANEREQAAUkAAklJAANJSUkABExJ" 129df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers "TEwACUxNeUNsYXNzOwASTGphdmEvbGFuZy9PYmplY3Q7AAxNeUNsYXNzLmphdmEAC09iamVjdC5q" 130df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers "YXZhAAFWAANmb28ABWZvb0REAARmb29JAAVmb29JSQAGZm9vSU9PAAdmb29TSU9PAAhmb29TU0lP" 131df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers "TwADAAcOAAEABw4AAAABAAiBgASUAwAAAwUAgIAEqAMGiAIAAaiCCAABgAIAAYACAAGAAgABgAIA" 132df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers "AYACAAwAAAAAAAAAAQAAAAAAAAABAAAAEwAAAHAAAAACAAAABQAAALwAAAADAAAABQAAANAAAAAF" 133df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers "AAAACQAAAAwBAAAGAAAAAgAAAFQBAAABIAAAAgAAAJQBAAABEAAABAAAAMABAAACIAAAEwAAAOIB" 134df20fe0c097073f75f22d16e72fd3636a31d3ca1Ian Rogers "AAADIAAAAgAAAHUCAAAAIAAAAgAAAH8CAAAAEAAAAQAAALACAAA="; 135b033c75ebda80ac75f936366fe78d1edf5cec937Ian Rogers 136419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapiro// class CreateMethodDescriptor { 137419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapiro// Float m1(int a, double b, long c, Object d) { return null; } 138419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapiro// CreateMethodDescriptor m2(boolean x, short y, char z) { return null; } 139419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapiro// } 140419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapirostatic const char kCreateMethodDescriptorDex[] = 141419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapiro "ZGV4CjAzNQBSU7aKdNXwH+uOpti/mvZ4/Dk8wM8VtNbgAgAAcAAAAHhWNBIAAAAAAAAAAEwCAAAQ" 142419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapiro "AAAAcAAAAAoAAACwAAAAAwAAANgAAAAAAAAAAAAAAAQAAAD8AAAAAQAAABwBAACkAQAAPAEAAJQB" 143419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapiro "AACcAQAAnwEAALwBAAC/AQAAwgEAAMUBAADfAQAA5gEAAOwBAAD/AQAAEwIAABYCAAAZAgAAHAIA" 144419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapiro "ACACAAABAAAAAwAAAAQAAAAFAAAABgAAAAkAAAAKAAAACwAAAAwAAAANAAAACAAAAAQAAAB8AQAA" 145419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapiro "BwAAAAUAAACIAQAADAAAAAgAAAAAAAAABAACAAAAAAAEAAEADgAAAAQAAAAPAAAABgACAAAAAAAE" 146419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapiro "AAAAAAAAAAYAAAAAAAAAAgAAAAAAAAA6AgAAAAAAAAEAAQABAAAAJAIAAAQAAABwEAMAAAAOAAgA" 147419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapiro "BwAAAAAAKQIAAAIAAAASABEABQAEAAAAAAAyAgAAAgAAABIAEQADAAAACQAHAAAAAAAEAAAAAgAB" 148419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapiro "AAMABgAGPGluaXQ+AAFDABtDcmVhdGVNZXRob2REZXNjcmlwdG9yLmphdmEAAUQAAUkAAUoAGExD" 149419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapiro "cmVhdGVNZXRob2REZXNjcmlwdG9yOwAFTElESkwABExaU0MAEUxqYXZhL2xhbmcvRmxvYXQ7ABJM" 150419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapiro "amF2YS9sYW5nL09iamVjdDsAAVMAAVYAAVoAAm0xAAJtMgABAAcOAAIEAAAAAAcOAAMDAAAABw4A" 151419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapiro "AAABAgCAgAS8AgEA1AIBAOgCDAAAAAAAAAABAAAAAAAAAAEAAAAQAAAAcAAAAAIAAAAKAAAAsAAA" 152419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapiro "AAMAAAADAAAA2AAAAAUAAAAEAAAA/AAAAAYAAAABAAAAHAEAAAEgAAADAAAAPAEAAAEQAAACAAAA" 153419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapiro "fAEAAAIgAAAQAAAAlAEAAAMgAAADAAAAJAIAAAAgAAABAAAAOgIAAAAQAAABAAAATAIAAA=="; 154419ec7bbcdbf56a9d2a9fd7f91f9ace279e0b664Carl Shapiro 155f7ed11ae81002f83b78012c4bbe01e5e994ecc3bBrian Carlstrom// class X {} 156f7ed11ae81002f83b78012c4bbe01e5e994ecc3bBrian Carlstrom// class Y extends X {} 157f7ed11ae81002f83b78012c4bbe01e5e994ecc3bBrian Carlstromstatic const char kXandY[] = 158f7ed11ae81002f83b78012c4bbe01e5e994ecc3bBrian Carlstrom "ZGV4CjAzNQAlLMqyB72TxJW4zl5w75F072u4Ig6KvCMEAgAAcAAAAHhWNBIAAAAAAAAAAHwBAAAG" 159f7ed11ae81002f83b78012c4bbe01e5e994ecc3bBrian Carlstrom "AAAAcAAAAAQAAACIAAAAAQAAAJgAAAAAAAAAAAAAAAMAAACkAAAAAgAAALwAAAAIAQAA/AAAACwB" 160f7ed11ae81002f83b78012c4bbe01e5e994ecc3bBrian Carlstrom "AAA0AQAAOQEAAD4BAABSAQAAVQEAAAEAAAACAAAAAwAAAAQAAAAEAAAAAwAAAAAAAAAAAAAAAAAA" 161f7ed11ae81002f83b78012c4bbe01e5e994ecc3bBrian Carlstrom "AAEAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAIAAAAAAAAABQAAAAAAAABnAQAAAAAAAAEAAAAAAAAA" 162f7ed11ae81002f83b78012c4bbe01e5e994ecc3bBrian Carlstrom "AAAAAAAAAAAFAAAAAAAAAHEBAAAAAAAAAQABAAEAAABdAQAABAAAAHAQAgAAAA4AAQABAAEAAABi" 163f7ed11ae81002f83b78012c4bbe01e5e994ecc3bBrian Carlstrom "AQAABAAAAHAQAAAAAA4ABjxpbml0PgADTFg7AANMWTsAEkxqYXZhL2xhbmcvT2JqZWN0OwABVgAG" 164f7ed11ae81002f83b78012c4bbe01e5e994ecc3bBrian Carlstrom "WC5qYXZhAAIABw4AAwAHDgAAAAEAAICABPwBAAABAAGAgASUAgALAAAAAAAAAAEAAAAAAAAAAQAA" 165f7ed11ae81002f83b78012c4bbe01e5e994ecc3bBrian Carlstrom "AAYAAABwAAAAAgAAAAQAAACIAAAAAwAAAAEAAACYAAAABQAAAAMAAACkAAAABgAAAAIAAAC8AAAA" 166f7ed11ae81002f83b78012c4bbe01e5e994ecc3bBrian Carlstrom "ASAAAAIAAAD8AAAAAiAAAAYAAAAsAQAAAyAAAAIAAABdAQAAACAAAAIAAABnAQAAABAAAAEAAAB8" 167f7ed11ae81002f83b78012c4bbe01e5e994ecc3bBrian Carlstrom "AQAA"; 168f7ed11ae81002f83b78012c4bbe01e5e994ecc3bBrian Carlstrom 1697833bd261d78be2c42284031f169a62c9065cc3cJesse Wilson// class Statics { 1707833bd261d78be2c42284031f169a62c9065cc3cJesse Wilson// static boolean s0 = true; 1717833bd261d78be2c42284031f169a62c9065cc3cJesse Wilson// static byte s1 = 5; 1727833bd261d78be2c42284031f169a62c9065cc3cJesse Wilson// static char s2 = 'a'; 1737833bd261d78be2c42284031f169a62c9065cc3cJesse Wilson// static short s3 = (short) 65000; 1747833bd261d78be2c42284031f169a62c9065cc3cJesse Wilson// static int s4 = 2000000000; 1757833bd261d78be2c42284031f169a62c9065cc3cJesse Wilson// static long s5 = 0x123456789abcdefL; 1767833bd261d78be2c42284031f169a62c9065cc3cJesse Wilson// static float s6 = 0.5f; 1777833bd261d78be2c42284031f169a62c9065cc3cJesse Wilson// static double s7 = 16777217; 1787833bd261d78be2c42284031f169a62c9065cc3cJesse Wilson// static Object s8 = "android"; 1797833bd261d78be2c42284031f169a62c9065cc3cJesse Wilson// static Object[] s9 = { "a", "b" }; 1807833bd261d78be2c42284031f169a62c9065cc3cJesse Wilson// } 1817833bd261d78be2c42284031f169a62c9065cc3cJesse Wilsonstatic const char kStatics[] = 1827833bd261d78be2c42284031f169a62c9065cc3cJesse Wilson "ZGV4CjAzNQAYalInXcX4y0OBgb2yCw2/jGzZBSe34zmwAwAAcAAAAHhWNBIAAAAAAAAAABwDAAAc" 1837833bd261d78be2c42284031f169a62c9065cc3cJesse Wilson "AAAAcAAAAAwAAADgAAAAAQAAABABAAAKAAAAHAEAAAMAAABsAQAAAQAAAIQBAAAMAgAApAEAADwC" 1847833bd261d78be2c42284031f169a62c9065cc3cJesse Wilson "AABGAgAATgIAAFECAABUAgAAVwIAAFoCAABdAgAAYAIAAGsCAAB/AgAAggIAAJACAACTAgAAlgIA" 1857833bd261d78be2c42284031f169a62c9065cc3cJesse Wilson "AKsCAACuAgAAtwIAALoCAAC+AgAAwgIAAMYCAADKAgAAzgIAANICAADWAgAA2gIAAN4CAAACAAAA" 1867833bd261d78be2c42284031f169a62c9065cc3cJesse Wilson "AwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACQAAAAoAAAAMAAAADQAAAA4AAAAMAAAACQAAAAAAAAAG" 1877833bd261d78be2c42284031f169a62c9065cc3cJesse Wilson "AAoAEgAAAAYAAAATAAAABgABABQAAAAGAAgAFQAAAAYABAAWAAAABgAFABcAAAAGAAMAGAAAAAYA" 1887833bd261d78be2c42284031f169a62c9065cc3cJesse Wilson "AgAZAAAABgAHABoAAAAGAAsAGwAAAAYAAAAAAAAABgAAAAEAAAAHAAAAAQAAAAYAAAAAAAAABwAA" 1897833bd261d78be2c42284031f169a62c9065cc3cJesse Wilson "AAAAAAALAAAAAAAAAPUCAAAAAAAABAAAAAAAAADiAgAAOAAAABITagMAABJQawABABMAYQBsAAIA" 1907833bd261d78be2c42284031f169a62c9065cc3cJesse Wilson "EwDo/W0AAwAUAACUNXdnAAQAGADvzauJZ0UjAWgABQAVAAA/ZwAGABgAAAAAEAAAcEFoAAcAGgAQ" 1917833bd261d78be2c42284031f169a62c9065cc3cJesse Wilson "AGkACAASICMACwASARoCDwBNAgABGgERAE0BAANpAAkADgABAAEAAQAAAPACAAAEAAAAcBACAAAA" 1927833bd261d78be2c42284031f169a62c9065cc3cJesse Wilson "DgAIPGNsaW5pdD4ABjxpbml0PgABQgABQwABRAABRgABSQABSgAJTFN0YXRpY3M7ABJMamF2YS9s" 1937833bd261d78be2c42284031f169a62c9065cc3cJesse Wilson "YW5nL09iamVjdDsAAVMADFN0YXRpY3MuamF2YQABVgABWgATW0xqYXZhL2xhbmcvT2JqZWN0OwAB" 1947833bd261d78be2c42284031f169a62c9065cc3cJesse Wilson "YQAHYW5kcm9pZAABYgACczAAAnMxAAJzMgACczMAAnM0AAJzNQACczYAAnM3AAJzOAACczkAAgAH" 1957833bd261d78be2c42284031f169a62c9065cc3cJesse Wilson "HS08S0taeEt4SwABAAcOAAoAAgAACAEIAQgBCAEIAQgBCAEIAQgBCACIgASkAwGAgASkBAAAAAwA" 1967833bd261d78be2c42284031f169a62c9065cc3cJesse Wilson "AAAAAAAAAQAAAAAAAAABAAAAHAAAAHAAAAACAAAADAAAAOAAAAADAAAAAQAAABABAAAEAAAACgAA" 1977833bd261d78be2c42284031f169a62c9065cc3cJesse Wilson "ABwBAAAFAAAAAwAAAGwBAAAGAAAAAQAAAIQBAAABIAAAAgAAAKQBAAACIAAAHAAAADwCAAADIAAA" 1987833bd261d78be2c42284031f169a62c9065cc3cJesse Wilson "AgAAAOICAAAAIAAAAQAAAPUCAAAAEAAAAQAAABwDAAA="; 1997833bd261d78be2c42284031f169a62c9065cc3cJesse Wilson 2009b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro// class Main { 2019b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro// public static void main(String args[]) { 2029b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro// } 2039b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro// } 2049b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapirostatic const char kMainDex[] = 2059b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro "ZGV4CjAzNQAPNypTL1TulODHFdpEa2pP98I7InUu7uQgAgAAcAAAAHhWNBIAAAAAAAAAAIwBAAAI" 2069b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro "AAAAcAAAAAQAAACQAAAAAgAAAKAAAAAAAAAAAAAAAAMAAAC4AAAAAQAAANAAAAAwAQAA8AAAACIB" 2079b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro "AAAqAQAAMgEAAEYBAABRAQAAVAEAAFgBAABtAQAAAQAAAAIAAAAEAAAABgAAAAQAAAACAAAAAAAA" 2089b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro "AAUAAAACAAAAHAEAAAAAAAAAAAAAAAABAAcAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAADAAAA" 2099b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro "AAAAAH4BAAAAAAAAAQABAAEAAABzAQAABAAAAHAQAgAAAA4AAQABAAAAAAB4AQAAAQAAAA4AAAAB" 2109b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro "AAAAAwAGPGluaXQ+AAZMTWFpbjsAEkxqYXZhL2xhbmcvT2JqZWN0OwAJTWFpbi5qYXZhAAFWAAJW" 2119b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro "TAATW0xqYXZhL2xhbmcvU3RyaW5nOwAEbWFpbgABAAcOAAMBAAcOAAAAAgAAgIAE8AEBCYgCDAAA" 2129b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro "AAAAAAABAAAAAAAAAAEAAAAIAAAAcAAAAAIAAAAEAAAAkAAAAAMAAAACAAAAoAAAAAUAAAADAAAA" 2139b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro "uAAAAAYAAAABAAAA0AAAAAEgAAACAAAA8AAAAAEQAAABAAAAHAEAAAIgAAAIAAAAIgEAAAMgAAAC" 2149b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro "AAAAcwEAAAAgAAABAAAAfgEAAAAQAAABAAAAjAEAAA=="; 2159b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro 2169b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro// class StaticLeafMethods { 2179b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro// static void nop() { 2189b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro// } 2199b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro// static byte identity(byte x) { 2209b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro// return x; 2219b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro// } 2229b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro// static int identity(int x) { 2239b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro// return x; 2249b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro// } 2259b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro// static int sum(int a, int b) { 2269b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro// return a + b; 2279b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro// } 2289b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro// static int sum(int a, int b, int c) { 2299b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro// return a + b + c; 2309b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro// } 2319b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro// static int sum(int a, int b, int c, int d) { 2329b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro// return a + b + c + d; 2339b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro// } 2349b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro// static int sum(int a, int b, int c, int d, int e) { 2359b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro// return a + b + c + d + e; 2369b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro// } 2379b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro// static double identity(double x) { 2389b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro// return x; 2399b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro// } 2409b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro// static double sum(double a, double b) { 2419b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro// return a + b; 2429b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro// } 2439b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro// static double sum(double a, double b, double c) { 2449b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro// return a + b + c; 2459b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro// } 2469b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro// static double sum(double a, double b, double c, double d) { 2479b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro// return a + b + c + d; 2489b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro// } 2499b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro// static double sum(double a, double b, double c, double d, double e) { 2509b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro// return a + b + c + d + e; 2519b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro// } 2529b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro// } 2539b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapirostatic const char kStaticLeafMethodsDex[] = 2549b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro "ZGV4CjAzNQD8gEpaFD0w5dM8dsPaCQ3wIh0xaUjfni+IBQAAcAAAAHhWNBIAAAAAAAAAAPQEAAAW" 2559b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro "AAAAcAAAAAYAAADIAAAADAAAAOAAAAAAAAAAAAAAAA4AAABwAQAAAQAAAOABAACIAwAAAAIAAK4D" 2569b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro "AAC2AwAAuQMAAL0DAADAAwAAxAMAAMkDAADPAwAA1gMAAN4DAADhAwAA5QMAAOoDAADwAwAA9wMA" 2579b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro "AP8DAAAUBAAAKAQAAEAEAABDBAAATQQAAFIEAAABAAAAAwAAAAkAAAAPAAAAEAAAABIAAAACAAAA" 2589b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro "AAAAADgDAAAEAAAAAQAAAEADAAAFAAAAAQAAAEgDAAAGAAAAAQAAAFADAAAHAAAAAQAAAFwDAAAI" 2599b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro "AAAAAQAAAGgDAAAKAAAAAgAAAHgDAAALAAAAAgAAAIADAAAMAAAAAgAAAIgDAAANAAAAAgAAAJQD" 2609b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro "AAAOAAAAAgAAAKADAAASAAAABQAAAAAAAAADAAsAAAAAAAMAAAATAAAAAwABABMAAAADAAYAEwAA" 2619b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro "AAMACwAUAAAAAwACABUAAAADAAMAFQAAAAMABAAVAAAAAwAFABUAAAADAAcAFQAAAAMACAAVAAAA" 2629b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro "AwAJABUAAAADAAoAFQAAAAQACwAAAAAAAwAAAAAAAAAEAAAAAAAAABEAAAAAAAAAtwQAAAAAAAAB" 2639b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro "AAEAAQAAAFcEAAAEAAAAcBANAAAADgABAAEAAAAAAFwEAAABAAAADwAAAAIAAgAAAAAAYgQAAAEA" 2649b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro "AAAQAAAAAQABAAAAAABoBAAAAQAAAA8AAAAAAAAAAAAAAG4EAAABAAAADgAAAAYABAAAAAAAcwQA" 2659b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro "AAMAAACrAAIEEAAAAAgABgAAAAAAegQAAAQAAACrAAIEy2AQAAoACAAAAAAAggQAAAUAAACrAAIE" 2669b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro "y2DLgBAAAAAMAAoAAAAAAIsEAAAGAAAAqwACBMtgy4DLoBAAAwACAAAAAACVBAAAAwAAAJAAAQIP" 2679b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro "AAAABAADAAAAAACcBAAABAAAAJAAAQKwMA8ABQAEAAAAAACkBAAABQAAAJAAAQKwMLBADwAAAAYA" 2689b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro "BQAAAAAArQQAAAYAAACQAAECsDCwQLBQDwABAAAAAAAAAAEAAAABAAAAAgAAAAEAAQADAAAAAQAB" 2699b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro "AAEAAAAEAAAAAQABAAEAAQAFAAAAAQABAAEAAQABAAAAAQAAAAIAAAACAAAAAgACAAMAAAACAAIA" 2709b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro "AgAAAAQAAAACAAIAAgACAAUAAAACAAIAAgACAAIABjxpbml0PgABQgACQkIAAUQAAkREAANEREQA" 2719b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro "BEREREQABUREREREAAZEREREREQAAUkAAklJAANJSUkABElJSUkABUlJSUlJAAZJSUlJSUkAE0xT" 2729b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro "dGF0aWNMZWFmTWV0aG9kczsAEkxqYXZhL2xhbmcvT2JqZWN0OwAWU3RhdGljTGVhZk1ldGhvZHMu" 2739b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro "amF2YQABVgAIaWRlbnRpdHkAA25vcAADc3VtAAEABw4ABQEABw4AFwEABw4ACAEABw4AAwAHDgAa" 2749b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro "AgAABw4AHQMAAAAHDgAgBAAAAAAHDgAjBQAAAAAABw4ACwIAAAcOAA4DAAAABw4AEQQAAAAABw4A" 2759b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro "FAUAAAAAAAcOAAAADQAAgIAEgAQBCJgEAQisBAEIwAQBCNQEAQjoBAEIgAUBCJgFAQi0BQEI0AUB" 2769b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro "COgFAQiABgEInAYAAAAMAAAAAAAAAAEAAAAAAAAAAQAAABYAAABwAAAAAgAAAAYAAADIAAAAAwAA" 2779b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro "AAwAAADgAAAABQAAAA4AAABwAQAABgAAAAEAAADgAQAAASAAAA0AAAAAAgAAARAAAAsAAAA4AwAA" 2789b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro "AiAAABYAAACuAwAAAyAAAA0AAABXBAAAACAAAAEAAAC3BAAAABAAAAEAAAD0BAAA"; 2799b9ba28b1277b4ddb967c5a968c6d550febce6afCarl Shapiro 280f615a61aef972cfc1dc23931ac2ed0da14c3fedbBrian Carlstromstatic inline DexFile* OpenDexFileBase64(const char* base64) { 281578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom CHECK(base64 != NULL); 282578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom size_t length; 283f615a61aef972cfc1dc23931ac2ed0da14c3fedbBrian Carlstrom byte* dex_bytes = DecodeBase64(base64, &length); 284f615a61aef972cfc1dc23931ac2ed0da14c3fedbBrian Carlstrom CHECK(dex_bytes != NULL); 285f615a61aef972cfc1dc23931ac2ed0da14c3fedbBrian Carlstrom DexFile* dex_file = DexFile::OpenPtr(dex_bytes, length); 286578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom CHECK(dex_file != NULL); 287f615a61aef972cfc1dc23931ac2ed0da14c3fedbBrian Carlstrom return dex_file; 288578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom} 289578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom 290db4d54081f09abcbe97ffdf615874f2809a9e777Brian Carlstromclass ScratchFile { 291db4d54081f09abcbe97ffdf615874f2809a9e777Brian Carlstrom public: 292db4d54081f09abcbe97ffdf615874f2809a9e777Brian Carlstrom ScratchFile() { 293db4d54081f09abcbe97ffdf615874f2809a9e777Brian Carlstrom std::string filename_template; 294db4d54081f09abcbe97ffdf615874f2809a9e777Brian Carlstrom filename_template = getenv("ANDROID_DATA"); 295db4d54081f09abcbe97ffdf615874f2809a9e777Brian Carlstrom filename_template += "/TmpFile-XXXXXX"; 296db4d54081f09abcbe97ffdf615874f2809a9e777Brian Carlstrom filename_.reset(strdup(filename_template.c_str())); 297db4d54081f09abcbe97ffdf615874f2809a9e777Brian Carlstrom CHECK(filename_ != NULL); 298db4d54081f09abcbe97ffdf615874f2809a9e777Brian Carlstrom fd_ = mkstemp(filename_.get()); 299db4d54081f09abcbe97ffdf615874f2809a9e777Brian Carlstrom CHECK_NE(-1, fd_); 300db4d54081f09abcbe97ffdf615874f2809a9e777Brian Carlstrom } 301db4d54081f09abcbe97ffdf615874f2809a9e777Brian Carlstrom 302db4d54081f09abcbe97ffdf615874f2809a9e777Brian Carlstrom ~ScratchFile() { 303db4d54081f09abcbe97ffdf615874f2809a9e777Brian Carlstrom int unlink_result = unlink(filename_.get()); 304db4d54081f09abcbe97ffdf615874f2809a9e777Brian Carlstrom CHECK_EQ(0, unlink_result); 305db4d54081f09abcbe97ffdf615874f2809a9e777Brian Carlstrom int close_result = close(fd_); 306db4d54081f09abcbe97ffdf615874f2809a9e777Brian Carlstrom CHECK_EQ(0, close_result); 307db4d54081f09abcbe97ffdf615874f2809a9e777Brian Carlstrom } 308db4d54081f09abcbe97ffdf615874f2809a9e777Brian Carlstrom 309db4d54081f09abcbe97ffdf615874f2809a9e777Brian Carlstrom const char* GetFilename() const { 310db4d54081f09abcbe97ffdf615874f2809a9e777Brian Carlstrom return filename_.get(); 311db4d54081f09abcbe97ffdf615874f2809a9e777Brian Carlstrom } 312db4d54081f09abcbe97ffdf615874f2809a9e777Brian Carlstrom 313db4d54081f09abcbe97ffdf615874f2809a9e777Brian Carlstrom int GetFd() const { 314db4d54081f09abcbe97ffdf615874f2809a9e777Brian Carlstrom return fd_; 315db4d54081f09abcbe97ffdf615874f2809a9e777Brian Carlstrom } 316db4d54081f09abcbe97ffdf615874f2809a9e777Brian Carlstrom 317db4d54081f09abcbe97ffdf615874f2809a9e777Brian Carlstrom private: 318db4d54081f09abcbe97ffdf615874f2809a9e777Brian Carlstrom scoped_ptr_malloc<char> filename_; 319db4d54081f09abcbe97ffdf615874f2809a9e777Brian Carlstrom int fd_; 320db4d54081f09abcbe97ffdf615874f2809a9e777Brian Carlstrom}; 321db4d54081f09abcbe97ffdf615874f2809a9e777Brian Carlstrom 322f734cf55d510976f4862b15e35fc86eae2a3daf8Brian Carlstromclass CommonTest : public testing::Test { 323578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom protected: 324578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom virtual void SetUp() { 3254a96b60e45fba4a9d4a2e9c8fc849660eacef684Brian Carlstrom is_host_ = getenv("ANDROID_BUILD_TOP") != NULL; 3264a96b60e45fba4a9d4a2e9c8fc849660eacef684Brian Carlstrom 3270af5543f8ea20c3e655b2d748a1b7dcf283792feElliott Hughes if (is_host_) { 3280af5543f8ea20c3e655b2d748a1b7dcf283792feElliott Hughes // $ANDROID_ROOT is set on the device, but not on the host. 3290af5543f8ea20c3e655b2d748a1b7dcf283792feElliott Hughes // We need to set this so that icu4c can find its locale data. 3300af5543f8ea20c3e655b2d748a1b7dcf283792feElliott Hughes std::string root; 3310af5543f8ea20c3e655b2d748a1b7dcf283792feElliott Hughes root += getenv("ANDROID_BUILD_TOP"); 3320af5543f8ea20c3e655b2d748a1b7dcf283792feElliott Hughes root += "/out/host/linux-x86"; 3330af5543f8ea20c3e655b2d748a1b7dcf283792feElliott Hughes setenv("ANDROID_ROOT", root.c_str(), 1); 3340af5543f8ea20c3e655b2d748a1b7dcf283792feElliott Hughes } 3350af5543f8ea20c3e655b2d748a1b7dcf283792feElliott Hughes 336b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom android_data_.reset(strdup(is_host_ ? "/tmp/art-data-XXXXXX" : "/sdcard/art-data-XXXXXX")); 337b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom ASSERT_TRUE(android_data_ != NULL); 338b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom const char* android_data_modified = mkdtemp(android_data_.get()); 339b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom // note that mkdtemp side effects android_data_ as well 340b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom ASSERT_TRUE(android_data_modified != NULL); 341b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom setenv("ANDROID_DATA", android_data_modified, 1); 342b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom art_cache_.append(android_data_.get()); 343b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom art_cache_.append("/art-cache"); 344b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom int mkdir_result = mkdir(art_cache_.c_str(), 0700); 345b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom ASSERT_EQ(mkdir_result, 0); 346b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom 347a5b897eae4b6f9f9608faa9eada7ddf42bf1bfd2Elliott Hughes java_lang_dex_file_.reset(GetLibCoreDex()); 348578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom 3498a436595d36c1e4935984fcac249d7d877e00383Brian Carlstrom std::vector<const DexFile*> boot_class_path; 350f615a61aef972cfc1dc23931ac2ed0da14c3fedbBrian Carlstrom boot_class_path.push_back(java_lang_dex_file_.get()); 351578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom 3527a90959d4ef7a69f3bcb7b8763f646e12d9267d3Carl Shapiro runtime_.reset(Runtime::Create(boot_class_path)); 3537a90959d4ef7a69f3bcb7b8763f646e12d9267d3Carl Shapiro ASSERT_TRUE(runtime_ != NULL); 3547a90959d4ef7a69f3bcb7b8763f646e12d9267d3Carl Shapiro class_linker_ = runtime_->GetClassLinker(); 355578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom } 356578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom 357b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom virtual void TearDown() { 358b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom const char* android_data = getenv("ANDROID_DATA"); 359b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom ASSERT_TRUE(android_data != NULL); 360b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom DIR* dir = opendir(art_cache_.c_str()); 361b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom ASSERT_TRUE(dir != NULL); 362b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom while (true) { 363b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom struct dirent entry; 364b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom struct dirent* entry_ptr; 365b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom int readdir_result = readdir_r(dir, &entry, &entry_ptr); 366b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom ASSERT_EQ(0, readdir_result); 367b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom if (entry_ptr == NULL) { 368b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom break; 369b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom } 370b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom if ((strcmp(entry_ptr->d_name, ".") == 0) || (strcmp(entry_ptr->d_name, "..") == 0)) { 371b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom continue; 372b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom } 373b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom std::string filename(art_cache_); 374b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom filename.push_back('/'); 375b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom filename.append(entry_ptr->d_name); 376b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom int unlink_result = unlink(filename.c_str()); 377b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom ASSERT_EQ(0, unlink_result); 378b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom } 379b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom closedir(dir); 380b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom int rmdir_cache_result = rmdir(art_cache_.c_str()); 381b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom ASSERT_EQ(0, rmdir_cache_result); 382b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom int rmdir_data_result = rmdir(android_data_.get()); 383b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom ASSERT_EQ(0, rmdir_data_result); 3840af5543f8ea20c3e655b2d748a1b7dcf283792feElliott Hughes 3850af5543f8ea20c3e655b2d748a1b7dcf283792feElliott Hughes // icu4c has a fixed 10-element array "gCommonICUDataArray". 3860af5543f8ea20c3e655b2d748a1b7dcf283792feElliott Hughes // If we run > 10 tests, we fill that array and u_setCommonData fails. 3870af5543f8ea20c3e655b2d748a1b7dcf283792feElliott Hughes // There's a function to clear the array, but it's not public... 3880af5543f8ea20c3e655b2d748a1b7dcf283792feElliott Hughes typedef void (*IcuCleanupFn)(); 3890af5543f8ea20c3e655b2d748a1b7dcf283792feElliott Hughes void* sym = dlsym(RTLD_DEFAULT, "u_cleanup_" U_ICU_VERSION_SHORT); 3900af5543f8ea20c3e655b2d748a1b7dcf283792feElliott Hughes CHECK(sym != NULL); 3910af5543f8ea20c3e655b2d748a1b7dcf283792feElliott Hughes IcuCleanupFn icu_cleanup_fn = reinterpret_cast<IcuCleanupFn>(sym); 3920af5543f8ea20c3e655b2d748a1b7dcf283792feElliott Hughes (*icu_cleanup_fn)(); 393b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom } 394b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom 395b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom std::string GetLibCoreDexFileName() { 396b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom if (is_host_) { 397b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom const char* host_dir = getenv("ANDROID_HOST_OUT"); 398b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom CHECK(host_dir != NULL); 399b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom return StringPrintf("%s/framework/core-hostdex.jar", host_dir); 400ac5b9e22d32c4f986783a2207b08ade769619f6fJesse Wilson } 401b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom return std::string("/system/framework/core.jar"); 402b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom } 403ac5b9e22d32c4f986783a2207b08ade769619f6fJesse Wilson 404b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom DexFile* GetLibCoreDex() { 405b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom std::string libcore_dex_file_name = GetLibCoreDexFileName(); 40640ef99eb9dd91c2fa549f40973964529c927bb3cElliott Hughes return DexFile::OpenZip(libcore_dex_file_name); 407ac5b9e22d32c4f986783a2207b08ade769619f6fJesse Wilson } 408ac5b9e22d32c4f986783a2207b08ade769619f6fJesse Wilson 40974eb46ab15c5b9cb39bf15246db84aea7fd4cc27Brian Carlstrom PathClassLoader* AllocPathClassLoader(const DexFile* dex_file) { 41074eb46ab15c5b9cb39bf15246db84aea7fd4cc27Brian Carlstrom class_linker_->RegisterDexFile(dex_file); 41174eb46ab15c5b9cb39bf15246db84aea7fd4cc27Brian Carlstrom std::vector<const DexFile*> dex_files; 41274eb46ab15c5b9cb39bf15246db84aea7fd4cc27Brian Carlstrom dex_files.push_back(dex_file); 41374eb46ab15c5b9cb39bf15246db84aea7fd4cc27Brian Carlstrom return class_linker_->AllocPathClassLoader(dex_files); 41474eb46ab15c5b9cb39bf15246db84aea7fd4cc27Brian Carlstrom } 41574eb46ab15c5b9cb39bf15246db84aea7fd4cc27Brian Carlstrom 4164a96b60e45fba4a9d4a2e9c8fc849660eacef684Brian Carlstrom bool is_host_; 417b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom scoped_ptr_malloc<char> android_data_; 418b0460eaa2cb131f1dbdd5a7217bd36b9a9f1b995Brian Carlstrom std::string art_cache_; 419f734cf55d510976f4862b15e35fc86eae2a3daf8Brian Carlstrom scoped_ptr<const DexFile> java_lang_dex_file_; 4207a90959d4ef7a69f3bcb7b8763f646e12d9267d3Carl Shapiro scoped_ptr<Runtime> runtime_; 4217a90959d4ef7a69f3bcb7b8763f646e12d9267d3Carl Shapiro ClassLinker* class_linker_; 422578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom}; 423578bbdc684db8ed68e9fedbc678669d27fa68b6eBrian Carlstrom 424934486cf07c578b6494417ca5dcbae89cf04b019Brian Carlstrom} // namespace art 425