/*
* Copyright (C) 2010 The Android Open Source Project
*
* Licensed 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.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.text.DecimalFormatSymbols;
import java.util.Currency;
import java.util.Locale;
public class DecimalFormatSymbolsTest extends junit.framework.TestCase {
// http://code.google.com/p/android/issues/detail?id=14495
public void testSerialization() throws Exception {
DecimalFormatSymbols originalDfs = DecimalFormatSymbols.getInstance(Locale.GERMANY);
// Serialize...
ByteArrayOutputStream out = new ByteArrayOutputStream();
new ObjectOutputStream(out).writeObject(originalDfs);
byte[] bytes = out.toByteArray();
// Deserialize...
ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(bytes));
DecimalFormatSymbols deserializedDfs = (DecimalFormatSymbols) in.readObject();
assertEquals(-1, in.read());
// The two objects should claim to be equal.
assertEquals(originalDfs, deserializedDfs);
}
// // https://code.google.com/p/android/issues/detail?id=79925
// public void testSetSameCurrency() throws Exception {
// DecimalFormatSymbols dfs = new DecimalFormatSymbols(Locale.US);
// dfs.setCurrency(Currency.getInstance("USD"));
// assertEquals("$", dfs.getCurrencySymbol());
// dfs.setCurrencySymbol("poop");
// assertEquals("poop", dfs.getCurrencySymbol());
// dfs.setCurrency(Currency.getInstance("USD"));
// assertEquals("$", dfs.getCurrencySymbol());
// }
public void testSetNulInternationalCurrencySymbol() throws Exception {
Currency usd = Currency.getInstance("USD");
DecimalFormatSymbols dfs = new DecimalFormatSymbols(Locale.US);
dfs.setCurrency(usd);
assertEquals(usd, dfs.getCurrency());
assertEquals("$", dfs.getCurrencySymbol());
assertEquals("USD", dfs.getInternationalCurrencySymbol());
// Setting the international currency symbol to null sets the currency to null too,
// but not the currency symbol.
dfs.setInternationalCurrencySymbol(null);
assertEquals(null, dfs.getCurrency());
assertEquals("$", dfs.getCurrencySymbol());
assertEquals(null, dfs.getInternationalCurrencySymbol());
}
// https://code.google.com/p/android/issues/detail?id=170718
public void testSerializationOfMultiCharNegativeAndPercentage() throws Exception {
DecimalFormatSymbols dfs = new DecimalFormatSymbols(Locale.forLanguageTag("ar-AR"));
// TODO(user): Investigate.
// assertTrue(dfs.getMinusSignString().length() > 1);
// assertTrue(dfs.getPercentString().length() > 1);
// Serialize...
ByteArrayOutputStream out = new ByteArrayOutputStream();
new ObjectOutputStream(out).writeObject(dfs);
byte[] bytes = out.toByteArray();
// Deserialize...
ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(bytes));
DecimalFormatSymbols deserializedDfs = (DecimalFormatSymbols) in.readObject();
assertEquals(-1, in.read());
assertEquals(dfs.getMinusSign(), deserializedDfs.getMinusSign());
assertEquals(dfs.getPercent(), deserializedDfs.getPercent());
}
// // http://b/18785260
// public void testMultiCharMinusSignAndPercentage() {
// DecimalFormatSymbols dfs = new DecimalFormatSymbols(Locale.forLanguageTag("ar-AR"));
//
// assertEquals('٪', dfs.getPercent());
// assertEquals('-', dfs.getMinusSign());
// }
// /**
// * This class exists to allow the test to access the protected methods
// * getIcuDecimalFormatSymbols and fromIcuInstance on the real DecimalFormatSymbols class.
// */
// private static class DFSForTests extends DecimalFormatSymbols {
// public DFSForTests(Locale locale) {
// super(locale);
// }
//
// @Override
// public android.icu.text.DecimalFormatSymbols getIcuDecimalFormatSymbols() {
// return super.getIcuDecimalFormatSymbols();
// }
//
// protected static DecimalFormatSymbols fromIcuInstance(
// android.icu.text.DecimalFormatSymbols dfs) {
// return DecimalFormatSymbols.fromIcuInstance(dfs);
// }
// }
//
// public void compareDfs(DecimalFormatSymbols dfs,
// android.icu.text.DecimalFormatSymbols icuSymb) {
// // Check currency code is the same because ICU returns its own currency class.
// assertEquals(dfs.getCurrency().getCurrencyCode(), icuSymb.getCurrency().getCurrencyCode());
// assertEquals(dfs.getCurrencySymbol(), icuSymb.getCurrencySymbol());
// assertEquals(dfs.getDecimalSeparator(), icuSymb.getDecimalSeparator());
// assertEquals(dfs.getDigit(), icuSymb.getDigit());
// assertEquals(dfs.getExponentSeparator(), icuSymb.getExponentSeparator());
// assertEquals(dfs.getGroupingSeparator(), icuSymb.getGroupingSeparator());
// assertEquals(dfs.getInfinity(), icuSymb.getInfinity());
// assertEquals(dfs.getInternationalCurrencySymbol(),
// icuSymb.getInternationalCurrencySymbol());
// assertEquals(dfs.getMinusSign(), icuSymb.getMinusSign());
// assertEquals(dfs.getMonetaryDecimalSeparator(), icuSymb.getMonetaryDecimalSeparator());
// assertEquals(dfs.getPatternSeparator(), icuSymb.getPatternSeparator());
// assertEquals(dfs.getPercent(), icuSymb.getPercent());
// assertEquals(dfs.getPerMill(), icuSymb.getPerMill());
// assertEquals(dfs.getZeroDigit(), icuSymb.getZeroDigit());
// }
//
// // Test the methods to convert to and from the ICU DecimalFormatSymbols
// public void testToIcuDecimalFormatSymbols() {
// DFSForTests dfs = new DFSForTests(Locale.US);
// android.icu.text.DecimalFormatSymbols icuSymb = dfs.getIcuDecimalFormatSymbols();
// compareDfs(dfs, icuSymb);
// }
//
// public void testFromIcuDecimalFormatSymbols() {
// android.icu.text.DecimalFormatSymbols icuSymb = new android.icu.text.DecimalFormatSymbols();
// DecimalFormatSymbols dfs = DFSForTests.fromIcuInstance(icuSymb);
// compareDfs(dfs, icuSymb);
// }
}