ShadowParcel.java revision dab3a74f4697f04455668863c2c62cd14745c230
1cb6dcc93e483e0537f8c93595bb6687b392a0d2eadriancowhampackage com.xtremelabs.robolectric.shadows; 2cb6dcc93e483e0537f8c93595bb6687b392a0d2eadriancowham 3cb6dcc93e483e0537f8c93595bb6687b392a0d2eadriancowhamimport android.os.Parcel; 46ca1c54a32a83fcc3e347c141a0fc3ba653193b3Jan Berkelimport android.os.Parcelable; 54851b76e6ef185e8588c351cb303eb90f7e765e9Jan Berkelimport android.os.Bundle; 6cb6dcc93e483e0537f8c93595bb6687b392a0d2eadriancowhamimport com.xtremelabs.robolectric.Robolectric; 7cb6dcc93e483e0537f8c93595bb6687b392a0d2eadriancowhamimport com.xtremelabs.robolectric.internal.Implementation; 8cb6dcc93e483e0537f8c93595bb6687b392a0d2eadriancowhamimport com.xtremelabs.robolectric.internal.Implements; 9cb6dcc93e483e0537f8c93595bb6687b392a0d2eadriancowham 10e1deb33276ab52fe01c4d6a4f0a3d02c29ebdc6aSebastien Plissonimport java.util.ArrayList; 11e1deb33276ab52fe01c4d6a4f0a3d02c29ebdc6aSebastien Plissonimport java.util.List; 12e1deb33276ab52fe01c4d6a4f0a3d02c29ebdc6aSebastien Plisson 13cb6dcc93e483e0537f8c93595bb6687b392a0d2eadriancowham@Implements(Parcel.class) 146ca1c54a32a83fcc3e347c141a0fc3ba653193b3Jan Berkel@SuppressWarnings("unchecked") 15cb6dcc93e483e0537f8c93595bb6687b392a0d2eadriancowhampublic class ShadowParcel { 167598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz private ArrayList parcelData = new ArrayList(); 177598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz private int index = 0; 187598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz 197598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz @Implementation 207598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz public static Parcel obtain() { 217598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz return Robolectric.newInstanceOf(Parcel.class); 227598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz } 237598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz 247598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz @Implementation 257598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz public void writeString(String str) { 267598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz if (str == null) { 277598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz return; 287598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz } 297598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz parcelData.add(str); 307598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz } 317598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz 327598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz @Implementation 337598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz public void writeInt(int i) { 347598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz parcelData.add(i); 357598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz } 367598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz 377598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz @Implementation 38e1deb33276ab52fe01c4d6a4f0a3d02c29ebdc6aSebastien Plisson public void writeLong(long i) { 39e1deb33276ab52fe01c4d6a4f0a3d02c29ebdc6aSebastien Plisson parcelData.add(i); 40e1deb33276ab52fe01c4d6a4f0a3d02c29ebdc6aSebastien Plisson } 414851b76e6ef185e8588c351cb303eb90f7e765e9Jan Berkel 420fbe55be997150aa5c41faa8276e8b7ab8d826ecadriancowham @Implementation 43dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel public void writeFloat(float f) { 44dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel parcelData.add(f); 45dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel } 46dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel 47dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel @Implementation 48dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel public void writeDouble(double f) { 49dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel parcelData.add(f); 50dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel } 51dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel 52dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel @Implementation 530fbe55be997150aa5c41faa8276e8b7ab8d826ecadriancowham @SuppressWarnings("unchecked") 540fbe55be997150aa5c41faa8276e8b7ab8d826ecadriancowham public void writeByte( byte b ) { 550fbe55be997150aa5c41faa8276e8b7ab8d826ecadriancowham parcelData.add( b ); 560fbe55be997150aa5c41faa8276e8b7ab8d826ecadriancowham } 57e1deb33276ab52fe01c4d6a4f0a3d02c29ebdc6aSebastien Plisson 58e1deb33276ab52fe01c4d6a4f0a3d02c29ebdc6aSebastien Plisson @Implementation 597598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz public String readString() { 607598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz return index < parcelData.size() ? (String) parcelData.get(index++) : null; 617598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz } 627598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz 637598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz @Implementation 647598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz public int readInt() { 657598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz return index < parcelData.size() ? (Integer) parcelData.get(index++) : 0; 667598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz } 677598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz 68e1deb33276ab52fe01c4d6a4f0a3d02c29ebdc6aSebastien Plisson @Implementation 69dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel public float readFloat() { 70dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel return index < parcelData.size() ? (Float) parcelData.get(index++) : 0; 71dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel } 72dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel 73dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel @Implementation 74dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel public double readDouble() { 75dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel return index < parcelData.size() ? (Double) parcelData.get(index++) : 0; 76dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel } 77dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel 78dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel @Implementation 790fbe55be997150aa5c41faa8276e8b7ab8d826ecadriancowham public byte readByte() { 804851b76e6ef185e8588c351cb303eb90f7e765e9Jan Berkel return index < parcelData.size() ? (Byte) parcelData.get(index++) : 0; 810fbe55be997150aa5c41faa8276e8b7ab8d826ecadriancowham } 824851b76e6ef185e8588c351cb303eb90f7e765e9Jan Berkel 830fbe55be997150aa5c41faa8276e8b7ab8d826ecadriancowham @Implementation 84e1deb33276ab52fe01c4d6a4f0a3d02c29ebdc6aSebastien Plisson public long readLong() { 85e1deb33276ab52fe01c4d6a4f0a3d02c29ebdc6aSebastien Plisson return index < parcelData.size() ? (Long) parcelData.get(index++) : 0; 86e1deb33276ab52fe01c4d6a4f0a3d02c29ebdc6aSebastien Plisson } 87e1deb33276ab52fe01c4d6a4f0a3d02c29ebdc6aSebastien Plisson 886ca1c54a32a83fcc3e347c141a0fc3ba653193b3Jan Berkel @Implementation 894851b76e6ef185e8588c351cb303eb90f7e765e9Jan Berkel public Bundle readBundle() { 904851b76e6ef185e8588c351cb303eb90f7e765e9Jan Berkel return index < parcelData.size() ? (Bundle) parcelData.get(index++) : null; 914851b76e6ef185e8588c351cb303eb90f7e765e9Jan Berkel } 924851b76e6ef185e8588c351cb303eb90f7e765e9Jan Berkel 934851b76e6ef185e8588c351cb303eb90f7e765e9Jan Berkel @Implementation 944851b76e6ef185e8588c351cb303eb90f7e765e9Jan Berkel public Bundle readBundle(ClassLoader loader) { 954851b76e6ef185e8588c351cb303eb90f7e765e9Jan Berkel return readBundle(); 964851b76e6ef185e8588c351cb303eb90f7e765e9Jan Berkel } 974851b76e6ef185e8588c351cb303eb90f7e765e9Jan Berkel 984851b76e6ef185e8588c351cb303eb90f7e765e9Jan Berkel @Implementation 994851b76e6ef185e8588c351cb303eb90f7e765e9Jan Berkel public void writeBundle(Bundle bundle) { 1004851b76e6ef185e8588c351cb303eb90f7e765e9Jan Berkel parcelData.add(bundle); 1014851b76e6ef185e8588c351cb303eb90f7e765e9Jan Berkel } 1024851b76e6ef185e8588c351cb303eb90f7e765e9Jan Berkel 1034851b76e6ef185e8588c351cb303eb90f7e765e9Jan Berkel @Implementation 1046ca1c54a32a83fcc3e347c141a0fc3ba653193b3Jan Berkel public void writeParcelable(Parcelable p, int flags) { 1056ca1c54a32a83fcc3e347c141a0fc3ba653193b3Jan Berkel parcelData.add(p); 1066ca1c54a32a83fcc3e347c141a0fc3ba653193b3Jan Berkel } 1076ca1c54a32a83fcc3e347c141a0fc3ba653193b3Jan Berkel 1086ca1c54a32a83fcc3e347c141a0fc3ba653193b3Jan Berkel @Implementation 1096ca1c54a32a83fcc3e347c141a0fc3ba653193b3Jan Berkel public Parcelable readParcelable(ClassLoader cl) { 1106ca1c54a32a83fcc3e347c141a0fc3ba653193b3Jan Berkel return index < parcelData.size() ? (Parcelable) parcelData.get(index++) : null; 1116ca1c54a32a83fcc3e347c141a0fc3ba653193b3Jan Berkel } 1126ca1c54a32a83fcc3e347c141a0fc3ba653193b3Jan Berkel 113dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel @Implementation 114dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel public void readFloatArray(float[] val) { 115dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel int n = readInt(); 116dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel if (val.length != n) throw new RuntimeException("bad array lengths"); 117dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel for (int i = 0; i< val.length; i++) { 118dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel val[i] = readFloat(); 119dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel } 120dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel } 121dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel 122dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel @Implementation 123dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel public void writeFloatArray(float[] val) { 124dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel writeInt(val.length); 125dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel for (float f : val) writeFloat(f); 126dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel } 127dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel 128dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel @Implementation 129dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel public void writeDoubleArray(double[] val) { 130dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel writeInt(val.length); 131dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel for (double f : val) writeDouble(f); 132dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel } 133dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel 134dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel @Implementation 135dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel public void readDoubleArray(double[] val) { 136dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel int n = readInt(); 137dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel if (val.length != n) throw new RuntimeException("bad array lengths"); 138dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel for (int i = 0; i< val.length; i++) { 139dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel val[i] = readDouble(); 140dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel } 141dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel } 142dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel 143dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel @Implementation 144dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel public void writeIntArray(int[] val) { 145dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel writeInt(val.length); 146dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel for (int f : val) writeInt(f); 147dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel } 148dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel 149dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel @Implementation 150dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel public void readIntArray(int[] val) { 151dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel int n = readInt(); 152dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel if (val.length != n) throw new RuntimeException("bad array lengths"); 153dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel for (int i = 0; i< val.length; i++) { 154dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel val[i] = readInt(); 155dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel } 156dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel } 157dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel 158dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel @Implementation 159dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel public void writeLongArray(long[] val) { 160dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel writeInt(val.length); 161dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel for (long f : val) writeLong(f); 162dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel } 163dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel 164dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel @Implementation 165dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel public void readLongArray(long[] val) { 166dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel int n = readInt(); 167dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel if (val.length != n) throw new RuntimeException("bad array lengths"); 168dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel for (int i = 0; i< val.length; i++) { 169dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel val[i] = readLong(); 170dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel } 171dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel } 172dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel 173dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel @Implementation 174dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel public void writeStringArray(String[] val) { 175dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel writeInt(val.length); 176dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel for (String f : val) writeString(f); 177dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel } 178dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel 179dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel @Implementation 180dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel public void readStringArray(String[] val) { 181dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel int n = readInt(); 182dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel if (val.length != n) throw new RuntimeException("bad array lengths"); 183dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel for (int i = 0; i< val.length; i++) { 184dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel val[i] = readString(); 185dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel } 186dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel } 187dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel 188dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel 189dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel 190dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel 191dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel 1927598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz public int getIndex() { 1937598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz return index; 1947598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz } 1957598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz 1967598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz public List getParcelData() { 1977598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz return parcelData; 1987598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz } 199dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel 200cb6dcc93e483e0537f8c93595bb6687b392a0d2eadriancowham} 201