]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-52_1/main/tests/localespi/src/com/ibm/icu/dev/test/localespi/TestUtil.java
Clean up imports.
[Dictionary.git] / jars / icu4j-52_1 / main / tests / localespi / src / com / ibm / icu / dev / test / localespi / TestUtil.java
1 /*
2  *******************************************************************************
3  * Copyright (C) 2008-2012, International Business Machines Corporation and    *
4  * others. All Rights Reserved.                                                *
5  *******************************************************************************
6  */
7 package com.ibm.icu.dev.test.localespi;
8
9 import java.util.Locale;
10
11 import com.ibm.icu.util.ULocale;
12 import com.ibm.icu.util.ULocale.Builder;
13
14 public class TestUtil {
15
16     static final String ICU_VARIANT = "ICU4J";
17     private static final String ICU_VARIANT_SUFFIX = "_ICU4J";
18
19     public static Locale toICUExtendedLocale(Locale locale) {
20         if (isICUExtendedLocale(locale)) {
21             return locale;
22         }
23
24         String variant = locale.getVariant();
25         variant = variant.length() == 0 ? ICU_VARIANT : variant + ICU_VARIANT_SUFFIX;
26
27         // We once convert Locale to ULocale, then update variant
28         // field. We could do this using Locale APIs, but have to
29         // use a lot of reflections, because the test code should
30         // also run on JRE 6.
31         ULocale uloc = ULocale.forLocale(locale);
32         if (uloc.getScript().length() == 0) {
33             return new Locale(locale.getLanguage(), locale.getCountry(), variant);
34         }
35
36         // For preserving JDK Locale's script, we cannot use
37         // the regular Locale constructor.
38         ULocale modUloc = null;
39         Builder locBld = new Builder();
40         try {
41             locBld.setLocale(uloc);
42             locBld.setVariant(variant);
43             modUloc = locBld.build();
44             return modUloc.toLocale();
45         } catch (Exception e) {
46             // hmm, it should not happen
47             throw new RuntimeException(e);
48         }
49     }
50
51     public static boolean isICUExtendedLocale(Locale locale) {
52         String variant = locale.getVariant();
53         if (variant.equals(ICU_VARIANT) || variant.endsWith(ICU_VARIANT_SUFFIX)) {
54             return true;
55         }
56         return false;
57     }
58
59     public static boolean equals(Object o1, Object o2) {
60         if (o1 == null && o2 == null) {
61             return true;
62         }
63         if (o1 == null || o2 == null) {
64             return false;
65         }
66         return o1.equals(o2);
67     }
68
69     private static final boolean SUNJRE;
70     private static final boolean IBMJRE;
71
72     static {
73         String javaVendor = System.getProperty("java.vendor");
74         if (javaVendor != null) {
75             if (javaVendor.indexOf("Sun") >= 0) {
76                 SUNJRE = true;
77                 IBMJRE = false;
78             } else if (javaVendor.indexOf("IBM") >= 0) {
79                 SUNJRE = false;
80                 IBMJRE = true;
81             } else {
82                 SUNJRE = false;
83                 IBMJRE = false;
84             }
85         } else {
86             SUNJRE = false;
87             IBMJRE = false;
88         }
89     }
90
91     public static boolean isSUNJRE() {
92         return SUNJRE;
93     }
94     public static boolean isIBMJRE() {
95         return IBMJRE;
96     }
97
98     /*
99      * Ticket#6368
100      * 
101      * The ICU4J locale spi test cases reports many errors on IBM Java 6. There are two kinds
102      * of problems observed and both of them look like implementation problems in IBM Java 6.
103      * 
104      * - When a locale has variant field (for example, sr_RS_Cyrl, de_DE_PREEURO), adding ICU
105      *   suffix in the variant field (for example, sr_RS_Cyrl_ICU, de_DE_PREEURO_ICU) has no effects.
106      *   For these locales, IBM JRE 6 ignores installed Locale providers.
107      *   
108      * - For "sh" sublocales with "ICU" variant (for example, sh__ICU, sh_CS_ICU), IBM JRE 6 also
109      *   ignores installed ICU locale providers. Probably, "sh" is internally mapped to "sr_RS_Cyrl"
110      *   internally before locale look up.
111      * 
112      * For now, we exclude these problematic locales from locale spi test cases on IBM Java 6.
113      */
114     public static boolean isProblematicIBMLocale(Locale loc) {
115         if (!isIBMJRE()) {
116             return false;
117         }
118         if (loc.getLanguage().equals("sh")) {
119             return true;
120         }
121         String variant = loc.getVariant();
122         if (variant.startsWith("EURO") || variant.startsWith("PREEURO")
123                 || variant.startsWith("Cyrl") || variant.startsWith("Latn")) {
124             return true;
125         }
126         return false;
127     }
128 }