1858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson/*
2858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson * Copyright (C) 2010 The Android Open Source Project
3858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson *
4858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson * Licensed under the Apache License, Version 2.0 (the "License");
5858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson * you may not use this file except in compliance with the License.
6858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson * You may obtain a copy of the License at
7858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson *
8858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson *      http://www.apache.org/licenses/LICENSE-2.0
9858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson *
10858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson * Unless required by applicable law or agreed to in writing, software
11858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson * distributed under the License is distributed on an "AS IS" BASIS,
12858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson * See the License for the specific language governing permissions and
14858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson * limitations under the License.
15858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson */
16858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson
17858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilsonpackage libcore.java.io;
18858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson
19858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilsonimport java.io.BufferedInputStream;
20858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilsonimport java.io.DataInputStream;
21858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilsonimport java.io.FilterInputStream;
22858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilsonimport java.io.IOException;
23858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilsonimport java.io.InputStream;
24858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilsonimport java.io.LineNumberInputStream;
25858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilsonimport java.io.PushbackInputStream;
26858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilsonimport java.security.DigestInputStream;
27858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilsonimport java.security.MessageDigest;
28858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilsonimport java.security.NoSuchAlgorithmException;
29858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilsonimport java.util.zip.CRC32;
30858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilsonimport java.util.zip.CheckedInputStream;
31858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilsonimport java.util.zip.Inflater;
32858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilsonimport java.util.zip.InflaterInputStream;
33858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilsonimport javax.crypto.CipherInputStream;
34858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilsonimport javax.crypto.NullCipher;
35858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilsonimport junit.framework.TestCase;
36858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson
37858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilsonpublic final class FilterInputStreamNullSourceTest extends TestCase {
38858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson
39858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson    public void testBufferedInputStream() throws IOException {
40858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson        assertReadsFailWithIoException(new BufferedInputStream(null));
41858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson        assertReadsFailWithIoException(new BufferedInputStream(null, 1024));
42858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson    }
43858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson
44858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson    public void testCheckedInputStream() throws IOException {
45858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson        assertReadsFailWithNullPointerException(new CheckedInputStream(null, new CRC32()));
46858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson    }
47858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson
48858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson    public void testCipherInputStream() throws IOException {
49858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson        InputStream in = new CipherInputStream(null, new NullCipher());
50858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson        try {
51858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson            in.read();
52858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson            fail();
53858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson        } catch (NullPointerException expected) {
54858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson        }
55858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson
56858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson        assertEquals(0, in.available());
57858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson
58858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson        try {
59858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson            in.close();
60858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson            fail();
61858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson        } catch (NullPointerException expected) {
62858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson        }
63858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson    }
64858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson
65858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson    public void testDataInputStream() throws IOException {
66858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson        assertReadsFailWithNullPointerException(new DataInputStream(null));
67858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson    }
68858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson
69858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson    public void testDigestInputStream() throws IOException, NoSuchAlgorithmException {
70858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson        MessageDigest md5 = MessageDigest.getInstance("MD5");
71858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson        assertReadsFailWithNullPointerException(new DigestInputStream(null, md5));
72858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson    }
73858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson
74858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson    public void testFilterInputStream() throws IOException {
75858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson        assertReadsFailWithNullPointerException(new FilterInputStream(null) {});
76858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson    }
77858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson
78858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson    public void testInflaterInputStream() throws IOException {
79858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson        try {
80858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson            new InflaterInputStream(null);
81858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson            fail();
82858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson        } catch (NullPointerException expected) {
83858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson        }
84858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson        try {
85858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson            new InflaterInputStream(null, new Inflater());
86858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson            fail();
87858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson        } catch (NullPointerException expected) {
88858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson        }
89858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson        try {
90858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson            new InflaterInputStream(null, new Inflater(), 1024);
91858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson            fail();
92858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson        } catch (NullPointerException expected) {
93858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson        }
94858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson    }
95858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson
96858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson    public void testLineNumberInputStream() throws IOException {
97858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson        assertReadsFailWithNullPointerException(new LineNumberInputStream(null));
98858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson    }
99858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson
100858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson    public void testPushbackInputStream() throws IOException {
101858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson        assertReadsFailWithIoException(new PushbackInputStream(null));
102858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson        assertReadsFailWithIoException(new PushbackInputStream(null, 1024));
103858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson    }
104858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson
105858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson    private void assertReadsFailWithIoException(InputStream in) throws IOException {
106858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson        try {
107858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson            in.read();
108858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson            fail();
109858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson        } catch (IOException expected) {
110858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson        }
111858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson
112858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson        try {
113858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson            in.available();
114858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson            fail();
115858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson        } catch (IOException expected) {
116858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson        }
117858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson
118858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson        in.close();
119858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson    }
120858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson
121858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson    private void assertReadsFailWithNullPointerException(InputStream in) throws IOException {
122858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson        try {
123858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson            in.read();
124858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson            fail();
125858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson        } catch (NullPointerException expected) {
126858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson        }
127858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson
128858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson        try {
129858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson            in.available();
130858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson            fail();
131858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson        } catch (NullPointerException expected) {
132858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson        }
133858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson
134858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson        try {
135858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson            in.close();
136858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson            fail();
137858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson        } catch (NullPointerException expected) {
138858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson        }
139858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson    }
140858dd42310622fd1b77bfa0fbd85ec851b3925c1Jesse Wilson}
141