• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2018 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.os;
18 
19 import static org.junit.Assert.assertNull;
20 import static org.junit.Assert.assertTrue;
21 import static org.junit.Assert.fail;
22 
23 import android.platform.test.annotations.DisabledOnRavenwood;
24 import android.platform.test.ravenwood.RavenwoodRule;
25 import android.util.ArrayMap;
26 
27 import androidx.test.ext.junit.runners.AndroidJUnit4;
28 import androidx.test.filters.SmallTest;
29 
30 import org.junit.Rule;
31 import org.junit.Test;
32 import org.junit.runner.RunWith;
33 
34 import java.util.ArrayList;
35 import java.util.HashMap;
36 import java.util.List;
37 import java.util.Map;
38 
39 @SmallTest
40 @RunWith(AndroidJUnit4.class)
41 public final class ParcelNullabilityTest {
42     @Rule
43     public final RavenwoodRule mRavenwood = new RavenwoodRule();
44 
45     @Test
nullByteArray()46     public void nullByteArray() {
47         Parcel p = Parcel.obtain();
48         p.writeByteArray(null);
49 
50         assertNull(throughBytes(p).createByteArray());
51     }
52 
53     @Test
nullBlob()54     public void nullBlob() {
55         Parcel p = Parcel.obtain();
56         p.writeBlob(null);
57 
58         assertNull(throughBytes(p).readBlob());
59     }
60 
61     @Test
nullString()62     public void nullString() {
63         Parcel p = Parcel.obtain();
64         p.writeString(null);
65 
66         assertNull(throughBytes(p).readString());
67     }
68 
69     @Test
70     @DisabledOnRavenwood(blockedBy = android.text.Spanned.class)
nullCharSequence()71     public void nullCharSequence() {
72         Parcel p = Parcel.obtain();
73         p.writeCharSequence(null);
74 
75         assertNull(throughBytes(p).readCharSequence());
76     }
77 
78     @Test
nullStrongBinder()79     public void nullStrongBinder() {
80         Parcel p = Parcel.obtain();
81         p.writeStrongBinder(null);
82 
83         assertNull(throughBytes(p).readStrongBinder());
84     }
85 
86     @Test
nullStringInterface()87     public void nullStringInterface() {
88         Parcel p = Parcel.obtain();
89         p.writeStrongInterface(null);
90 
91         assertNull(throughBytes(p).readStrongBinder());
92     }
93 
94     @Test
nullFileDescriptor()95     public void nullFileDescriptor() {
96         Parcel p = Parcel.obtain();
97         try {
98             p.writeFileDescriptor(null);
99             fail();
100         } catch (RuntimeException expected) {
101         }
102     }
103 
104     @Test
nullRawFileDescriptor()105     public void nullRawFileDescriptor() {
106         Parcel p = Parcel.obtain();
107         try {
108             p.writeRawFileDescriptor(null);
109             fail();
110         } catch (RuntimeException expected) {
111         }
112     }
113 
114     @Test
nullRawFileDescriptorArray()115     public void nullRawFileDescriptorArray() {
116         Parcel p = Parcel.obtain();
117         p.writeRawFileDescriptorArray(null);
118 
119         assertNull(throughBytes(p).createRawFileDescriptorArray());
120     }
121 
122     @Test
nullMap()123     public void nullMap() {
124         Parcel p = Parcel.obtain();
125         p.writeMap(null);
126 
127         Map<Object, Object> map = new HashMap<>();
128         throughBytes(p).readMap(map, null);
129         assertTrue(map.isEmpty());
130     }
131 
132     @Test
nullArrayMap()133     public void nullArrayMap() {
134         Parcel p = Parcel.obtain();
135         p.writeArrayMap(null);
136 
137         ArrayMap<Object, Object> map = new ArrayMap<>();
138         throughBytes(p).readArrayMap(map, null);
139         assertTrue(map.isEmpty());
140     }
141 
142     @Test
nullArraySet()143     public void nullArraySet() {
144         Parcel p = Parcel.obtain();
145         p.writeArraySet(null);
146 
147         assertNull(throughBytes(p).readArraySet(null));
148     }
149 
150     @Test
nullBundle()151     public void nullBundle() {
152         Parcel p = Parcel.obtain();
153         p.writeBundle(null);
154 
155         assertNull(throughBytes(p).readBundle());
156     }
157 
158     @Test
nullPersistableBundle()159     public void nullPersistableBundle() {
160         Parcel p = Parcel.obtain();
161         p.writePersistableBundle(null);
162 
163         assertNull(throughBytes(p).readPersistableBundle());
164     }
165 
166     @Test
nullSize()167     public void nullSize() {
168         Parcel p = Parcel.obtain();
169         try {
170             p.writeSize(null);
171             fail();
172         } catch (RuntimeException expected) {
173         }
174     }
175 
176     @Test
nullSizeF()177     public void nullSizeF() {
178         Parcel p = Parcel.obtain();
179         try {
180             p.writeSizeF(null);
181             fail();
182         } catch (RuntimeException expected) {
183         }
184     }
185 
186     @Test
nullList()187     public void nullList() {
188         Parcel p = Parcel.obtain();
189         p.writeList(null);
190 
191         List<Object> map = new ArrayList<>();
192         throughBytes(p).readList(map, null);
193         assertTrue(map.isEmpty());
194     }
195 
196     @Test
nullArray()197     public void nullArray() {
198         Parcel p = Parcel.obtain();
199         p.writeArray(null);
200 
201         assertNull(throughBytes(p).readArray(null));
202     }
203 
204     @Test
nullSparseArray()205     public void nullSparseArray() {
206         Parcel p = Parcel.obtain();
207         p.writeSparseArray(null);
208 
209         assertNull(throughBytes(p).readSparseArray(null));
210     }
211 
212     @Test
nullSparseBooleanArray()213     public void nullSparseBooleanArray() {
214         Parcel p = Parcel.obtain();
215         p.writeSparseBooleanArray(null);
216 
217         assertNull(throughBytes(p).readSparseBooleanArray());
218     }
219 
220     @Test
nullSparseIntArray()221     public void nullSparseIntArray() {
222         Parcel p = Parcel.obtain();
223         p.writeSparseIntArray(null);
224 
225         assertNull(throughBytes(p).readSparseIntArray());
226     }
227 
228     @Test
nullBooleanArray()229     public void nullBooleanArray() {
230         Parcel p = Parcel.obtain();
231         p.writeBooleanArray(null);
232 
233         assertNull(throughBytes(p).createBooleanArray());
234     }
235 
236     @Test
nullCharArray()237     public void nullCharArray() {
238         Parcel p = Parcel.obtain();
239         p.writeCharArray(null);
240 
241         assertNull(throughBytes(p).createCharArray());
242     }
243 
244     @Test
nullIntArray()245     public void nullIntArray() {
246         Parcel p = Parcel.obtain();
247         p.writeIntArray(null);
248 
249         assertNull(throughBytes(p).createIntArray());
250     }
251 
252     @Test
nullLongArray()253     public void nullLongArray() {
254         Parcel p = Parcel.obtain();
255         p.writeLongArray(null);
256 
257         assertNull(throughBytes(p).createLongArray());
258     }
259 
260     @Test
nullFloatArray()261     public void nullFloatArray() {
262         Parcel p = Parcel.obtain();
263         p.writeFloatArray(null);
264 
265         assertNull(throughBytes(p).createFloatArray());
266     }
267 
268     @Test
nullDoubleArray()269     public void nullDoubleArray() {
270         Parcel p = Parcel.obtain();
271         p.writeDoubleArray(null);
272 
273         assertNull(throughBytes(p).createDoubleArray());
274     }
275 
276     @Test
nullStringArray()277     public void nullStringArray() {
278         Parcel p = Parcel.obtain();
279         p.writeStringArray(null);
280 
281         assertNull(throughBytes(p).createStringArray());
282     }
283 
284     @Test
nullCharSequenceArray()285     public void nullCharSequenceArray() {
286         Parcel p = Parcel.obtain();
287         p.writeCharSequenceArray(null);
288 
289         assertNull(throughBytes(p).readCharSequenceArray());
290     }
291 
292     @Test
nullCharSequenceList()293     public void nullCharSequenceList() {
294         Parcel p = Parcel.obtain();
295         p.writeCharSequenceList(null);
296 
297         assertNull(throughBytes(p).readCharSequenceList());
298     }
299 
300     @Test
nullBinderArray()301     public void nullBinderArray() {
302         Parcel p = Parcel.obtain();
303         p.writeBinderArray(null);
304 
305         assertNull(throughBytes(p).createBinderArray());
306     }
307 
308     @Test
nullTypedList()309     public void nullTypedList() {
310         Parcel p = Parcel.obtain();
311         p.writeTypedList(null);
312 
313         assertNull(throughBytes(p).createTypedArrayList(null));
314     }
315 
316     @Test
nullStringList()317     public void nullStringList() {
318         Parcel p = Parcel.obtain();
319         p.writeStringList(null);
320 
321         assertNull(throughBytes(p).createStringArrayList());
322     }
323 
324     @Test
nullBinderList()325     public void nullBinderList() {
326         Parcel p = Parcel.obtain();
327         p.writeBinderList(null);
328 
329         assertNull(throughBytes(p).createBinderArrayList());
330     }
331 
332     @Test
nullParcelableList()333     public void nullParcelableList() {
334         Parcel p = Parcel.obtain();
335         p.writeParcelableList(null, 0);
336 
337         List<Parcelable> list = new ArrayList<>();
338         throughBytes(p).readParcelableList(list, null);
339         assertTrue(list.isEmpty());
340     }
341 
342     @Test
nullTypedArray()343     public void nullTypedArray() {
344         Parcel p = Parcel.obtain();
345         p.writeTypedArray(null, 0);
346 
347         assertNull(throughBytes(p).createTypedArray(null));
348     }
349 
350     @Test
nullTypedObject()351     public void nullTypedObject() {
352         Parcel p = Parcel.obtain();
353         p.writeTypedObject(null, 0);
354 
355         assertNull(throughBytes(p).readTypedObject(null));
356     }
357 
358     @Test
nullValue()359     public void nullValue() {
360         Parcel p = Parcel.obtain();
361         p.writeValue(null);
362 
363         assertNull(throughBytes(p).readValue(null));
364     }
365 
366     @Test
nullParcelable()367     public void nullParcelable() {
368         Parcel p = Parcel.obtain();
369         p.writeParcelable(null, 0);
370 
371         assertNull(throughBytes(p).readParcelable(null));
372     }
373 
374     @Test
nullSerializable()375     public void nullSerializable() {
376         Parcel p = Parcel.obtain();
377         p.writeSerializable(null);
378 
379         assertNull(throughBytes(p).readSerializable());
380     }
381 
382     @Test
nullException()383     public void nullException() {
384         Parcel p = Parcel.obtain();
385         try {
386             p.writeException(null);
387             fail();
388         } catch (RuntimeException expected) {
389         }
390     }
391 
throughBytes(Parcel p)392     private static Parcel throughBytes(Parcel p) {
393         byte[] bytes = p.marshall();
394         p = Parcel.obtain();
395         p.unmarshall(bytes, 0, bytes.length);
396         p.setDataPosition(0);
397         return p;
398     }
399 }
400