blob: 47107cd621a6f110aa1875931c8d29aa9709ce06 [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.text.tests.java.text;
import dalvik.annotation.AndroidOnly;
import dalvik.annotation.KnownFailure;
import dalvik.annotation.TestLevel;
import dalvik.annotation.TestTargetClass;
import dalvik.annotation.TestTargetNew;
import junit.framework.TestCase;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.text.NumberFormat;
import java.util.Currency;
import java.util.Locale;
@TestTargetClass(DecimalFormatSymbols.class)
public class DecimalFormatSymbolsTest extends TestCase {
DecimalFormatSymbols dfs;
DecimalFormatSymbols dfsUS;
/**
* @tests java.text.DecimalFormatSymbols#DecimalFormatSymbols() Test of
* method java.text.DecimalFormatSymbols#DecimalFormatSymbols().
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "DecimalFormatSymbols",
args = {}
)
public void test_Constructor() {
// Test for method java.text.DecimalFormatSymbols()
try {
new DecimalFormatSymbols();
} catch (Exception e) {
fail("Unexpected exception " + e.toString());
}
}
/**
* @tests java.text.DecimalFormatSymbols#DecimalFormatSymbols(java.util.Locale)
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "DecimalFormatSymbols",
args = {java.util.Locale.class}
)
public void test_ConstructorLjava_util_Locale() {
DecimalFormatSymbols dfs = new DecimalFormatSymbols(new Locale("en",
"us"));
assertEquals("Returned incorrect symbols", '%', dfs.getPercent());
try {
new DecimalFormatSymbols(null);
fail("NullPointerException was not thrown.");
} catch(NullPointerException npe) {
//expected
}
}
/**
* @tests java.text.DecimalFormatSymbols#clone() Test of method
* java.text.DecimalFormatSymbols#clone(). Case 1: Compare of
* internal variables of cloned objects. Case 2: Compare of clones.
* Case 3: Change the content of the clone.
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "clone",
args = {}
)
public void test_clone() {
try {
// 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));
} catch (Exception e) {
fail("Unexpected exception " + e.toString());
}
}
/**
* @tests java.text.DecimalFormatSymbols#equals(java.lang.Object)
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "equals",
args = {java.lang.Object.class}
)
public void test_equalsLjava_lang_Object() {
assertTrue("Equal objects returned false", dfs.equals(dfs.clone()));
dfs.setDigit('B');
assertTrue("Un-Equal objects returned true", !dfs
.equals(new DecimalFormatSymbols()));
}
/**
* @tests java.text.DecimalFormatSymbols#getCurrency()
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getCurrency",
args = {}
)
@KnownFailure("some locales were removed last minute in cupcake")
public void test_getCurrency() {
Currency currency = Currency.getInstance("USD");
assertEquals("Returned incorrect currency",
dfsUS.getCurrency(), currency);
// use cs_CZ instead
//Currency currK = Currency.getInstance("KRW");
Currency currC = Currency.getInstance("CZK");
Currency currX = Currency.getInstance("XXX");
Currency currE = Currency.getInstance("EUR");
// Currency currF = Currency.getInstance("FRF");
DecimalFormatSymbols dfs1 = new DecimalFormatSymbols(new Locale("cs",
"CZ"));
assertTrue("Test1: Returned incorrect currency",
dfs1.getCurrency() == currC);
assertEquals("Test1: Returned incorrect currencySymbol", "K\u010d", dfs1
.getCurrencySymbol());
assertEquals("Test1: Returned incorrect intlCurrencySymbol", "CZK",
dfs1.getInternationalCurrencySymbol());
dfs1 = new DecimalFormatSymbols(new Locale("", "CZ"));
assertTrue("Test2: Returned incorrect currency",
dfs1.getCurrency() == currC);
assertEquals("Test2: Returned incorrect currencySymbol", "CZK", dfs1
.getCurrencySymbol());
assertEquals("Test2: Returned incorrect intlCurrencySymbol", "CZK",
dfs1.getInternationalCurrencySymbol());
dfs1 = new DecimalFormatSymbols(new Locale("cs", ""));
assertEquals("Test3: Returned incorrect currency",
currX, dfs1.getCurrency());
assertEquals("Test3: Returned incorrect currencySymbol", "\u00a4", dfs1
.getCurrencySymbol());
assertEquals("Test3: Returned incorrect intlCurrencySymbol", "XXX",
dfs1.getInternationalCurrencySymbol());
dfs1 = new DecimalFormatSymbols(new Locale("de", "AT"));
assertTrue("Test4: Returned incorrect currency",
dfs1.getCurrency() == currE);
assertEquals("Test4: Returned incorrect currencySymbol", "\u20ac", dfs1
.getCurrencySymbol());
assertEquals("Test4: Returned incorrect intlCurrencySymbol", "EUR",
dfs1.getInternationalCurrencySymbol());
// RI fails these tests since it doesn't have the PREEURO variant
// dfs1 = new DecimalFormatSymbols(new Locale("fr", "FR","PREEURO"));
// assertTrue("Test5: Returned incorrect currency", dfs1.getCurrency()
// == currF);
// assertTrue("Test5: Returned incorrect currencySymbol",
// dfs1.getCurrencySymbol().equals("F"));
// assertTrue("Test5: Returned incorrect intlCurrencySymbol",
// dfs1.getInternationalCurrencySymbol().equals("FRF"));
}
/**
* @tests java.text.DecimalFormatSymbols#getCurrencySymbol()
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getCurrencySymbol",
args = {}
)
public void test_getCurrencySymbol() {
assertEquals("Returned incorrect currencySymbol", "$", dfsUS
.getCurrencySymbol());
}
/**
* @tests java.text.DecimalFormatSymbols#getDecimalSeparator()
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getDecimalSeparator",
args = {}
)
public void test_getDecimalSeparator() {
dfs.setDecimalSeparator('*');
assertEquals("Returned incorrect DecimalSeparator symbol", '*', dfs
.getDecimalSeparator());
}
/**
* @tests java.text.DecimalFormatSymbols#getDigit()
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getDigit",
args = {}
)
public void test_getDigit() {
dfs.setDigit('*');
assertEquals("Returned incorrect Digit symbol", '*', dfs.getDigit());
}
/**
* @tests java.text.DecimalFormatSymbols#getGroupingSeparator()
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getGroupingSeparator",
args = {}
)
public void test_getGroupingSeparator() {
dfs.setGroupingSeparator('*');
assertEquals("Returned incorrect GroupingSeparator symbol", '*', dfs
.getGroupingSeparator());
}
/**
* @tests java.text.DecimalFormatSymbols#getInfinity()
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getInfinity",
args = {}
)
public void test_getInfinity() {
dfs.setInfinity("&");
assertTrue("Returned incorrect Infinity symbol",
dfs.getInfinity() == "&");
}
/**
* @tests java.text.DecimalFormatSymbols#getInternationalCurrencySymbol()
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getInternationalCurrencySymbol",
args = {}
)
public void test_getInternationalCurrencySymbol() {
assertEquals("Returned incorrect InternationalCurrencySymbol", "USD",
dfsUS.getInternationalCurrencySymbol());
}
/**
* @tests java.text.DecimalFormatSymbols#getMinusSign()
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getMinusSign",
args = {}
)
public void test_getMinusSign() {
dfs.setMinusSign('&');
assertEquals("Returned incorrect MinusSign symbol", '&', dfs
.getMinusSign());
}
/**
* @tests java.text.DecimalFormatSymbols#getMonetaryDecimalSeparator() Test
* of method
* java.text.DecimalFormatSymbols#getMonetaryDecimalSeparator().
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getMonetaryDecimalSeparator",
args = {}
)
public void test_getMonetaryDecimalSeparator() {
try {
dfs.setMonetaryDecimalSeparator(',');
assertEquals("Returned incorrect MonetaryDecimalSeparator symbol",
',', dfs.getMonetaryDecimalSeparator());
} catch (Exception e) {
fail("Unexpected exception " + e.toString());
}
}
/**
* @tests java.text.DecimalFormatSymbols#getNaN()
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getNaN",
args = {}
)
public void test_getNaN() {
dfs.setNaN("NAN!!");
assertEquals("Returned incorrect nan symbol", "NAN!!", dfs.getNaN());
}
/**
* @tests java.text.DecimalFormatSymbols#getPatternSeparator()
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getPatternSeparator",
args = {}
)
public void test_getPatternSeparator() {
dfs.setPatternSeparator('X');
assertEquals("Returned incorrect PatternSeparator symbol", 'X', dfs
.getPatternSeparator());
}
/**
* @tests java.text.DecimalFormatSymbols#getPercent()
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getPercent",
args = {}
)
public void test_getPercent() {
dfs.setPercent('*');
assertEquals("Returned incorrect Percent symbol", '*', dfs.getPercent());
}
/**
* @tests java.text.DecimalFormatSymbols#getPerMill()
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getPerMill",
args = {}
)
public void test_getPerMill() {
dfs.setPerMill('#');
assertEquals("Returned incorrect PerMill symbol", '#', dfs.getPerMill());
}
/**
* @tests java.text.DecimalFormatSymbols#getZeroDigit()
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getZeroDigit",
args = {}
)
public void test_getZeroDigit() {
dfs.setZeroDigit('*');
assertEquals("Returned incorrect ZeroDigit symbol", '*', dfs
.getZeroDigit());
}
/**
* @tests java.text.DecimalFormatSymbols#hashCode() Test of method
* java.text.DecimalFormatSymbols#hashCode().
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "hashCode",
args = {}
)
@AndroidOnly("Succeeds against Android.")
public void test_hashCode() {
try {
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());
} catch (Exception e) {
fail("Unexpected exception " + e.toString());
}
}
/**
* @tests java.text.DecimalFormatSymbols#setCurrency(java.util.Currency)
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "setCurrency",
args = {java.util.Currency.class}
)
public void test_setCurrencyLjava_util_Currency() {
Locale locale = Locale.CANADA;
DecimalFormatSymbols dfs = ((DecimalFormat) NumberFormat
.getCurrencyInstance(locale)).getDecimalFormatSymbols();
try {
dfs.setCurrency(null);
fail("Expected NullPointerException");
} catch (NullPointerException e) {
}
Currency currency = Currency.getInstance("JPY");
dfs.setCurrency(currency);
assertTrue("Returned incorrect currency", currency == dfs.getCurrency());
assertEquals("Returned incorrect currency symbol", currency.getSymbol(
locale), dfs.getCurrencySymbol());
assertTrue("Returned incorrect international currency symbol", currency
.getCurrencyCode().equals(dfs.getInternationalCurrencySymbol()));
}
/**
* @tests java.text.DecimalFormatSymbols#setCurrencySymbol(java.lang.String)
* Test of method
* java.text.DecimalFormatSymbols#setCurrencySymbol(java.lang.String).
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "setCurrencySymbol",
args = {java.lang.String.class}
)
public void test_setCurrencySymbolLjava_lang_String() {
try {
dfs.setCurrencySymbol("$");
assertEquals("Returned incorrect CurrencySymbol symbol", "$", dfs
.getCurrencySymbol());
} catch (Exception e) {
fail("Unexpected exception " + e.toString());
}
}
/**
* @tests java.text.DecimalFormatSymbols#setDecimalSeparator(char)
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "setDecimalSeparator",
args = {char.class}
)
public void test_setDecimalSeparatorC() {
dfs.setDecimalSeparator('*');
assertEquals("Returned incorrect DecimalSeparator symbol", '*', dfs
.getDecimalSeparator());
}
/**
* @tests java.text.DecimalFormatSymbols#setDigit(char)
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "setDigit",
args = {char.class}
)
public void test_setDigitC() {
dfs.setDigit('*');
assertEquals("Returned incorrect Digit symbol", '*', dfs.getDigit());
}
/**
* @tests java.text.DecimalFormatSymbols#setGroupingSeparator(char)
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "setGroupingSeparator",
args = {char.class}
)
public void test_setGroupingSeparatorC() {
dfs.setGroupingSeparator('*');
assertEquals("Returned incorrect GroupingSeparator symbol", '*', dfs
.getGroupingSeparator());
}
/**
* @tests java.text.DecimalFormatSymbols#setInfinity(java.lang.String)
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "setInfinity",
args = {java.lang.String.class}
)
public void test_setInfinityLjava_lang_String() {
dfs.setInfinity("&");
assertTrue("Returned incorrect Infinity symbol",
dfs.getInfinity() == "&");
}
/**
* @tests java.text.DecimalFormatSymbols#setInternationalCurrencySymbol(java.lang.String)
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "setInternationalCurrencySymbol",
args = {java.lang.String.class}
)
@KnownFailure("getCurrency() doesn't return null for bogus currency code.")
public void test_setInternationalCurrencySymbolLjava_lang_String() {
Locale locale = Locale.CANADA;
DecimalFormatSymbols dfs = ((DecimalFormat) NumberFormat
.getCurrencyInstance(locale)).getDecimalFormatSymbols();
Currency currency = Currency.getInstance("JPY");
dfs.setInternationalCurrencySymbol(currency.getCurrencyCode());
assertTrue("Test1: Returned incorrect currency", currency == dfs
.getCurrency());
assertEquals("Test1: Returned incorrect currency symbol", currency
.getSymbol(locale), dfs.getCurrencySymbol());
assertTrue("Test1: Returned incorrect international currency symbol",
currency.getCurrencyCode().equals(
dfs.getInternationalCurrencySymbol()));
String symbol = dfs.getCurrencySymbol();
dfs.setInternationalCurrencySymbol("bogus");
assertNull("Test2: Returned incorrect currency", dfs.getCurrency());
assertTrue("Test2: Returned incorrect currency symbol", dfs
.getCurrencySymbol().equals(symbol));
assertEquals("Test2: Returned incorrect international currency symbol",
"bogus", dfs.getInternationalCurrencySymbol());
}
/**
* @tests java.text.DecimalFormatSymbols#setMinusSign(char)
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "setMinusSign",
args = {char.class}
)
public void test_setMinusSignC() {
dfs.setMinusSign('&');
assertEquals("Returned incorrect MinusSign symbol", '&', dfs
.getMinusSign());
}
/**
* @tests java.text.DecimalFormatSymbols#setMonetaryDecimalSeparator(char)
* Test of method
* java.text.DecimalFormatSymbols#setMonetaryDecimalSeparator(char).
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "setMonetaryDecimalSeparator",
args = {char.class}
)
public void test_setMonetaryDecimalSeparatorC() {
try {
dfs.setMonetaryDecimalSeparator('#');
assertEquals("Returned incorrect MonetaryDecimalSeparator symbol",
'#', dfs.getMonetaryDecimalSeparator());
} catch (Exception e) {
fail("Unexpected exception " + e.toString());
}
}
/**
* @tests java.text.DecimalFormatSymbols#setNaN(java.lang.String)
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "setNaN",
args = {java.lang.String.class}
)
public void test_setNaNLjava_lang_String() {
dfs.setNaN("NAN!!");
assertEquals("Returned incorrect nan symbol", "NAN!!", dfs.getNaN());
}
/**
* @tests java.text.DecimalFormatSymbols#setPatternSeparator(char)
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "setPatternSeparator",
args = {char.class}
)
public void test_setPatternSeparatorC() {
dfs.setPatternSeparator('X');
assertEquals("Returned incorrect PatternSeparator symbol", 'X', dfs
.getPatternSeparator());
}
/**
* @tests java.text.DecimalFormatSymbols#setPercent(char)
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "setPercent",
args = {char.class}
)
public void test_setPercentC() {
dfs.setPercent('*');
assertEquals("Returned incorrect Percent symbol", '*', dfs.getPercent());
}
/**
* @tests java.text.DecimalFormatSymbols#setPerMill(char)
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "setPerMill",
args = {char.class}
)
public void test_setPerMillC() {
dfs.setPerMill('#');
assertEquals("Returned incorrect PerMill symbol", '#', dfs.getPerMill());
}
/**
* @tests java.text.DecimalFormatSymbols#setZeroDigit(char)
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "setZeroDigit",
args = {char.class}
)
public void test_setZeroDigitC() {
dfs.setZeroDigit('*');
assertEquals("Set incorrect ZeroDigit symbol", '*', dfs.getZeroDigit());
}
/**
* Sets up the fixture, for example, open a network connection. This method
* is called before a test is executed.
*/
protected void setUp() {
dfs = new DecimalFormatSymbols();
dfsUS = new DecimalFormatSymbols(new Locale("en", "us"));
}
/**
* Tears down the fixture, for example, close a network connection. This
* method is called after a test is executed.
*/
protected void tearDown() {
}
// Test serialization mechanism of DecimalFormatSymbols
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Checks serialization mechanism.",
method = "!SerializationSelf",
args = {}
)
public void test_serialization() throws Exception {
DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.FRANCE);
Currency currency = symbols.getCurrency();
assertNotNull(currency);
// serialize
ByteArrayOutputStream byteOStream = new ByteArrayOutputStream();
ObjectOutputStream objectOStream = new ObjectOutputStream(byteOStream);
objectOStream.writeObject(symbols);
// and deserialize
ObjectInputStream objectIStream = new ObjectInputStream(
new ByteArrayInputStream(byteOStream.toByteArray()));
DecimalFormatSymbols symbolsD = (DecimalFormatSymbols) objectIStream
.readObject();
// The associated currency will not persist
currency = symbolsD.getCurrency();
assertNotNull(currency);
}
// Use RI to write DecimalFormatSymbols out, use Harmony to read
// DecimalFormatSymbols in. The read symbol will be equal with those
// instantiated inside Harmony.
// This assertion will not come into existence the other way around. This is
// probably caused by different serialization mechanism used by RI and
// Harmony.
@TestTargetNew(
level = TestLevel.PARTIAL,
notes = "Make sure all fields have non default values.",
method = "!SerializationGolden",
args = {}
)
@KnownFailure("Deserialized object is not equal to the original object." +
"Test passes on RI.")
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);
}
static void assertDecimalFormatSymbolsRIFrance(DecimalFormatSymbols dfs) {
// Values based on Java 1.5 RI DecimalFormatSymbols for Locale.FRANCE
/*
* currency = [EUR]
* currencySymbol = [€][U+20ac]
* decimalSeparator = [,][U+002c]
* digit = [#][U+0023]
* groupingSeparator = [ ][U+00a0]
* infinity = [∞][U+221e]
* internationalCurrencySymbol = [EUR]
* minusSign = [-][U+002d]
* monetaryDecimalSeparator = [,][U+002c]
* naN = [�][U+fffd]
* patternSeparator = [;][U+003b]
* perMill = [‰][U+2030]
* 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
assertEquals("\uFFFD", dfs.getNaN());
assertEquals('\u003b', dfs.getPatternSeparator());
assertEquals('\u2030', dfs.getPerMill());
assertEquals('%', dfs.getPercent());
assertEquals('0', dfs.getZeroDigit());
}
}