< prev index next >

test/java/util/Currency/PropertiesTest.java

Print this page


   1 /*
   2  * Copyright (c) 2007, 2015, 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 import java.io.*;
  25 import java.text.*;
  26 import java.util.*;
  27 import java.util.regex.*;

  28 
  29 public class PropertiesTest {
  30     public static void main(String[] args) throws Exception {
  31         if (args.length == 2 && args[0].equals("-d")) {
  32             dump(args[1]);
  33         } else if (args.length == 4 && args[0].equals("-c")) {
  34             compare(args[1], args[2], args[3]);




  35         } else {
  36             System.err.println("Usage:  java PropertiesTest -d <dumpfile>");
  37             System.err.println("        java PropertiesTest -c <beforedump> <afterdump> <propsfile>");

  38             System.exit(-1);
  39         }
  40     }
  41 
  42     private static void dump(String outfile) {
  43         File f = new File(outfile);
  44         PrintWriter pw;
  45         try {
  46             f.createNewFile();
  47             pw = new PrintWriter(f);
  48         } catch (Exception fnfe) {
  49             throw new RuntimeException(fnfe);
  50         }
  51         for (char c1 = 'A'; c1 <= 'Z'; c1++) {
  52             for (char c2 = 'A'; c2 <= 'Z'; c2++) {
  53                 String ctry = new StringBuilder().append(c1).append(c2).toString();
  54                 try {
  55                     Currency c = Currency.getInstance(new Locale("", ctry));
  56                     if (c != null) {
  57                         pw.printf(Locale.ROOT, "%s=%s,%03d,%1d\n",


 155                 (fraction == fractionAfter)) {
 156                 after.remove(key);
 157             } else {
 158                 throw new RuntimeException("Currency data replacement for "+key+" failed: actual: (alphacode: "+codeAfter+", numcode: "+numericAfter+", fraction: "+fractionAfter+"), expected:  (alphacode: "+code+", numcode: "+numeric+", fraction: "+fraction+")");
 159             }
 160             System.out.printf("Success!\n");
 161         }
 162         if (!after.isEmpty()) {
 163             StringBuilder sb = new StringBuilder()
 164                 .append("Currency data replacement failed.  Unnecessary modification was(were) made for the following currencies:\n");
 165             keys = after.stringPropertyNames();
 166             for (String key : keys) {
 167                 sb.append("    country: ")
 168                 .append(key)
 169                 .append(" currency: ")
 170                 .append(after.getProperty(key))
 171                 .append("\n");
 172             }
 173             throw new RuntimeException(sb.toString());
 174         }




































































 175     }
 176 
 177     private static boolean isPastCutoverDate(String s)
 178             throws IndexOutOfBoundsException, NullPointerException, ParseException {
 179         String dateString = s.substring(s.lastIndexOf(',')+1, s.length()).trim();
 180         SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.ROOT);
 181         format.setTimeZone(TimeZone.getTimeZone("GMT"));
 182         format.setLenient(false);
 183 
 184         long time = format.parse(dateString).getTime();
 185         if (System.currentTimeMillis() - time >= 0L) {
 186             return true;
 187         } else {
 188             return false;
 189         }
 190     }
 191 
 192     private static int countOccurrences(String value, char match) {
 193         int count = 0;
 194         for (char c : value.toCharArray()) {
   1 /*
   2  * Copyright (c) 2007, 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 import java.io.*;
  25 import java.text.*;
  26 import java.util.*;
  27 import java.util.regex.*;
  28 import java.util.stream.Collectors;
  29 
  30 public class PropertiesTest {
  31     public static void main(String[] args) throws Exception {
  32         if (args.length == 2 && args[0].equals("-d")) {
  33             dump(args[1]);
  34         } else if (args.length == 4 && args[0].equals("-c")) {
  35             compare(args[1], args[2], args[3]);
  36         } else if (args.length == 1 && args[0].equals("bug7102969")) {
  37             bug7102969();
  38         } else if (args.length == 1 && args[0].equals("bug8157138")) {
  39             bug8157138();
  40         } else {
  41             System.err.println("Usage:  java PropertiesTest -d <dumpfile>");
  42             System.err.println("        java PropertiesTest -c <beforedump> <afterdump> <propsfile>");
  43             System.err.println("        java PropertiesTest bug[JBS bug id number] e.g. bug7102969");
  44             System.exit(-1);
  45         }
  46     }
  47 
  48     private static void dump(String outfile) {
  49         File f = new File(outfile);
  50         PrintWriter pw;
  51         try {
  52             f.createNewFile();
  53             pw = new PrintWriter(f);
  54         } catch (Exception fnfe) {
  55             throw new RuntimeException(fnfe);
  56         }
  57         for (char c1 = 'A'; c1 <= 'Z'; c1++) {
  58             for (char c2 = 'A'; c2 <= 'Z'; c2++) {
  59                 String ctry = new StringBuilder().append(c1).append(c2).toString();
  60                 try {
  61                     Currency c = Currency.getInstance(new Locale("", ctry));
  62                     if (c != null) {
  63                         pw.printf(Locale.ROOT, "%s=%s,%03d,%1d\n",


 161                 (fraction == fractionAfter)) {
 162                 after.remove(key);
 163             } else {
 164                 throw new RuntimeException("Currency data replacement for "+key+" failed: actual: (alphacode: "+codeAfter+", numcode: "+numericAfter+", fraction: "+fractionAfter+"), expected:  (alphacode: "+code+", numcode: "+numeric+", fraction: "+fraction+")");
 165             }
 166             System.out.printf("Success!\n");
 167         }
 168         if (!after.isEmpty()) {
 169             StringBuilder sb = new StringBuilder()
 170                 .append("Currency data replacement failed.  Unnecessary modification was(were) made for the following currencies:\n");
 171             keys = after.stringPropertyNames();
 172             for (String key : keys) {
 173                 sb.append("    country: ")
 174                 .append(key)
 175                 .append(" currency: ")
 176                 .append(after.getProperty(key))
 177                 .append("\n");
 178             }
 179             throw new RuntimeException(sb.toString());
 180         }
 181     }
 182 
 183     private static void bug7102969() {
 184 
 185         // check the correct overriding of special case entries
 186         Currency cur = Currency.getInstance(new Locale("", "JP"));
 187         if (!cur.getCurrencyCode().equals("ABC")) {
 188             throw new RuntimeException("[Expected: ABC as currency code of JP, found: "
 189                     + cur.getCurrencyCode() + "]");
 190         }
 191 
 192         /* check if the currency instance is returned by
 193          * getAvailableCurrencies() method
 194          */
 195         if (!Currency.getAvailableCurrencies().contains(cur)) {
 196             throw new RuntimeException("[The Currency instance ["
 197                     + cur.getCurrencyCode() + ", "
 198                     + cur.getNumericCode() + ", "
 199                     + cur.getDefaultFractionDigits()
 200                     + "] is not available in the currencies list]");
 201         }
 202 
 203     }
 204 
 205     private static void bug8157138() {
 206 
 207         /* check the currencies which exist only as a special case are
 208          * accessible i.e. it should not throw IllegalArgumentException
 209          */
 210         try {
 211             Currency.getInstance("MAD");
 212         } catch (IllegalArgumentException ex) {
 213             throw new RuntimeException("Test Failed: "
 214                     + "special case currency instance MAD not found"
 215                     + "via Currency.getInstance(\"MAD\")");
 216         }
 217 
 218         try {
 219             Currency.getInstance("ABC");
 220         } catch (IllegalArgumentException ex) {
 221             throw new RuntimeException("Test Failed: "
 222                     + "special case currency instance ABC not found"
 223                     + "via Currency.getInstance(\"ABC\")");
 224         }
 225 
 226         /* check the currency value is returned by getAvailableCurrencies()
 227          * method
 228         */
 229         List<Currency> list = Currency.getAvailableCurrencies().stream()
 230                 .filter(cur -> cur.getCurrencyCode().equals("MAD"))
 231                 .collect(Collectors.toList());
 232 
 233         if (list.isEmpty()) {
 234             throw new RuntimeException("Test Failed: "
 235                     + "special case currency instance MAD not found"
 236                     + "in Currency.getAvailableCurrencies() list");
 237         }
 238 
 239         list = Currency.getAvailableCurrencies().stream()
 240                 .filter(cur -> cur.getCurrencyCode().equals("ABC"))
 241                 .collect(Collectors.toList());
 242 
 243         if (list.isEmpty()) {
 244             throw new RuntimeException("Test Failed: "
 245                     + "special case currency instance ABC not found"
 246                     + "in Currency.getAvailableCurrencies() list");
 247         }
 248 
 249     }
 250 
 251     private static boolean isPastCutoverDate(String s)
 252             throws IndexOutOfBoundsException, NullPointerException, ParseException {
 253         String dateString = s.substring(s.lastIndexOf(',')+1, s.length()).trim();
 254         SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.ROOT);
 255         format.setTimeZone(TimeZone.getTimeZone("GMT"));
 256         format.setLenient(false);
 257 
 258         long time = format.parse(dateString).getTime();
 259         if (System.currentTimeMillis() - time >= 0L) {
 260             return true;
 261         } else {
 262             return false;
 263         }
 264     }
 265 
 266     private static int countOccurrences(String value, char match) {
 267         int count = 0;
 268         for (char c : value.toCharArray()) {
< prev index next >