blob: 98d1ba7f772b7306f3ad55e74ad7e2eac99c3c98 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.harmony.tests.java.text;
import java.math.RoundingMode;
import java.text.ChoiceFormat;
import java.text.DecimalFormat;
import java.text.FieldPosition;
import java.text.NumberFormat;
import java.text.ParseException;
import java.text.ParsePosition;
import java.util.Currency;
import java.util.Locale;
public class NumberFormatTest extends junit.framework.TestCase {
/**
* @tests java.text.NumberFormat#format(java.lang.Object,
* java.lang.StringBuffer, java.text.FieldPosition)
*/
public void test_formatLjava_lang_ObjectLjava_lang_StringBufferLjava_text_FieldPosition() {
FieldPosition pos;
StringBuffer out;
DecimalFormat format = (DecimalFormat) NumberFormat
.getInstance(Locale.US);
pos = new FieldPosition(0);
out = format.format(new Long(Long.MAX_VALUE), new StringBuffer(), pos);
assertEquals("Wrong result L1: " + out, "9,223,372,036,854,775,807",
out.toString());
pos = new FieldPosition(0);
out = format.format(new Long(Long.MIN_VALUE), new StringBuffer(), pos);
assertEquals("Wrong result L2: " + out, "-9,223,372,036,854,775,808",
out.toString());
pos = new FieldPosition(0);
out = format.format(new java.math.BigInteger(String
.valueOf(Long.MAX_VALUE)), new StringBuffer(), pos);
assertEquals("Wrong result BI1: " + out, "9,223,372,036,854,775,807",
out.toString());
pos = new FieldPosition(0);
out = format.format(new java.math.BigInteger(String
.valueOf(Long.MIN_VALUE)), new StringBuffer(), pos);
assertEquals("Wrong result BI2: " + out, "-9,223,372,036,854,775,808",
out.toString());
java.math.BigInteger big;
pos = new FieldPosition(0);
big = new java.math.BigInteger(String.valueOf(Long.MAX_VALUE))
.add(new java.math.BigInteger("1"));
out = format.format(big, new StringBuffer(), pos);
assertEquals("Wrong result BI3: " + out, "9,223,372,036,854,775,808",
out.toString());
pos = new FieldPosition(0);
big = new java.math.BigInteger(String.valueOf(Long.MIN_VALUE))
.add(new java.math.BigInteger("-1"));
out = format.format(big, new StringBuffer(), pos);
assertEquals("Wrong result BI4: " + out, "-9,223,372,036,854,775,809",
out.toString());
pos = new FieldPosition(0);
out = format.format(new java.math.BigDecimal("51.348"),
new StringBuffer(), pos);
assertEquals("Wrong result BD1: " + out, "51.348", out.toString());
pos = new FieldPosition(0);
out = format.format(new java.math.BigDecimal("51"), new StringBuffer(),
pos);
assertEquals("Wrong result BD2: " + out, "51", out.toString());
try {
format.format(this, new StringBuffer(), pos);
fail("Should throw IllegalArgumentException");
} catch (IllegalArgumentException e) {
// Expected
}
try {
format.format(null, new StringBuffer(), pos);
fail("Should throw IllegalArgumentException");
} catch (IllegalArgumentException e) {
// Expected
}
try {
format.format(new Long(0), null, pos);
fail("Should throw NullPointerException");
} catch (NullPointerException e) {
// Expected
}
try {
format.format(new Long(0), new StringBuffer(), null);
fail("Should throw NullPointerException");
} catch (NullPointerException e) {
// Expected
}
}
/**
* @tests java.text.NumberFormat#getIntegerInstance()
*/
public void test_getIntegerInstance() throws ParseException {
// Test for method java.text.NumberFormat getIntegerInstance()
Locale origLocale = Locale.getDefault();
Locale.setDefault(Locale.US);
DecimalFormat format = (DecimalFormat) NumberFormat
.getIntegerInstance();
assertEquals(
"Test1: NumberFormat.getIntegerInstance().toPattern() returned wrong pattern",
"#,##0", format.toPattern());
assertEquals(
"Test2: NumberFormat.getIntegerInstance().format(35.76) returned wrong value",
"36", format.format(35.76));
assertEquals(
"Test3: NumberFormat.getIntegerInstance().parse(\"35.76\") returned wrong number",
new Long(35), format.parse("35.76"));
assertEquals(
"Test4: NumberFormat.getIntegerInstance().parseObject(\"35.76\") returned wrong number",
new Long(35), format.parseObject("35.76"));
Locale.setDefault(origLocale);
}
/**
* @tests java.text.NumberFormat#getIntegerInstance(java.util.Locale)
*/
public void test_getIntegerInstanceLjava_util_Locale()
throws ParseException {
// Test for method java.text.NumberFormat
// getIntegerInstance(java.util.Locale)
Locale usLocale = Locale.US;
Locale arLocale = new Locale("ar", "AE");
DecimalFormat format = (DecimalFormat) NumberFormat
.getIntegerInstance(usLocale);
assertEquals(
"Test1: NumberFormat.getIntegerInstance().toPattern() returned wrong pattern",
"#,##0", format.toPattern());
assertEquals(
"Test2: NumberFormat.getIntegerInstance().format(-35.76) returned wrong value",
"-36", format.format(-35.76));
assertEquals(
"Test3: NumberFormat.getIntegerInstance().parse(\"-36\") returned wrong number",
new Long(-36), format.parse("-36"));
assertEquals(
"Test4: NumberFormat.getIntegerInstance().parseObject(\"-36\") returned wrong number",
new Long(-36), format.parseObject("-36"));
assertEquals(
"Test5: NumberFormat.getIntegerInstance().getMaximumFractionDigits() returned wrong value",
0, format.getMaximumFractionDigits());
assertTrue("Test6: NumberFormat.getIntegerInstance().isParseIntegerOnly() returned wrong value",
format.isParseIntegerOnly());
// try with a locale that has a different integer pattern
format = (DecimalFormat) NumberFormat.getIntegerInstance(arLocale);
// Previous versions of android use just the positive format string (ICU4C) although now we
// use '<positive_format>;<negative_format>' because of ICU4J denormalization.
String variant = (format.toPattern().indexOf(';') > 0) ? "#,##0;-#,##0" : "#,##0";
assertEquals(
"Test7: NumberFormat.getIntegerInstance(new Locale(\"ar\", \"AE\")).toPattern() returned wrong pattern",
variant, format.toPattern());
assertEquals(
"Test8: NumberFormat.getIntegerInstance(new Locale(\"ar\", \"AE\")).format(-35.76) returned wrong value",
"\u200f-\u0666", format.format(-6));
assertEquals(
"Test9: NumberFormat.getIntegerInstance(new Locale(\"ar\", \"AE\")).parse(\"-36-\") returned wrong number",
new Long(36), format.parse("36-"));
assertEquals(
"Test10: NumberFormat.getIntegerInstance(new Locale(\"ar\", \"AE\")).parseObject(\"36-\") returned wrong number",
new Long(36), format.parseObject("36-"));
assertEquals(
"Test11: NumberFormat.getIntegerInstance(new Locale(\"ar\", \"AE\")).getMaximumFractionDigits() returned wrong value",
0, format.getMaximumFractionDigits());
assertTrue(
"Test12: NumberFormat.getIntegerInstance(new Locale(\"ar\", \"AE\")).isParseIntegerOnly() returned wrong value",
format.isParseIntegerOnly());
}
/**
* @tests java.text.NumberFormat#getCurrency()
*/
public void test_getCurrency() {
// Test for method java.util.Currency getCurrency()
// a subclass that supports currency formatting
Currency currH = Currency.getInstance("HUF");
NumberFormat format = NumberFormat.getInstance(new Locale("hu", "HU"));
assertSame("Returned incorrect currency", currH, format.getCurrency());
// a subclass that doesn't support currency formatting
ChoiceFormat cformat = new ChoiceFormat(
"0#Less than one|1#one|1<Between one and two|2<Greater than two");
try {
((NumberFormat) cformat).getCurrency();
fail("Expected UnsupportedOperationException");
} catch (UnsupportedOperationException e) {
}
}
/**
* @tests java.text.NumberFormat#getMaximumIntegerDigits()
*/
public void test_getMaximumIntegerDigits() {
NumberFormat format = NumberFormat.getInstance();
format.setMaximumIntegerDigits(2);
assertEquals("Wrong result", "23", format.format(123));
}
/**
* @tests java.text.NumberFormat#setCurrency(java.util.Currency)
*/
public void test_setCurrencyLjava_util_Currency() {
// Test for method void setCurrency(java.util.Currency)
// a subclass that supports currency formatting
Currency currA = Currency.getInstance("ARS");
NumberFormat format = NumberFormat.getInstance(new Locale("hu", "HU"));
format.setCurrency(currA);
assertSame("Returned incorrect currency", currA, format.getCurrency());
// a subclass that doesn't support currency formatting
ChoiceFormat cformat = new ChoiceFormat(
"0#Less than one|1#one|1<Between one and two|2<Greater than two");
try {
((NumberFormat) cformat).setCurrency(currA);
fail("Expected UnsupportedOperationException");
} catch (UnsupportedOperationException e) {
}
}
/**
* @tests java.text.NumberFormat#parseObject(java.lang.String, java.text.ParsePosition)
*/
public void test_parseObjectLjava_lang_StringLjava_text_ParsePosition() {
// regression test for HARMONY-1003
assertNull(NumberFormat.getInstance().parseObject("0", new ParsePosition(-1)));
// Regression for HARMONY-1685
try {
NumberFormat.getInstance().parseObject("test", null);
fail("NullPointerException expected");
} catch (NullPointerException e) {
//expected
}
}
protected void setUp() {
}
protected void tearDown() {
}
public void test_setRoundingMode_NullRoundingMode() {
try {
// Create a subclass ChoiceFormat which doesn't support
// RoundingMode
ChoiceFormat choiceFormat = new ChoiceFormat(
"0#Less than one|1#one|1<Between one and two|2<Greater than two");
((NumberFormat) choiceFormat).setRoundingMode(null);
// Follow the behavior of RI
fail("UnsupportedOperationException expected");
} catch (UnsupportedOperationException e) {
// expected
}
}
public void test_setRoundingMode_Normal() {
try {
// Create a subclass ChoiceFormat which doesn't support
// RoundingMode
ChoiceFormat choiceFormat = new ChoiceFormat(
"0#Less than one|1#one|1<Between one and two|2<Greater than two");
((NumberFormat) choiceFormat).setRoundingMode(RoundingMode.CEILING);
fail("UnsupportedOperationException expected");
} catch (UnsupportedOperationException e) {
// expected
}
}
}