package net.sourceforge.stripes.validation;
import org.testng.annotations.Test;
import org.testng.Assert;
import java.math.BigDecimal;
import java.util.Collection;
import java.util.ArrayList;
import java.util.Locale;
/**
* Unit tests for the BigDecimal class.
*/
public class BigDecimalTypeConverterTest {
/** Returns an empty collection of validation errors. */
public Collection<ValidationError> errors() {
return new ArrayList<ValidationError>();
}
@Test(groups="fast")
public void basicParse() throws Exception {
TypeConverter<BigDecimal> converter = new BigDecimalTypeConverter();
converter.setLocale(Locale.US);
BigDecimal result = converter.convert("12345.67", BigDecimal.class, errors());
Assert.assertEquals(result, new BigDecimal("12345.67"));
}
@Test(groups="fast")
public void parseBigNumber() throws Exception {
String number = "7297029872767869231987623498756389734567893246934298765342987563489723497" +
".97982730927907092387409872340987234698750987129872348970982374076283764";
TypeConverter<BigDecimal> converter = new BigDecimalTypeConverter();
converter.setLocale(Locale.US);
BigDecimal result = converter.convert(number, BigDecimal.class, errors());
Assert.assertEquals(result, new BigDecimal(number));
}
@Test(groups="fast")
public void parseWithGroupingCharacters() throws Exception {
String number = "7297029872767869231987623498756389734567876534.2987563489723497";
String grouped = "7,297,029,872,767,869,231,987,623,498,756,389,734,567,876,534.2987563489723497";
TypeConverter<BigDecimal> converter = new BigDecimalTypeConverter();
converter.setLocale(Locale.US);
BigDecimal result = converter.convert(grouped, BigDecimal.class, errors());
Assert.assertEquals(result, new BigDecimal(number));
}
@Test(groups="fast")
public void parseAlternateLocale() throws Exception {
String number = "123456789.99";
String localized = "123.456.789,99";
TypeConverter<BigDecimal> converter = new BigDecimalTypeConverter();
converter.setLocale(Locale.GERMANY);
BigDecimal result = converter.convert(localized, BigDecimal.class, errors());
Assert.assertEquals(result, new BigDecimal(number));
}
@Test(groups="fast")
public void invalidInput() throws Exception {
String number = "a1b2vc3d4";
TypeConverter<BigDecimal> converter = new BigDecimalTypeConverter();
converter.setLocale(Locale.US);
Collection<ValidationError> errors = errors();
@SuppressWarnings("unused")
BigDecimal result = converter.convert(number, BigDecimal.class, errors);
Assert.assertEquals(errors.size(), 1);
}
}