Hello Tim,

I think this is caused by different understanding of the java spec:

A charset name **must** begin with either a letter or a digit. The empty string is not a legal charset name....

What do think the implication of "must" here? :-)

Richard Liang
China Software Development Lab, IBM



Tim Ellison (JIRA) wrote:
[ http://issues.apache.org/jira/browse/HARMONY-68?page=comments#action_12366784 ]
Tim Ellison commented on HARMONY-68:
------------------------------------

The test looks invalid to me.  You shoud only expect an 
java.nio.charset.IllegalCharsetNameException if the name itself contains 
disallowed characters, and both underscore and dash are permitted.

The code Charset.isSupported("-UTF-8")

should return false, not throw an exception.

java.nio.charset.Charset.isSupported(String charsetName) does not throw 
IllegalCharsetNameException for spoiled standard sharset name
-------------------------------------------------------------------------------------------------------------------------------------

         Key: HARMONY-68
         URL: http://issues.apache.org/jira/browse/HARMONY-68
     Project: Harmony
        Type: Bug
  Components: Classlib
    Reporter: Svetlana Samoilenko
 Attachments: charset_patch.txt

According to j2se 1.4.2 specification for Charset.isSupported(String charsetName) the method must throw IllegalCharsetNameException "if the given charset name is illegal ". "Legal charset name must begin with either a letter or a digit. The test listed below shows that there is no the exception if to insert "-" or "_" symbols before standard sharset name, for example "-UTF-8" or "_US-ASCII".
Moreover the method returns "true" in this case.
BEA also does not throw the exception but returns "false".
Code to reproduce: import java.nio.charset.*; public class test2 { public static void main (String[] args) { // string starts neither a letter nor a digit boolean sup=false; try{
             sup=Charset.isSupported("-UTF-8");
System.out.println("***BAD. should be exception; sup="+sup); sup=Charset.isSupported("_US-ASCII"); System.out.println("***BAD. should be exception; sup="+sup); } catch (IllegalCharsetNameException e) { System.out.println("***OK. Expected IllegalCharsetNameException " + e); } } } Steps to Reproduce: 1. Build Harmony (check-out on 2006-01-30) j2se subset as described in README.txt. 2. Compile test2.java using BEA 1.4 javac
javac -d . test2.java
3. Run java using compatible VM (J9)
java -showversion test2
Output: C:\tmp>C:\jrockit-j2sdk1.4.2_04\bin\java.exe -showversion test2 java version "1.4.2_04" Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_04-b05) BEA WebLogic JRockit(TM) 1.4.2_04 JVM (build ari-31788-20040616-1132-win-ia32, Native Threads, GC strategy: parallel) ***BAD. should be exception; sup=false
***BAD. should be exception; sup=false
C:\tmp>C:\harmony\trunk\deploy\jre\bin\java -showversion test2 (c) Copyright 1991, 2005 The Apache Software Foundation or its licensors, as applicable. ***BAD. should be exception; sup=true
***BAD. should be exception; sup=true
Suggested junit test case:
------------------------ CharserTest.java ------------------------------------------------- import java.nio.charset.*; import junit.framework.*; public class CharsetTest extends TestCase { public static void main(String[] args) { junit.textui.TestRunner.run(CharsetTest.class); } public void test_isSupported() { boolean sup=false; // string starts neither a letter nor a digit try{
            sup=Charset.isSupported("-UTF-8");
fail("***BAD. should be exception IllegalCharsetNameException"); } catch (IllegalCharsetNameException e) { //expected
        }
// string starts neither a letter nor a digit try{
             sup=Charset.isSupported("_US-ASCII");
fail("***BAD. should be exception IllegalCharsetNameException"); } catch (IllegalCharsetNameException e) { //expected
        }
} }

Reply via email to