package org.geotools.filter.function;
import java.text.DecimalFormatSymbols;
import java.util.Locale;
import junit.framework.TestCase;
import org.geotools.factory.CommonFactoryFinder;
import org.opengis.filter.FilterFactory;
import org.opengis.filter.expression.Expression;
import org.opengis.filter.expression.Function;
import org.opengis.filter.expression.Literal;
/**
*
*
* @source $URL$
*/
public class NumberFormatTest extends TestCase {
public void testFormatDouble() {
FilterFactory ff = CommonFactoryFinder.getFilterFactory(null);
Literal pattern = ff.literal("#.##");
Literal number = ff.literal("10.56789");
Function f = ff.function("numberFormat", new Expression[]{pattern, number});
char ds = DecimalFormatSymbols.getInstance(Locale.ENGLISH).getDecimalSeparator();
assertEquals("10" + ds + "57", f.evaluate(null , String.class));
}
public void testFormatFrenchDouble() {
FilterFactory ff = CommonFactoryFinder.getFilterFactory(null);
Literal pattern = ff.literal("#.##");
Literal number = ff.literal("10.56789");
Literal lang = ff.literal("fr");
Function f = ff.function("numberFormat", new Expression[]{pattern, number, lang});
char ds = DecimalFormatSymbols.getInstance(Locale.FRANCE).getDecimalSeparator();
assertEquals("10" + ds + "57", f.evaluate(null , String.class));
}
public void testFormatInteger() {
FilterFactory ff = CommonFactoryFinder.getFilterFactory(null);
Literal pattern = ff.literal("###,###");
Literal number = ff.literal("123456");
Function f = ff.function("numberFormat", new Expression[]{pattern, number});
char gs = DecimalFormatSymbols.getInstance(Locale.ENGLISH).getGroupingSeparator();
assertEquals("123" + gs + "456", f.evaluate(null , String.class));
}
public void testNumberFormat2() {
FilterFactory ff = CommonFactoryFinder.getFilterFactory(null);
Literal pattern = ff.literal("###,###.##");
Literal number = ff.literal("-123456.7891");
Literal minus = ff.literal("x");
Literal ds = ff.literal(":");
Literal gs = ff.literal(";");
Function f = ff.function("numberFormat2", new Expression[]{pattern, number, minus, ds, gs});
assertEquals("x123;456:79", f.evaluate(null, String.class));
}
public void testNumberFormatNullValue() {
FilterFactory ff = CommonFactoryFinder.getFilterFactory(null);
Literal pattern = ff.literal("###,###.##");
Literal number = ff.literal(null);
Function f = ff.function("numberFormat", new Expression[]{pattern, number});
assertEquals(null, f.evaluate(null, String.class));
}
public void testNumberFormatNullPattern() {
FilterFactory ff = CommonFactoryFinder.getFilterFactory(null);
Literal pattern = ff.literal(null);
Literal number = ff.literal("-123456.7891");
Function f = ff.function("numberFormat", new Expression[]{pattern, number});
assertEquals(null, f.evaluate(null, String.class));
}
public void testNumber2FormatNullValue() {
FilterFactory ff = CommonFactoryFinder.getFilterFactory(null);
Literal pattern = ff.literal("###,###.##");
Literal number = ff.literal(null);
Literal minus = ff.literal("x");
Literal ds = ff.literal(":");
Literal gs = ff.literal(";");
Function f = ff.function("numberFormat2", new Expression[]{pattern, number, minus, ds, gs});
assertEquals(null, f.evaluate(null, String.class));
}
public void testNumber2FormatNullPattern() {
FilterFactory ff = CommonFactoryFinder.getFilterFactory(null);
Literal pattern = ff.literal(null);
Literal number = ff.literal("-123456.7891");
Literal minus = ff.literal("x");
Literal ds = ff.literal(":");
Literal gs = ff.literal(";");
Function f = ff.function("numberFormat2", new Expression[]{pattern, number, minus, ds, gs});
assertEquals(null, f.evaluate(null, String.class));
}
public void testNumberFactoryLocaleParam() {
Locale[] locales = { Locale.CANADA, Locale.CANADA_FRENCH, Locale.GERMAN, Locale.KOREAN,
Locale.CHINESE, Locale.JAPANESE, Locale.ENGLISH, Locale.TRADITIONAL_CHINESE,
Locale.SIMPLIFIED_CHINESE };
FilterFactory ff = CommonFactoryFinder.getFilterFactory(null);
Literal pattern = ff.literal("##.##");
Literal number = ff.literal("10.56789");
for (Locale locale : locales) {
Literal lang = ff.literal(locale.getLanguage());
Function f = ff.function("numberFormat", new Expression[] { pattern, number, lang });
char ds = DecimalFormatSymbols.getInstance(locale).getDecimalSeparator();
assertEquals("10" + ds + "57", f.evaluate(null, String.class));
}
Literal lang = ff.literal("AnyLang");
Function f = ff.function("numberFormat", new Expression[] { pattern, number, lang });
char ds = DecimalFormatSymbols.getInstance(Locale.ENGLISH).getDecimalSeparator();
try {
assertEquals("10" + ds + "57", f.evaluate(null, String.class));
fail("Accepted unknown language code");
}catch (IllegalArgumentException e) {
//this is a good thing
}
}
}