/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.harmony.tests.java.text; import java.text.DecimalFormat; import java.text.NumberFormat; import java.util.Locale; import java.util.Vector; public class Support_DecimalFormat extends Support_Format { public Support_DecimalFormat(String p1) { super(p1); } @Override public void runTest() { t_formatToCharacterIterator(); t_format_with_FieldPosition(); } public static void main(String[] args) { new Support_DecimalFormat("").runTest(); } public void t_format_with_FieldPosition() { DecimalFormat format = (DecimalFormat) NumberFormat.getCurrencyInstance(Locale.US); Number number = new Double(10000000.76); String text = "$10,000,000.76"; t_FormatWithField(0, format, number, text, NumberFormat.Field.CURRENCY, 0, 1); t_FormatWithField(1, format, number, text, NumberFormat.Field.INTEGER, 1, 11); t_FormatWithField(2, format, number, text, NumberFormat.Field.GROUPING_SEPARATOR, 3, 4); t_FormatWithField(3, format, number, text, NumberFormat.Field.DECIMAL_SEPARATOR, 11, 12); t_FormatWithField(4, format, number, text, NumberFormat.Field.FRACTION, 12, 14); // test fields that are not included in the formatted text t_FormatWithField(5, format, number, text, NumberFormat.Field.SIGN, 0, 0); t_FormatWithField(6, format, number, text, NumberFormat.Field.EXPONENT, 0, 0); t_FormatWithField(7, format, number, text, NumberFormat.Field.EXPONENT_SIGN, 0, 0); t_FormatWithField(8, format, number, text, NumberFormat.Field.EXPONENT_SYMBOL, 0, 0); t_FormatWithField(9, format, number, text, NumberFormat.Field.PERCENT, 0, 0); t_FormatWithField(10, format, number, text, NumberFormat.Field.PERMILLE, 0, 0); // test Exponential format = new DecimalFormat("000000000.0#E0"); text = "100000007.6E-1"; t_FormatWithField(11, format, number, text, NumberFormat.Field.INTEGER, 0, 9); t_FormatWithField(12, format, number, text, NumberFormat.Field.DECIMAL_SEPARATOR, 9, 10); t_FormatWithField(13, format, number, text, NumberFormat.Field.FRACTION, 10, 11); t_FormatWithField(14, format, number, text, NumberFormat.Field.EXPONENT_SYMBOL, 11, 12); t_FormatWithField(15, format, number, text, NumberFormat.Field.EXPONENT_SIGN, 12, 13); t_FormatWithField(16, format, number, text, NumberFormat.Field.EXPONENT, 13, 14); // test fields that are not included in the formatted text t_FormatWithField(17, format, number, text, NumberFormat.Field.GROUPING_SEPARATOR, 0, 0); t_FormatWithField(18, format, number, text, NumberFormat.Field.SIGN, 0, 0); t_FormatWithField(19, format, number, text, NumberFormat.Field.CURRENCY, 0, 0); t_FormatWithField(20, format, number, text, NumberFormat.Field.PERCENT, 0, 0); t_FormatWithField(21, format, number, text, NumberFormat.Field.PERMILLE, 0, 0); // test currency instance with TR Locale number = new Double(350.76); format = (DecimalFormat) NumberFormat.getCurrencyInstance(new Locale("tr", "TR")); // Turkey either uses "123,45 TL" or "₺123,45"; google3 uses the former because most // platforms' fonts don't include U+20BA TURKISH LIRA SIGN. http://b/16727554. text = "₺350,76"; t_FormatWithField(23, format, number, text, NumberFormat.Field.CURRENCY, 0, 1); t_FormatWithField(22, format, number, text, NumberFormat.Field.INTEGER, 1, 4); t_FormatWithField(22, format, number, text, NumberFormat.Field.DECIMAL_SEPARATOR, 4, 5); t_FormatWithField(22, format, number, text, NumberFormat.Field.FRACTION, 5, 7); // test fields that are not included in the formatted text t_FormatWithField(25, format, number, text, NumberFormat.Field.GROUPING_SEPARATOR, 0, 0); t_FormatWithField(27, format, number, text, NumberFormat.Field.SIGN, 0, 0); t_FormatWithField(28, format, number, text, NumberFormat.Field.EXPONENT, 0, 0); t_FormatWithField(29, format, number, text, NumberFormat.Field.EXPONENT_SIGN, 0, 0); t_FormatWithField(30, format, number, text, NumberFormat.Field.EXPONENT_SYMBOL, 0, 0); t_FormatWithField(31, format, number, text, NumberFormat.Field.PERCENT, 0, 0); t_FormatWithField(32, format, number, text, NumberFormat.Field.PERMILLE, 0, 0); } public void t_formatToCharacterIterator() { Number number = new Double(350.76); Number negativeNumber = new Double(-350.76); Locale us = Locale.US; Locale tr = new Locale("tr", "TR"); // test number instance t_Format(1, number, NumberFormat.getNumberInstance(us), getNumberVectorUS()); // test integer instance // testFormat(2, number, NumberFormat.getIntegerInstance(us), // getPercentVectorUS()); // test percent instance t_Format(3, number, NumberFormat.getPercentInstance(us), getPercentVectorUS()); // test permille pattern DecimalFormat format = new DecimalFormat("###0.##\u2030"); t_Format(4, number, format, getPermilleVector()); // test exponential pattern with positive exponent format = new DecimalFormat("00.0#E0"); t_Format(5, number, format, getPositiveExponentVector()); // test exponential pattern with negative exponent format = new DecimalFormat("0000.0#E0"); t_Format(6, number, format, getNegativeExponentVector()); // test currency instance with US Locale t_Format(7, number, NumberFormat.getCurrencyInstance(us), getPositiveCurrencyVectorUS()); // test negative currency instance with US Locale t_Format(8, negativeNumber, NumberFormat.getCurrencyInstance(us), getNegativeCurrencyVectorUS()); // test currency instance with TR Locale t_Format(9, number, NumberFormat.getCurrencyInstance(tr), getPositiveCurrencyVectorTR()); // test negative currency instance with TR Locale t_Format(10, negativeNumber, NumberFormat.getCurrencyInstance(tr), getNegativeCurrencyVectorTR()); // test multiple grouping separators number = new Long(100300400); t_Format(11, number, NumberFormat.getNumberInstance(us), getNumberVector2US()); // test 0 number = new Long(0); t_Format(12, number, NumberFormat.getNumberInstance(us), getZeroVector()); } private static Vector<FieldContainer> getNumberVectorUS() { Vector<FieldContainer> v = new Vector<FieldContainer>(); v.add(new FieldContainer(0, 3, NumberFormat.Field.INTEGER)); v.add(new FieldContainer(3, 4, NumberFormat.Field.DECIMAL_SEPARATOR)); v.add(new FieldContainer(4, 6, NumberFormat.Field.FRACTION)); return v; } private static Vector<FieldContainer> getPositiveCurrencyVectorTR() { Vector<FieldContainer> v = new Vector<FieldContainer>(); v.add(new FieldContainer(0, 1, NumberFormat.Field.CURRENCY)); v.add(new FieldContainer(1, 4, NumberFormat.Field.INTEGER)); v.add(new FieldContainer(4, 5, NumberFormat.Field.DECIMAL_SEPARATOR)); v.add(new FieldContainer(5, 7, NumberFormat.Field.FRACTION)); return v; } private static Vector<FieldContainer> getNegativeCurrencyVectorTR() { Vector<FieldContainer> v = new Vector<FieldContainer>(); v.add(new FieldContainer(0, 1, NumberFormat.Field.SIGN)); v.add(new FieldContainer(1, 2, NumberFormat.Field.CURRENCY)); v.add(new FieldContainer(2, 5, NumberFormat.Field.INTEGER)); v.add(new FieldContainer(5, 6, NumberFormat.Field.DECIMAL_SEPARATOR)); v.add(new FieldContainer(6, 8, NumberFormat.Field.FRACTION)); return v; } private static Vector<FieldContainer> getPositiveCurrencyVectorUS() { Vector<FieldContainer> v = new Vector<FieldContainer>(); v.add(new FieldContainer(0, 1, NumberFormat.Field.CURRENCY)); v.add(new FieldContainer(1, 4, NumberFormat.Field.INTEGER)); v.add(new FieldContainer(4, 5, NumberFormat.Field.DECIMAL_SEPARATOR)); v.add(new FieldContainer(5, 7, NumberFormat.Field.FRACTION)); return v; } private static Vector<FieldContainer> getNegativeCurrencyVectorUS() { Vector<FieldContainer> v = new Vector<FieldContainer>(); v.add(new FieldContainer(0, 1, NumberFormat.Field.SIGN)); v.add(new FieldContainer(1, 2, NumberFormat.Field.CURRENCY)); v.add(new FieldContainer(2, 5, NumberFormat.Field.INTEGER)); v.add(new FieldContainer(5, 6, NumberFormat.Field.DECIMAL_SEPARATOR)); v.add(new FieldContainer(6, 8, NumberFormat.Field.FRACTION)); return v; } private static Vector<FieldContainer> getPercentVectorUS() { Vector<FieldContainer> v = new Vector<FieldContainer>(); v.add(new FieldContainer(0, 2, NumberFormat.Field.INTEGER)); v.add(new FieldContainer(2, 3, NumberFormat.Field.INTEGER)); v.add(new FieldContainer(2, 3, NumberFormat.Field.GROUPING_SEPARATOR)); v.add(new FieldContainer(3, 6, NumberFormat.Field.INTEGER)); v.add(new FieldContainer(6, 7, NumberFormat.Field.PERCENT)); return v; } private static Vector<FieldContainer> getPermilleVector() { Vector<FieldContainer> v = new Vector<FieldContainer>(); v.add(new FieldContainer(0, 6, NumberFormat.Field.INTEGER)); v.add(new FieldContainer(6, 7, NumberFormat.Field.PERMILLE)); return v; } private static Vector<FieldContainer> getNegativeExponentVector() { Vector<FieldContainer> v = new Vector<FieldContainer>(); v.add(new FieldContainer(0, 4, NumberFormat.Field.INTEGER)); v.add(new FieldContainer(4, 5, NumberFormat.Field.DECIMAL_SEPARATOR)); v.add(new FieldContainer(5, 6, NumberFormat.Field.FRACTION)); v.add(new FieldContainer(6, 7, NumberFormat.Field.EXPONENT_SYMBOL)); v.add(new FieldContainer(7, 8, NumberFormat.Field.EXPONENT_SIGN)); v.add(new FieldContainer(8, 9, NumberFormat.Field.EXPONENT)); return v; } private static Vector<FieldContainer> getPositiveExponentVector() { Vector<FieldContainer> v = new Vector<FieldContainer>(); v.add(new FieldContainer(0, 2, NumberFormat.Field.INTEGER)); v.add(new FieldContainer(2, 3, NumberFormat.Field.DECIMAL_SEPARATOR)); v.add(new FieldContainer(3, 5, NumberFormat.Field.FRACTION)); v.add(new FieldContainer(5, 6, NumberFormat.Field.EXPONENT_SYMBOL)); v.add(new FieldContainer(6, 7, NumberFormat.Field.EXPONENT)); return v; } private static Vector<FieldContainer> getNumberVector2US() { Vector<FieldContainer> v = new Vector<FieldContainer>(); v.add(new FieldContainer(0, 3, NumberFormat.Field.INTEGER)); v.add(new FieldContainer(3, 4, NumberFormat.Field.GROUPING_SEPARATOR)); v.add(new FieldContainer(3, 4, NumberFormat.Field.INTEGER)); v.add(new FieldContainer(4, 7, NumberFormat.Field.INTEGER)); v.add(new FieldContainer(7, 8, NumberFormat.Field.GROUPING_SEPARATOR)); v.add(new FieldContainer(7, 8, NumberFormat.Field.INTEGER)); v.add(new FieldContainer(8, 11, NumberFormat.Field.INTEGER)); return v; } private static Vector<FieldContainer> getZeroVector() { Vector<FieldContainer> v = new Vector<FieldContainer>(); v.add(new FieldContainer(0, 1, NumberFormat.Field.INTEGER)); return v; } }