1b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson/* 2b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson * Copyright (C) 2010 The Android Open Source Project 3b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson * 4b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson * Licensed under the Apache License, Version 2.0 (the "License"); 5b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson * you may not use this file except in compliance with the License. 6b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson * You may obtain a copy of the License at 7b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson * 8b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson * http://www.apache.org/licenses/LICENSE-2.0 9b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson * 10b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson * Unless required by applicable law or agreed to in writing, software 11b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson * distributed under the License is distributed on an "AS IS" BASIS, 12b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson * See the License for the specific language governing permissions and 14b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson * limitations under the License. 15b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson */ 16b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson 17b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilsonpackage libcore.java.util.zip; 18b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson 19b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilsonimport java.io.ByteArrayInputStream; 20b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilsonimport java.io.ByteArrayOutputStream; 21b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilsonimport java.io.IOException; 22b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilsonimport java.io.InputStream; 23b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilsonimport java.util.Arrays; 24b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilsonimport java.util.zip.DeflaterInputStream; 25b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilsonimport java.util.zip.InflaterInputStream; 2627604018f783bf6354a13870b3e7785edca69b5fPaul Duffinimport libcore.junit.junit3.TestCaseWithRules; 2727604018f783bf6354a13870b3e7785edca69b5fPaul Duffinimport libcore.junit.util.ResourceLeakageDetector; 2827604018f783bf6354a13870b3e7785edca69b5fPaul Duffinimport org.junit.Rule; 2927604018f783bf6354a13870b3e7785edca69b5fPaul Duffinimport org.junit.rules.TestRule; 30b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson 3127604018f783bf6354a13870b3e7785edca69b5fPaul Duffinpublic final class DeflaterInputStreamTest extends TestCaseWithRules { 3227604018f783bf6354a13870b3e7785edca69b5fPaul Duffin @Rule 3327604018f783bf6354a13870b3e7785edca69b5fPaul Duffin public TestRule guardRule = ResourceLeakageDetector.getRule(); 34b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson 35b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson public void testReadByteByByte() throws IOException { 36b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson byte[] data = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 37b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson InputStream in = new DeflaterInputStream(new ByteArrayInputStream(data)); 38b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson ByteArrayOutputStream out = new ByteArrayOutputStream(); 39b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson 40b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson assertEquals(1, in.available()); 41b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson int b; 42b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson while ((b = in.read()) != -1) { 43b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson out.write(b); 44b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson } 45b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson assertEquals(0, in.available()); 46b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson 47b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson assertEquals(Arrays.toString(data), Arrays.toString(inflate(out.toByteArray()))); 48b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson 49b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson in.close(); 50b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson try { 51b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson in.available(); 52b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson fail(); 53b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson } catch (IOException expected) { 54b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson } 55b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson } 56b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson 57b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson public byte[] inflate(byte[] bytes) throws IOException { 5827604018f783bf6354a13870b3e7785edca69b5fPaul Duffin try (InputStream in = new InflaterInputStream(new ByteArrayInputStream(bytes))) { 5927604018f783bf6354a13870b3e7785edca69b5fPaul Duffin ByteArrayOutputStream out = new ByteArrayOutputStream(); 6027604018f783bf6354a13870b3e7785edca69b5fPaul Duffin byte[] buffer = new byte[1024]; 6127604018f783bf6354a13870b3e7785edca69b5fPaul Duffin int count; 6227604018f783bf6354a13870b3e7785edca69b5fPaul Duffin while ((count = in.read(buffer)) != -1) { 6327604018f783bf6354a13870b3e7785edca69b5fPaul Duffin out.write(buffer, 0, count); 6427604018f783bf6354a13870b3e7785edca69b5fPaul Duffin } 6527604018f783bf6354a13870b3e7785edca69b5fPaul Duffin return out.toByteArray(); 66b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson } 67b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson } 68b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson 69b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson public void testReadWithBuffer() throws IOException { 70b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson byte[] data = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 71b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson byte[] buffer = new byte[8]; 72b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson InputStream in = new DeflaterInputStream(new ByteArrayInputStream(data)); 73b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson ByteArrayOutputStream out = new ByteArrayOutputStream(); 74b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson assertEquals(1, in.available()); 75b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson int count; 76b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson while ((count = in.read(buffer, 0, 5)) != -1) { 77b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson assertTrue(count <= 5); 78b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson out.write(buffer, 0, count); 79b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson } 80b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson assertEquals(0, in.available()); 81b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson 82b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson assertEquals(Arrays.toString(data), Arrays.toString(inflate(out.toByteArray()))); 83b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson 84b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson in.close(); 85b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson try { 86b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson in.available(); 87b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson fail(); 88b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson } catch (IOException expected) { 89b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson } 90b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson } 91b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson 92b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson public void testReadExceptions() throws IOException { 93b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson byte[] data = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 94b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson byte[] buffer = new byte[8]; 95b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson InputStream in = new DeflaterInputStream(new ByteArrayInputStream(data)); 96b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson try { 97b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson in.read(buffer, 0, 10); 98b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson fail(); 99b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson } catch (IndexOutOfBoundsException expected) { 100b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson } 101b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson try { 102b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson in.read(null, 0, 5); 103b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson fail(); 104b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson } catch (NullPointerException expected) { 105b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson } 106b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson try { 107b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson in.read(buffer, -1, 5); 108b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson fail(); 109b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson } catch (IndexOutOfBoundsException expected) { 110b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson } 111b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson in.close(); 112b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson try { 113b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson in.read(buffer, 0, 5); 114b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson fail(); 115b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson } catch (IOException expected) { 116b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson } 117b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson } 118b814b1850f5ed997ea1e7f574c8fc0df6a693c36Jesse Wilson} 119