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 }