Hi,

I just ran the unit tests on my system (uses a german locale) and the DateFieldTest and LegacyDateFieldTest failed because the expected decimal format used "." as separator but the actual result was formatted using the "," separator. This happens because the ISO8601CanonicalDateFormat class which is defined inside the DateField class doesn't specify the US locale when creating the formatter used for milliseconds. I attached a patch which fixes that problem (schema.DateField-locale.patch.txt).

TestNumberFormatTransformer in contrib/dataimporthandler also failed because handler.dataimport.NumberFormatTransformer uses a NumberFormatter which relies on the system locale. But I think in this case it's intentional, so I modified the test case to use the grouping separator of the system locale (handler.dataimport.TestNumberFormatTransformer-locale.patch.txt).

After applying those changes all tests succeeded.

kind regards,

Stefan
### Eclipse Workspace Patch 1.0
#P solr
Index: 
contrib/dataimporthandler/src/test/java/org/apache/solr/handler/dataimport/TestNumberFormatTransformer.java
===================================================================
--- 
contrib/dataimporthandler/src/test/java/org/apache/solr/handler/dataimport/TestNumberFormatTransformer.java
 (revision 685675)
+++ 
contrib/dataimporthandler/src/test/java/org/apache/solr/handler/dataimport/TestNumberFormatTransformer.java
 (working copy)
@@ -19,6 +19,7 @@
 import org.junit.Assert;
 import org.junit.Test;
 
+import java.text.DecimalFormatSymbols;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -32,6 +33,9 @@
  * @since solr 1.3
  */
 public class TestNumberFormatTransformer {
+  private static final char GRP_SEP = new DecimalFormatSymbols()
+    .getGroupingSeparator();
+  
   @Test
   @SuppressWarnings("unchecked")
   public void testTransformRow_SingleNumber() {
@@ -40,7 +44,7 @@
             NumberFormatTransformer.FORMAT_STYLE, 
NumberFormatTransformer.NUMBER));
     Context c = AbstractDataImportHandlerTest.getContext(null, null, null, 0,
             l, null);
-    Map m = AbstractDataImportHandlerTest.createMap("num", "123,567");
+    Map m = AbstractDataImportHandlerTest.createMap("num", 
"123"+GRP_SEP+"567");
     new NumberFormatTransformer().transformRow(m, c);
     Assert.assertEquals(new Long(123567), m.get("num"));
   }
@@ -56,8 +60,8 @@
             NumberFormatTransformer.FORMAT_STYLE, 
NumberFormatTransformer.NUMBER));
 
     List inputs = new ArrayList();
-    inputs.add("123,567");
-    inputs.add("245,678");
+    inputs.add("123"+GRP_SEP+"567");
+    inputs.add("245"+GRP_SEP+"678");
     Map row = AbstractDataImportHandlerTest.createMap("inputs", inputs);
 
     VariableResolverImpl resolver = new VariableResolverImpl();
### Eclipse Workspace Patch 1.0
#P solr
Index: src/java/org/apache/solr/schema/DateField.java
===================================================================
--- src/java/org/apache/solr/schema/DateField.java      (revision 685675)
+++ src/java/org/apache/solr/schema/DateField.java      (working copy)
@@ -31,6 +31,7 @@
 import java.util.Date;
 import java.util.TimeZone;
 import java.util.Locale;
+import java.text.DecimalFormatSymbols;
 import java.text.SimpleDateFormat;
 import java.text.DateFormat;
 import java.text.NumberFormat;
@@ -245,7 +246,8 @@
     protected NumberFormat millisParser
       = NumberFormat.getIntegerInstance(Locale.US);
 
-    protected NumberFormat millisFormat = new DecimalFormat(".###");
+    protected NumberFormat millisFormat = new DecimalFormat(".###", 
+      new DecimalFormatSymbols(Locale.US));
 
     public ISO8601CanonicalDateFormat() {
       super("yyyy-MM-dd'T'HH:mm:ss", Locale.US);
@@ -295,7 +297,8 @@
       ISO8601CanonicalDateFormat c
         = (ISO8601CanonicalDateFormat) super.clone();
       c.millisParser = NumberFormat.getIntegerInstance(Locale.US);
-      c.millisFormat = new DecimalFormat(".###");
+      c.millisFormat = new DecimalFormat(".###", 
+        new DecimalFormatSymbols(Locale.US));
       return c;
     }
   }

Reply via email to