You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lu...@apache.org on 2010/11/11 17:16:49 UTC
svn commit: r1033982 - in /myfaces/core/trunk/api/src:
main/java/javax/faces/convert/NumberConverter.java
test/java/javax/faces/convert/NumberConverterTest.java
Author: lu4242
Date: Thu Nov 11 16:16:49 2010
New Revision: 1033982
URL: http://svn.apache.org/viewvc?rev=1033982&view=rev
Log:
MYFACES-2970 f:convertNumber conversion is not symmetric when currencyCode and currencySymbol are used
Modified:
myfaces/core/trunk/api/src/main/java/javax/faces/convert/NumberConverter.java
myfaces/core/trunk/api/src/test/java/javax/faces/convert/NumberConverterTest.java
Modified: myfaces/core/trunk/api/src/main/java/javax/faces/convert/NumberConverter.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/api/src/main/java/javax/faces/convert/NumberConverter.java?rev=1033982&r1=1033981&r2=1033982&view=diff
==============================================================================
--- myfaces/core/trunk/api/src/main/java/javax/faces/convert/NumberConverter.java (original)
+++ myfaces/core/trunk/api/src/main/java/javax/faces/convert/NumberConverter.java Thu Nov 11 16:16:49 2010
@@ -118,6 +118,9 @@ public class NumberConverter
df.setDecimalFormatSymbols(dfs);
changed = true;
}
+
+ formatCurrency(format);
+
try
{
return format.parse(value);
Modified: myfaces/core/trunk/api/src/test/java/javax/faces/convert/NumberConverterTest.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/api/src/test/java/javax/faces/convert/NumberConverterTest.java?rev=1033982&r1=1033981&r2=1033982&view=diff
==============================================================================
--- myfaces/core/trunk/api/src/test/java/javax/faces/convert/NumberConverterTest.java (original)
+++ myfaces/core/trunk/api/src/test/java/javax/faces/convert/NumberConverterTest.java Thu Nov 11 16:16:49 2010
@@ -48,10 +48,6 @@ public class NumberConverterTest extends
super.setUp();
mock = new NumberConverter();
- mock.setLocale(Locale.FRANCE);
- FacesContext.getCurrentInstance().getViewRoot().setLocale(
- Locale.GERMANY);
-
}
@Override
@@ -65,26 +61,110 @@ public class NumberConverterTest extends
/*
* temporarily comment out tests that fail, until Matthias Wessendorf has time to investigate
*/
- @Ignore
+ @Test
public void testFranceLocaleWithNonBreakingSpace()
{
-
+ mock.setLocale(Locale.FRANCE);
+ FacesContext.getCurrentInstance().getViewRoot().setLocale(Locale.GERMANY);
UIInput input = new UIInput();
mock.setType("currency");
- Number number = (Number) mock.getAsObject(FacesContext
- .getCurrentInstance(), input, "12\u00a0345,68 \u20ac");
+ String stringValue = mock.getAsString(facesContext, input, new Double(12345.68d));
+ Number number = (Number) mock.getAsObject(FacesContext.getCurrentInstance(), input, "12\u00a0345,68 \u20AC");
assertNotNull(number);
}
-
- @Ignore
+
+ @Test
public void testFranceLocaleWithoutNonBreakingSpace()
{
+ mock.setLocale(Locale.FRANCE);
+ FacesContext.getCurrentInstance().getViewRoot().setLocale(Locale.GERMANY);
+ UIInput input = new UIInput();
+ mock.setType("currency");
+ Number number = (Number) mock.getAsObject(FacesContext.getCurrentInstance(), input, "12 345,68 \u20AC");
+ assertNotNull(number);
+ }
+
+ /**
+ * EUR12,345.68
+ */
+ @Test
+ public void testUSLocaleUsingEURCurrencyCode()
+ {
+ facesContext.getViewRoot().setLocale(Locale.US);
+ mock.setLocale(Locale.US);
+ UIInput input = new UIInput();
+ mock.setType("currency");
+ mock.setCurrencyCode("EUR");
+ Number testValue = 12345.68d;
+ String stringValue = mock.getAsString(facesContext, input, testValue);
+ Number number = (Number) mock.getAsObject(facesContext, input, stringValue);
+ assertNotNull(number);
+ assertEquals(testValue, number);
+ }
+ /**
+ * 12,345.68
+ */
+ @Test
+ public void testUKLocaleUsingEURCurrencyCode()
+ {
+ facesContext.getViewRoot().setLocale(Locale.US);
+ mock.setLocale(Locale.UK);
+ UIInput input = new UIInput();
+ mock.setType("currency");
+ mock.setCurrencyCode("EUR");
+ Number testValue = 12345.68d;
+ String stringValue = mock.getAsString(facesContext, input, testValue);
+ Number number = (Number) mock.getAsObject(facesContext, input, stringValue);
+ assertNotNull(number);
+ assertEquals(testValue, number);
+ }
+
+ /**
+ * 12.345,68
+ */
+ @Test
+ public void testGermanyLocaleUsingEURCurrencyCode()
+ {
+ facesContext.getViewRoot().setLocale(Locale.US);
+ mock.setLocale(Locale.GERMANY);
UIInput input = new UIInput();
mock.setType("currency");
- Number number = (Number) mock.getAsObject(FacesContext
- .getCurrentInstance(), input, "12 345,68 \u20ac");
+ mock.setCurrencyCode("EUR");
+ Number testValue = 12345.68d;
+ String stringValue = mock.getAsString(facesContext, input, testValue);
+ Number number = (Number) mock.getAsObject(facesContext, input, stringValue);
+ assertNotNull(number);
+ assertEquals(testValue, number);
+ }
+
+ @Test
+ public void testCurrencyPattern()
+ {
+ facesContext.getViewRoot().setLocale(Locale.US);
+ mock.setLocale(Locale.US);
+ UIInput input = new UIInput();
+ mock.setPattern("\u00A4 ###,###.###");
+ Number testValue = 12345.68d;
+ String stringValue = mock.getAsString(facesContext, input, testValue);
+ Number number = (Number) mock.getAsObject(facesContext, input, stringValue);
+ assertNotNull(number);
+ assertEquals(testValue, number);
+ }
+
+ @Test
+ public void testCurrencyPattern2()
+ {
+ facesContext.getViewRoot().setLocale(Locale.US);
+ mock.setLocale(Locale.GERMANY);
+ UIInput input = new UIInput();
+ mock.setPattern("\u00A4 ###,###.###");
+ mock.setCurrencyCode("USD"); //Since currency is , but we are using USD currency code, the output is USD 12.345,68
+ Number testValue = 12345.68d;
+ String stringValue = mock.getAsString(facesContext, input, testValue);
+ Number number = (Number) mock.getAsObject(facesContext, input, stringValue);
assertNotNull(number);
+ assertEquals(testValue, number);
}
}