/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.harmony.tests.java.util.zip; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.util.zip.Adler32; import java.util.zip.DataFormatException; import java.util.zip.Deflater; import java.util.zip.Inflater; import junit.framework.TestCase; import tests.support.resource.Support_Resources; public class DeflaterTest extends TestCase { class MyDeflater extends Deflater { MyDeflater() { super(); } MyDeflater(int lvl) { super(lvl); } void myFinalize() { finalize(); } int getDefCompression() { return DEFAULT_COMPRESSION; } int getDefStrategy() { return DEFAULT_STRATEGY; } int getHuffman() { return HUFFMAN_ONLY; } int getFiltered() { return FILTERED; } } /** * java.util.zip.Deflater#deflate(byte[]) */ public void test_deflate$B() { byte outPutBuf[] = new byte[50]; byte byteArray[] = { 1, 3, 4, 7, 8 }; byte outPutInf[] = new byte[50]; int x = 0; Deflater defl = new Deflater(); defl.setInput(byteArray); defl.finish(); while (!defl.finished()) { x += defl.deflate(outPutBuf); } assertEquals("Deflater at end of stream, should return 0", 0, defl .deflate(outPutBuf)); int totalOut = defl.getTotalOut(); int totalIn = defl.getTotalIn(); assertEquals(x, totalOut); assertEquals(byteArray.length, totalIn); defl.end(); Inflater infl = new Inflater(); try { infl.setInput(outPutBuf); while (!infl.finished()) { infl.inflate(outPutInf); } } catch (DataFormatException e) { fail("Invalid input to be decompressed"); } assertEquals(totalIn, infl.getTotalOut()); assertEquals(totalOut, infl.getTotalIn()); for (int i = 0; i < byteArray.length; i++) { assertEquals(byteArray[i], outPutInf[i]); } assertEquals("Final decompressed data contained more bytes than original", 0, outPutInf[byteArray.length]); infl.end(); } /** * java.util.zip.Deflater#deflate(byte[], int, int) */ public void test_deflate$BII() { byte outPutBuf[] = new byte[50]; byte byteArray[] = { 5, 2, 3, 7, 8 }; byte outPutInf[] = new byte[50]; int offSet = 1; int length = outPutBuf.length - 1; int x = 0; Deflater defl = new Deflater(); defl.setInput(byteArray); defl.finish(); while (!defl.finished()) { x += defl.deflate(outPutBuf, offSet, length); } assertEquals("Deflater at end of stream, should return 0", 0, defl.deflate( outPutBuf, offSet, length)); int totalOut = defl.getTotalOut(); int totalIn = defl.getTotalIn(); assertEquals(x, totalOut); assertEquals(byteArray.length, totalIn); defl.end(); Inflater infl = new Inflater(); try { infl.setInput(outPutBuf, offSet, length); while (!infl.finished()) { infl.inflate(outPutInf); } } catch (DataFormatException e) { fail("Invalid input to be decompressed"); } assertEquals(totalIn, infl.getTotalOut()); assertEquals(totalOut, infl.getTotalIn()); for (int i = 0; i < byteArray.length; i++) { assertEquals(byteArray[i], outPutInf[i]); } assertEquals("Final decompressed data contained more bytes than original", 0, outPutInf[byteArray.length]); infl.end(); // Set of tests testing the boundaries of the offSet/length defl = new Deflater(); outPutBuf = new byte[100]; defl.setInput(byteArray); for (int i = 0; i < 2; i++) { if (i == 0) { offSet = outPutBuf.length + 1; length = outPutBuf.length; } else { offSet = 0; length = outPutBuf.length + 1; } try { defl.deflate(outPutBuf, offSet, length); fail("Test " + i + ": ArrayIndexOutOfBoundsException not thrown"); } catch (ArrayIndexOutOfBoundsException e) { } } defl.end(); } /** * java.util.zip.Deflater#end() */ public void test_end() { byte byteArray[] = { 5, 2, 3, 7, 8 }; byte outPutBuf[] = new byte[100]; Deflater defl = new Deflater(); defl.setInput(byteArray); defl.finish(); while (!defl.finished()) { defl.deflate(outPutBuf); } defl.end(); helper_end_test(defl, "end"); } /** * java.util.zip.Deflater#finalize() */ public void test_finalize() { MyDeflater mdefl = new MyDeflater(); mdefl.myFinalize(); System.gc(); helper_end_test(mdefl, "finalize"); } /** * java.util.zip.Deflater#finish() */ public void test_finish() throws Exception { // This test already here, its the same as test_deflate() byte byteArray[] = { 5, 2, 3, 7, 8 }; byte outPutBuf[] = new byte[100]; byte outPutInf[] = new byte[100]; int x = 0; Deflater defl = new Deflater(); defl.setInput(byteArray); defl.finish(); // needsInput should never return true after finish() is called if (System.getProperty("java.vendor").startsWith("IBM")) { assertFalse("needsInput() should return false after finish() is called", defl .needsInput()); } while (!defl.finished()) { x += defl.deflate(outPutBuf); } int totalOut = defl.getTotalOut(); int totalIn = defl.getTotalIn(); assertEquals(x, totalOut); assertEquals(byteArray.length, totalIn); defl.end(); Inflater infl = new Inflater(); infl.setInput(outPutBuf); while (!infl.finished()) { infl.inflate(outPutInf); } assertEquals(totalIn, infl.getTotalOut()); assertEquals(totalOut, infl.getTotalIn()); for (int i = 0; i < byteArray.length; i++) { assertEquals(byteArray[i], outPutInf[i]); } assertEquals("Final decompressed data contained more bytes than original", 0, outPutInf[byteArray.length]); infl.end(); } /** * java.util.zip.Deflater#finished() */ public void test_finished() { byte byteArray[] = { 5, 2, 3, 7, 8 }; byte outPutBuf[] = new byte[100]; Deflater defl = new Deflater(); assertTrue("Test 1: Deflater should not be finished.", !defl.finished()); defl.setInput(byteArray); assertTrue("Test 2: Deflater should not be finished.", !defl.finished()); defl.finish(); assertTrue("Test 3: Deflater should not be finished.", !defl.finished()); while (!defl.finished()) { defl.deflate(outPutBuf); } assertTrue("Test 4: Deflater should be finished.", defl.finished()); defl.end(); assertTrue("Test 5: Deflater should be finished.", defl.finished()); } /** * java.util.zip.Deflater#getAdler() */ public void test_getAdler() { byte byteArray[] = { 'a', 'b', 'c', 1, 2, 3 }; byte outPutBuf[] = new byte[100]; Deflater defl = new Deflater(); // getting the checkSum value using the Adler defl.setInput(byteArray); defl.finish(); while (!defl.finished()) { defl.deflate(outPutBuf); } long checkSumD = defl.getAdler(); defl.end(); // getting the checkSum value through the Adler32 class Adler32 adl = new Adler32(); adl.update(byteArray); long checkSumR = adl.getValue(); assertEquals( "The checksum value returned by getAdler() is not the same as the checksum returned by creating the adler32 instance", checkSumD, checkSumR); } /** * java.util.zip.Deflater#getTotalIn() */ public void test_getTotalIn() { byte outPutBuf[] = new byte[5]; byte byteArray[] = { 1, 3, 4, 7, 8 }; Deflater defl = new Deflater(); defl.setInput(byteArray); defl.finish(); while (!defl.finished()) { defl.deflate(outPutBuf); } assertEquals(byteArray.length, defl.getTotalIn()); defl.end(); defl = new Deflater(); int offSet = 2; int length = 3; outPutBuf = new byte[5]; defl.setInput(byteArray, offSet, length); defl.finish(); while (!defl.finished()) { defl.deflate(outPutBuf); } assertEquals(length, defl.getTotalIn()); defl.end(); } /** * java.util.zip.Deflater#getTotalOut() */ public void test_getTotalOut() { // the getTotalOut should equal the sum of value returned by deflate() byte outPutBuf[] = new byte[5]; byte byteArray[] = { 5, 2, 3, 7, 8 }; int x = 0; Deflater defl = new Deflater(); defl.setInput(byteArray); defl.finish(); while (!defl.finished()) { x += defl.deflate(outPutBuf); } assertEquals(x, defl.getTotalOut()); defl.end(); x = 0; int offSet = 2; int length = 3; defl = new Deflater(); outPutBuf = new byte[5]; defl.setInput(byteArray, offSet, length); defl.finish(); while (!defl.finished()) { x += defl.deflate(outPutBuf); } assertEquals(x, defl.getTotalOut()); } /** * java.util.zip.Deflater#needsInput() */ public void test_needsInput() { Deflater defl = new Deflater(); assertTrue( "needsInput give the wrong boolean value as a result of no input buffer", defl.needsInput()); byte byteArray[] = { 1, 2, 3 }; defl.setInput(byteArray); assertFalse( "needsInput give wrong boolean value as a result of a full input buffer", defl.needsInput()); byte[] outPutBuf = new byte[50]; while (!defl.needsInput()) { defl.deflate(outPutBuf); } byte emptyByteArray[] = new byte[0]; defl.setInput(emptyByteArray); assertTrue( "needsInput give wrong boolean value as a result of an empty input buffer", defl.needsInput()); defl.setInput(byteArray); defl.finish(); while (!defl.finished()) { defl.deflate(outPutBuf); } // needsInput should NOT return true after finish() has been // called. if (System.getProperty("java.vendor").startsWith("IBM")) { assertFalse( "needsInput gave wrong boolean value as a result of finish() being called", defl.needsInput()); } defl.end(); } /** * java.util.zip.Deflater#reset() */ public void test_reset() { byte outPutBuf[] = new byte[100]; byte outPutInf[] = new byte[100]; byte curArray[] = new byte[5]; byte byteArray[] = { 1, 3, 4, 7, 8 }; byte byteArray2[] = { 8, 7, 4, 3, 1 }; int x = 0; int orgValue = 0; Deflater defl = new Deflater(); for (int i = 0; i < 3; i++) { if (i == 0) { curArray = byteArray; } else if (i == 1) { curArray = byteArray2; } else { defl.reset(); } defl.setInput(curArray); defl.finish(); while (!defl.finished()) { x += defl.deflate(outPutBuf); } if (i == 0) { assertEquals(x, defl.getTotalOut()); } else if (i == 1) { assertEquals(x, orgValue); } else { assertEquals(x, orgValue * 2); } if (i == 0) { orgValue = x; } try { Inflater infl = new Inflater(); infl.setInput(outPutBuf); while (!infl.finished()) { infl.inflate(outPutInf); } infl.end(); } catch (DataFormatException e) { fail("Test " + i + ": Invalid input to be decompressed"); } if (i == 1) { curArray = byteArray; } for (int j = 0; j < curArray.length; j++) { assertEquals(curArray[j], outPutInf[j]); } assertEquals(0, outPutInf[curArray.length]); } } /** * java.util.zip.Deflater#setDictionary(byte[]) */ public void test_setDictionary$B() { // This test is very close to getAdler() byte dictionaryArray[] = { 'e', 'r', 't', 'a', 'b', 2, 3 }; byte byteArray[] = { 4, 5, 3, 2, 'a', 'b', 6, 7, 8, 9, 0, 's', '3', 'w', 'r' }; byte outPutBuf[] = new byte[100]; Deflater defl = new Deflater(); long deflAdler = defl.getAdler(); assertEquals("No dictionary set, no data deflated, getAdler should return 1", 1, deflAdler); defl.setDictionary(dictionaryArray); deflAdler = defl.getAdler(); // getting the checkSum value through the Adler32 class Adler32 adl = new Adler32(); adl.update(dictionaryArray); long realAdler = adl.getValue(); assertEquals(deflAdler, realAdler); defl.setInput(byteArray); defl.finish(); while (!defl.finished()) { defl.deflate(outPutBuf); } deflAdler = defl.getAdler(); adl = new Adler32(); adl.update(byteArray); realAdler = adl.getValue(); // Deflate is finished and there were bytes deflated that did not occur // in the dictionaryArray, therefore a new dictionary was automatically // set. assertEquals(realAdler, deflAdler); defl.end(); } /** * java.util.zip.Deflater#setDictionary(byte[], int, int) */ public void test_setDictionary$BII() { // This test is very close to getAdler() byte dictionaryArray[] = { 'e', 'r', 't', 'a', 'b', 2, 3, 'o', 't' }; byte byteArray[] = { 4, 5, 3, 2, 'a', 'b', 6, 7, 8, 9, 0, 's', '3', 'w', 'r', 't', 'u', 'i', 'o', 4, 5, 6, 7 }; byte outPutBuf[] = new byte[500]; int offSet = 4; int length = 5; Deflater defl = new Deflater(); long deflAdler = defl.getAdler(); assertEquals("No dictionary set, no data deflated, getAdler should return 1", 1, deflAdler); defl.setDictionary(dictionaryArray, offSet, length); deflAdler = defl.getAdler(); // getting the checkSum value through the Adler32 class Adler32 adl = new Adler32(); adl.update(dictionaryArray, offSet, length); long realAdler = adl.getValue(); assertEquals(deflAdler, realAdler); defl.setInput(byteArray); while (!defl.needsInput()) { defl.deflate(outPutBuf); } deflAdler = defl.getAdler(); adl = new Adler32(); adl.update(byteArray); realAdler = adl.getValue(); // Deflate is finished and there were bytes deflated that did not occur // in the dictionaryArray, therefore a new dictionary was automatically // set. assertEquals(realAdler, deflAdler); defl.end(); // boundary check defl = new Deflater(); for (int i = 0; i < 2; i++) { if (i == 0) { offSet = 0; length = dictionaryArray.length + 1; } else { offSet = dictionaryArray.length + 1; length = 1; } try { defl.setDictionary(dictionaryArray, offSet, length); fail( "Test " + i + ": boundary check for setDictionary failed for offset " + offSet + " and length " + length); } catch (ArrayIndexOutOfBoundsException e) { } } } /** * java.util.zip.Deflater#setInput(byte[]) */ public void test_setInput$B() { byte[] byteArray = { 1, 2, 3 }; byte[] outPutBuf = new byte[50]; byte[] outPutInf = new byte[50]; Deflater defl = new Deflater(); defl.setInput(byteArray); assertTrue("the array buffer in setInput() is empty", !defl .needsInput()); // The second setInput() should be ignored since needsInput() return // false defl.setInput(byteArray); defl.finish(); while (!defl.finished()) { defl.deflate(outPutBuf); } defl.end(); Inflater infl = new Inflater(); try { infl.setInput(outPutBuf); while (!infl.finished()) { infl.inflate(outPutInf); } } catch (DataFormatException e) { fail("Invalid input to be decompressed"); } for (int i = 0; i < byteArray.length; i++) { assertEquals(byteArray[i], outPutInf[i]); } assertEquals(byteArray.length, infl.getTotalOut()); infl.end(); } /** * java.util.zip.Deflater#setInput(byte[], int, int) */ public void test_setInput$BII() throws Exception { byte[] byteArray = { 1, 2, 3, 4, 5 }; byte[] outPutBuf = new byte[50]; byte[] outPutInf = new byte[50]; int offSet = 1; int length = 3; Deflater defl = new Deflater(); defl.setInput(byteArray, offSet, length); assertFalse("the array buffer in setInput() is empty", defl.needsInput()); // The second setInput() should be ignored since needsInput() return // false defl.setInput(byteArray, offSet, length); defl.finish(); while (!defl.finished()) { defl.deflate(outPutBuf); } defl.end(); Inflater infl = new Inflater(); infl.setInput(outPutBuf); while (!infl.finished()) { infl.inflate(outPutInf); } for (int i = 0; i < length; i++) { assertEquals(byteArray[i + offSet], outPutInf[i]); } assertEquals(length, infl.getTotalOut()); infl.end(); // boundary check defl = new Deflater(); for (int i = 0; i < 2; i++) { if (i == 0) { offSet = 0; length = byteArray.length + 1; } else { offSet = byteArray.length + 1; length = 1; } try { defl.setInput(byteArray, offSet, length); fail("Test " + i + ": boundary check for setInput failed for offset " + offSet + " and length " + length); } catch (ArrayIndexOutOfBoundsException e) { } } } /** * java.util.zip.Deflater#setLevel(int) */ public void test_setLevelI() throws Exception { // Very similar to test_Constructor(int) byte[] byteArray = new byte[100]; InputStream inFile = Support_Resources.getStream("hyts_checkInput.txt"); inFile.read(byteArray); inFile.close(); byte[] outPutBuf; int totalOut; for (int i = 0; i < 10; i++) { Deflater defl = new Deflater(); defl.setLevel(i); outPutBuf = new byte[500]; defl.setInput(byteArray); while (!defl.needsInput()) { defl.deflate(outPutBuf); } defl.finish(); while (!defl.finished()) { defl.deflate(outPutBuf); } totalOut = defl.getTotalOut(); defl.end(); outPutBuf = new byte[500]; defl = new Deflater(i); defl.setInput(byteArray); while (!defl.needsInput()) { defl.deflate(outPutBuf); } defl.finish(); while (!defl.finished()) { defl.deflate(outPutBuf); } assertEquals(totalOut, defl.getTotalOut()); defl.end(); } // testing boundaries try { Deflater boundDefl = new Deflater(); // Level must be between 0-9 boundDefl.setLevel(-2); fail( "IllegalArgumentException not thrown when setting level to a number < 0."); } catch (IllegalArgumentException e) { } try { Deflater boundDefl = new Deflater(); boundDefl.setLevel(10); fail( "IllegalArgumentException not thrown when setting level to a number > 9."); } catch (IllegalArgumentException e) { } } /** * java.util.zip.Deflater#setStrategy(int) */ public void test_setStrategyI() throws Exception { byte[] byteArray = new byte[100]; InputStream inFile = Support_Resources.getStream("hyts_checkInput.txt"); inFile.read(byteArray); inFile.close(); for (int i = 0; i < 3; i++) { byte outPutBuf[] = new byte[500]; MyDeflater mdefl = new MyDeflater(); if (i == 0) { mdefl.setStrategy(mdefl.getDefStrategy()); } else if (i == 1) { mdefl.setStrategy(mdefl.getHuffman()); } else { mdefl.setStrategy(mdefl.getFiltered()); } mdefl.setInput(byteArray); while (!mdefl.needsInput()) { mdefl.deflate(outPutBuf); } mdefl.finish(); while (!mdefl.finished()) { mdefl.deflate(outPutBuf); } if (i == 0) { // System.out.println(mdefl.getTotalOut()); // ran JDK and found that getTotalOut() = 86 for this particular // file assertEquals("getTotalOut() for the default strategy did not correspond with JDK", 86, mdefl.getTotalOut()); } else if (i == 1) { // System.out.println(mdefl.getTotalOut()); // ran JDK and found that getTotalOut() = 100 for this // particular file assertEquals("getTotalOut() for the Huffman strategy did not correspond with JDK", 100, mdefl.getTotalOut()); } else { // System.out.println(mdefl.getTotalOut()); // ran JDK and found that totalOut = 93 for this particular file assertEquals("Total Out for the Filtered strategy did not correspond with JDK", 93, mdefl.getTotalOut()); } mdefl.end(); } // Attempting to setStrategy to an invalid value try { Deflater defl = new Deflater(); defl.setStrategy(-412); fail( "IllegalArgumentException not thrown when setting strategy to an invalid value."); } catch (IllegalArgumentException e) { } } /** * java.util.zip.Deflater#Deflater() */ public void test_Constructor() throws Exception { byte[] byteArray = new byte[100]; InputStream inFile = Support_Resources.getStream("hyts_checkInput.txt"); inFile.read(byteArray); inFile.close(); Deflater defl = new Deflater(); byte[] outPutBuf = new byte[500]; defl.setInput(byteArray); while (!defl.needsInput()) { defl.deflate(outPutBuf); } defl.finish(); while (!defl.finished()) { defl.deflate(outPutBuf); } int totalOut = defl.getTotalOut(); defl.end(); // creating a Deflater using the DEFAULT_COMPRESSION as the int MyDeflater mdefl = new MyDeflater(); mdefl = new MyDeflater(mdefl.getDefCompression()); outPutBuf = new byte[500]; mdefl.setInput(byteArray); while (!mdefl.needsInput()) { mdefl.deflate(outPutBuf); } mdefl.finish(); while (!mdefl.finished()) { mdefl.deflate(outPutBuf); } assertEquals(totalOut, mdefl.getTotalOut()); mdefl.end(); } /** * java.util.zip.Deflater#Deflater(int, boolean) */ public void test_ConstructorIZ() throws Exception { byte byteArray[] = { 4, 5, 3, 2, 'a', 'b', 6, 7, 8, 9, 0, 's', '3', 'w', 'r' }; Deflater defl = new Deflater(); byte outPutBuf[] = new byte[500]; defl.setLevel(2); defl.setInput(byteArray); while (!defl.needsInput()) { defl.deflate(outPutBuf); } defl.finish(); while (!defl.finished()) { defl.deflate(outPutBuf); } int totalOut = defl.getTotalOut(); defl.end(); outPutBuf = new byte[500]; defl = new Deflater(2, false); defl.setInput(byteArray); while (!defl.needsInput()) { defl.deflate(outPutBuf); } defl.finish(); while (!defl.finished()) { defl.deflate(outPutBuf); } assertEquals(totalOut, defl.getTotalOut()); defl.end(); outPutBuf = new byte[500]; defl = new Deflater(2, true); defl.setInput(byteArray); while (!defl.needsInput()) { defl.deflate(outPutBuf); } defl.finish(); while (!defl.finished()) { defl.deflate(outPutBuf); } assertTrue( "getTotalOut() should not be equal comparing two Deflaters with different header options.", defl.getTotalOut() != totalOut); defl.end(); byte outPutInf[] = new byte[500]; Inflater infl = new Inflater(true); while (!infl.finished()) { if (infl.needsInput()) { infl.setInput(outPutBuf); } infl.inflate(outPutInf); } for (int i = 0; i < byteArray.length; i++) { assertEquals(byteArray[i], outPutInf[i]); } assertEquals("final decompressed data contained more bytes than original - constructorIZ", 0, outPutInf[byteArray.length]); infl.end(); infl = new Inflater(false); outPutInf = new byte[500]; int r = 0; try { while (!infl.finished()) { if (infl.needsInput()) { infl.setInput(outPutBuf); } infl.inflate(outPutInf); } } catch (DataFormatException e) { r = 1; } assertEquals("header option did not correspond", 1, r); // testing boundaries try { Deflater boundDefl = new Deflater(); // Level must be between 0-9 boundDefl.setLevel(-2); fail("IllegalArgumentException not thrown when setting level to a number < 0."); } catch (IllegalArgumentException e) { } try { Deflater boundDefl = new Deflater(); boundDefl.setLevel(10); fail("IllegalArgumentException not thrown when setting level to a number > 9."); } catch (IllegalArgumentException e) { } try { Deflater boundDefl = new Deflater(-2, true); fail("IllegalArgumentException not thrown when passing level to a number < 0."); } catch (IllegalArgumentException e) { } try { Deflater boundDefl = new Deflater(10, true); fail("IllegalArgumentException not thrown when passing level to a number > 9."); } catch (IllegalArgumentException e) { } } /** * java.util.zip.Deflater#Deflater(int) */ public void test_ConstructorI() throws Exception { byte[] byteArray = new byte[100]; InputStream inFile = Support_Resources.getStream("hyts_checkInput.txt"); inFile.read(byteArray); inFile.close(); byte outPutBuf[] = new byte[500]; Deflater defl = new Deflater(3); defl.setInput(byteArray); while (!defl.needsInput()) { defl.deflate(outPutBuf); } defl.finish(); while (!defl.finished()) { defl.deflate(outPutBuf); } int totalOut = defl.getTotalOut(); defl.end(); // test to see if the compression ratio is the same as setting the level // on a deflater outPutBuf = new byte[500]; defl = new Deflater(); defl.setLevel(3); defl.setInput(byteArray); while (!defl.needsInput()) { defl.deflate(outPutBuf); } defl.finish(); while (!defl.finished()) { defl.deflate(outPutBuf); } assertEquals(totalOut, defl.getTotalOut()); defl.end(); // testing boundaries try { Deflater boundDefl = new Deflater(); // Level must be between 0-9 boundDefl.setLevel(-2); fail("IllegalArgumentException not thrown when setting level to a number < 0."); } catch (IllegalArgumentException e) { } try { Deflater boundDefl = new Deflater(); boundDefl.setLevel(10); fail("IllegalArgumentException not thrown when setting level to a number > 9."); } catch (IllegalArgumentException e) { } } private void helper_end_test(Deflater defl, String desc) { // Help tests for test_end() and test_reset(). byte byteArray[] = { 5, 2, 3, 7, 8 }; // Methods where we expect IllegalStateException or NullPointerException // to be thrown try { defl.getTotalOut(); fail("defl.getTotalOut() can still be used after " + desc + " is called in test_" + desc); } catch (IllegalStateException e) { } catch (NullPointerException e) { } try { defl.getTotalIn(); fail("defl.getTotalIn() can still be used after " + desc + " is called in test_" + desc); } catch (IllegalStateException e) { } catch (NullPointerException e) { } try { defl.getAdler(); fail("defl.getAdler() can still be used after " + desc + " is called in test_" + desc); } catch (IllegalStateException e) { } catch (NullPointerException e) { } try { byte[] dict = { 'a', 'b', 'c' }; defl.setDictionary(dict); fail("defl.setDictionary() can still be used after " + desc + " is called in test_" + desc); } catch (IllegalStateException e) { } catch (NullPointerException e) { } try { defl.getTotalIn(); fail("defl.getTotalIn() can still be used after " + desc + " is called in test_" + desc); } catch (IllegalStateException e) { } catch (NullPointerException e) { } try { defl.getTotalIn(); fail("defl.getTotalIn() can still be used after " + desc + " is called in test_" + desc); } catch (IllegalStateException e) { } catch (NullPointerException e) { } try { defl.deflate(byteArray); fail("defl.deflate() can still be used after " + desc + " is called in test_" + desc); } catch (IllegalStateException e) { } catch (NullPointerException e) { } // Methods where we expect NullPointerException to be thrown try { defl.reset(); fail("defl.reset() can still be used after " + desc + " is called in test_" + desc); } catch (NullPointerException expected) { } catch (IllegalStateException expected) { } // Methods where we expect NullPointerException to be thrown try { defl.getBytesRead(); fail("defl.reset() can still be used after " + desc + " is called in test_" + desc); } catch (NullPointerException expected) { } catch (IllegalStateException expected) { } // Methods where we expect NullPointerException to be thrown try { defl.getBytesWritten(); fail("defl.getBytesWritten() can still be used after " + desc + " is called in test_" + desc); } catch (NullPointerException expected) { } catch (IllegalStateException expected) { } // Methods that should be allowed to be called after end() is called defl.needsInput(); defl.setStrategy(1); defl.setLevel(1); defl.end(); // Methods where exceptions should be thrown String vendor = System.getProperty("java.vendor"); if (vendor.indexOf("IBM") != -1) { try { defl.setInput(byteArray); fail("defl.setInput() can still be used after " + desc + " is called in test_" + desc); } catch (IllegalStateException e) { } } } /** * java.util.zip.Deflater() */ public void test_needsDictionary() { Deflater inf = new Deflater(); assertEquals(0, inf.getTotalIn()); assertEquals(0, inf.getTotalOut()); assertEquals(0, inf.getBytesRead()); assertEquals(0, inf.getBytesWritten()); } /** * @throws DataFormatException * @throws UnsupportedEncodingException * java.util.zip.Deflater#getBytesRead() */ public void test_getBytesRead() throws DataFormatException, UnsupportedEncodingException { // Regression test for HARMONY-158 Deflater def = new Deflater(); assertEquals(0, def.getTotalIn()); assertEquals(0, def.getTotalOut()); assertEquals(0, def.getBytesRead()); // Encode a String into bytes String inputString = "blahblahblah??"; byte[] input = inputString.getBytes("UTF-8"); // Compress the bytes byte[] output = new byte[100]; def.setInput(input); def.finish(); int compressedDataLength = def.deflate(output); assertEquals(14, def.getTotalIn()); assertEquals(compressedDataLength, def.getTotalOut()); assertEquals(14, def.getBytesRead()); } /** * @throws DataFormatException * @throws UnsupportedEncodingException * java.util.zip.Deflater#getBytesRead() */ public void test_getBytesWritten() throws DataFormatException, UnsupportedEncodingException { // Regression test for HARMONY-158 Deflater def = new Deflater(); assertEquals(0, def.getTotalIn()); assertEquals(0, def.getTotalOut()); assertEquals(0, def.getBytesWritten()); // Encode a String into bytes String inputString = "blahblahblah??"; byte[] input = inputString.getBytes("UTF-8"); // Compress the bytes byte[] output = new byte[100]; def.setInput(input); def.finish(); int compressedDataLength = def.deflate(output); assertEquals(14, def.getTotalIn()); assertEquals(compressedDataLength, def.getTotalOut()); assertEquals(compressedDataLength, def.getBytesWritten()); } //Regression Test for HARMONY-2481 public void test_deflate_beforeSetInput() throws Exception { Deflater deflater = new Deflater(); deflater.finish(); byte[] buffer = new byte[1024]; assertEquals(8, deflater.deflate(buffer)); byte[] expectedBytes = { 120, -100, 3, 0, 0, 0, 0, 1 }; for (int i = 0; i < expectedBytes.length; i++) { assertEquals(expectedBytes[i], buffer[i]); } } }