This is the mail archive of the
mauve-patches@sourceware.org
mailing list for the Mauve project.
Patch: FYI: TestJPEGImageWriteParam
- From: Thomas Fitzsimmons <fitzsim at redhat dot com>
- To: mauve-patches at sources dot redhat dot com
- Date: Mon, 03 Apr 2006 20:53:52 -0400
- Subject: Patch: FYI: TestJPEGImageWriteParam
Hi,
I committed TestJPEGImageWriteParam.
Tom
2006-04-03 Thomas Fitzsimmons <fitzsim@redhat.com>
* gnu/testlet/javax/imageio/plugins/jpeg/TestJPEGImageWriteParam.java:
New test.
Index: gnu/testlet/javax/imageio/plugins/jpeg/TestJPEGImageWriteParam.java
===================================================================
RCS file: gnu/testlet/javax/imageio/plugins/jpeg/TestJPEGImageWriteParam.java
diff -N gnu/testlet/javax/imageio/plugins/jpeg/TestJPEGImageWriteParam.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ gnu/testlet/javax/imageio/plugins/jpeg/TestJPEGImageWriteParam.java 4 Apr 2006 00:51:14 -0000
@@ -0,0 +1,240 @@
+// Tags: JDK1.4
+
+// Copyright (C) 2006 Red Hat
+
+// This file is part of Mauve.
+
+// Mauve is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// Mauve is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Mauve; see the file COPYING. If not, write to
+// the Free Software Foundation, 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+package gnu.testlet.javax.imageio.plugins.jpeg;
+
+import gnu.testlet.Testlet;
+import gnu.testlet.TestHarness;
+
+import java.util.Arrays;
+import java.util.Locale;
+import javax.imageio.ImageWriteParam;
+import javax.imageio.plugins.jpeg.JPEGHuffmanTable;
+import javax.imageio.plugins.jpeg.JPEGImageWriteParam;
+import javax.imageio.plugins.jpeg.JPEGQTable;
+
+/**
+ * Test JPEGImageWriteParam.
+ */
+public class TestJPEGImageWriteParam implements Testlet
+{
+ public void test(TestHarness harness)
+ {
+ // use the english locale so that we know what string to expect
+ // for descriptions
+ JPEGImageWriteParam param = new JPEGImageWriteParam(Locale.ENGLISH);
+
+ // valid data for testing.
+
+ JPEGQTable[] qTables = new JPEGQTable[]
+ {
+ JPEGQTable.K1Luminance,
+ JPEGQTable.K1Div2Luminance,
+ JPEGQTable.K2Chrominance,
+ JPEGQTable.K2Div2Chrominance
+ };
+
+ JPEGHuffmanTable[] DCHuffmanTables = new JPEGHuffmanTable[]
+ {
+ JPEGHuffmanTable.StdDCLuminance,
+ JPEGHuffmanTable.StdDCChrominance
+ };
+
+ JPEGHuffmanTable[] ACHuffmanTables = new JPEGHuffmanTable[]
+ {
+ JPEGHuffmanTable.StdACLuminance,
+ JPEGHuffmanTable.StdACChrominance
+ };
+
+ // check that tables are not set after construction
+ harness.check(!param.areTablesSet());
+
+ // check that optimize is false after construction
+ harness.check(!param.getOptimizeHuffmanTables());
+
+ // check that returned tables are null
+ harness.check(param.getQTables() == null);
+ harness.check(param.getDCHuffmanTables() == null);
+ harness.check(param.getACHuffmanTables() == null);
+
+ // check that tiling is not supported
+ harness.check(!param.canWriteTiles());
+
+ // check that progressive encoding is supported
+ harness.check(param.canWriteProgressive());
+
+ // check the default progressive mode
+ harness.check(param.getProgressiveMode() == ImageWriteParam.MODE_DISABLED);
+
+ // check that compression is supported
+ harness.check(param.canWriteCompressed());
+
+ // check that a single compression type is supported
+ harness.check(param.getCompressionTypes().length == 1);
+
+ // check that the single compression type is called "JPEG"
+ harness.check(param.getCompressionTypes()[0].equals("JPEG"));
+
+ // set explicit compression mode so that compression mode tests
+ // will work
+ param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
+
+ // check that default compression type is "JPEG"
+ harness.check(param.getCompressionType().equals("JPEG"));
+
+ // check that the default compression quality is 0.75f
+ harness.check(param.getCompressionQuality() == 0.75f);
+
+ // check that compression is not lossless
+ harness.check(!param.isCompressionLossless());
+
+ // check compression descriptions
+ String[] descriptions = param.getCompressionQualityDescriptions();
+ harness.check(descriptions.length == 3);
+ String[] expectedDescriptions =
+ {
+ "Minimum useful",
+ "Visually lossless",
+ "Maximum useful"
+ };
+ harness.check(Arrays.equals(descriptions, expectedDescriptions));
+
+ // check compression quality values
+ float[] values = param.getCompressionQualityValues();
+ // Sun's API docs say that the length of the quality values array
+ // will always be one greater than the length of the descriptions
+ // array but testing shows the the lengths to be equal for
+ // JPEGImageWriteParam. This implies that rather than specifying
+ // quality value interval endpoints, the returned array specifies
+ // actual quality values, each of which correspond directly to a
+ // quality description.
+ harness.check(values.length == descriptions.length);
+ float[] expectedValues = { 0.05f, 0.75f, 0.95f };
+ harness.check(Arrays.equals(values, expectedValues));
+
+ // check setting optimize
+ param.setOptimizeHuffmanTables(true);
+ harness.check(param.getOptimizeHuffmanTables());
+
+ // check clearing optimize
+ param.setOptimizeHuffmanTables(false);
+ harness.check(!param.getOptimizeHuffmanTables());
+
+ // check setting compression quality
+ param.setCompressionQuality(0.31f);
+ harness.check(param.getCompressionQuality() == 0.31f);
+
+ // check that clearing compression quality resets to 0.75f
+ param.unsetCompression();
+ harness.check(param.getCompressionQuality() == 0.75f);
+
+ // check failure modes for table setting
+ // null argument
+ boolean settingFailed = false;
+ try
+ {
+ param.setEncodeTables(qTables, null, ACHuffmanTables);
+ }
+ catch (IllegalArgumentException e)
+ {
+ settingFailed = true;
+ }
+ harness.check(settingFailed);
+
+ // invalid length for an array argument
+ settingFailed = false;
+ try
+ {
+ param.setEncodeTables(new JPEGQTable[]
+ {
+ JPEGQTable.K1Luminance,
+ JPEGQTable.K1Div2Luminance,
+ JPEGQTable.K2Chrominance,
+ JPEGQTable.K2Div2Chrominance,
+ JPEGQTable.K1Luminance
+ }, DCHuffmanTables, ACHuffmanTables);
+ }
+ catch (IllegalArgumentException e)
+ {
+ settingFailed = true;
+ }
+ harness.check(settingFailed);
+
+ // differing lengths for Huffman table array arguments
+ settingFailed = false;
+ try
+ {
+ param.setEncodeTables(qTables, new JPEGHuffmanTable[]
+ {
+ JPEGHuffmanTable.StdDCLuminance
+ }, ACHuffmanTables);
+ }
+ catch (IllegalArgumentException e)
+ {
+ settingFailed = true;
+ }
+ harness.check(settingFailed);
+
+ // check valid setting
+ settingFailed = false;
+ try
+ {
+ param.setEncodeTables(qTables, DCHuffmanTables, ACHuffmanTables);
+ }
+ catch (IllegalArgumentException e)
+ {
+ settingFailed = true;
+ }
+ harness.check(!settingFailed);
+
+ // check tables set
+ harness.check(param.areTablesSet());
+
+ // check getting tables
+ JPEGQTable[] gotQTables = param.getQTables();
+ harness.check(gotQTables != null);
+ harness.check(Arrays.equals(qTables, gotQTables));
+
+ JPEGHuffmanTable[] gotDCHuffmanTables = param.getDCHuffmanTables();
+ harness.check(gotDCHuffmanTables != null);
+ harness.check(Arrays.equals(DCHuffmanTables, gotDCHuffmanTables));
+
+ JPEGHuffmanTable[] gotACHuffmanTables = param.getACHuffmanTables();
+ harness.check(gotACHuffmanTables != null);
+ harness.check(Arrays.equals(ACHuffmanTables, gotACHuffmanTables));
+
+ // check clearing tables
+ param.unsetEncodeTables();
+
+ // check getting null tables
+ gotQTables = param.getQTables();
+ harness.check(gotQTables == null);
+
+ gotDCHuffmanTables = param.getDCHuffmanTables();
+ harness.check(gotDCHuffmanTables == null);
+
+ gotACHuffmanTables = param.getACHuffmanTables();
+ harness.check(gotACHuffmanTables == null);
+
+ // check that areTablesSet returns false
+ harness.check(!param.areTablesSet());
+ }
+}