package net.sourceforge.stripes.validation; import org.testng.annotations.Test; import org.testng.Assert; import java.util.Locale; import java.util.ArrayList; import java.util.Collection; /** * Tests for the support class which helps out with number parsing and type converting. * * @author Tim Fennell */ public class NumberTypeConverterSupportTest { /** Helper method to fetch a US locale converter. */ protected NumberTypeConverterSupport getConverter() { NumberTypeConverterSupport c = new NumberTypeConverterSupport(); c.setLocale(Locale.US); return c; } @Test(groups="fast") public void basicPositiveTests() { Number number = getConverter().parse("10912", new ArrayList<ValidationError>()); Assert.assertEquals(number.intValue(), 10912); number = getConverter().parse("-1,000,000", new ArrayList<ValidationError>()); Assert.assertEquals(number.intValue(), -1000000); } @Test(groups="fast") public void testNumbersWithWhiteSpace() { Number number = getConverter().parse(" 5262 ", new ArrayList<ValidationError>()); Assert.assertEquals(number.intValue(), 5262, "White space should have no effect."); } @Test(groups="fast") public void testFloatingPointsNumbers() { Number number = getConverter().parse("123.456", new ArrayList<ValidationError>()); Assert.assertEquals(number.doubleValue(), 123.456); } @Test(groups="fast") public void testParentheticalNumbers() { Number number = getConverter().parse("(891)", new ArrayList<ValidationError>()); Assert.assertEquals(number.intValue(), -891, "Brackets mean negative values."); } @Test(groups="fast") public void testCurrency() { Number number = getConverter().parse("$57", new ArrayList<ValidationError>()); Assert.assertEquals(number.intValue(), 57); number = getConverter().parse("$1,999.95", new ArrayList<ValidationError>()); Assert.assertEquals(number.doubleValue(), 1999.95); } @Test(groups = "fast") public void testCurrencyWithSpace() { Number number = getConverter().parse("$ 57", new ArrayList<ValidationError>()); Assert.assertNotNull(number); Assert.assertEquals(number.intValue(), 57); number = getConverter().parse("1,999.95 $", new ArrayList<ValidationError>()); Assert.assertNotNull(number); Assert.assertEquals(number.doubleValue(), 1999.95); } @Test(groups = "fast") public void testNegativeCurrency() { Number number = getConverter().parse("-$57", new ArrayList<ValidationError>()); Assert.assertEquals(number.intValue(), -57); number = getConverter().parse("$-57", new ArrayList<ValidationError>()); Assert.assertEquals(number.intValue(), -57); number = getConverter().parse("($1,999.95)", new ArrayList<ValidationError>()); Assert.assertEquals(number.doubleValue(), -1999.95); number = getConverter().parse("$(1,999.95)", new ArrayList<ValidationError>()); Assert.assertEquals(number.doubleValue(), -1999.95); } @Test(groups="fast") public void testComplicatedString() { Number number = getConverter().parse(" ($2,154,123.66) ", new ArrayList<ValidationError>()); Assert.assertEquals(number.doubleValue(), -2154123.66); } @Test(groups="fast") public void testWithText() { Collection<ValidationError> errors = new ArrayList<ValidationError>(); Number number = getConverter().parse("not-a-number", errors); Assert.assertNull(number); Assert.assertEquals(errors.size(), 1, "We should have gotten a parse error."); } @Test(groups="fast") public void testWithBogusTrailingText() { Collection<ValidationError> errors = new ArrayList<ValidationError>(); Number number = getConverter().parse("12345six", errors); Assert.assertNull(number); Assert.assertEquals(errors.size(), 1, "We should have gotten a parse error."); } @Test(groups="fast") public void testWithMultipleDecimalPoints() { Collection<ValidationError> errors = new ArrayList<ValidationError>(); Number number = getConverter().parse("123.456.789", errors); Assert.assertNull(number); Assert.assertEquals(errors.size(), 1, "We should have gotten a parse error."); } }