/* * 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 libcore.java.text; import java.io.ObjectInputStream; import java.text.DecimalFormatSymbols; import java.util.Locale; import junit.framework.TestCase; public class OldDecimalFormatSymbolsTest extends TestCase { DecimalFormatSymbols dfs; protected void setUp() { dfs = new DecimalFormatSymbols(); } public void test_RIHarmony_compatible() throws Exception { ObjectInputStream i = null; try { DecimalFormatSymbols symbols = new DecimalFormatSymbols( Locale.FRANCE); i = new ObjectInputStream( getClass() .getClassLoader() .getResourceAsStream( "serialization/java/text/DecimalFormatSymbols.ser")); DecimalFormatSymbols symbolsD = (DecimalFormatSymbols) i .readObject(); assertEquals(symbols, symbolsD); } catch(NullPointerException e) { assertNotNull("Failed to load /serialization/java/text/" + "DecimalFormatSymbols.ser", i); } finally { try { if (i != null) { i.close(); } } catch (Exception e) { } } assertDecimalFormatSymbolsRIFrance(dfs); } public void test_Constructor() { new DecimalFormatSymbols(); } /** * java.text.DecimalFormatSymbols#DecimalFormatSymbols(java.util.Locale) */ public void test_ConstructorLjava_util_Locale() { try { new DecimalFormatSymbols(null); fail("NullPointerException was not thrown."); } catch(NullPointerException npe) { //expected } } public void test_getMonetaryDecimalSeparator() { dfs.setMonetaryDecimalSeparator(','); assertEquals("Returned incorrect MonetaryDecimalSeparator symbol", ',', dfs.getMonetaryDecimalSeparator()); } public void test_hashCode() { DecimalFormatSymbols dfs1 = new DecimalFormatSymbols(); DecimalFormatSymbols dfs2 = (DecimalFormatSymbols) dfs1.clone(); assertTrue("Hash codes of equal object are equal", dfs2 .hashCode() == dfs1.hashCode()); dfs1.setInfinity("infinity_infinity"); assertTrue("Hash codes of non-equal objects are equal", dfs2 .hashCode() != dfs1.hashCode()); } public void test_clone() { // case 1: Compare of internal variables of cloned objects DecimalFormatSymbols fs = new DecimalFormatSymbols(Locale.US); DecimalFormatSymbols fsc = (DecimalFormatSymbols) fs.clone(); assertEquals(fs.getCurrency(), fsc.getCurrency()); // case 2: Compare of clones fs = new DecimalFormatSymbols(); DecimalFormatSymbols fsc2 = (DecimalFormatSymbols) (fs.clone()); // make sure the objects are equal assertTrue("Object's clone isn't equal!", fs.equals(fsc2)); // case 3: // 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 fs.setNaN("not-a-number"); assertTrue("Object's changed clone should not be equal!", !fs.equals(fsc2)); } public void test_setCurrencySymbolLjava_lang_String() { dfs.setCurrencySymbol("$"); assertEquals("Returned incorrect CurrencySymbol symbol", "$", dfs.getCurrencySymbol()); } public void test_setMonetaryDecimalSeparatorC() { dfs.setMonetaryDecimalSeparator('#'); assertEquals("Returned incorrect MonetaryDecimalSeparator symbol", '#', dfs.getMonetaryDecimalSeparator()); } static void assertDecimalFormatSymbolsRIFrance(DecimalFormatSymbols dfs) { // Values based on Java 1.5 RI DecimalFormatSymbols for Locale.FRANCE /* * currency = [EUR] * currencySymbol = [U+20ac] // EURO SIGN * decimalSeparator = [,][U+002c] * digit = [#][U+0023] * groupingSeparator = [U+00a0] // NON-BREAKING SPACE * infinity = [U+221e] // INFINITY * internationalCurrencySymbol = [EUR] * minusSign = [-][U+002d] * monetaryDecimalSeparator = [,][U+002c] * naN = [U+fffd] // REPLACEMENT CHARACTER * patternSeparator = [;][U+003b] * perMill = [U+2030] // PER MILLE * percent = [%][U+0025] * zeroDigit = [0][U+0030] */ assertEquals("EUR", dfs.getCurrency().getCurrencyCode()); assertEquals("\u20AC", dfs.getCurrencySymbol()); assertEquals(',', dfs.getDecimalSeparator()); assertEquals('#', dfs.getDigit()); assertEquals('\u00a0', dfs.getGroupingSeparator()); assertEquals("\u221e", dfs.getInfinity()); assertEquals("EUR", dfs.getInternationalCurrencySymbol()); assertEquals('-', dfs.getMinusSign()); assertEquals(',', dfs.getMonetaryDecimalSeparator()); // RI's default NaN is U+FFFD, Harmony's is based on ICU // This suggests an RI bug, assuming that non-UTF8 bytes are UTF8 and // getting a conversion failure. assertEquals("\uFFFD", dfs.getNaN()); assertEquals('\u003b', dfs.getPatternSeparator()); assertEquals('\u2030', dfs.getPerMill()); assertEquals('%', dfs.getPercent()); assertEquals('0', dfs.getZeroDigit()); } }