You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by ml...@apache.org on 2006/06/02 11:55:02 UTC

svn commit: r411111 - in /incubator/harmony/enhanced/classlib/trunk/modules/text: make/common/build.xml src/main/java/java/text/ChoiceFormat.java src/test/java/org/apache/harmony/text/tests/java/text/ChoiceFormatTest.java

Author: mloenko
Date: Fri Jun  2 02:55:01 2006
New Revision: 411111

URL: http://svn.apache.org/viewvc?rev=411111&view=rev
Log:
fixes for HARMONY-540
[classlib][text]Method applyPattern(String) of java.text.ChoiceFormat incorrectly throws IllegalArgumentException

Modified:
    incubator/harmony/enhanced/classlib/trunk/modules/text/make/common/build.xml
    incubator/harmony/enhanced/classlib/trunk/modules/text/src/main/java/java/text/ChoiceFormat.java
    incubator/harmony/enhanced/classlib/trunk/modules/text/src/test/java/org/apache/harmony/text/tests/java/text/ChoiceFormatTest.java

Modified: incubator/harmony/enhanced/classlib/trunk/modules/text/make/common/build.xml
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/text/make/common/build.xml?rev=411111&r1=411110&r2=411111&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/text/make/common/build.xml (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/text/make/common/build.xml Fri Jun  2 02:55:01 2006
@@ -100,7 +100,6 @@
 
                 <fileset dir="${hy.text.src.test.java}">
                     <include name="**/*Test.java"/>
-                    <exclude name="org/apache/harmony/text/tests/java/text/ChoiceFormatTest.java"/>
                     <exclude name="org/apache/harmony/text/tests/java/text/CollationKeyTest.java"/>
                     <exclude name="org/apache/harmony/text/tests/java/text/CollatorTest.java"/>
                     <exclude name="org/apache/harmony/text/tests/java/text/DecimalFormatTest.java"/>

Modified: incubator/harmony/enhanced/classlib/trunk/modules/text/src/main/java/java/text/ChoiceFormat.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/text/src/main/java/java/text/ChoiceFormat.java?rev=411111&r1=411110&r2=411111&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/text/src/main/java/java/text/ChoiceFormat.java (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/text/src/main/java/java/text/ChoiceFormat.java Fri Jun  2 02:55:01 2006
@@ -1,4 +1,4 @@
-/* Copyright 1998, 2004 The Apache Software Foundation or its licensors, as applicable
+/* Copyright 1998, 2006 The Apache Software Foundation or its licensors, as applicable
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -75,7 +75,6 @@
 	 *                then an error occurs parsing the pattern
 	 */
 	public void applyPattern(String template) {
-		boolean first = true;
 		double[] limits = new double[5];
 		Vector formats = new Vector();
 		int length = template.length(), limitCount = 0, index = 0;
@@ -100,8 +99,12 @@
 			position.setIndex(index);
 			Number value = format.parse(template, position);
 			index = skipWhitespace(template, position.getIndex());
-			if (position.getErrorIndex() != -1 || index >= length)
-				throw new IllegalArgumentException();
+			if (position.getErrorIndex() != -1 || index >= length) {
+                //Fix Harmony 540
+                choiceLimits = new double[0];
+                choiceFormats = new String[0];
+                return;
+            }
 			char ch = template.charAt(index++);
 			if (limitCount == limits.length) {
 				double[] newLimits = new double[limitCount * 2];
@@ -115,14 +118,11 @@
 				next = value.doubleValue();
 				break;
 			case '<':
-				if (first)
-					throw new IllegalArgumentException();
 				next = nextDouble(value.doubleValue());
 				break;
 			default:
 				throw new IllegalArgumentException();
 			}
-			first = false;
 			if (limitCount > 0 && next <= limits[limitCount - 1])
 				throw new IllegalArgumentException();
 			buffer.setLength(0);

Modified: incubator/harmony/enhanced/classlib/trunk/modules/text/src/test/java/org/apache/harmony/text/tests/java/text/ChoiceFormatTest.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/text/src/test/java/org/apache/harmony/text/tests/java/text/ChoiceFormatTest.java?rev=411111&r1=411110&r2=411111&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/text/src/test/java/org/apache/harmony/text/tests/java/text/ChoiceFormatTest.java (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/text/src/test/java/org/apache/harmony/text/tests/java/text/ChoiceFormatTest.java Fri Jun  2 02:55:01 2006
@@ -142,6 +142,50 @@
                 new double[] { 0, 1 }));
         assertTrue("Incorrect formats", java.util.Arrays.equals(f.getFormats(),
                 new String[] { "0", "1" }));
+        
+        //Regression for Harmony 540
+        double[] choiceLimits = { -1, 0, 1, ChoiceFormat.nextDouble(1) };
+        String[] choiceFormats = { "is negative", "is zero or fraction",
+                "is one", "is more than 1" };
+        
+        f = new ChoiceFormat("");
+        f.applyPattern("-1#is negative|0#is zero or fraction|1#is one|1<is more than 1");
+        assertTrue("Incorrect limits", java.util.Arrays.equals(f.getLimits(),
+                choiceLimits));
+        assertTrue("Incorrect formats", java.util.Arrays.equals(f.getFormats(),
+                choiceFormats));
+        
+        f = new ChoiceFormat("");
+        try {
+            f.applyPattern("-1#is negative|0#is zero or fraction|-1#is one|1<is more than 1");
+            fail("Expected IllegalArgumentException");
+        } catch (IllegalArgumentException e) {
+            // Expected
+        }
+        
+        f = new ChoiceFormat("");
+        try {
+            f.applyPattern("-1is negative|0#is zero or fraction|1#is one|1<is more than 1");
+            fail("Expected IllegalArgumentException");
+        } catch (IllegalArgumentException e) {
+            // Expected
+        }
+        
+        f = new ChoiceFormat("");
+        f.applyPattern("-1<is negative|0#is zero or fraction|1#is one|1<is more than 1");
+        choiceLimits[0] = ChoiceFormat.nextDouble(-1);
+        assertTrue("Incorrect limits", java.util.Arrays.equals(f.getLimits(),
+                choiceLimits));
+        assertTrue("Incorrect formats", java.util.Arrays.equals(f.getFormats(),
+                choiceFormats));
+        
+        f = new ChoiceFormat("");
+        f.applyPattern("-1#is negative|0#is zero or fraction|1#is one|1<is more than 1");
+        String str = "org.apache.harmony.tests.java.text.ChoiceFormat";
+        f.applyPattern(str);
+        String ptrn = f.toPattern();
+        assertEquals("Return value should be empty string for invalid pattern",
+                0, ptrn.length());
     }
 
     /**
@@ -351,20 +395,6 @@
         assertTrue("Formats copied", f.getFormats() == fs);
     }
 
-    /**
-     * Sets up the fixture, for example, open a network connection. This method
-     * is called before a test is executed.
-     */
-    protected void setUp() {
-    }
-
-    /**
-     * Tears down the fixture, for example, close a network connection. This
-     * method is called after a test is executed.
-     */
-    protected void tearDown() {
-    }
-    
 	/**
 	 * @tests java.text.ChoiceFormat#toPattern()
 	 */