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;
}
}