/* * 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.text.tests.java.text; import java.io.ObjectInputStream; import java.math.BigDecimal; import java.math.BigInteger; import java.math.RoundingMode; import java.text.AttributedCharacterIterator; import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.text.FieldPosition; import java.text.NumberFormat; import java.text.ParsePosition; import java.util.BitSet; import java.util.Currency; import java.util.Locale; import junit.framework.TestCase; import org.apache.harmony.testframework.serialization.SerializationTest; public class DecimalFormatTest extends TestCase { public void testAttributedCharacterIterator() throws Exception { // Regression for http://issues.apache.org/jira/browse/HARMONY-333 AttributedCharacterIterator iterator = new DecimalFormat().formatToCharacterIterator(new Integer(1)); assertNotNull(iterator); assertFalse("attributes should exist", iterator.getAttributes().isEmpty()); } /* * Test the getter and setter of parseBigDecimal and parseIntegerOnly and * test the default value of them. */ public void test_isParseBigDecimalLjava_lang_Boolean_isParseIntegerOnlyLjava_lang_Boolean() { // parseBigDecimal default to false DecimalFormat form = (DecimalFormat) DecimalFormat.getInstance(Locale.US); assertFalse(form.isParseBigDecimal()); form.setParseBigDecimal(true); assertTrue(form.isParseBigDecimal()); form.setParseBigDecimal(false); assertFalse(form.isParseBigDecimal()); // parseIntegerOnly default to false assertFalse(form.isParseIntegerOnly()); } // Test the type of the returned object public void test_parseLjava_lang_String_Ljava_text_ParsePosition() { DecimalFormat form = (DecimalFormat) DecimalFormat.getInstance(Locale.US); Number number = form.parse("23.1", new ParsePosition(0)); assertTrue(number instanceof Double); // Test parsed object of type double when // parseBigDecimal is set to true form = (DecimalFormat) DecimalFormat.getInstance(Locale.US); number = form.parse("23.1", new ParsePosition(0)); assertTrue(number instanceof Double); form.setParseBigDecimal(true); number = form.parse("23.1", new ParsePosition(0)); assertTrue(number instanceof BigDecimal); assertEquals(new BigDecimal("23.1"), number); // When parseIntegerOnly set to true, all float numbers will be parsed // into Long. // With the exception that, the value is out of the bound of Long or // some special values such as NaN or Infinity. form = (DecimalFormat) DecimalFormat.getInstance(Locale.US); form.setParseIntegerOnly(true); number = form.parse("23.1f", new ParsePosition(0)); assertTrue(number instanceof Long); number = form.parse("23.0", new ParsePosition(0)); assertTrue(number instanceof Long); number = form.parse("-0.0", new ParsePosition(0)); assertTrue(number instanceof Long); assertTrue(new Long(0).equals(number)); number = form.parse("-9,223,372,036,854,775,8080.00", new ParsePosition(0)); assertTrue(number instanceof Double); // Even if parseIntegerOnly is set to true, NaN will be parsed to Double form = (DecimalFormat) DecimalFormat.getInstance(Locale.US); form.setParseIntegerOnly(true); DecimalFormatSymbols symbols = new DecimalFormatSymbols(); number = form.parse(symbols.getNaN(), new ParsePosition(0)); assertTrue(number instanceof Double); // Even if parseIntegerOnly is set to true, Infinity will still be // parsed to Double form = (DecimalFormat) DecimalFormat.getInstance(Locale.US); form.setParseIntegerOnly(true); symbols = new DecimalFormatSymbols(); number = form.parse(symbols.getInfinity(), new ParsePosition(0)); assertTrue(number instanceof Double); // ParseBigDecimal take precedence of parseBigInteger form = (DecimalFormat) DecimalFormat.getInstance(Locale.US); form.setParseIntegerOnly(true); form.setParseBigDecimal(true); number = form.parse("23.1f", new ParsePosition(0)); assertTrue(number instanceof BigDecimal); number = form.parse("23.0", new ParsePosition(0)); assertTrue(number instanceof BigDecimal); number = form.parse("-9,223,372,036,854,775,8080.00", new ParsePosition(0)); assertFalse(number instanceof BigInteger); assertTrue(number instanceof BigDecimal); // Test whether the parsed object is of type float. (To be specific, // they are of type Double) form = (DecimalFormat) DecimalFormat.getInstance(Locale.US); number = form.parse("23.1f", new ParsePosition(0)); assertTrue(number instanceof Double); form.setParseBigDecimal(true); number = form.parse("23.1f", new ParsePosition(0)); assertTrue(number instanceof BigDecimal); assertEquals(new BigDecimal("23.1"), number); // Integer will be parsed to Long, unless parseBigDecimal is set to true form = (DecimalFormat) DecimalFormat.getInstance(Locale.US); number = form.parse("123", new ParsePosition(0)); assertTrue(number instanceof Long); form.setParseBigDecimal(true); number = form.parse("123", new ParsePosition(0)); assertTrue(number instanceof BigDecimal); assertEquals(new BigDecimal("123"), number); // NaN will be parsed to Double, no matter parseBigDecimal set or not. form = (DecimalFormat) DecimalFormat.getInstance(Locale.US); symbols = new DecimalFormatSymbols(); number = form.parse(symbols.getNaN() + "", new ParsePosition(0)); assertTrue(number instanceof Double); form.setParseBigDecimal(true); number = form.parse(symbols.getNaN() + "", new ParsePosition(0)); assertTrue(number instanceof Double); // Infinity will be parsed to Double, no matter parseBigDecimal set or // not. form = (DecimalFormat) DecimalFormat.getInstance(Locale.US); symbols = new DecimalFormatSymbols(); number = form.parse(symbols.getInfinity(), new ParsePosition(0)); assertTrue(number instanceof Double); assertEquals("Infinity", number.toString()); // When set bigDecimal to true, the result of parsing infinity form = (DecimalFormat) DecimalFormat.getInstance(Locale.US); symbols = new DecimalFormatSymbols(); form.setParseBigDecimal(true); number = form.parse(symbols.getInfinity(), new ParsePosition(0)); assertTrue(number instanceof Double); assertEquals("Infinity", number.toString()); // Negative infinity will be parsed to double no matter parseBigDecimal // set or not form = (DecimalFormat) DecimalFormat.getInstance(Locale.US); symbols = new DecimalFormatSymbols(); number = form.parse("-" + symbols.getInfinity(), new ParsePosition(0)); assertTrue(number instanceof Double); assertEquals("-Infinity", number.toString()); // When set bigDecimal to true, the result of parsing minus infinity form = (DecimalFormat) DecimalFormat.getInstance(Locale.US); symbols = new DecimalFormatSymbols(); form.setParseBigDecimal(true); number = form.parse("-" + symbols.getInfinity(), new ParsePosition(0)); assertTrue(number instanceof Double); assertEquals("-Infinity", number.toString()); // -0.0 will be parsed to different type according to the combination of // parseBigDecimal and parseIntegerOnly form = (DecimalFormat) DecimalFormat.getInstance(Locale.US); // parseBigDecimal == true; // parseIntegerOnly == false; form.setParseBigDecimal(true); number = form.parse("-0", new ParsePosition(0)); assertTrue(number instanceof BigDecimal); number = form.parse("-0.0", new ParsePosition(0)); assertTrue(number instanceof BigDecimal); // parseBigDecimal == false; // parseIntegerOnly == true; form.setParseBigDecimal(false); form.setParseIntegerOnly(true); number = form.parse("-0", new ParsePosition(0)); assertTrue(number instanceof Long); number = form.parse("-0.0", new ParsePosition(0)); assertTrue(number instanceof Long); // parseBigDecimal == false; // parseIntegerOnly == false; form.setParseBigDecimal(false); form.setParseIntegerOnly(false); number = form.parse("-0", new ParsePosition(0)); assertTrue(number instanceof Double); number = form.parse("-0.0", new ParsePosition(0)); assertTrue(number instanceof Double); // parseBigDecimal == true; // parseIntegerOnly == true; // parseBigDecimal take precedence of parseBigInteger form.setParseBigDecimal(true); form.setParseIntegerOnly(true); number = form.parse("-0", new ParsePosition(0)); assertTrue(number instanceof BigDecimal); number = form.parse("-0.0", new ParsePosition(0)); assertTrue(number instanceof BigDecimal); number = form.parse("12.4", new ParsePosition(0)); assertTrue(number instanceof BigDecimal); // When parseBigDecimal is set to false, no matter how massive the // mantissa part of a number is, the number will be parsed into Double form = (DecimalFormat) DecimalFormat.getInstance(Locale.US); number = form.parse("9,223,372,036,854,775,808.00", new ParsePosition(0)); assertTrue(number instanceof Double); assertEquals("9.223372036854776E18", number.toString()); number = form.parse("-9,223,372,036,854,775,8080.00", new ParsePosition(0)); assertTrue(number instanceof Double); assertEquals("-9.223372036854776E19", number.toString()); // When parseBigDecimal is set to true, if mantissa part of number // exceeds Long.MAX_VALUE, the number will be parsed into BigDecimal form = (DecimalFormat) DecimalFormat.getInstance(Locale.US); form.setParseBigDecimal(true); number = form.parse("9,223,372,036,854,775,808.00", new ParsePosition(0)); assertTrue(number instanceof BigDecimal); assertEquals(9.223372036854776E18, number.doubleValue(), 0); number = form.parse("-9,223,372,036,854,775,8080.00", new ParsePosition(0)); assertTrue(number instanceof BigDecimal); assertEquals(-9.223372036854776E19, number.doubleValue(), 0); // The minimum value of Long will be parsed to Long when parseBigDecimal // is not set ParsePosition pos = new ParsePosition(0); DecimalFormat df = new DecimalFormat(); pos = new ParsePosition(0); Number nb = df.parse("" + Long.MIN_VALUE, pos); assertTrue(nb instanceof Long); // The maximum value of Long will be parsed to Long when parseBigDecimal // is set pos = new ParsePosition(0); df = new DecimalFormat(); pos = new ParsePosition(0); nb = df.parse("" + Long.MAX_VALUE, pos); assertTrue(nb instanceof Long); // When parsing invalid string( which is neither consist of digits nor // NaN/Infinity), a null will be returned. pos = new ParsePosition(0); df = new DecimalFormat(); try { nb = df.parse("invalid", pos); assertNull(nb); } catch (NullPointerException e) { fail("Should not throw NPE"); } } public void test_getMaximumFractionDigits() { NumberFormat nform = DecimalFormat.getInstance(Locale.US); DecimalFormat form = (DecimalFormat) nform; // getMaximumFractionDigits of NumberFormat default to 3 // getMaximumFractionDigits of DecimalFormat default to 3 assertEquals(3, nform.getMaximumFractionDigits()); assertEquals(3, form.getMaximumFractionDigits()); // Greater than 340 (critical number used to distinguish // BigInteger and BigDecimal) nform.setMaximumFractionDigits(500); assertEquals(500, nform.getMaximumFractionDigits()); assertEquals(500, form.getMaximumFractionDigits()); form.setMaximumFractionDigits(500); assertEquals(500, nform.getMaximumFractionDigits()); assertEquals(500, form.getMaximumFractionDigits()); form.format(12.3); assertEquals(500, nform.getMaximumFractionDigits()); assertEquals(500, form.getMaximumFractionDigits()); } public void test_getMinimumFractionDigits() { NumberFormat nform = DecimalFormat.getInstance(Locale.US); DecimalFormat form = (DecimalFormat) nform; // getMinimumFractionDigits from NumberFormat (default to 0) // getMinimumFractionDigits from DecimalFormat (default to 0) assertEquals(0, nform.getMinimumFractionDigits()); assertEquals(0, form.getMinimumFractionDigits()); // Greater than 340 (critical number used to distinguish // BigInteger and BigDecimal) nform.setMinimumFractionDigits(500); assertEquals(500, nform.getMinimumFractionDigits()); assertEquals(500, form.getMinimumFractionDigits()); form.setMaximumFractionDigits(400); assertEquals(400, nform.getMinimumFractionDigits()); assertEquals(400, form.getMinimumFractionDigits()); } //FIXME This test fails on Harmony ClassLibrary public void test_getMaximumIntegerDigits() { final int maxIntDigit = 309; // When use default locale, in this case zh_CN // the returned instance of NumberFormat is a DecimalFormat DecimalFormat form = new DecimalFormat("00.###E0"); assertEquals(2, form.getMaximumIntegerDigits()); NumberFormat nform = DecimalFormat.getInstance(Locale.US); form = null; if (nform instanceof DecimalFormat) { form = (DecimalFormat) nform; } // Greater than 309 (critical number used to distinguish // BigInteger and BigDecimal) nform.setMaximumIntegerDigits(500); assertEquals(500, nform.getMaximumIntegerDigits()); assertEquals(500, form.getMaximumIntegerDigits()); form = new DecimalFormat("00.###E0"); assertEquals(2, form.getMaximumIntegerDigits()); form.setMaximumIntegerDigits(500); assertEquals(500, nform.getMaximumIntegerDigits()); assertEquals(500, form.getMaximumIntegerDigits()); form.format(12.3); assertEquals(500, nform.getMaximumIntegerDigits()); assertEquals(500, form.getMaximumIntegerDigits()); nform = DecimalFormat.getInstance(Locale.US); form = null; if (nform instanceof DecimalFormat) { form = (DecimalFormat) nform; } // getMaximumIntegerDigits from NumberFormat default to 309 // getMaximumIntegerDigits from DecimalFormat default to 309 // the following 2 assertions will fail on RI implementation, since the // implementation of ICU and RI are not identical. RI does not give // DecimalFormat an initial bound about its maximumIntegerDigits // (default to Integer.MAX_VALUE: 2147483647 ) assertEquals(maxIntDigit, nform.getMaximumIntegerDigits()); assertEquals(maxIntDigit, form.getMaximumIntegerDigits()); // regression test for HARMONY-878 assertTrue(new DecimalFormat("0\t'0'").getMaximumIntegerDigits() > 0); } public void test_getMinimumIntegerDigits() { final int minIntDigit = 1; NumberFormat nform = DecimalFormat.getInstance(Locale.US); DecimalFormat form = (DecimalFormat) nform; // getMaximumIntegerDigits from NumberFormat (default to 1) // getMaximumIntegerDigits from DecimalFormat (default to 1) assertEquals(minIntDigit, nform.getMinimumIntegerDigits()); assertEquals(minIntDigit, form.getMinimumIntegerDigits()); // Greater than 309 (critical number used to distinguish // BigInteger and BigDecimal) nform.setMinimumIntegerDigits(500); assertEquals(500, nform.getMinimumIntegerDigits()); assertEquals(500, form.getMinimumIntegerDigits()); form.setMaximumIntegerDigits(400); assertEquals(400, nform.getMinimumIntegerDigits()); assertEquals(400, form.getMinimumIntegerDigits()); } public void test_formatLjava_lang_Obj_Ljava_StringBuffer_Ljava_text_FieldPosition() { NumberFormat nform = DecimalFormat.getInstance(Locale.US); DecimalFormat form = (DecimalFormat) nform; // If Object(including null) is not of type Number, // IllegalArgumentException will be thrown out try { form.format(new Object(), new StringBuffer(), new FieldPosition(0)); fail("Should throw IAE"); } catch (IllegalArgumentException e) { // expected } try { form.format(null, new StringBuffer(), new FieldPosition(0)); fail("Should throw IAE"); } catch (IllegalArgumentException e) { // expected } // When StringBuffer == null || FieldPosition == null // NullPointerException will be thrown out. try { form.format(new Double(1.9), null, new FieldPosition(0)); fail("Should throw NPE"); } catch (NullPointerException e) { // expected } try { form.format(new Double(1.3), new StringBuffer(), null); fail("Should throw NPE"); } catch (NullPointerException e) { // expected } try { form.format(new Double(1.4), null, null); fail("Should throw NPE"); } catch (NullPointerException e) { // expected } try { form.format(new Object(), null, null); fail("Should throw IllegalArgumentException"); } catch (IllegalArgumentException e) { // expected } FieldPosition pos; StringBuffer out; DecimalFormat format = (DecimalFormat) NumberFormat .getInstance(Locale.US); // format maxLong pos = new FieldPosition(0); out = format.format(new Long(Long.MAX_VALUE), new StringBuffer(), pos); assertTrue("Wrong result L1: " + out, out.toString().equals( "9,223,372,036,854,775,807")); // format minLong pos = new FieldPosition(0); out = format.format(new Long(Long.MIN_VALUE), new StringBuffer(), pos); assertTrue("Wrong result L2: " + out, out.toString().equals( "-9,223,372,036,854,775,808")); // format maxLong of type BigInteger pos = new FieldPosition(0); out = format.format(new java.math.BigInteger(String .valueOf(Long.MAX_VALUE)), new StringBuffer(), pos); assertTrue("Wrong result BI1: " + out, out.toString().equals( "9,223,372,036,854,775,807")); // format minLong of type BigInteger pos = new FieldPosition(0); out = format.format(new java.math.BigInteger(String .valueOf(Long.MIN_VALUE)), new StringBuffer(), pos); assertTrue("Wrong result BI2: " + out, out.toString().equals( "-9,223,372,036,854,775,808")); // format maxLong + 1 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); assertTrue("Wrong result BI3: " + out, out.toString().equals( "9,223,372,036,854,775,808")); // format minLong - 1 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); assertTrue("Wrong result BI4: " + out, out.toString().equals( "-9,223,372,036,854,775,809")); // format big decimal pos = new FieldPosition(0); out = format.format(new java.math.BigDecimal("51.348"), new StringBuffer(), pos); assertTrue("Wrong result BD1: " + out, out.toString().equals("51.348")); // format big decimal pos = new FieldPosition(0); out = format.format(new java.math.BigDecimal("51"), new StringBuffer(), pos); assertTrue("Wrong result BD2: " + out, out.toString().equals("51")); // format big decimal Double.MAX_VALUE * 2 java.math.BigDecimal bigDecimal; pos = new FieldPosition(0); final String doubleMax2 = "359,538,626,972,463,141,629,054,847,463,408," + "713,596,141,135,051,689,993,197,834,953,606,314,521,560,057,077," + "521,179,117,265,533,756,343,080,917,907,028,764,928,468,642,653," + "778,928,365,536,935,093,407,075,033,972,099,821,153,102,564,152," + "490,980,180,778,657,888,151,737,016,910,267,884,609,166,473,806," + "445,896,331,617,118,664,246,696,549,595,652,408,289,446,337,476," + "354,361,838,599,762,500,808,052,368,249,716,736"; bigDecimal = new BigDecimal(Double.MAX_VALUE).add(new BigDecimal( Double.MAX_VALUE)); out = format.format(bigDecimal, new StringBuffer(), pos); assertTrue("Wrong result BDmax2: " + out, out.toString().equals( doubleMax2)); // format big decimal Double.MIN_VALUE + Double.MIN_VALUE // and Double.MIN_VALUE - Double.MIN_VALUE pos = new FieldPosition(0); bigDecimal = new BigDecimal(Double.MIN_VALUE).add(new BigDecimal( Double.MIN_VALUE)); out = format.format(bigDecimal, new StringBuffer(), pos); bigDecimal = new BigDecimal(Float.MAX_VALUE).add(new BigDecimal( Float.MAX_VALUE)); out = format.format(bigDecimal, new StringBuffer(), pos); final String BDFloatMax2 = "680,564,693,277,057,719,623,408,366,969,033,850,880"; assertTrue("Wrong result BDFloatMax2: " + out, out.toString().equals( BDFloatMax2)); // format big decimal Float.MIN_VALUE + Float.MIN_VALUE // and Float.MIN_VALUE - Float.MIN_VALUE bigDecimal = new BigDecimal(Float.MIN_VALUE).add(new BigDecimal( Float.MIN_VALUE)); out = format.format(bigDecimal, new StringBuffer(), pos); final String BDFloatMin2 = "0"; bigDecimal = new BigDecimal(Float.MIN_VALUE).subtract(new BigDecimal( Float.MIN_VALUE)); out = format.format(bigDecimal, new StringBuffer(), pos); assertTrue("Wrong result BDFloatMax2: " + out, out.toString().equals( BDFloatMin2)); } public void test_setMaximumFractionDigitsLjava_lang_Integer() { NumberFormat nform = DecimalFormat.getInstance(Locale.US); DecimalFormat form = (DecimalFormat) nform; form.setMaximumFractionDigits(-2); assertEquals(0, form.getMaximumFractionDigits()); form.setMaximumFractionDigits(341); assertEquals(341, form.getMaximumFractionDigits()); } public void test_setMinimumFractionDigitsLjava_lang_Integer() { NumberFormat nform = DecimalFormat.getInstance(Locale.US); DecimalFormat form = (DecimalFormat) nform; form.setMinimumFractionDigits(-3); assertEquals(0, form.getMinimumFractionDigits()); form.setMinimumFractionDigits(310); assertEquals(310, form.getMinimumFractionDigits()); } public void test_setMaximumIntegerDigitsLjava_lang_Integer() { NumberFormat nform = DecimalFormat.getInstance(Locale.US); DecimalFormat form = (DecimalFormat) nform; form.setMaximumIntegerDigits(-3); assertEquals(0, form.getMaximumIntegerDigits()); form.setMaximumIntegerDigits(310); assertEquals(310, form.getMaximumIntegerDigits()); } public void test_setMinimumIntegerDigitsLjava_lang_Integer() { NumberFormat nform = DecimalFormat.getInstance(Locale.US); DecimalFormat form = (DecimalFormat) nform; form.setMinimumIntegerDigits(-3); assertEquals(0, form.getMinimumIntegerDigits()); form.setMinimumIntegerDigits(310); assertEquals(310, form.getMinimumIntegerDigits()); } // When MaxFractionDigits is set first and less than MinFractionDigits, max // will be changed to min value public void test_setMinimumFactionDigitsLjava_lang_Integer_setMaximumFractionDigitsLjava_lang_Integer() { NumberFormat nform = DecimalFormat.getInstance(Locale.US); DecimalFormat form = (DecimalFormat) nform; form.setMaximumFractionDigits(100); form.setMinimumFractionDigits(200); assertEquals(200, form.getMaximumFractionDigits()); assertEquals(200, form.getMinimumFractionDigits()); form.setMaximumIntegerDigits(100); form.setMinimumIntegerDigits(200); assertEquals(200, form.getMaximumIntegerDigits()); assertEquals(200, form.getMinimumIntegerDigits()); } // When MinFractionDigits is set first and less than MaxFractionDigits, min // will be changed to max value public void test_setMaximumFactionDigitsLjava_lang_Integer_setMinimumFractionDigitsLjava_lang_Integer() { NumberFormat nform = DecimalFormat.getInstance(Locale.US); DecimalFormat form = (DecimalFormat) nform; form.setMinimumFractionDigits(200); form.setMaximumFractionDigits(100); assertEquals(100, form.getMaximumFractionDigits()); assertEquals(100, form.getMinimumFractionDigits()); form.setMinimumIntegerDigits(200); form.setMaximumIntegerDigits(100); assertEquals(100, form.getMaximumIntegerDigits()); assertEquals(100, form.getMinimumIntegerDigits()); } public void test_equalsLjava_lang_Object() { DecimalFormat format = (DecimalFormat) DecimalFormat.getInstance(Locale.US); DecimalFormat cloned = (DecimalFormat) format.clone(); cloned.setDecimalFormatSymbols(new DecimalFormatSymbols(Locale.US)); assertEquals(format, cloned); Currency c = Currency.getInstance(Locale.US); cloned.setCurrency(c); assertEquals(format, cloned); } public void test_setPositivePrefixLjava_lang_String() { DecimalFormat format = new DecimalFormat(); assertEquals("", format.getPositivePrefix()); } public void test_setPositiveSuffixLjava_lang_String() { DecimalFormat format = new DecimalFormat(); assertEquals("", format.getPositiveSuffix()); } public void test_setNegativePrefixLjava_lang_String() { DecimalFormat format = new DecimalFormat(); assertEquals("-", format.getNegativePrefix()); } public void test_setNegativeSuffixLjava_lang_String() { DecimalFormat format = new DecimalFormat(); assertEquals("", format.getNegativeSuffix()); } public void test_setGroupingUse() { DecimalFormat format = new DecimalFormat(); StringBuffer buf = new StringBuffer(); format.setGroupingUsed(false); format.format(new Long(1970), buf, new FieldPosition(0)); assertEquals("1970", buf.toString()); assertFalse(format.isGroupingUsed()); } /** * @tests java.text.DecimalFormat#DecimalFormat(java.lang.String) */ public void test_ConstructorLjava_lang_String() { // Test for method java.text.DecimalFormat(java.lang.String) // the constructor form that specifies a pattern is equal to the form // constructed with no pattern and applying that pattern using the // applyPattern call DecimalFormat format = new DecimalFormat("'$'0000.0000"); DecimalFormat format1 = new DecimalFormat(); format1.applyPattern("'$'0000.0000"); assertTrue("Constructed format did not match applied format object", format.equals(format1)); } /** * @tests java.text.DecimalFormat#applyPattern(java.lang.String) */ public void test_applyPatternLjava_lang_String() { DecimalFormat format = new DecimalFormat("#.#"); assertEquals("Wrong pattern 1", "#0.#", format.toPattern()); format = new DecimalFormat("#."); assertEquals("Wrong pattern 2", "#0.", format.toPattern()); format = new DecimalFormat("#"); assertEquals("Wrong pattern 3", "#", format.toPattern()); format = new DecimalFormat(".#"); assertEquals("Wrong pattern 4", "#.0", format.toPattern()); // Regression for HARMONY-6485 format = new DecimalFormat(); format.setMinimumIntegerDigits(0); format.setMinimumFractionDigits(0); format.setMaximumFractionDigits(0); format.applyPattern("00.0#"); assertEquals("Minimum integer digits not set", 2, format.getMinimumIntegerDigits()); assertEquals("Minimum fraction digits not set", 1, format.getMinimumFractionDigits()); assertEquals("Maximum fraction digits not set", 2, format.getMaximumFractionDigits()); } /** * @tests java.text.DecimalFormat#clone() */ public void test_clone() { DecimalFormat format = (DecimalFormat) DecimalFormat.getInstance(Locale.US); DecimalFormat cloned = (DecimalFormat) format.clone(); assertEquals(cloned.getDecimalFormatSymbols(), format .getDecimalFormatSymbols()); format = new DecimalFormat("'$'0000.0000"); DecimalFormat format1 = (DecimalFormat) (format.clone()); // make sure the objects are equal assertTrue("Object's clone isn't equal!", format.equals(format1)); // change the content of the clone and make sure it's not equal anymore // verifies that it's data is now distinct from the original format1.applyPattern("'$'0000.####"); assertTrue("Object's changed clone should not be equal!", !format .equals(format1)); } private void compare(String testName, String format, String expected) { assertTrue(testName + " got: " + format + " expected: " + expected, format.equals(expected)); } private boolean compare(int count, String format, String expected) { boolean result = format.equals(expected); if (!result) System.out.println("Failure test: " + count + " got: " + format + " expected: " + expected); return result; } /** * @tests java.text.DecimalFormat#format(double, java.lang.StringBuffer, * java.text.FieldPosition) */ //FIXME This test fails on Harmony ClassLibrary public void test_formatDLjava_lang_StringBufferLjava_text_FieldPosition() { new Support_DecimalFormat( "test_formatDLjava_lang_StringBufferLjava_text_FieldPosition") .t_format_with_FieldPosition(); int failCount = 0; BitSet failures = new BitSet(); final DecimalFormatSymbols dfs = new DecimalFormatSymbols(Locale.US); DecimalFormat df = new DecimalFormat("00.0#E0", dfs); compare("00.0#E0: 0.0", df.format(0.0), "00.0E0"); compare("00.0#E0: 1.0", df.format(1.0), "10.0E-1"); compare("00.0#E0: 12.0", df.format(12.0), "12.0E0"); compare("00.0#E0: 123.0", df.format(123.0), "12.3E1"); compare("00.0#E0: 1234.0", df.format(1234.0), "12.34E2"); compare("00.0#E0: 12346.0", df.format(12346.0), "12.35E3"); compare("00.0#E0: 99999.0", df.format(99999.0), "10.0E4"); compare("00.0#E0: 1.2", df.format(1.2), "12.0E-1"); compare("00.0#E0: 12.3", df.format(12.3), "12.3E0"); compare("00.0#E0: 123.4", df.format(123.4), "12.34E1"); compare("00.0#E0: 1234.6", df.format(1234.6), "12.35E2"); compare("00.0#E0: 9999.9", df.format(9999.9), "10.0E3"); compare("00.0#E0: 0.1", df.format(0.1), "10.0E-2"); compare("00.0#E0: 0.12", df.format(0.12), "12.0E-2"); compare("00.0#E0: 0.123", df.format(0.123), "12.3E-2"); compare("00.0#E0: 0.1234", df.format(0.1234), "12.34E-2"); compare("00.0#E0: 0.12346", df.format(0.12346), "12.35E-2"); compare("00.0#E0: 0.99999", df.format(0.99999), "10.0E-1"); compare("00.0#E0: -0.0", df.format(-0.0), "-00.0E0"); compare("00.0#E0: -1.0", df.format(-1.0), "-10.0E-1"); compare("00.0#E0: -12.0", df.format(-12.0), "-12.0E0"); compare("00.0#E0: -123.0", df.format(-123.0), "-12.3E1"); compare("00.0#E0: -1234.0", df.format(-1234.0), "-12.34E2"); compare("00.0#E0: -12346.0", df.format(-12346.0), "-12.35E3"); compare("00.0#E0: -99999.0", df.format(-99999.0), "-10.0E4"); df = new DecimalFormat("##0.0E0", dfs); compare("##0.0E0: -0.0", df.format(-0.0), "-0.0E0"); compare("##0.0E0: 0.0", df.format(0.0), "0.0E0"); compare("##0.0E0: 1.0", df.format(1.0), "1.0E0"); compare("##0.0E0: 12.0", df.format(12.0), "12E0"); compare("##0.0E0: 123.0", df.format(123.0), "123E0"); compare("##0.0E0: 1234.0", df.format(1234.0), "1.234E3"); compare("##0.0E0: 12346.0", df.format(12346.0), "12.35E3"); // Fails in JDK 1.2.2 if (!compare(failCount, df.format(99999.0), "100E3")) failures.set(failCount); failCount++; compare("##0.0E0: 999999.0", df.format(999999.0), "1.0E6"); df = new DecimalFormat("#00.0##E0", dfs); compare("#00.0##E0: 0.1", df.format(0.1), ".100E0"); compare("#00.0##E0: 0.12", df.format(0.12), ".120E0"); compare("#00.0##E0: 0.123", df.format(0.123), ".123E0"); compare("#00.0##E0: 0.1234", df.format(0.1234), ".1234E0"); compare("#00.0##E0: 0.1234567", df.format(0.1234567), ".123457E0"); compare("#00.0##E0: 0.01", df.format(0.01), "10.0E-3"); compare("#00.0##E0: 0.012", df.format(0.012), "12.0E-3"); compare("#00.0##E0: 0.0123", df.format(0.0123), "12.3E-3"); compare("#00.0##E0: 0.01234", df.format(0.01234), "12.34E-3"); compare("#00.0##E0: 0.01234567", df.format(0.01234567), "12.3457E-3"); compare("#00.0##E0: 0.001", df.format(0.001), "1.00E-3"); compare("#00.0##E0: 0.0012", df.format(0.0012), "1.20E-3"); compare("#00.0##E0: 0.00123", df.format(0.00123), "1.23E-3"); compare("#00.0##E0: 0.001234", df.format(0.001234), "1.234E-3"); compare("#00.0##E0: 0.001234567", df.format(0.001234567), "1.23457E-3"); compare("#00.0##E0: 0.0001", df.format(0.0001), "100E-6"); compare("#00.0##E0: 0.00012", df.format(0.00012), "120E-6"); compare("#00.0##E0: 0.000123", df.format(0.000123), "123E-6"); compare("#00.0##E0: 0.0001234", df.format(0.0001234), "123.4E-6"); compare("#00.0##E0: 0.0001234567", df.format(0.0001234567), "123.457E-6"); // Fails in JDK 1.2.2 if (!compare(failCount, df.format(0.0), "0.00E0")) failures.set(failCount); failCount++; compare("#00.0##E0: 1.0", df.format(1.0), "1.00E0"); compare("#00.0##E0: 12.0", df.format(12.0), "12.0E0"); compare("#00.0##E0: 123.0", df.format(123.0), "123E0"); compare("#00.0##E0: 1234.0", df.format(1234.0), "1.234E3"); compare("#00.0##E0: 12345.0", df.format(12345.0), "12.345E3"); compare("#00.0##E0: 123456.0", df.format(123456.0), "123.456E3"); compare("#00.0##E0: 1234567.0", df.format(1234567.0), "1.23457E6"); compare("#00.0##E0: 12345678.0", df.format(12345678.0), "12.3457E6"); compare("#00.0##E0: 99999999.0", df.format(99999999.0), "100E6"); df = new DecimalFormat("#.0E0", dfs); compare("#.0E0: -0.0", df.format(-0.0), "-.0E0"); compare("#.0E0: 0.0", df.format(0.0), ".0E0"); compare("#.0E0: 1.0", df.format(1.0), ".1E1"); compare("#.0E0: 12.0", df.format(12.0), ".12E2"); compare("#.0E0: 123.0", df.format(123.0), ".12E3"); compare("#.0E0: 1234.0", df.format(1234.0), ".12E4"); compare("#.0E0: 9999.0", df.format(9999.0), ".1E5"); df = new DecimalFormat("0.#E0", dfs); compare("0.#E0: -0.0", df.format(-0.0), "-0E0"); compare("0.#E0: 0.0", df.format(0.0), "0E0"); compare("0.#E0: 1.0", df.format(1.0), "1E0"); compare("0.#E0: 12.0", df.format(12.0), "1.2E1"); compare("0.#E0: 123.0", df.format(123.0), "1.2E2"); compare("0.#E0: 1234.0", df.format(1234.0), "1.2E3"); compare("0.#E0: 9999.0", df.format(9999.0), "1E4"); df = new DecimalFormat(".0E0", dfs); compare(".0E0: -0.0", df.format(-0.0), "-.0E0"); compare(".0E0: 0.0", df.format(0.0), ".0E0"); compare(".0E0: 1.0", df.format(1.0), ".1E1"); compare(".0E0: 12.0", df.format(12.0), ".1E2"); compare(".0E0: 123.0", df.format(123.0), ".1E3"); compare(".0E0: 1234.0", df.format(1234.0), ".1E4"); compare(".0E0: 9999.0", df.format(9999.0), ".1E5"); df = new DecimalFormat("0.E0", dfs); // Fails in JDK 1.2.2 if (!compare(failCount, df.format(0.0), "0.E0")) failures.set(failCount); failCount++; if (!compare(failCount, df.format(1.0), "1.E0")) failures.set(failCount); failCount++; if (!compare(failCount, df.format(12.0), "1.E1")) failures.set(failCount); failCount++; if (!compare(failCount, df.format(123.0), "1.E2")) failures.set(failCount); failCount++; if (!compare(failCount, df.format(1234.0), "1.E3")) failures.set(failCount); failCount++; if (!compare(failCount, df.format(9999.0), "1.E4")) failures.set(failCount); failCount++; df = new DecimalFormat("##0.00#E0", dfs); compare("##0.00#E0: 0.1", df.format(0.1), ".100E0"); compare("##0.00#E0: 0.1234567", df.format(0.1234567), ".123457E0"); compare("##0.00#E0: 0.9999999", df.format(0.9999999), "1.00E0"); compare("##0.00#E0: 0.01", df.format(0.01), "10.0E-3"); compare("##0.00#E0: 0.01234567", df.format(0.01234567), "12.3457E-3"); compare("##0.00#E0: 0.09999999", df.format(0.09999999), ".100E0"); compare("##0.00#E0: 0.001", df.format(0.001), "1.00E-3"); compare("##0.00#E0: 0.001234567", df.format(0.001234567), "1.23457E-3"); compare("##0.00#E0: 0.009999999", df.format(0.009999999), "10.0E-3"); compare("##0.00#E0: 0.0001", df.format(0.0001), "100E-6"); compare("##0.00#E0: 0.0001234567", df.format(0.0001234567), "123.457E-6"); compare("##0.00#E0: 0.0009999999", df.format(0.0009999999), "1.00E-3"); df = new DecimalFormat("###0.00#E0", dfs); compare("###0.00#E0: 0.1", df.format(0.1), ".100E0"); compare("###0.00#E0: 0.12345678", df.format(0.12345678), ".1234568E0"); compare("###0.00#E0: 0.99999999", df.format(0.99999999), "1.00E0"); compare("###0.00#E0: 0.01", df.format(0.01), "100E-4"); compare("###0.00#E0: 0.012345678", df.format(0.012345678), "123.4568E-4"); compare("###0.00#E0: 0.099999999", df.format(0.099999999), ".100E0"); compare("###0.00#E0: 0.001", df.format(0.001), "10.0E-4"); compare("###0.00#E0: 0.0012345678", df.format(0.0012345678), "12.34568E-4"); compare("###0.00#E0: 0.0099999999", df.format(0.0099999999), "100E-4"); compare("###0.00#E0: 0.0001", df.format(0.0001), "1.00E-4"); compare("###0.00#E0: 0.00012345678", df.format(0.00012345678), "1.234568E-4"); compare("###0.00#E0: 0.00099999999", df.format(0.00099999999), "10.0E-4"); // Fails in JDK 1.2.2 if (!compare(failCount, df.format(0.00001), "1000E-8")) failures.set(failCount); failCount++; compare("###0.00#E0: 0.000012345678", df.format(0.000012345678), "1234.568E-8"); compare("###0.00#E0: 0.000099999999", df.format(0.000099999999), "1.00E-4"); df = new DecimalFormat("###0.0#E0", dfs); compare("###0.0#E0: 0.1", df.format(0.1), ".10E0"); compare("###0.0#E0: 0.1234567", df.format(0.1234567), ".123457E0"); compare("###0.0#E0: 0.9999999", df.format(0.9999999), "1.0E0"); // Fails in JDK 1.2.2 if (!compare(failCount, df.format(0.01), "100E-4")) failures.set(failCount); failCount++; compare("###0.0#E0: 0.01234567", df.format(0.01234567), "123.457E-4"); compare("###0.0#E0: 0.09999999", df.format(0.09999999), ".10E0"); compare("###0.0#E0: 0.001", df.format(0.001), "10E-4"); compare("###0.0#E0: 0.001234567", df.format(0.001234567), "12.3457E-4"); // Fails in JDK 1.2.2 if (!compare(failCount, df.format(0.009999999), "100E-4")) failures.set(failCount); failCount++; compare("###0.0#E0: 0.0001", df.format(0.0001), "1.0E-4"); compare("###0.0#E0: 0.0001234567", df.format(0.0001234567), "1.23457E-4"); compare("###0.0#E0: 0.0009999999", df.format(0.0009999999), "10E-4"); // Fails in JDK 1.2.2 if (!compare(failCount, df.format(0.00001), "1000E-8")) failures.set(failCount); failCount++; compare("###0.0#E0: 0.00001234567", df.format(0.00001234567), "1234.57E-8"); compare("###0.0#E0: 0.00009999999", df.format(0.00009999999), "1.0E-4"); assertTrue("Failed " + failures + " of " + failCount, failures.length() == 0); String formatString = "##0.#"; df = new DecimalFormat(formatString, dfs); df.setMinimumFractionDigits(30); compare(formatString + ": 0.000000000000000000000000000000", df .format(0.0), "0.000000000000000000000000000000"); compare(formatString + ": -0.000000000000000000000000000000", df .format(-0.0), "-0.000000000000000000000000000000"); compare(formatString + ": 1.000000000000000000000000000000", df .format(1.0), "1.000000000000000000000000000000"); compare(formatString + ": -1.000000000000000000000000000000", df .format(-1.0), "-1.000000000000000000000000000000"); df = new DecimalFormat(formatString); df.setMaximumFractionDigits(30); compare(formatString + ": 0", df.format(0.0), "0"); compare(formatString + ": -0", df.format(-0.0), "-0"); compare(formatString + ": 1", df.format(1.0), "1"); compare(formatString + ": -1", df.format(-1.0), "-1"); } /** * @tests java.text.DecimalFormat#format(long, java.lang.StringBuffer, * java.text.FieldPosition) */ //FIXME This test fails on Harmony ClassLibrary public void test_formatJLjava_lang_StringBufferLjava_text_FieldPosition() { int failCount = 0; BitSet failures = new BitSet(); final DecimalFormatSymbols dfs = new DecimalFormatSymbols(Locale.US); DecimalFormat df = new DecimalFormat("00.0#E0", dfs); assertEquals("00.0#E0: 0", "00.0E0", df.format(0)); assertEquals("00.0#E0: 1", "10.0E-1", df.format(1)); assertEquals("00.0#E0: 12", "12.0E0", df.format(12)); assertEquals("00.0#E0: 123", "12.3E1", df.format(123)); assertEquals("00.0#E0: 1234", "12.34E2", df.format(1234)); assertEquals("00.0#E0: 12346", "12.35E3", df.format(12346)); assertEquals("00.0#E0: 99999", "10.0E4", df.format(99999)); assertEquals("00.0#E0: -1", "-10.0E-1", df.format(-1)); assertEquals("00.0#E0: -12", "-12.0E0", df.format(-12)); assertEquals("00.0#E0: -123", "-12.3E1", df.format(-123)); assertEquals("00.0#E0: -1234", "-12.34E2", df.format(-1234)); assertEquals("00.0#E0: -12346", "-12.35E3", df.format(-12346)); assertEquals("00.0#E0: -99999", "-10.0E4", df.format(-99999)); df = new DecimalFormat("##0.0E0", dfs); assertEquals("##0.0E0: 0", "0.0E0", df.format(0)); assertEquals("##0.0E0: 1", "1.0E0", df.format(1)); assertEquals("##0.0E0: 12", "12E0", df.format(12)); assertEquals("##0.0E0: 123", "123E0", df.format(123)); assertEquals("##0.0E0: 1234", "1.234E3", df.format(1234)); assertEquals("##0.0E0: 12346", "12.35E3", df.format(12346)); // Fails in JDK 1.2.2 if (!df.format(99999).equals("100E3")) failures.set(failCount); failCount++; assertEquals("##0.0E0: 999999", "1.0E6", df.format(999999)); df = new DecimalFormat("#00.0##E0", dfs); // Fails in JDK 1.2.2 if (!df.format(0).equals("0.00E0")) failures.set(failCount); failCount++; assertEquals("#00.0##E0: 1", "1.00E0", df.format(1)); assertEquals("#00.0##E0: 12", "12.0E0", df.format(12)); assertEquals("#00.0##E0: 123", "123E0", df.format(123)); assertEquals("#00.0##E0: 1234", "1.234E3", df.format(1234)); assertEquals("#00.0##E0: 12345", "12.345E3", df.format(12345)); assertEquals("#00.0##E0: 123456", "123.456E3", df.format(123456)); assertEquals("#00.0##E0: 1234567", "1.23457E6", df.format(1234567)); assertEquals("#00.0##E0: 12345678", "12.3457E6", df.format(12345678)); assertEquals("#00.0##E0: 99999999", "100E6", df.format(99999999)); df = new DecimalFormat("#.0E0", dfs); assertEquals("#.0E0: 0", ".0E0", df.format(0)); assertEquals("#.0E0: 1", ".1E1", df.format(1)); assertEquals("#.0E0: 12", ".12E2", df.format(12)); assertEquals("#.0E0: 123", ".12E3", df.format(123)); assertEquals("#.0E0: 1234", ".12E4", df.format(1234)); assertEquals("#.0E0: 9999", ".1E5", df.format(9999)); df = new DecimalFormat("0.#E0", dfs); assertEquals("0.#E0: 0", "0E0", df.format(0)); assertEquals("0.#E0: 1", "1E0", df.format(1)); assertEquals("0.#E0: 12", "1.2E1", df.format(12)); assertEquals("0.#E0: 123", "1.2E2", df.format(123)); assertEquals("0.#E0: 1234", "1.2E3", df.format(1234)); assertEquals("0.#E0: 9999", "1E4", df.format(9999)); assertTrue("Failed " + failures + " of " + failCount, failures.length() == 0); } /** * @tests java.text.DecimalFormat#formatToCharacterIterator(java.lang.Object) */ //FIXME This test fails on Harmony ClassLibrary public void test_formatToCharacterIteratorLjava_lang_Object() { try { // Regression for HARMONY-466 new DecimalFormat().formatToCharacterIterator(null); fail("NullPointerException expected"); } catch (NullPointerException e) { // expected } new Support_DecimalFormat( "test_formatToCharacterIteratorLjava_lang_Object") .t_formatToCharacterIterator(); } /** * @tests java.text.DecimalFormat#format(double) */ public void test_formatD() { DecimalFormat format = (DecimalFormat) NumberFormat .getInstance(Locale.ENGLISH); format.setGroupingUsed(false); format.setMaximumFractionDigits(400); for (int i = 0; i < 309; i++) { String tval = "1"; for (int j = 0; j < i; j++) tval += "0"; double d = Double.parseDouble(tval); String result = format.format(d); assertEquals(i + ") e:" + tval + " r:" + result, tval, result); } for (int i = 0; i < 322; i++) { String tval = "0."; for (int j = 0; j < i; j++) tval += "0"; tval += "1"; double d = Double.parseDouble(tval); String result = format.format(d); assertEquals(i + ") e:" + tval + " r:" + result, tval, result); } assertEquals("999999999999999", format.format(999999999999999.)); assertEquals("1", "999999999999999.9", format.format(999999999999999.9)); assertEquals("2", "99999999999999.98", format.format(99999999999999.99)); assertEquals("3", "9999999999999.998", format.format(9999999999999.999)); assertEquals("4", "999999999999.9999", format.format(999999999999.9999)); assertEquals("5", "99999999999.99998", format.format(99999999999.99999)); assertEquals("6", "9999999999.999998", format.format(9999999999.999999)); assertEquals("7", "999999999.9999999", format.format(999999999.9999999)); assertEquals("8", "99999999.99999999", format.format(99999999.99999999)); assertEquals("9", "9999999.999999998", format.format(9999999.999999999)); assertEquals("10", "99999.99999999999", format .format(99999.99999999999)); assertEquals("11", "9999.999999999998", format .format(9999.999999999999)); assertEquals("12", "999.9999999999999", format .format(999.9999999999999)); assertEquals("13", "99.99999999999999", format .format(99.99999999999999)); assertEquals("14", "9.999999999999998", format .format(9.999999999999999)); assertEquals("15", "0.9999999999999999", format .format(.9999999999999999)); } /** * @tests java.text.DecimalFormat#getDecimalFormatSymbols() */ public void test_getDecimalFormatSymbols() { DecimalFormat df = (DecimalFormat) NumberFormat .getInstance(Locale.ENGLISH); DecimalFormatSymbols dfs = df.getDecimalFormatSymbols(); assertTrue("Identical symbols", dfs != df.getDecimalFormatSymbols()); } /** * @tests java.text.DecimalFormat#getCurrency() */ //FIXME This test fails on Harmony ClassLibrary public void test_getCurrency() { Currency currK = Currency.getInstance("KRW"); Currency currX = Currency.getInstance("XXX"); Currency currE = Currency.getInstance("EUR"); Currency curr01; DecimalFormat df = (DecimalFormat) NumberFormat .getCurrencyInstance(new Locale("ko", "KR")); assertTrue("Test1: Returned incorrect currency", df.getCurrency() == currK); df = (DecimalFormat) NumberFormat.getCurrencyInstance(new Locale("", "KR")); assertTrue("Test2: Returned incorrect currency", df.getCurrency() == currK); df = (DecimalFormat) NumberFormat.getCurrencyInstance(new Locale("ko", "")); assertTrue("Test3: Returned incorrect currency", df.getCurrency() == currX); df = (DecimalFormat) NumberFormat.getCurrencyInstance(new Locale("fr", "FR")); assertTrue("Test4: Returned incorrect currency", df.getCurrency() == currE); // Regression for HARMONY-1351 df = (DecimalFormat) NumberFormat.getCurrencyInstance(new Locale("QWERTY")); assertTrue("Test5: Returned incorrect currency", df.getCurrency() == currX); // JDK fails these tests since it doesn't have the PREEURO variant // df = (DecimalFormat)NumberFormat.getCurrencyInstance(new Locale("fr", // "FR","PREEURO")); // assertTrue("Test5: Returned incorrect currency", df.getCurrency() == // currF); } /** * @tests java.text.DecimalFormat#getGroupingSize() */ public void test_getGroupingSize() { DecimalFormat df = new DecimalFormat("###0.##"); assertEquals("Wrong unset size", 0, df.getGroupingSize()); df = new DecimalFormat("#,##0.##"); assertEquals("Wrong set size", 3, df.getGroupingSize()); df = new DecimalFormat("#,###,###0.##"); assertEquals("Wrong multiple set size", 4, df.getGroupingSize()); } /** * @tests java.text.DecimalFormat#getMultiplier() */ public void test_getMultiplier() { final int defaultMultiplier = 1; NumberFormat nform = DecimalFormat.getInstance(Locale.US); DecimalFormat form = (DecimalFormat) nform; assertEquals(defaultMultiplier, form.getMultiplier()); DecimalFormat df = new DecimalFormat("###0.##"); assertEquals("Wrong unset multiplier", 1, df.getMultiplier()); df = new DecimalFormat("###0.##%"); assertEquals("Wrong percent multiplier", 100, df.getMultiplier()); df = new DecimalFormat("###0.##\u2030"); assertEquals("Wrong mille multiplier", 1000, df.getMultiplier()); } /** * @tests java.text.DecimalFormat#isDecimalSeparatorAlwaysShown() */ public void test_isDecimalSeparatorAlwaysShown() { DecimalFormat df = new DecimalFormat("###0.##"); assertTrue("Wrong unset value", !df.isDecimalSeparatorAlwaysShown()); df = new DecimalFormat("###0.00"); assertTrue("Wrong unset2 value", !df.isDecimalSeparatorAlwaysShown()); df = new DecimalFormat("###0."); assertTrue("Wrong set value", df.isDecimalSeparatorAlwaysShown()); } /** * @tests java.text.DecimalFormat#parse(java.lang.String, * java.text.ParsePosition) */ //FIXME This test fails on Harmony ClassLibrary public void test_parseLjava_lang_StringLjava_text_ParsePosition() { DecimalFormat format = (DecimalFormat) NumberFormat .getNumberInstance(Locale.ENGLISH); ParsePosition pos = new ParsePosition(0); Number result = format.parse("9223372036854775807", pos); assertTrue("Wrong result type for Long.MAX_VALUE", result.getClass() == Long.class); assertTrue("Wrong result Long.MAX_VALUE", result.longValue() == Long.MAX_VALUE); pos = new ParsePosition(0); result = format.parse("-9223372036854775808", pos); assertTrue("Wrong result type for Long.MIN_VALUE", result.getClass() == Long.class); assertTrue("Wrong result Long.MIN_VALUE: " + result.longValue(), result .longValue() == Long.MIN_VALUE); pos = new ParsePosition(0); result = format.parse("9223372036854775808", pos); assertTrue("Wrong result type for Long.MAX_VALUE+1", result.getClass() == Double.class); assertTrue("Wrong result Long.MAX_VALUE + 1", result.doubleValue() == (double) Long.MAX_VALUE + 1); pos = new ParsePosition(0); result = format.parse("-9223372036854775809", pos); assertTrue("Wrong result type for Long.MIN_VALUE+1", result.getClass() == Double.class); assertTrue("Wrong result Long.MIN_VALUE - 1", result.doubleValue() == (double) Long.MIN_VALUE - 1); pos = new ParsePosition(0); result = format.parse("18446744073709551629", pos); assertTrue("Wrong result type for overflow", result.getClass() == Double.class); assertTrue("Wrong result for overflow", result.doubleValue() == 18446744073709551629d); pos = new ParsePosition(0); result = format.parse("42325917317067571199", pos); assertTrue("Wrong result type for overflow a: " + result, result .getClass() == Double.class); assertTrue("Wrong result for overflow a: " + result, result .doubleValue() == 42325917317067571199d); pos = new ParsePosition(0); result = format.parse("4232591731706757119E1", pos); assertTrue("Wrong result type for overflow b: " + result, result .getClass() == Double.class); assertTrue("Wrong result for overflow b: " + result, result .doubleValue() == 42325917317067571190d); pos = new ParsePosition(0); result = format.parse(".42325917317067571199E20", pos); assertTrue("Wrong result type for overflow c: " + result, result .getClass() == Double.class); assertTrue("Wrong result for overflow c: " + result, result .doubleValue() == 42325917317067571199d); pos = new ParsePosition(0); result = format.parse("922337203685477580.9E1", pos); assertTrue("Wrong result type for overflow d: " + result, result .getClass() == Double.class); assertTrue("Wrong result for overflow d: " + result, result .doubleValue() == 9223372036854775809d); pos = new ParsePosition(0); result = format.parse("9.223372036854775809E18", pos); assertTrue("Wrong result type for overflow e: " + result, result .getClass() == Double.class); assertTrue("Wrong result for overflow e: " + result, result .doubleValue() == 9223372036854775809d); // test parse with multipliers format.setMultiplier(100); result = format.parse("9223372036854775807", new ParsePosition(0)); assertTrue("Wrong result type multiplier 100: " + result, result .getClass() == Long.class); assertTrue("Wrong result for multiplier 100: " + result, result .longValue() == 92233720368547758L); format.setMultiplier(1000); result = format.parse("9223372036854775807", new ParsePosition(0)); assertTrue("Wrong result type multiplier 1000: " + result, result .getClass() == Long.class); assertTrue("Wrong result for multiplier 1000: " + result, result .longValue() == 9223372036854776L); format.setMultiplier(10000); result = format.parse("9223372036854775807", new ParsePosition(0)); assertTrue("Wrong result type multiplier 10000: " + result, result .getClass() == Double.class); assertTrue("Wrong result for multiplier 10000: " + result, result .doubleValue() == 922337203685477.5807d); } /** * @tests java.text.DecimalFormat#setDecimalFormatSymbols(java.text.DecimalFormatSymbols) */ public void test_setDecimalFormatSymbolsLjava_text_DecimalFormatSymbols() { DecimalFormat df = new DecimalFormat("###0.##"); DecimalFormatSymbols dfs = new DecimalFormatSymbols(); dfs.setDecimalSeparator('@'); df.setDecimalFormatSymbols(dfs); assertTrue("Not set", df.getDecimalFormatSymbols().equals(dfs)); assertEquals("Symbols not used", "1@2", df.format(1.2)); // The returned symbols may be cloned in two spots // 1. When set // 2. When returned DecimalFormat format = new DecimalFormat(); DecimalFormatSymbols symbols = new DecimalFormatSymbols(); format.setDecimalFormatSymbols(symbols); DecimalFormatSymbols symbolsOut = format.getDecimalFormatSymbols(); assertNotSame(symbols, symbolsOut); } /** * @tests java.text.DecimalFormat#setDecimalSeparatorAlwaysShown(boolean) */ public void test_setDecimalSeparatorAlwaysShownZ() { DecimalFormat df = new DecimalFormat("###0.##", new DecimalFormatSymbols(Locale.US)); assertEquals("Wrong default result", "5", df.format(5)); df.setDecimalSeparatorAlwaysShown(true); assertTrue("Not set", df.isDecimalSeparatorAlwaysShown()); assertEquals("Wrong set result", "7.", df.format(7)); } /** * @tests java.text.DecimalFormat#setCurrency(java.util.Currency) */ public void test_setCurrencyLjava_util_Currency() { Locale locale = Locale.CANADA; DecimalFormat df = ((DecimalFormat) NumberFormat .getCurrencyInstance(locale)); try { df.setCurrency(null); fail("Expected NullPointerException"); } catch (NullPointerException e) { } Currency currency = Currency.getInstance("AED"); df.setCurrency(currency); assertTrue("Returned incorrect currency", currency == df.getCurrency()); assertTrue("Returned incorrect currency symbol", currency.getSymbol( locale) .equals(df.getDecimalFormatSymbols().getCurrencySymbol())); assertTrue("Returned incorrect international currency symbol", currency .getCurrencyCode().equals( df.getDecimalFormatSymbols() .getInternationalCurrencySymbol())); } /** * @tests java.text.DecimalFormat#setGroupingSize(int) */ public void test_setGroupingSizeI() { DecimalFormat df = new DecimalFormat("###0.##", new DecimalFormatSymbols(Locale.ENGLISH)); df.setGroupingUsed(true); df.setGroupingSize(2); assertEquals("Value not set", 2, df.getGroupingSize()); String result = df.format(123); assertTrue("Invalid format:" + result, result.equals("1,23")); } /** * @tests java.text.DecimalFormat#setMaximumFractionDigits(int) */ public void test_setMaximumFractionDigitsI() { DecimalFormat df = new DecimalFormat("###0.##", new DecimalFormatSymbols(Locale.US)); df.setMaximumFractionDigits(3); assertEquals("Not set", 3, df.getMaximumFractionDigits()); assertEquals("Wrong maximum", "1.235", df.format(1.23456)); df.setMinimumFractionDigits(4); assertEquals("Not changed", 4, df.getMaximumFractionDigits()); assertEquals("Incorrect fraction", "456.0000", df.format(456)); } /** * @tests java.text.DecimalFormat#setMaximumIntegerDigits(int) */ public void test_setMaximumIntegerDigitsI() { DecimalFormat df = new DecimalFormat("###0.##"); df.setMaximumIntegerDigits(2); assertEquals("Not set", 2, df.getMaximumIntegerDigits()); assertEquals("Wrong maximum", "34", df.format(1234)); df.setMinimumIntegerDigits(4); assertEquals("Not changed", 4, df.getMaximumIntegerDigits()); assertEquals("Incorrect integer", "0026", df.format(26)); } /** * @tests java.text.DecimalFormat#setMinimumFractionDigits(int) */ public void test_setMinimumFractionDigitsI() { DecimalFormat df = new DecimalFormat("###0.##", new DecimalFormatSymbols(Locale.US)); df.setMinimumFractionDigits(4); assertEquals("Not set", 4, df.getMinimumFractionDigits()); assertEquals("Wrong minimum", "1.2300", df.format(1.23)); df.setMaximumFractionDigits(2); assertEquals("Not changed", 2, df.getMinimumFractionDigits()); assertEquals("Incorrect fraction", "456.00", df.format(456)); } /** * @tests java.text.DecimalFormat#setMinimumIntegerDigits(int) */ public void test_setMinimumIntegerDigitsI() { DecimalFormat df = new DecimalFormat("###0.##", new DecimalFormatSymbols(Locale.US)); df.setMinimumIntegerDigits(3); assertEquals("Not set", 3, df.getMinimumIntegerDigits()); assertEquals("Wrong minimum", "012", df.format(12)); df.setMaximumIntegerDigits(2); assertEquals("Not changed", 2, df.getMinimumIntegerDigits()); assertEquals("Incorrect integer", "00.7", df.format(0.7)); } /** * @tests java.text.DecimalFormat#setMultiplier(int) */ //FIXME This test fails on Harmony ClassLibrary public void test_setMultiplierI() { DecimalFormat df = new DecimalFormat("###0.##"); df.setMultiplier(10); assertEquals("Wrong multiplier", 10, df.getMultiplier()); assertEquals("Wrong format", "50", df.format(5)); assertEquals("Wrong parse", 5, df.parse("50", new ParsePosition(0)) .intValue()); // regression test for HARMONY-879 df.setMultiplier(-1); assertEquals("Wrong multiplier for negative value", -1, df.getMultiplier()); } /** * @tests serialization/deserialization compatibility. */ public void testSerializationSelf() throws Exception { SerializationTest.verifySelf(new DecimalFormat()); } /** * @tests serialization compatibility with RI */ public void test_serializationHarmonyRICompatible() throws Exception { NumberFormat nf = NumberFormat.getInstance(Locale.FRANCE); DecimalFormat df = null; if (!(nf instanceof DecimalFormat)) { throw new Error("This NumberFormat is not a DecimalFormat"); } df = (DecimalFormat) nf; ObjectInputStream oinput = null; DecimalFormat deserializedDF = null; try { oinput = new ObjectInputStream(this.getClass().getResource( "/serialization/java/text/DecimalFormat.ser").openStream()); deserializedDF = (DecimalFormat) oinput.readObject(); } finally { try { if (null != oinput) { oinput.close(); } } catch (Exception e) { // ignore } } assertEquals(df.getNegativePrefix(), deserializedDF.getNegativePrefix()); assertEquals(df.getNegativeSuffix(), deserializedDF.getNegativeSuffix()); assertEquals(df.getPositivePrefix(), deserializedDF.getPositivePrefix()); assertEquals(df.getPositiveSuffix(), deserializedDF.getPositiveSuffix()); assertEquals(df.getCurrency(), deserializedDF.getCurrency()); DecimalFormatSymbolsTest.assertDecimalFormatSymbolsRIFrance(deserializedDF.getDecimalFormatSymbols()); assertEquals(df.getGroupingSize(), df.getGroupingSize()); assertEquals(df.getMaximumFractionDigits(), deserializedDF .getMaximumFractionDigits()); assertEquals(df.getMaximumIntegerDigits(), deserializedDF .getMaximumIntegerDigits()); assertEquals(df.getMinimumFractionDigits(), deserializedDF .getMinimumFractionDigits()); assertEquals(df.getMinimumIntegerDigits(), deserializedDF .getMinimumIntegerDigits()); assertEquals(df.getMultiplier(), deserializedDF.getMultiplier()); // Deliberately omitted this assertion. Since different data resource // will cause the assertion fail. // assertEquals(df, deserializedDF); } /** * Test whether DecimalFormat can parse Positive infinity correctly */ public void testParseInfinityBigDecimalFalse() { // Regression test for HARMONY-106 DecimalFormat format = (DecimalFormat) DecimalFormat.getInstance(); DecimalFormatSymbols symbols = new DecimalFormatSymbols(); Number number = format.parse(symbols.getInfinity(), new ParsePosition(0)); assertTrue(number instanceof Double); assertTrue(Double.isInfinite(number.doubleValue())); } /** * Test whether DecimalFormat can parse Negative infinity correctly */ public void testParseMinusInfinityBigDecimalFalse() { // Regression test for HARMONY-106 DecimalFormat format = (DecimalFormat) DecimalFormat.getInstance(); DecimalFormatSymbols symbols = new DecimalFormatSymbols(); Number number = format.parse("-" + symbols.getInfinity(), new ParsePosition(0)); assertTrue(number instanceof Double); assertTrue(Double.isInfinite(number.doubleValue())); } /** * Test if setDecimalFormatSymbols method wont throw NullPointerException * when it is called with null parameter. */ public void testSetDecimalFormatSymbolsAsNull(){ // Regression for HARMONY-1070 DecimalFormat format = (DecimalFormat)DecimalFormat.getInstance(); format.setDecimalFormatSymbols(null); } /** * @tests java.text.DecimalFormat#formatToCharacterIterator(java.lang.Object) */ public void test_formatToCharacterIteratorLjava_lang_Object__ArithmeticException() { DecimalFormat decimalFormat = (DecimalFormat) DecimalFormat .getInstance(Locale.US); decimalFormat.setRoundingMode(RoundingMode.UNNECESSARY); decimalFormat.setMaximumFractionDigits(0); try { // when rounding is needed, but RoundingMode is set to RoundingMode.UNNECESSARY, throw ArithmeticException decimalFormat.formatToCharacterIterator(new Double(1.5)); fail("ArithmeticException expected"); } catch (ArithmeticException e) { // expected } } /** * @tests java.text.DecimalFormat#format(double, java.lang.StringBuffer, * java.text.FieldPosition) */ public void test_formatDLjava_lang_StringBufferLjava_text_FieldPosition_ArithmeticException() { DecimalFormat decimalFormat = (DecimalFormat) DecimalFormat .getInstance(Locale.US); decimalFormat.setMaximumFractionDigits(0); decimalFormat.setRoundingMode(RoundingMode.UNNECESSARY); try { // when rounding is needed, but RoundingMode is set to RoundingMode.UNNECESSARY, throw ArithmeticException decimalFormat .format(11.5, new StringBuffer(), new FieldPosition(0)); fail("ArithmeticException expected"); } catch (ArithmeticException e) { // expected } } /** * @tests java.text.DecimalFormat#format(long, java.lang.StringBuffer, * java.text.FieldPosition) */ public void test_formatJLjava_lang_StringBufferLjava_text_FieldPosition_ArithmeticException() { final DecimalFormatSymbols dfs = new DecimalFormatSymbols(Locale.US); DecimalFormat decimalFormat = new DecimalFormat("00.0#E0", dfs); decimalFormat.setRoundingMode(RoundingMode.UNNECESSARY); try { // when rounding is needed, but RoundingMode is set to RoundingMode.UNNECESSARY, throw ArithmeticException decimalFormat.format(99999, new StringBuffer(), new FieldPosition(0)); fail("ArithmeticException expected"); } catch (ArithmeticException e) { // expected } } /** * @tests java.text.DecimalFormat#getRoundingMode() */ public void test_GetRoundingMode() { // get the default RoundingMode of this DecimalFormat DecimalFormat decimalFormat = (DecimalFormat) DecimalFormat .getInstance(Locale.US); // the default RoundingMode is HALF_EVEN assertEquals("Incorrect default RoundingMode", decimalFormat.getRoundingMode(), RoundingMode.HALF_EVEN); // set RoundingMode.HALF_DOWN of this DecimalFormat decimalFormat.setRoundingMode(RoundingMode.HALF_DOWN); assertEquals("Returned incorrect RoundingMode", decimalFormat .getRoundingMode(), RoundingMode.HALF_DOWN); } /** * @tests java.text.DecimalFormat#setRoundingMode(java.math.RoundingMode) */ public void test_SetRoudingMode_Ljava_math_RoundingMode() { DecimalFormat decimalFormat = (DecimalFormat) DecimalFormat .getInstance(Locale.US); // ignore the fraction part of a given value decimalFormat.setMaximumFractionDigits(0); // set RoundingMode.HALF_DOWN of this DecimalFormat and test its // behavior decimalFormat.setRoundingMode(RoundingMode.HALF_DOWN); String result = decimalFormat.format(11.3); assertEquals("Incorrect RoundingMode behavior: RoundingMode.HALF_DOWN", "11", result); result = decimalFormat.format(11.5); assertEquals("Incorrect RoundingMode behavior: RoundingMode.HALF_DOWN", "11", result); result = decimalFormat.format(11.6); assertEquals("Incorrect RoundingMode behavior: RoundingMode.HALF_DOWN", "12", result); // set RoundingMode.CEILING of this DecimalFormat and test its // behavior decimalFormat.setRoundingMode(RoundingMode.CEILING); result = decimalFormat.format(11.3); assertEquals("Incorrect RoundingMode behavior: RoundingMode.CEILING", "12", result); result = decimalFormat.format(-11.5); assertEquals("Incorrect RoundingMode behavior: RoundingMode.CEILING", "-11", result); // set RoundingMode.DOWN of this DecimalFormat and test its // behavior decimalFormat.setRoundingMode(RoundingMode.DOWN); result = decimalFormat.format(11.3); assertEquals("Incorrect RoundingMode behavior: RoundingMode.DOWN", "11", result); result = decimalFormat.format(-11.5); assertEquals("Incorrect RoundingMode behavior: RoundingMode.DOWN", "-11", result); result = decimalFormat.format(0); assertEquals("Incorrect RoundingMode behavior: RoundingMode.DOWN", "0", result); // set RoundingMode.FLOOR of this DecimalFormat and test its // behavior decimalFormat.setRoundingMode(RoundingMode.FLOOR); result = decimalFormat.format(11.3); assertEquals("Incorrect RoundingMode behavior: RoundingMode.FLOOR", "11", result); result = decimalFormat.format(-11.5); assertEquals("Incorrect RoundingMode behavior: RoundingMode.FLOOR", "-12", result); result = decimalFormat.format(0); assertEquals("Incorrect RoundingMode behavior: RoundingMode.FLOOR", "0", result); // set RoundingMode.HALF_EVEN of this DecimalFormat and test its // behavior decimalFormat.setRoundingMode(RoundingMode.HALF_EVEN); result = decimalFormat.format(5.5); assertEquals("Incorrect RoundingMode behavior: RoundingMode.HALF_EVEN", "6", result); result = decimalFormat.format(-5.5); assertEquals("Incorrect RoundingMode behavior: RoundingMode.HALF_EVEN", "-6", result); result = decimalFormat.format(0.2); assertEquals("Incorrect RoundingMode behavior: RoundingMode.HALF_EVEN", "0", result); // set RoundingMode.HALF_UP of this DecimalFormat and test its // behavior decimalFormat.setRoundingMode(RoundingMode.HALF_UP); result = decimalFormat.format(5.5); assertEquals("Incorrect RoundingMode behavior: RoundingMode.HALF_UP", "6", result); result = decimalFormat.format(-5.5); assertEquals("Incorrect RoundingMode behavior: RoundingMode.HALF_UP", "-6", result); result = decimalFormat.format(0.2); assertEquals("Incorrect RoundingMode behavior: RoundingMode.HALF_UP", "0", result); // the following assertion will fail on RI implementation, since the // implementation of ICU and RI are not identical. result = decimalFormat.format(-0.2); assertEquals("Incorrect RoundingMode behavior: RoundingMode.HALF_UP", "0", result); // set RoundingMode.UP of this DecimalFormat and test its // behavior decimalFormat.setRoundingMode(RoundingMode.UP); result = decimalFormat.format(5.5); assertEquals("Incorrect RoundingMode behavior: RoundingMode.UP", "6", result); result = decimalFormat.format(-5.5); assertEquals("Incorrect RoundingMode behavior: RoundingMode.UP", "-6", result); result = decimalFormat.format(0.2); assertEquals("Incorrect RoundingMode behavior: RoundingMode.UP", "1", result); result = decimalFormat.format(-0.2); assertEquals("Incorrect RoundingMode behavior: RoundingMode.UP", "-1", result); // set RoundingMode.UNNECESSARY of this DecimalFormat and test its // behavior decimalFormat.setRoundingMode(RoundingMode.UNNECESSARY); try { // when rounding is needed but RoundingMode is set to RoundingMode.UNNECESSARY, throw ArithmeticException result = decimalFormat.format(5.5); fail("ArithmeticException expected: RoundingMode.UNNECESSARY"); } catch (ArithmeticException e) { // expected } result = decimalFormat.format(1.0); assertEquals( "Incorrect RoundingMode behavior: RoundingMode.UNNECESSARY", "1", result); result = decimalFormat.format(-1.0); assertEquals( "Incorrect RoundingMode behavior: RoundingMode.UNNECESSARY", "-1", result); try { // when the given RoundingMode is null, throw NullPointerException decimalFormat.setRoundingMode(null); fail("NullPointerException expected"); } catch (NullPointerException e) { // expected } // set MaxFractionDigits to 3, test different DecimalFormat format // function with differnt RoundingMode decimalFormat.setMaximumFractionDigits(3); // set RoundingMode.HALF_DOWN of this DecimalFormat and test its // behavior decimalFormat.setRoundingMode(RoundingMode.HALF_DOWN); result = decimalFormat.format(11.5653); assertEquals("Incorrect RoundingMode behavior: RoundingMode.HALF_DOWN", "11.565", result); result = decimalFormat.format(11.5655); assertEquals("Incorrect RoundingMode behavior: RoundingMode.HALF_DOWN", "11.565", result); result = decimalFormat.format(11.5656); assertEquals("Incorrect RoundingMode behavior: RoundingMode.HALF_DOWN", "11.566", result); // set RoundingMode.CEILING of this DecimalFormat and test its // behavior decimalFormat.setRoundingMode(RoundingMode.CEILING); result = decimalFormat.format(11.5653); assertEquals("Incorrect RoundingMode behavior: RoundingMode.CEILING", "11.566", result); result = decimalFormat.format(-11.5653); assertEquals("Incorrect RoundingMode behavior: RoundingMode.CEILING", "-11.565", result); // set RoundingMode.DOWN of this DecimalFormat and test its // behavior decimalFormat.setRoundingMode(RoundingMode.DOWN); result = decimalFormat.format(11.5653); assertEquals("Incorrect RoundingMode behavior: RoundingMode.DOWN", "11.565", result); result = decimalFormat.format(-11.5653); assertEquals("Incorrect RoundingMode behavior: RoundingMode.DOWN", "-11.565", result); result = decimalFormat.format(0); assertEquals("Incorrect RoundingMode behavior: RoundingMode.DOWN", "0", result); // set RoundingMode.FLOOR of this DecimalFormat and test its // behavior decimalFormat.setRoundingMode(RoundingMode.FLOOR); result = decimalFormat.format(11.5653); assertEquals("Incorrect RoundingMode behavior: RoundingMode.FLOOR", "11.565", result); result = decimalFormat.format(-11.5655); assertEquals("Incorrect RoundingMode behavior: RoundingMode.FLOOR", "-11.566", result); result = decimalFormat.format(0); assertEquals("Incorrect RoundingMode behavior: RoundingMode.FLOOR", "0", result); // set RoundingMode.HALF_EVEN of this DecimalFormat and test its // behavior decimalFormat.setRoundingMode(RoundingMode.HALF_EVEN); result = decimalFormat.format(11.5653); assertEquals("Incorrect RoundingMode behavior: RoundingMode.HALF_EVEN", "11.565", result); result = decimalFormat.format(-11.5655); assertEquals("Incorrect RoundingMode behavior: RoundingMode.HALF_EVEN", "-11.566", result); result = decimalFormat.format(11.5656); assertEquals("Incorrect RoundingMode behavior: RoundingMode.HALF_EVEN", "11.566", result); // set RoundingMode.HALF_UP of this DecimalFormat and test its // behavior decimalFormat.setRoundingMode(RoundingMode.HALF_UP); result = decimalFormat.format(11.5653); assertEquals("Incorrect RoundingMode behavior: RoundingMode.HALF_UP", "11.565", result); result = decimalFormat.format(-11.5655); assertEquals("Incorrect RoundingMode behavior: RoundingMode.HALF_UP", "-11.566", result); result = decimalFormat.format(11.5656); assertEquals("Incorrect RoundingMode behavior: RoundingMode.HALF_UP", "11.566", result); // set RoundingMode.UP of this DecimalFormat and test its // behavior decimalFormat.setRoundingMode(RoundingMode.UP); result = decimalFormat.format(11.5653); assertEquals("Incorrect RoundingMode behavior: RoundingMode.UP", "11.566", result); result = decimalFormat.format(-11.5655); assertEquals("Incorrect RoundingMode behavior: RoundingMode.UP", "-11.566", result); // set RoundingMode.UNNECESSARY of this DecimalFormat and test its // behavior decimalFormat.setRoundingMode(RoundingMode.UNNECESSARY); result = decimalFormat.format(-11.565); assertEquals( "Incorrect RoundingMode behavior: RoundingMode.UNNECESSARY", "-11.565", result); result = decimalFormat.format(11.565); assertEquals( "Incorrect RoundingMode behavior: RoundingMode.UNNECESSARY", "11.565", result); // when setting MaxFractionDigits to negative value -2, default it as // zero, test different DecimalFormat format // function with differnt RoundingMode decimalFormat.setMaximumFractionDigits(-2); // set RoundingMode.HALF_DOWN of this DecimalFormat and test its // behavior decimalFormat.setRoundingMode(RoundingMode.HALF_DOWN); result = decimalFormat.format(11.3); assertEquals("Incorrect RoundingMode behavior: RoundingMode.HALF_DOWN", "11", result); result = decimalFormat.format(11.5); assertEquals("Incorrect RoundingMode behavior: RoundingMode.HALF_DOWN", "11", result); result = decimalFormat.format(11.6); assertEquals("Incorrect RoundingMode behavior: RoundingMode.HALF_DOWN", "12", result); // set RoundingMode.CEILING of this DecimalFormat and test its // behavior decimalFormat.setRoundingMode(RoundingMode.CEILING); result = decimalFormat.format(11.3); assertEquals("Incorrect RoundingMode behavior: RoundingMode.CEILING", "12", result); result = decimalFormat.format(-11.5); assertEquals("Incorrect RoundingMode behavior: RoundingMode.CEILING", "-11", result); // set RoundingMode.DOWN of this DecimalFormat and test its // behavior decimalFormat.setRoundingMode(RoundingMode.DOWN); result = decimalFormat.format(11.3); assertEquals("Incorrect RoundingMode behavior: RoundingMode.DOWN", "11", result); result = decimalFormat.format(-11.5); assertEquals("Incorrect RoundingMode behavior: RoundingMode.DOWN", "-11", result); result = decimalFormat.format(0); assertEquals("Incorrect RoundingMode behavior: RoundingMode.DOWN", "0", result); // set RoundingMode.FLOOR of this DecimalFormat and test its // behavior decimalFormat.setRoundingMode(RoundingMode.FLOOR); result = decimalFormat.format(11.3); assertEquals("Incorrect RoundingMode behavior: RoundingMode.FLOOR", "11", result); result = decimalFormat.format(-11.5); assertEquals("Incorrect RoundingMode behavior: RoundingMode.FLOOR", "-12", result); result = decimalFormat.format(0); assertEquals("Incorrect RoundingMode behavior: RoundingMode.FLOOR", "0", result); // set RoundingMode.HALF_EVEN of this DecimalFormat and test its // behavior decimalFormat.setRoundingMode(RoundingMode.HALF_EVEN); result = decimalFormat.format(5.5); assertEquals("Incorrect RoundingMode behavior: RoundingMode.HALF_EVEN", "6", result); result = decimalFormat.format(-5.5); assertEquals("Incorrect RoundingMode behavior: RoundingMode.HALF_EVEN", "-6", result); result = decimalFormat.format(0.2); assertEquals("Incorrect RoundingMode behavior: RoundingMode.HALF_EVEN", "0", result); // set RoundingMode.HALF_UP of this DecimalFormat and test its // behavior decimalFormat.setRoundingMode(RoundingMode.HALF_UP); result = decimalFormat.format(5.5); assertEquals("Incorrect RoundingMode behavior: RoundingMode.HALF_UP", "6", result); result = decimalFormat.format(-5.5); assertEquals("Incorrect RoundingMode behavior: RoundingMode.HALF_UP", "-6", result); result = decimalFormat.format(0.2); assertEquals("Incorrect RoundingMode behavior: RoundingMode.HALF_UP", "0", result); result = decimalFormat.format(-0.2); assertEquals("Incorrect RoundingMode behavior: RoundingMode.HALF_UP", "0", result); // set RoundingMode.UP of this DecimalFormat and test its // behavior decimalFormat.setRoundingMode(RoundingMode.UP); result = decimalFormat.format(5.5); assertEquals("Incorrect RoundingMode behavior: RoundingMode.UP", "6", result); result = decimalFormat.format(-5.5); assertEquals("Incorrect RoundingMode behavior: RoundingMode.UP", "-6", result); result = decimalFormat.format(0.2); assertEquals("Incorrect RoundingMode behavior: RoundingMode.UP", "1", result); result = decimalFormat.format(-0.2); assertEquals("Incorrect RoundingMode behavior: RoundingMode.UP", "-1", result); // set RoundingMode.UNNECESSARY of this DecimalFormat and test its // behavior decimalFormat.setRoundingMode(RoundingMode.UNNECESSARY); result = decimalFormat.format(1.0); assertEquals( "Incorrect RoundingMode behavior: RoundingMode.UNNECESSARY", "1", result); result = decimalFormat.format(-1.0); assertEquals( "Incorrect RoundingMode behavior: RoundingMode.UNNECESSARY", "-1", result); // Regression for HARMONY-6485 // Test with applyPattern call after setRoundingMode // set RoundingMode.HALF_UP of this DecimalFormat and test its // behavior decimalFormat.setRoundingMode(RoundingMode.HALF_UP); decimalFormat.applyPattern(".##"); result = decimalFormat.format(0.125); assertEquals( "Incorrect RoundingMode behavior after applyPattern", ".13", result); result = decimalFormat.format(0.255); assertEquals( "Incorrect RoundingMode behavior after applyPattern", ".26", result); result = decimalFormat.format(0.732); assertEquals( "Incorrect RoundingMode behavior after applyPattern", ".73", result); result = decimalFormat.format(0.467); assertEquals( "Incorrect RoundingMode behavior after applyPattern", ".47", result); // set RoundingMode.HALF_DOWN of this DecimalFormat and test its // behavior decimalFormat.setRoundingMode(RoundingMode.HALF_DOWN); decimalFormat.applyPattern(".##"); result = decimalFormat.format(0.125); assertEquals( "Incorrect RoundingMode behavior after applyPattern", ".12", result); result = decimalFormat.format(0.255); assertEquals( "Incorrect RoundingMode behavior after applyPattern", ".25", result); result = decimalFormat.format(0.732); assertEquals( "Incorrect RoundingMode behavior after applyPattern", ".73", result); result = decimalFormat.format(0.467); assertEquals( "Incorrect RoundingMode behavior after applyPattern", ".47", result); // set RoundingMode.UP of this DecimalFormat and test its // behavior decimalFormat.setRoundingMode(RoundingMode.UP); decimalFormat.applyPattern(".##"); result = decimalFormat.format(0.125); assertEquals( "Incorrect RoundingMode behavior after applyPattern", ".13", result); result = decimalFormat.format(0.255); assertEquals( "Incorrect RoundingMode behavior after applyPattern", ".26", result); result = decimalFormat.format(0.732); assertEquals( "Incorrect RoundingMode behavior after applyPattern", ".74", result); result = decimalFormat.format(0.467); assertEquals( "Incorrect RoundingMode behavior after applyPattern", ".47", result); // set RoundingMode.DOWN of this DecimalFormat and test its // behavior decimalFormat.setRoundingMode(RoundingMode.DOWN); decimalFormat.applyPattern(".##"); result = decimalFormat.format(0.125); assertEquals( "Incorrect RoundingMode behavior after applyPattern", ".12", result); result = decimalFormat.format(0.255); assertEquals( "Incorrect RoundingMode behavior after applyPattern", ".25", result); result = decimalFormat.format(0.732); assertEquals( "Incorrect RoundingMode behavior after applyPattern", ".73", result); result = decimalFormat.format(0.467); assertEquals( "Incorrect RoundingMode behavior after applyPattern", ".46", result); // set RoundingMode.HALF_EVEN of this DecimalFormat and test its // behavior decimalFormat.setRoundingMode(RoundingMode.HALF_EVEN); decimalFormat.applyPattern(".##"); result = decimalFormat.format(0.125); assertEquals( "Incorrect RoundingMode behavior after applyPattern", ".12", result); result = decimalFormat.format(0.255); assertEquals( "Incorrect RoundingMode behavior after applyPattern", ".26", result); result = decimalFormat.format(0.732); assertEquals( "Incorrect RoundingMode behavior after applyPattern", ".73", result); result = decimalFormat.format(0.467); assertEquals( "Incorrect RoundingMode behavior after applyPattern", ".47", result); } }