content: /*
   * Copyright (C) 2012 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.
   */
  
  import java.text.DateFormat;
  import java.text.DateFormatSymbols;
  import java.text.Normalizer;
  import java.util.Arrays;
  import java.util.Calendar;
  import java.util.Currency;
  import java.util.Date;
  import java.util.Locale;
  import java.util.MissingResourceException;
  import java.util.TimeZone;
  
  /**
   * Exercise some locale-table-driven stuff.
   */
  public class Main {
  
      public static void main(String[] args) {
          try {
              testCalendar();
          } catch (Exception ex) {
              ex.printStackTrace();
          }
  
          try {
              testDateFormatSymbols();
          } catch (Exception ex) {
              ex.printStackTrace();
          }
  
          try {
              testCurrency();
          } catch (Exception ex) {
              ex.printStackTrace();
          }
  
          try {
              testNormalizer();
          } catch (Exception ex) {
              ex.printStackTrace();
          }
  
          try {
              testIso3();
          } catch (Exception ex) {
              ex.printStackTrace();
          }
      }
  
      static void testCalendar() {
          TimeZone tz = TimeZone.getTimeZone("GMT");
  
          Locale usa = new Locale("en", "US");
          Calendar usaCal = Calendar.getInstance(tz, usa);
          usaCal.clear();     // don't want current date/time
          usaCal.set(2012, Calendar.JANUARY, 1);
  
          Date when = usaCal.getTime();
          DateFormat fmt = DateFormat.getDateInstance(DateFormat.FULL, usa);
          fmt.setTimeZone(tz);    // defaults to local TZ; force GMT
          System.out.println("USA(" + fmt.getTimeZone().getID() + "): "
              + fmt.format(when));
  
          System.out.println("USA: first="
              + usaCal.getFirstDayOfWeek() + ", name="
              + usaCal.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, usa));
  
  
          Locale france = new Locale("fr", "FR");
          Calendar franceCal = Calendar.getInstance(tz, france);
          franceCal.clear();
          franceCal.set(2012, Calendar.JANUARY, 2);
  
          when = franceCal.getTime();
          fmt = DateFormat.getDateInstance(DateFormat.FULL, usa);
          fmt.setTimeZone(tz);    // defaults to local TZ; force GMT
          System.out.println("France(" + fmt.getTimeZone().getID() + "): "
              + fmt.format(when));
  
          System.out.println("France: first="
              + franceCal.getFirstDayOfWeek() + ", name="
              + franceCal.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, france));
      }
  
      static void testDateFormatSymbols() {
          Locale usa = new Locale("en", "US");
          DateFormatSymbols syms = DateFormatSymbols.getInstance(usa);
          String[] list = syms.getAmPmStrings();
          System.out.println("USA dfs: " + Arrays.deepToString(list));
      }
  
      static void testCurrency() {
          Locale usa = new Locale("en", "US");
          Currency dollars = Currency.getInstance(usa);
  
          System.out.println(usa.toString() + ": " + dollars.toString()
              + " " + dollars.getSymbol() + dollars.getDefaultFractionDigits());
  
          Locale japan = new Locale("jp", "JP");
          Currency yen = Currency.getInstance(japan);
  
          System.out.println(japan.toString() + ": " + yen.toString()
              + " " + yen.getSymbol() + yen.getDefaultFractionDigits());
      }
  
      static void testNormalizer() {
          String composed = "Bl\u00c1ah";
          String decomposed = "Bl\u0041\u0301ah";
          String res;
  
          res = Normalizer.normalize(composed, Normalizer.Form.NFD);
          if (!decomposed.equals(res)) {
              System.err.println("Bad decompose: '" + composed + "' --> '"
                  + res + "'");
          }
  
          res = Normalizer.normalize(decomposed, Normalizer.Form.NFC);
          if (!composed.equals(res)) {
              System.err.println("Bad compose: '" + decomposed + "' --> '"
                  + res + "'");
          }
  
          System.out.println("Normalizer passed");
      }
  
      /*
       * Test that we can set and get an ISO3 language code.  Support for this
       * is expected by the Android framework.
       */
      static void testIso3() {
          Locale loc;
          loc = new Locale("en", "US");
          System.out.println("loc: " + loc);
          System.out.println(" iso3=" + loc.getISO3Language());
  
          loc = new Locale("eng", "USA");
          System.out.println("loc: " + loc);
          try {
              System.out.println(" iso3=" + loc.getISO3Language());
          } catch (MissingResourceException mre) {
              System.err.println("couldn't get iso3 language");
          }
      }
  }
  