1 /*
  2  * Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved.
  3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  4  *
  5  * This code is free software; you can redistribute it and/or modify it
  6  * under the terms of the GNU General Public License version 2 only, as
  7  * published by the Free Software Foundation.
  8  *
  9  * This code is distributed in the hope that it will be useful, but WITHOUT
 10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 12  * version 2 for more details (a copy is included in the LICENSE file that
 13  * accompanied this code).
 14  *
 15  * You should have received a copy of the GNU General Public License version
 16  * 2 along with this work; if not, write to the Free Software Foundation,
 17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 18  *
 19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 20  * or visit www.oracle.com if you need additional information or have any
 21  * questions.
 22  */
 23 
 24 /*
 25  * @test
 26  * @library /java/text/testlib
 27  * @summary test International Decimal Format API
 28  */
 29 /*
 30 (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
 31 (C) Copyright IBM Corp. 1996, 1997 - All Rights Reserved
 32 
 33   The original version of this source code and documentation is copyrighted and
 34 owned by Taligent, Inc., a wholly-owned subsidiary of IBM. These materials are
 35 provided under terms of a License Agreement between Taligent and Sun. This
 36 technology is protected by multiple US and International patents. This notice and
 37 attribution to Taligent may not be removed.
 38   Taligent is a registered trademark of Taligent, Inc.
 39 */
 40 
 41 import java.text.*;
 42 import java.util.*;
 43 
 44 public class IntlTestDecimalFormatAPI extends IntlTest
 45 {
 46     public static void main(String[] args)  throws Exception {
 47         new IntlTestDecimalFormatAPI().run(args);
 48     }
 49 
 50     // This test checks various generic API methods in DecimalFormat to achieve 100% API coverage.
 51     public void TestAPI()
 52     {
 53         Locale reservedLocale = Locale.getDefault();
 54         try {
 55             logln("DecimalFormat API test---"); logln("");
 56             Locale.setDefault(Locale.ENGLISH);
 57 
 58             // ======= Test constructors
 59 
 60             logln("Testing DecimalFormat constructors");
 61 
 62             DecimalFormat def = new DecimalFormat();
 63 
 64             final String pattern = new String("#,##0.# FF");
 65             DecimalFormat pat = null;
 66             try {
 67                 pat = new DecimalFormat(pattern);
 68             }
 69             catch (IllegalArgumentException e) {
 70                 errln("ERROR: Could not create DecimalFormat (pattern)");
 71             }
 72 
 73             DecimalFormatSymbols symbols =
 74                     new DecimalFormatSymbols(Locale.FRENCH);
 75 
 76             DecimalFormat cust1 = new DecimalFormat(pattern, symbols);
 77 
 78             // ======= Test clone(), assignment, and equality
 79 
 80             logln("Testing clone() and equality operators");
 81 
 82             Format clone = (Format) def.clone();
 83             if( ! def.equals(clone)) {
 84                 errln("ERROR: Clone() failed");
 85             }
 86 
 87             // ======= Test various format() methods
 88 
 89             logln("Testing various format() methods");
 90 
 91 //          final double d = -10456.0037; // this appears as
 92                                           // -10456.003700000001 on NT
 93 //          final double d = -1.04560037e-4; // this appears as
 94                                              // -1.0456003700000002E-4 on NT
 95             final double d = -10456.00370000000000; // this works!
 96             final long l = 100000000;
 97             logln("" + d + " is the double value");
 98 
 99             StringBuffer res1 = new StringBuffer();
100             StringBuffer res2 = new StringBuffer();
101             StringBuffer res3 = new StringBuffer();
102             StringBuffer res4 = new StringBuffer();
103             FieldPosition pos1 = new FieldPosition(0);
104             FieldPosition pos2 = new FieldPosition(0);
105             FieldPosition pos3 = new FieldPosition(0);
106             FieldPosition pos4 = new FieldPosition(0);
107 
108             res1 = def.format(d, res1, pos1);
109             logln("" + d + " formatted to " + res1);
110 
111             res2 = pat.format(l, res2, pos2);
112             logln("" + l + " formatted to " + res2);
113 
114             res3 = cust1.format(d, res3, pos3);
115             logln("" + d + " formatted to " + res3);
116 
117             res4 = cust1.format(l, res4, pos4);
118             logln("" + l + " formatted to " + res4);
119 
120             // ======= Test parse()
121 
122             logln("Testing parse()");
123 
124             String text = new String("-10,456.0037");
125             ParsePosition pos = new ParsePosition(0);
126             String patt = new String("#,##0.#");
127             pat.applyPattern(patt);
128             double d2 = pat.parse(text, pos).doubleValue();
129             if(d2 != d) {
130                 errln("ERROR: Roundtrip failed (via parse(" +
131                     d2 + " != " + d + ")) for " + text);
132             }
133             logln(text + " parsed into " + (long) d2);
134 
135             // ======= Test getters and setters
136 
137             logln("Testing getters and setters");
138 
139             final DecimalFormatSymbols syms = pat.getDecimalFormatSymbols();
140             def.setDecimalFormatSymbols(syms);
141             if(!pat.getDecimalFormatSymbols().equals(
142                     def.getDecimalFormatSymbols())) {
143                 errln("ERROR: set DecimalFormatSymbols() failed");
144             }
145 
146             String posPrefix;
147             pat.setPositivePrefix("+");
148             posPrefix = pat.getPositivePrefix();
149             logln("Positive prefix (should be +): " + posPrefix);
150             if(posPrefix != "+") {
151                 errln("ERROR: setPositivePrefix() failed");
152             }
153 
154             String negPrefix;
155             pat.setNegativePrefix("-");
156             negPrefix = pat.getNegativePrefix();
157             logln("Negative prefix (should be -): " + negPrefix);
158             if(negPrefix != "-") {
159                 errln("ERROR: setNegativePrefix() failed");
160             }
161 
162             String posSuffix;
163             pat.setPositiveSuffix("_");
164             posSuffix = pat.getPositiveSuffix();
165             logln("Positive suffix (should be _): " + posSuffix);
166             if(posSuffix != "_") {
167                 errln("ERROR: setPositiveSuffix() failed");
168             }
169 
170             String negSuffix;
171             pat.setNegativeSuffix("~");
172             negSuffix = pat.getNegativeSuffix();
173             logln("Negative suffix (should be ~): " + negSuffix);
174             if(negSuffix != "~") {
175                 errln("ERROR: setNegativeSuffix() failed");
176             }
177 
178             long multiplier = 0;
179             pat.setMultiplier(8);
180             multiplier = pat.getMultiplier();
181             logln("Multiplier (should be 8): " + multiplier);
182             if(multiplier != 8) {
183                 errln("ERROR: setMultiplier() failed");
184             }
185 
186             int groupingSize = 0;
187             pat.setGroupingSize(2);
188             groupingSize = pat.getGroupingSize();
189             logln("Grouping size (should be 2): " + (long) groupingSize);
190             if(groupingSize != 2) {
191                 errln("ERROR: setGroupingSize() failed");
192             }
193 
194             pat.setDecimalSeparatorAlwaysShown(true);
195             boolean tf = pat.isDecimalSeparatorAlwaysShown();
196             logln("DecimalSeparatorIsAlwaysShown (should be true) is " +
197                                                 (tf ? "true" : "false"));
198             if(tf != true) {
199                 errln("ERROR: setDecimalSeparatorAlwaysShown() failed");
200             }
201 
202             String funkyPat;
203             funkyPat = pat.toPattern();
204             logln("Pattern is " + funkyPat);
205 
206             String locPat;
207             locPat = pat.toLocalizedPattern();
208             logln("Localized pattern is " + locPat);
209 
210             // ======= Test applyPattern()
211 
212             logln("Testing applyPattern()");
213 
214             String p1 = new String("#,##0.0#;(#,##0.0#)");
215             logln("Applying pattern " + p1);
216             pat.applyPattern(p1);
217             String s2;
218             s2 = pat.toPattern();
219             logln("Extracted pattern is " + s2);
220             if( ! s2.equals(p1) ) {
221                 errln("ERROR: toPattern() result did not match " +
222                         "pattern applied");
223             }
224 
225             String p2 = new String("#,##0.0# FF;(#,##0.0# FF)");
226             logln("Applying pattern " + p2);
227             pat.applyLocalizedPattern(p2);
228             String s3;
229             s3 = pat.toLocalizedPattern();
230             logln("Extracted pattern is " + s3);
231             if( ! s3.equals(p2) ) {
232                 errln("ERROR: toLocalizedPattern() result did not match " +
233                         "pattern applied");
234             }
235 
236             // ======= Test getStaticClassID()
237 
238 //          logln("Testing instanceof()");
239 
240 //          try {
241 //             NumberFormat test = new DecimalFormat();
242 
243 //              if (! (test instanceof DecimalFormat)) {
244 //                  errln("ERROR: instanceof failed");
245 //              }
246 //          }
247 //          catch (Exception e) {
248 //              errln("ERROR: Couldn't create a DecimalFormat");
249 //          }
250         } finally {
251             // restore the reserved locale
252             Locale.setDefault(reservedLocale);
253         }
254     }
255 }