Harmony
  1. Harmony
  2. HARMONY-32

[classlib][text] java.text.Collator.setDecomposition(FULL_DECOMPOSITION) throws IllegalArgumentException

    Details

    • Type: Bug Bug
    • Status: In Progress
    • Priority: Major Major
    • Resolution: Unresolved
    • Affects Version/s: None
    • Fix Version/s: None
    • Component/s: Classlib
    • Labels:
      None

      Description

      Code for reproducing Test.java:
      import java.text.Collator;
      import java.util.Locale;

      public class Test {
      public static void main (String[] args)

      { Collator c = Collator.getInstance(Locale.US); c.setDecomposition(Collator.FULL_DECOMPOSITION); int decompositionMode = c.getDecomposition(); System.out.println("decomposition Mode is " + decompositionMode); }

      }

      Steps to Reproduce:
      1. Build Harmony-14 j2se subset as described in README.txt.
      2. Compile Test.java using BEA 1.4 javac
      > javac -d . Test.java
      2. Run java using compatible VM (J9)
      > java -showversion Test

      Output:
      java version 1.4.2 (subset)

      (c) Copyright 1991, 2005 The Apache Software Foundation or its licensors, as applicable.
      Exception in thread "main" java.lang.IllegalArgumentException: Wrong decomposition mode.
      at com.ibm.icu.text.Collator.setDecomposition(Collator.java:295)
      at java.text.Collator.setDecomposition(Collator.java:277)
      at Test.main(Test.java:7)

      Output on BEA 1.4.2:
      decomposition Mode is 2

      Suggested junit test case:
      package org.apache.harmony.tests.java.text;

      import java.text.Collator;
      import java.util.Locale;

      import junit.framework.TestCase;

      public class CollatorTest extends TestCase {
      public static void main(String[] args)

      { junit.textui.TestRunner.run(CollatorTest.class); }

      public void test_setDecomposition() {
      Collator c = Collator.getInstance(Locale.US);
      try

      { c.setDecomposition(Collator.FULL_DECOMPOSITION); }

      catch (Exception e)

      { fail("Assert 0: Unexpected exception " + e); }

      int decompositionMode = c.getDecomposition();
      assertTrue("Assert 1: next() returns incorrect value " + decompositionMode, decompositionMode == Collator.FULL_DECOMPOSITION );
      }
      }

        Activity

        Show
        Tim Ellison added a comment - This is an easy one for somebody to pick-off. As a hint, take a look at the table here: http://java.sun.com/j2se/1.5.0/docs/api/constant-values.html#java.text.Collator.CANONICAL_DECOMPOSITION compared to: http://icu.sourceforge.net/apiref/icu4j/constant-values.html#com.ibm.icu.text.Collator.CANONICAL_DECOMPOSITION
        Hide
        Richard Liang added a comment -

        Having a looking at the javadoc of com.ibm.icu.text.Collator, I find that icu4j's collator officially supports only two decomposition mode: CANONICAL_DECOMPOSITION and NO_DECOMPOSITION. (FULL_DECOMPOSITION is in Deprecated status).

        For this issue, throwing a more specific expcetion such as NotYetImplementedException may be a better solution.

        Any comment?

        Thanks a lot.

        Show
        Richard Liang added a comment - Having a looking at the javadoc of com.ibm.icu.text.Collator, I find that icu4j's collator officially supports only two decomposition mode: CANONICAL_DECOMPOSITION and NO_DECOMPOSITION. (FULL_DECOMPOSITION is in Deprecated status). For this issue, throwing a more specific expcetion such as NotYetImplementedException may be a better solution. Any comment? Thanks a lot.
        Hide
        Richard Liang added a comment -

        Forgive my carping, but I think the proposed test method can be re-written more clean:

        public void test_setDecomposition()

        { Collator c = Collator.getInstance(Locale.US); c.setDecomposition(Collator.FULL_DECOMPOSITION); assertEquals(Collator.FULL_DECOMPOSITION, c.getDecomposition()); }

        please refer to the article "JUnit best practices" http://www.javaworld.com/javaworld/jw-12-2000/jw-1221-junit_p.html

        Show
        Richard Liang added a comment - Forgive my carping, but I think the proposed test method can be re-written more clean: public void test_setDecomposition() { Collator c = Collator.getInstance(Locale.US); c.setDecomposition(Collator.FULL_DECOMPOSITION); assertEquals(Collator.FULL_DECOMPOSITION, c.getDecomposition()); } please refer to the article "JUnit best practices" http://www.javaworld.com/javaworld/jw-12-2000/jw-1221-junit_p.html
        Hide
        Geir Magnusson Jr added a comment -

        ICU?

        Show
        Geir Magnusson Jr added a comment - ICU?
        Hide
        Nathan Beyer added a comment -

        According to ICU's Javadoc FULL_DECOMPOSITION is not a supported composition mode [1]. The javadoc says that IDENTICAL should be used, but IDENTICAL is a strength setting. If you set the ICU FULL_DECOMPOSITION constant on an ICU Collator, it throws an IllegalArgumentException.

        Any thoughts on what we should do to support FULL_DECOMPOSITION? I'm not much of an ICU expert.

        [1] http://icu.sourceforge.net/apiref/icu4j/com/ibm/icu/text/Collator.html#FULL_DECOMPOSITION

        Show
        Nathan Beyer added a comment - According to ICU's Javadoc FULL_DECOMPOSITION is not a supported composition mode [1] . The javadoc says that IDENTICAL should be used, but IDENTICAL is a strength setting. If you set the ICU FULL_DECOMPOSITION constant on an ICU Collator, it throws an IllegalArgumentException. Any thoughts on what we should do to support FULL_DECOMPOSITION? I'm not much of an ICU expert. [1] http://icu.sourceforge.net/apiref/icu4j/com/ibm/icu/text/Collator.html#FULL_DECOMPOSITION

          People

          • Assignee:
            Nathan Beyer
            Reporter:
            tatyana doubtsova
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:

              Development