This is the mail archive of the mauve-patches@sourceware.org mailing list for the Mauve project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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());
+  }
+}

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]