package br.com.caelum.vraptor.i18n;
import static org.junit.Assert.assertEquals;
import java.math.BigDecimal;
import java.util.Locale;
import java.util.ResourceBundle;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.runners.MockitoJUnitRunner;
@RunWith(MockitoJUnitRunner.class)
public class LocalizedNumberTest {
private ResourceBundle bundle;
private ResourceBundle englishBundle;
@Before
public void before() {
this.bundle = new MockResourceBundle();
this.englishBundle = new MockResourceBundle(Locale.ENGLISH);
}
@Test
public void should_convert_int_with_default_locale() {
assertEquals("15", new LocalizedNumber(15, bundle, bundle.getLocale()).toString());
assertEquals("1.500", new LocalizedNumber(1500, bundle, bundle.getLocale()).toString());
assertEquals("15", new LocalizedNumber(15, englishBundle, englishBundle.getLocale()).toString());
assertEquals("1,500", new LocalizedNumber(1500, englishBundle, englishBundle.getLocale()).toString());
}
@Test
public void should_convert_double_with_default_locale() {
assertEquals("15,357", new LocalizedNumber(15.357, bundle, bundle.getLocale()).toString());
assertEquals("1.500,357", new LocalizedNumber(1500.357, bundle, bundle.getLocale()).toString());
assertEquals("15,3", new LocalizedNumber(15.30, bundle, bundle.getLocale()).toString());
assertEquals("15.357", new LocalizedNumber(15.357, englishBundle, englishBundle.getLocale()).toString());
assertEquals("1,500.357", new LocalizedNumber(1500.357, englishBundle, englishBundle.getLocale()).toString());
assertEquals("15.3", new LocalizedNumber(15.30, englishBundle, englishBundle.getLocale()).toString());
}
@Test
public void should_convert_big_decimal_with_default_locale() {
assertEquals("15,357", new LocalizedNumber(new BigDecimal(15.357), bundle, bundle.getLocale()).toString());
assertEquals("1.500,357", new LocalizedNumber(new BigDecimal(1500.357), bundle, bundle.getLocale()).toString());
assertEquals("15.357", new LocalizedNumber(new BigDecimal(15.357), englishBundle, englishBundle.getLocale()).toString());
assertEquals("1,500.357", new LocalizedNumber(new BigDecimal(1500.357), englishBundle, englishBundle.getLocale()).toString());
}
@Test
public void should_convert_numbers_with_patterns() {
assertEquals("BRL 0.015,30", new LocalizedNumber(new BigDecimal(15.3), bundle, bundle.getLocale()).pattern("'BRL' 0,000.00").toString());
assertEquals("BRL 11.500,30", new LocalizedNumber(new BigDecimal(11500.3), bundle, bundle.getLocale()).pattern("'BRL' 0,000.00").toString());
assertEquals("BRL 0,015.30", new LocalizedNumber(new BigDecimal(15.3), englishBundle, englishBundle.getLocale()).pattern("'BRL' 0,000.00").toString());
assertEquals("BRL 11,500.30", new LocalizedNumber(new BigDecimal(11500.3), englishBundle, englishBundle.getLocale()).pattern("'BRL' 0,000.00").toString());
}
@Test
public void should_convert_percentage() {
assertEquals("15%", new LocalizedNumber(new BigDecimal(0.153), bundle, bundle.getLocale()).pattern("#%").toString());
assertEquals("15,30%", new LocalizedNumber(new BigDecimal(0.153), bundle, bundle.getLocale()).pattern("#.00%").toString());
}
@Test
public void should_convert_numbers_with_custom_pattern() {
MockResourceBundle bundle = new MockResourceBundle();
bundle.addWord("formats.number.billionaire", "0,000,000,000");
assertEquals("0.000.000.015", new LocalizedNumber(new BigDecimal(15.3), bundle, bundle.getLocale()).custom("billionaire").toString());
}
@Test(expected=IllegalArgumentException.class)
public void should_complain_if_custom_pattern_is_not_configured() {
new LocalizedNumber(new BigDecimal(15.3), bundle, bundle.getLocale()).custom("billionaire");
}
}