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