001    package org.apache.tapestry.form.translator;
002    
003    import org.apache.tapestry.form.FormComponentContributorTestCase;
004    import org.apache.tapestry.form.IFormComponent;
005    import org.apache.tapestry.form.ValidationMessages;
006    import org.apache.tapestry.valid.ValidationStrings;
007    import org.apache.tapestry.valid.ValidatorException;
008    import static org.easymock.EasyMock.*;
009    import org.testng.annotations.Test;
010    
011    import java.math.BigDecimal;
012    import java.util.Locale;
013    
014    /**
015     * Tests {@link BigDecimalTranslator}.
016     */
017    @Test
018    public class TestBigDecimalTranslator extends FormComponentContributorTestCase {
019    
020        public void test_Default_Format()
021        {
022            BigDecimalTranslator translator = new BigDecimalTranslator();
023    
024            testFormat(translator, new BigDecimal("14.1"), "14.1");
025        }
026    
027        public void test_Null_Format()
028        {
029            BigDecimalTranslator translator = new BigDecimalTranslator();
030    
031            testFormat(translator, null, "");
032        }
033    
034        public void test_Parse_Null()
035                throws Exception
036        {
037            IFormComponent field = newField();
038            ValidationMessages messages = newMock(ValidationMessages.class);
039            BigDecimalTranslator translator = new BigDecimalTranslator();
040    
041            replay();
042    
043            assert translator.parse(field, messages, null) == null;
044    
045            verify();
046        }
047    
048        @Test(expectedExceptions = ValidatorException.class)
049        public void test_Parse_Invalid()
050                throws Exception
051        {
052            IFormComponent field = newField("fred");
053            ValidationMessages messages = newValidationMessages(Locale.getDefault());
054            BigDecimalTranslator translator = new BigDecimalTranslator();
055    
056            expect(messages.formatValidationMessage((String)eq(null), eq(ValidationStrings.INVALID_NUMBER), aryEq(new String[] { "fred"}))).andReturn("msg");
057    
058            replay();
059    
060            translator.parse(field, messages, "a23");
061    
062            verify();
063        }
064    
065        public void test_Parse_Simple()
066                throws Exception
067        {
068            IFormComponent field = newField();
069            ValidationMessages messages = newMock(ValidationMessages.class);
070            BigDecimalTranslator translator = new BigDecimalTranslator();
071    
072            replay();
073    
074            BigDecimal value = (BigDecimal) translator.parse(field, messages, "99999999.9999");
075    
076            verify();
077    
078            assertEquals(value, new BigDecimal("99999999.9999"));
079        }
080    
081        private void testFormat(Translator translator, BigDecimal number, String expected)
082        {
083            IFormComponent field = newField();
084    
085            String result = translator.format(field, Locale.ENGLISH, number);
086    
087            assertEquals(expected, result);
088        }
089    }