1 /*
   2  * Copyright (c) 2002, 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.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 /*
  27  * @test
  28  * @bug 4351212
  29  * @modules java.desktop/sun.font
  30  * @summary Verify that new getLCIDFromLocale method works
  31  */
  32 
  33 import java.lang.reflect.Method;
  34 import java.util.Locale;
  35 
  36 public class GetLCIDFromLocale {
  37 
  38      static Method getLCIDMethod = null;
  39      public static void main(String args[]) {
  40         try {
  41             Class ttClass = Class.forName("sun.font.TrueTypeFont");
  42             getLCIDMethod =
  43                 ttClass.getDeclaredMethod("getLCIDFromLocale",
  44                                            java.util.Locale.class);
  45             getLCIDMethod.setAccessible(true); // its private
  46         } catch (Exception e) {
  47             e.printStackTrace();
  48             throw new RuntimeException("Reflection failed");
  49         }
  50         if (getLCIDMethod == null) {
  51             throw new RuntimeException("No method found");
  52         }
  53 
  54         test(Locale.US, 0x0409);
  55         test(Locale.GERMAN, 0x0407);
  56         test(Locale.GERMANY, 0x0407);
  57         test(new Locale("de", "AT"), 0x0c07);
  58         test(new Locale("ar"), 0x0401);
  59         test(new Locale("ar", "SA"), 0x0401);
  60         test(new Locale("ar", "EG"), 0x0c01);
  61         test(new Locale("??"), 0x0409);
  62         test(new Locale("??", "??"), 0x0409);
  63         test(Locale.KOREA, 0x0412);
  64     }
  65 
  66     private static void test(Locale locale, int expectedLCID) {
  67         try {
  68             short lcid = (Short)getLCIDMethod.invoke(null, locale);
  69             System.out.println("lcid="+lcid+" expected="+expectedLCID);
  70             if (lcid != expectedLCID) {
  71                  throw new RuntimeException();
  72             }
  73         } catch (Exception e) {
  74             e.printStackTrace();
  75             throw new RuntimeException("Method invocation exception");
  76         }
  77     }
  78 }