diff options
Diffstat (limited to 'harmony-tests/src/test/java/org/apache/harmony/tests/java/util/zip/DeflaterTest.java')
-rw-r--r-- | harmony-tests/src/test/java/org/apache/harmony/tests/java/util/zip/DeflaterTest.java | 1129 |
1 files changed, 1129 insertions, 0 deletions
diff --git a/harmony-tests/src/test/java/org/apache/harmony/tests/java/util/zip/DeflaterTest.java b/harmony-tests/src/test/java/org/apache/harmony/tests/java/util/zip/DeflaterTest.java new file mode 100644 index 0000000..75e4a64 --- /dev/null +++ b/harmony-tests/src/test/java/org/apache/harmony/tests/java/util/zip/DeflaterTest.java @@ -0,0 +1,1129 @@ +/* + * 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]); + } + } +} |