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