Rollback 5174 until I can figure out why it fails in ant but not from Eclipse.
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@5182 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/i18n/client/impl/CurrencyList.java b/user/src/com/google/gwt/i18n/client/impl/CurrencyList.java
index 9be96b7..25af062 100644
--- a/user/src/com/google/gwt/i18n/client/impl/CurrencyList.java
+++ b/user/src/com/google/gwt/i18n/client/impl/CurrencyList.java
@@ -133,7 +133,7 @@
loadNamesMap();
}
}
-
+
/**
* Directly reference an entry in the currency map JSO.
*
@@ -141,14 +141,14 @@
* @return currency data
*/
protected final native CurrencyData getEntry(String code) /*-{
- return this.@com.google.gwt.i18n.client.impl.CurrencyList::dataMap[code];
+ return this.@com.google.gwt.i18n.client.impl.CurrencyList::dataMap[':' + code];
}-*/;
/**
* Directly reference an entry in the currency names map JSO.
*
* @param code ISO4217 currency code
- * @return currency name, or the currency code if not known
+ * @return currency name
*/
protected final native String getNamesEntry(String code) /*-{
return this.@com.google.gwt.i18n.client.impl.CurrencyList::namesMap[code] || code;
@@ -161,10 +161,10 @@
*/
protected native void loadCurrencyMap() /*-{
this.@com.google.gwt.i18n.client.impl.CurrencyList::dataMap = {
- "USD": [ "USD", "$", 2 ],
- "EUR": [ "EUR", "€", 2 ],
- "GBP": [ "GBP", "UK£", 2 ],
- "JPY": [ "JPY", "¥", 0 ],
+ ":USD": [ "USD", "$", 2 ],
+ ":EUR": [ "EUR", "€", 2 ],
+ ":GBP": [ "GBP", "UK£", 2 ],
+ ":JPY": [ "JPY", "¥", 0 ],
};
}-*/;
@@ -183,45 +183,13 @@
}-*/;
/**
- * Add all entries in {@code override} to the currency data map, replacing
- * any existing entries. This is used by subclasses that need to slightly
- * alter the data used by the parent locale.
- *
- * @param override JS object with currency code -> CurrencyData pairs
- */
- protected final native void overrideCurrencyMap(JavaScriptObject override) /*-{
- var map = this.@com.google.gwt.i18n.client.impl.CurrencyList::dataMap;
- for (var key in override) {
- if (override.hasOwnProperty(key)) {
- map[key] = override[key];
- }
- }
- }-*/;
-
- /**
- * Add all entries in {@code override} to the currency name map, replacing
- * any existing entries. This is used by subclasses that need to slightly
- * alter the data used by the parent locale.
- *
- * @param override JS object with currency code -> name pairs
- */
- protected final native void overrideNamesMap(JavaScriptObject override) /*-{
- var map = this.@com.google.gwt.i18n.client.impl.CurrencyList::namesMap;
- for (var key in override) {
- if (override.hasOwnProperty(key)) {
- map[key] = override[key];
- }
- }
- }-*/;
-
- /**
* Add currency codes contained in the map to an ArrayList.
*/
private native void loadCurrencyKeys(ArrayList<String> keys) /*-{
var map = this.@com.google.gwt.i18n.client.impl.CurrencyList::dataMap;
for (var key in map) {
- if (map.hasOwnProperty(key)) {
- keys.@java.util.ArrayList::add(Ljava/lang/Object;)(key);
+ if (key.charCodeAt(0) == 58) {
+ keys.@java.util.ArrayList::add(Ljava/lang/Object;)(key.substring(1));
}
}
}-*/;
diff --git a/user/src/com/google/gwt/i18n/rebind/CurrencyListGenerator.java b/user/src/com/google/gwt/i18n/rebind/CurrencyListGenerator.java
index 3b61416..64fc211 100644
--- a/user/src/com/google/gwt/i18n/rebind/CurrencyListGenerator.java
+++ b/user/src/com/google/gwt/i18n/rebind/CurrencyListGenerator.java
@@ -36,7 +36,6 @@
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.util.Arrays;
-import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -44,7 +43,6 @@
import java.util.Set;
import java.util.TreeMap;
import java.util.Map.Entry;
-import java.util.regex.Pattern;
/**
* Generator used to generate a localized version of CurrencyList, which
@@ -53,161 +51,10 @@
*/
public class CurrencyListGenerator extends Generator {
- /**
- * Immutable collection of data about a currency in a locale, built from the
- * CurrencyData and CurrencyExtra properties files.
- */
- private static class CurrencyInfo {
-
- private static final Pattern SPLIT_VERTICALBAR = Pattern.compile("\\|");
-
- private final String code;
-
- private final String displayName;
-
- private final int flags;
-
- private final boolean obsolete;
-
- private final String portableSymbol;
-
- private final String symbol;
-
- /**
- * Create an instance.
- *
- * currencyData format:
- *
- * <pre>
- * display name|symbol|decimal digits|not-used-flag
- * </pre>
- *
- * <ul>
- * <li>If a symbol is not supplied, the currency code will be used
- * <li>If # of decimal digits is omitted, 2 is used
- * <li>If a currency is not generally used, not-used-flag=1
- * <li>Trailing empty fields can be omitted
- * <li>If null, use currencyCode as the display name
- * </ul>
- *
- * extraData format:
- *
- * <pre>
- * portable symbol|flags|currency symbol override
- * flags are space separated list of:
- * At most one of the following:
- * SymPrefix The currency symbol goes before the number,
- * regardless of the normal position for this locale.
- * SymSuffix The currency symbol goes after the number,
- * regardless of the normal position for this locale.
- *
- * At most one of the following:
- * ForceSpace Always add a space between the currency symbol
- * and the number.
- * ForceNoSpace Never add a space between the currency symbol
- * and the number.
- * </pre>
- *
- * @param currencyCode ISO4217 currency code
- * @param currencyData entry from a CurrencyData properties file
- * @param extraData entry from a CurrencyExtra properties file
- * @throws NumberFormatException
- */
- public CurrencyInfo(String currencyCode, String currencyData,
- String extraData) throws NumberFormatException {
- code = currencyCode;
- if (currencyData == null) {
- currencyData = currencyCode;
- }
- String[] currencySplit = SPLIT_VERTICALBAR.split(currencyData);
- String currencyDisplay = currencySplit[0];
- String currencySymbol = null;
- if (currencySplit.length > 1 && currencySplit[1].length() > 0) {
- currencySymbol = currencySplit[1];
- }
- int currencyFractionDigits = 2;
- if (currencySplit.length > 2 && currencySplit[2].length() > 0) {
- currencyFractionDigits = Integer.valueOf(currencySplit[2]);
- }
- boolean currencyObsolete = false;
- if (currencySplit.length > 3 && currencySplit[3].length() > 0) {
- currencyObsolete = Integer.valueOf(currencySplit[3]) != 0;
- }
- int currencyFlags = currencyFractionDigits;
- String currencyPortableSymbol = "";
- if (extraData != null) {
- // CurrencyExtra contains up to 3 fields separated by |
- // 0 - portable currency symbol
- // 1 - space-separated flags regarding currency symbol
- // positioning/spacing
- // 2 - override of CLDR-derived currency symbol
- String[] extraSplit = SPLIT_VERTICALBAR.split(extraData);
- currencyPortableSymbol = extraSplit[0];
- if (extraSplit.length > 1) {
- if (extraSplit[1].contains("SymPrefix")) {
- currencyFlags |= CurrencyData.POS_FIXED_FLAG;
- } else if (extraSplit[1].contains("SymSuffix")) {
- currencyFlags |= CurrencyData.POS_FIXED_FLAG
- | CurrencyData.POS_SUFFIX_FLAG;
- }
- if (extraSplit[1].contains("ForceSpace")) {
- currencyFlags |= CurrencyData.SPACING_FIXED_FLAG
- | CurrencyData.SPACE_FORCED_FLAG;
- } else if (extraSplit[1].contains("ForceNoSpace")) {
- currencyFlags |= CurrencyData.SPACING_FIXED_FLAG;
- }
- }
- // If a non-empty override is supplied, use it for the currency
- // symbol.
- if (extraSplit.length > 2 && extraSplit[2].length() > 0) {
- currencySymbol = extraSplit[2];
- }
- // If we don't have a currency symbol yet, use the portable symbol if
- // supplied.
- if (currencySymbol == null && currencyPortableSymbol.length() > 0) {
- currencySymbol = currencyPortableSymbol;
- }
- }
- // If all else fails, use the currency code as the symbol.
- if (currencySymbol == null) {
- currencySymbol = currencyCode;
- }
- displayName = currencyDisplay;
- symbol = currencySymbol;
- flags = currencyFlags;
- portableSymbol = currencyPortableSymbol;
- obsolete = currencyObsolete;
- }
-
- public String getDisplayName() {
- return displayName;
- }
-
- public int getFlags() {
- return flags;
- }
-
- public String getJson() {
- StringBuilder buf = new StringBuilder();
- buf.append("[ \"").append(quote(code)).append("\", \"");
- buf.append(quote(symbol)).append("\", ").append(flags);
- if (portableSymbol.length() > 0) {
- buf.append(", \"").append(quote(portableSymbol)).append('\"');
- }
- return buf.append(']').toString();
- }
-
- public String getSymbol() {
- return symbol;
- }
-
- public boolean isObsolete() {
- return obsolete;
- }
- }
-
private static final String CURRENCY_DATA = CurrencyData.class.getCanonicalName();
+ private static final String CURRENCY_LIST = CurrencyList.class.getCanonicalName();
+
/**
* Prefix for properties files containing CLDR-derived currency data for each
* locale.
@@ -220,8 +67,6 @@
*/
private static final String CURRENCY_EXTRA_PREFIX = "com/google/gwt/i18n/client/constants/CurrencyExtra";
- private static final String CURRENCY_LIST = CurrencyList.class.getCanonicalName();
-
/**
* Prefix for properties files containing number formatting constants for each
* locale. We use this only to get the default currency for our current
@@ -230,16 +75,6 @@
private static final String NUMBER_CONSTANTS_PREFIX = "com/google/gwt/i18n/client/constants/NumberConstantsImpl";
/**
- * Backslash-escape any double quotes in the supplied string.
- *
- * @param str string to quote
- * @return string with double quotes backslash-escaped.
- */
- private static String quote(String str) {
- return str.replace("\"", "\\\"");
- }
-
- /**
* Generate an implementation for the given type.
*
* @param logger error logger
@@ -267,147 +102,179 @@
throw new UnableToCompleteException();
}
if (runtimeLocales.isEmpty()) {
- return generateLocaleTree(logger, context, targetClass, locale);
+ return generateOne(logger, context, targetClass, locale);
}
CachedGeneratorContext cachedContext = new CachedGeneratorContext(context);
return generateRuntimeSelection(logger, cachedContext, targetClass, locale,
runtimeLocales);
}
-
- /**
- * Generate an implementation class for the requested locale, including all
- * parent classes along the inheritance chain. The data will be kept at the
- * location in the inheritance chain where it was defined in properties files.
- *
- * @param logger
- * @param context
- * @param targetClass
- * @param locale
- * @return generated class name for the requested locale
- */
- private String generateLocaleTree(TreeLogger logger,
- GeneratorContext context, JClassType targetClass, GwtLocale locale) {
- String superClassName = CURRENCY_LIST;
- List<GwtLocale> searchList = locale.getCompleteSearchList();
-
- /**
- * Map of currency code -> CurrencyInfo for that code.
- */
- Map<String, CurrencyInfo> allCurrencyData = new HashMap<String, CurrencyInfo>();
-
- LocalizedProperties currencyExtra = null;
- /*
- * The searchList is guaranteed to be ordered such that subclasses always
- * precede superclasses. Therefore, we iterate backwards to ensure that
- * superclasses are always generated first.
- */
- String lastDefaultCurrencyCode = null;
- for (int i = searchList.size(); i-- > 0;) {
- GwtLocale search = searchList.get(i);
- LocalizedProperties newExtra = getProperties(CURRENCY_EXTRA_PREFIX,
- search);
- if (newExtra != null) {
- currencyExtra = newExtra;
- }
- Map<String, String> currencyData = getCurrencyData(search);
- Set<String> keySet = currencyData.keySet();
- String[] currencies = new String[keySet.size()];
- keySet.toArray(currencies);
- Arrays.sort(currencies);
-
- // Go ahead and populate the data map.
- for (String currencyCode : currencies) {
- String extraData = currencyExtra == null ? null
- : currencyExtra.getProperty(currencyCode);
- allCurrencyData.put(currencyCode, new CurrencyInfo(currencyCode,
- currencyData.get(currencyCode), extraData));
- }
-
- String defCurrencyCode = getDefaultCurrency(search);
- // If this locale specifies a particular locale, or the one that is
- // inherited has been changed in this locale, re-specify the default
- // currency so the method will be generated.
- if (defCurrencyCode == null && keySet.contains(lastDefaultCurrencyCode)) {
- defCurrencyCode = lastDefaultCurrencyCode;
- }
- if (!currencyData.isEmpty() || defCurrencyCode != null) {
- String newClass = generateOneLocale(logger, context, targetClass,
- search, superClassName, currencies, allCurrencyData,
- defCurrencyCode);
- superClassName = newClass;
- lastDefaultCurrencyCode = defCurrencyCode;
- }
- }
- return superClassName;
- }
-
- /**
- * Generate the implementation for a single locale, overriding from its parent
- * only data that has changed in this locale.
- *
- * @param logger
- * @param context
- * @param targetClass
- * @param locale
- * @param superClassName
- * @param currencies the set of currencies defined in this locale
- * @param allCurrencyData map of currency code -> unparsed CurrencyInfo for
- * that code
- * @param defCurrencyCode default currency code for this locale
- * @return fully-qualified class name generated
- */
- private String generateOneLocale(TreeLogger logger, GeneratorContext context,
- JClassType targetClass, GwtLocale locale, String superClassName,
- String[] currencies, Map<String, CurrencyInfo> allCurrencyData,
- String defCurrencyCode) {
-
+
+ private String generateOne(TreeLogger logger, GeneratorContext context,
+ JClassType targetClass, GwtLocale locale)
+ throws UnableToCompleteException {
String packageName = targetClass.getPackage().getName();
String className = targetClass.getName().replace('.', '_') + "_"
- + locale.getCanonicalForm().getAsString();
+ + locale.getAsString();
PrintWriter pw = context.tryCreate(logger, packageName, className);
if (pw != null) {
ClassSourceFileComposerFactory factory = new ClassSourceFileComposerFactory(
packageName, className);
- factory.setSuperclass(superClassName);
+ factory.setSuperclass(targetClass.getQualifiedSourceName());
factory.addImport(CURRENCY_LIST);
factory.addImport(CURRENCY_DATA);
SourceWriter writer = factory.createSourceWriter(context, pw);
- if (currencies.length > 0) {
- writeCurrencyMethod(className, writer, currencies, allCurrencyData);
- writeNamesMethod(className, writer, currencies, allCurrencyData);
+
+ // Load property files for this locale, handling inheritance properly.
+ GwtLocale[] currencyLocale = new GwtLocale[1];
+ LocalizedProperties currencyData = readProperties(logger,
+ CURRENCY_DATA_PREFIX, locale, currencyLocale);
+ GwtLocale[] extraLocale = new GwtLocale[1];
+ LocalizedProperties currencyExtra = readProperties(logger,
+ CURRENCY_EXTRA_PREFIX, locale, extraLocale);
+ GwtLocale[] numberLocale = new GwtLocale[1];
+ LocalizedProperties numberConstants = readProperties(logger,
+ NUMBER_CONSTANTS_PREFIX, locale, numberLocale);
+
+ // Get default currency code, set defaults in case it isn't found.
+ String defCurrencyCode = numberConstants.getProperty("defCurrencyCode");
+ if (defCurrencyCode == null) {
+ defCurrencyCode = "USD";
}
- if (defCurrencyCode != null) {
- CurrencyInfo currencyInfo = allCurrencyData.get(defCurrencyCode);
- if (currencyInfo == null) {
- // Synthesize a null info if the specified default wasn't found.
- currencyInfo = new CurrencyInfo(defCurrencyCode, null, null);
- allCurrencyData.put(defCurrencyCode, currencyInfo);
+
+ // Sort for deterministic output.
+ Set<?> keySet = currencyData.getPropertyMap().keySet();
+ String[] currencies = new String[keySet.size()];
+ keySet.toArray(currencies);
+ Arrays.sort(currencies);
+ Map<String, String> nameMap = new HashMap<String, String>();
+
+ writer.println("@Override");
+ writer.println("protected native void loadCurrencyMap() /*-{");
+ writer.indent();
+ writer.println("this.@com.google.gwt.i18n.client.impl.CurrencyList::dataMap = {");
+ writer.indent();
+ String defCurrencyObject = "[ \"" + quote(defCurrencyCode) + "\", \""
+ + quote(defCurrencyCode) + "\", 2 ]";
+ for (String currencyCode : currencies) {
+ String currencyEntry = currencyData.getProperty(currencyCode);
+ String[] currencySplit = currencyEntry.split("\\|");
+ String currencyDisplay = currencySplit[0];
+ String currencySymbol = null;
+ if (currencySplit.length > 1 && currencySplit[1].length() > 0) {
+ currencySymbol = currencySplit[1];
}
- writer.println();
- writer.println("@Override");
- writer.println("public native CurrencyData getDefault() /*-{");
- writer.println(" return " + currencyInfo.getJson() + ";");
- writer.println("}-*/;");
+ int currencyFractionDigits = 2;
+ if (currencySplit.length > 2 && currencySplit[2].length() > 0) {
+ try {
+ currencyFractionDigits = Integer.valueOf(currencySplit[2]);
+ } catch (NumberFormatException e) {
+ // Ignore bad values
+ logger.log(TreeLogger.WARN, "Parse of \"" + currencySplit[2]
+ + "\" failed", e);
+ }
+ }
+ boolean currencyObsolete = false;
+ if (currencySplit.length > 3 && currencySplit[3].length() > 0) {
+ try {
+ currencyObsolete = Integer.valueOf(currencySplit[3]) != 0;
+ } catch (NumberFormatException e) {
+ // Ignore bad values
+ logger.log(TreeLogger.WARN, "Parse of \"" + currencySplit[3]
+ + "\" failed", e);
+ }
+ }
+ int currencyFlags = currencyFractionDigits;
+ String extraData = currencyExtra.getProperty(currencyCode);
+ String portableSymbol = "";
+ if (extraData != null) {
+ // CurrencyExtra contains up to 3 fields separated by |
+ // 0 - portable currency symbol
+ // 1 - space-separated flags regarding currency symbol
+ // positioning/spacing
+ // 2 - override of CLDR-derived currency symbol
+ String[] extraSplit = extraData.split("\\|");
+ portableSymbol = extraSplit[0];
+ if (extraSplit.length > 1) {
+ if (extraSplit[1].contains("SymPrefix")) {
+ currencyFlags |= CurrencyData.POS_FIXED_FLAG;
+ } else if (extraSplit[1].contains("SymSuffix")) {
+ currencyFlags |= CurrencyData.POS_FIXED_FLAG
+ | CurrencyData.POS_SUFFIX_FLAG;
+ }
+ if (extraSplit[1].contains("ForceSpace")) {
+ currencyFlags |= CurrencyData.SPACING_FIXED_FLAG
+ | CurrencyData.SPACE_FORCED_FLAG;
+ } else if (extraSplit[1].contains("ForceNoSpace")) {
+ currencyFlags |= CurrencyData.SPACING_FIXED_FLAG;
+ }
+ }
+ // If a non-empty override is supplied, use it for the currency
+ // symbol.
+ if (extraSplit.length > 2 && extraSplit[2].length() > 0) {
+ currencySymbol = extraSplit[2];
+ }
+ // If we don't have a currency symbol yet, use the portable symbol if
+ // supplied.
+ if (currencySymbol == null && portableSymbol.length() > 0) {
+ currencySymbol = portableSymbol;
+ }
+ }
+ // If all else fails, use the currency code as the symbol.
+ if (currencySymbol == null) {
+ currencySymbol = currencyCode;
+ }
+ String currencyObject = "[ \"" + quote(currencyCode) + "\", \""
+ + quote(currencySymbol) + "\", " + currencyFlags;
+ if (portableSymbol.length() > 0) {
+ currencyObject += ", \"" + quote(portableSymbol) + "\"";
+ }
+ currencyObject += "]";
+ if (!currencyObsolete) {
+ nameMap.put(currencyCode, currencyDisplay);
+ writer.println("// " + currencyDisplay);
+ writer.println("\":" + quote(currencyCode) + "\": " + currencyObject
+ + ",");
+ }
+ if (currencyCode.equals(defCurrencyCode)) {
+ defCurrencyObject = currencyObject;
+ }
}
+ writer.outdent();
+ writer.println("};");
+ writer.outdent();
+ writer.println("}-*/;");
+ writer.println();
+ writer.println("@Override");
+ writer.println("protected native void loadNamesMap() /*-{");
+ writer.indent();
+ writer.println("this.@com.google.gwt.i18n.client.impl.CurrencyList::namesMap = {");
+ writer.indent();
+ for (String currencyCode : currencies) {
+ String displayName = nameMap.get(currencyCode);
+ if (displayName != null && !currencyCode.equals(displayName)) {
+ writer.println("\"" + quote(currencyCode) + "\": \""
+ + quote(displayName) + "\",");
+ }
+ }
+ writer.outdent();
+ writer.println("};");
+ writer.outdent();
+ writer.println("}-*/;");
+ writer.println();
+ writer.println("@Override");
+ writer.println("public native CurrencyData getDefault() /*-{");
+ writer.println(" return " + defCurrencyObject + ";");
+ writer.println("}-*/;");
writer.commit(logger);
}
return packageName + "." + className;
}
- /**
- * Generate a class which can select between alternate implementations at
- * runtime based on the runtime locale.
- *
- * @param logger TreeLogger instance for log messages
- * @param context GeneratorContext for generating source files
- * @param targetClass class to generate
- * @param compileLocale the compile-time locale we are generating for
- * @param locales set of all locales to generate
- * @return fully-qualified class name that was generated
- */
+
private String generateRuntimeSelection(TreeLogger logger,
GeneratorContext context, JClassType targetClass,
- GwtLocale compileLocale, Set<GwtLocale> locales) {
+ GwtLocale compileLocale, Set<GwtLocale> locales)
+ throws UnableToCompleteException {
String packageName = targetClass.getPackage().getName();
String className = targetClass.getName().replace('.', '_') + "_"
+ compileLocale.getAsString() + "_runtimeSelection";
@@ -448,7 +315,8 @@
writer.println(" return;");
writer.println("}");
boolean fetchedLocale = false;
- Map<String, Set<GwtLocale>> localeMap = new TreeMap<String, Set<GwtLocale>>();
+ Map<String, Set<GwtLocale>> localeMap = new TreeMap<String,
+ Set<GwtLocale>>();
String compileLocaleClass = processChildLocale(logger, context,
targetClass, localeMap, compileLocale);
if (compileLocaleClass == null) {
@@ -478,7 +346,8 @@
writer.println();
writer.print(" || ");
}
- writer.print("\"" + locale.toString() + "\".equals(runtimeLocale)");
+ writer.print("\"" + locale.toString()
+ + "\".equals(runtimeLocale)");
}
writer.println(") {");
writer.println(" instance = new " + generatedClass + "();");
@@ -493,108 +362,11 @@
return packageName + "." + className;
}
- /**
- * Return a map of currency data for the requested locale, or null if there is
- * not one (not that inheritance is not handled here).
- *
- * The keys are ISO4217 currency codes. The format of the map values is:
- *
- * <pre>
- * display name|symbol|decimal digits|not-used-flag
- * </pre>
- *
- * If a symbol is not supplied, the currency code will be used If # of decimal
- * digits is omitted, 2 is used If a currency is not generally used,
- * not-used-flag=1 Trailing empty fields can be omitted
- *
- * @param locale
- * @return currency data map
- */
- @SuppressWarnings("unchecked")
- private Map<String, String> getCurrencyData(GwtLocale locale) {
- LocalizedProperties currencyData = getProperties(CURRENCY_DATA_PREFIX,
- locale);
- if (currencyData == null) {
- return Collections.emptyMap();
- }
- return currencyData.getPropertyMap();
- }
-
- /**
- * Returns the default currency code for the requested locale.
- *
- * @param locale
- * @return ISO4217 currency code
- */
- private String getDefaultCurrency(GwtLocale locale) {
- String defCurrencyCode = null;
- LocalizedProperties numberConstants = getProperties(
- NUMBER_CONSTANTS_PREFIX, locale);
- if (numberConstants != null) {
- defCurrencyCode = numberConstants.getProperty("defCurrencyCode");
- }
- if (defCurrencyCode == null && locale.isDefault()) {
- defCurrencyCode = "USD";
- }
- return defCurrencyCode;
- }
-
- /**
- * Load a properties file for a given locale. Note that locale inheritance is
- * the responsibility of the caller.
- *
- * @param prefix classpath prefix of properties file
- * @param locale locale to load
- * @return LocalizedProperties instance containing properties file or null if
- * not found.
- */
- private LocalizedProperties getProperties(String prefix, GwtLocale locale) {
- String propFile = prefix;
- if (!locale.isDefault()) {
- propFile += "_" + locale.getAsString();
- }
- propFile += ".properties";
- InputStream str = null;
- ClassLoader classLoader = getClass().getClassLoader();
- LocalizedProperties props = new LocalizedProperties();
- try {
- str = classLoader.getResourceAsStream(propFile);
- if (str != null) {
- props.load(str, "UTF-8");
- return props;
- }
- } catch (UnsupportedEncodingException e) {
- // UTF-8 should always be defined
- return null;
- } catch (IOException e) {
- return null;
- } finally {
- if (str != null) {
- try {
- str.close();
- } catch (IOException e) {
- }
- }
- }
- return null;
- }
-
- /**
- * Generate an implementation for a runtime locale, to be referenced from the
- * generated runtime selection code.
- *
- * @param logger
- * @param context
- * @param targetClass
- * @param localeMap
- * @param locale
- * @return class name of the generated class, or null if failed
- */
- private String processChildLocale(TreeLogger logger,
- GeneratorContext context, JClassType targetClass,
- Map<String, Set<GwtLocale>> localeMap, GwtLocale locale) {
- String generatedClass = generateLocaleTree(logger, context, targetClass,
- locale);
+ private String processChildLocale(TreeLogger logger, GeneratorContext context,
+ JClassType targetClass, Map<String, Set<GwtLocale>> localeMap,
+ GwtLocale locale) throws UnableToCompleteException {
+ String generatedClass = generateOne(logger, context,
+ targetClass, locale);
if (generatedClass == null) {
logger.log(TreeLogger.ERROR, "Failed to generate "
+ targetClass.getQualifiedSourceName() + " in locale "
@@ -612,105 +384,84 @@
}
/**
- * Writes a loadCurrencyMap method for the current locale, based on its
- * currency data and its superclass (if any). As currencies are included in
- * this method, their names are added to {@code nameMap} for later use.
+ * Backslash-escape any double quotes in the supplied string.
*
- * If no new currency data is added for this locale over its superclass, the
- * method is omitted entirely.
- *
- * @param allCurrencyData map of currency codes to currency data for the
- * current locale, including all inherited currencies data
- * @param className name of the class we are generating
- * @param writer SourceWriter instance to use for writing the class
- * @param currencies array of valid currency names in the order they should be
- * listed
+ * @param str string to quote
+ * @return string with double quotes backslash-escaped.
*/
- private void writeCurrencyMethod(String className, SourceWriter writer,
- String[] currencies, Map<String, CurrencyInfo> allCurrencyData) {
- boolean needHeader = true;
- for (String currencyCode : currencies) {
- CurrencyInfo currencyInfo = allCurrencyData.get(currencyCode);
- if (currencyInfo.isObsolete()) {
- continue;
- }
- if (needHeader) {
- needHeader = false;
- writer.println();
- writer.println("private void loadSuperCurrencyMap() {");
- writer.println(" super.loadCurrencyMap();");
- writer.println("}");
- writer.println();
- writer.println("@Override");
- writer.println("protected native void loadCurrencyMap() /*-{");
- writer.indent();
- writer.println("this.@com.google.gwt.i18n.client.impl." + className
- + "::loadSuperCurrencyMap()();");
- writer.println("this.@com.google.gwt.i18n.client.impl." + className
- + "::overrideCurrencyMap(Lcom/google/gwt/core/client/"
- + "JavaScriptObject;)({");
- writer.indent();
- }
- writer.println("// " + currencyInfo.getDisplayName());
- writer.println("\"" + quote(currencyCode) + "\": "
- + currencyInfo.getJson() + ",");
- }
- if (!needHeader) {
- writer.outdent();
- writer.println("});");
- writer.outdent();
- writer.println("}-*/;");
- }
+ private String quote(String str) {
+ return str.replace("\"", "\\\"");
}
/**
- * Writes a loadNamesMap method for the current locale, based on its the
- * supplied names map and its superclass (if any).
+ * Load a single localized properties file, adding to an existing
+ * LocalizedProperties object.
*
- * If no new names are added for this locale over its superclass, the method
- * is omitted entirely.
- *
- * @param className name of the class we are generating
- * @param writer SourceWriter instance to use for writing the class
- * @param currencies array of valid currency names in the order they should be
- * listed
+ * @param logger TreeLogger instance
+ * @param classLoader class loader to use to find property file
+ * @param propFile property file name
+ * @param props existing LocalizedProperties object to add to
+ * @return true if the properties were successfully read
+ * @throws UnableToCompleteException if an error occurs reading the file
*/
- private void writeNamesMethod(String className, SourceWriter writer,
- String[] currencies, Map<String, CurrencyInfo> allCurrencyData) {
- boolean needHeader = true;
- for (String currencyCode : currencies) {
- CurrencyInfo currencyInfo = allCurrencyData.get(currencyCode);
- if (currencyInfo.isObsolete()) {
- continue;
+ private boolean readProperties(TreeLogger logger, ClassLoader classLoader,
+ String propFile, LocalizedProperties props)
+ throws UnableToCompleteException {
+ propFile += ".properties";
+ InputStream str = null;
+ try {
+ str = classLoader.getResourceAsStream(propFile);
+ if (str != null) {
+ props.load(str, "UTF-8");
+ return true;
}
- String displayName = currencyInfo.getDisplayName();
- if (displayName != null && !currencyCode.equals(displayName)) {
- if (needHeader) {
- needHeader = false;
- writer.println();
- writer.println("private void loadSuperNamesMap() {");
- writer.println(" super.loadNamesMap();");
- writer.println("}");
- writer.println();
- writer.println("@Override");
- writer.println("protected native void loadNamesMap() /*-{");
- writer.indent();
- writer.println("this.@com.google.gwt.i18n.client.impl." + className
- + "::loadSuperNamesMap()();");
- writer.println("this.@com.google.gwt.i18n.client.impl." + className
- + "::overrideNamesMap(Lcom/google/gwt/core/"
- + "client/JavaScriptObject;)({");
- writer.indent();
+ } catch (UnsupportedEncodingException e) {
+ // UTF-8 should always be defined
+ logger.log(TreeLogger.ERROR, "UTF-8 encoding is not defined", e);
+ throw new UnableToCompleteException();
+ } catch (IOException e) {
+ logger.log(TreeLogger.ERROR, "Exception reading " + propFile, e);
+ throw new UnableToCompleteException();
+ } finally {
+ if (str != null) {
+ try {
+ str.close();
+ } catch (IOException e) {
+ logger.log(TreeLogger.ERROR, "Exception closing " + propFile, e);
+ throw new UnableToCompleteException();
}
- writer.println("\"" + quote(currencyCode) + "\": \""
- + quote(displayName) + "\",");
}
}
- if (!needHeader) {
- writer.outdent();
- writer.println("});");
- writer.outdent();
- writer.println("}-*/;");
+ return false;
+ }
+
+ /**
+ * Load a chain of localized properties files, starting with the default and
+ * adding locale components so inheritance is properly recognized.
+ *
+ * @param logger TreeLogger instance
+ * @param propFilePrefix property file name prefix; locale is added to it
+ * @return a LocalizedProperties object containing all properties
+ * @throws UnableToCompleteException if an error occurs reading the file
+ */
+ private LocalizedProperties readProperties(TreeLogger logger,
+ String propFilePrefix, GwtLocale locale, GwtLocale[] foundLocale)
+ throws UnableToCompleteException {
+ LocalizedProperties props = new LocalizedProperties();
+ ClassLoader classLoader = getClass().getClassLoader();
+ List<GwtLocale> searchList = locale.getCompleteSearchList();
+ GwtLocale lastFound = LocaleUtils.getLocaleFactory().fromString(null);
+ for (int i = searchList.size(); i-- > 0; ) {
+ GwtLocale search = searchList.get(i);
+ String propFile = propFilePrefix;
+ if (!search.isDefault()) {
+ propFile += "_" + search.getAsString();
+ }
+ if (readProperties(logger, classLoader, propFile, props)) {
+ lastFound = search;
+ }
}
+ foundLocale[0] = lastFound;
+ return props;
}
}
diff --git a/user/src/com/google/gwt/i18n/server/GwtLocaleImpl.java b/user/src/com/google/gwt/i18n/server/GwtLocaleImpl.java
index 01a89ca..448512b 100644
--- a/user/src/com/google/gwt/i18n/server/GwtLocaleImpl.java
+++ b/user/src/com/google/gwt/i18n/server/GwtLocaleImpl.java
@@ -37,42 +37,6 @@
// the property provider to handle inheritance there.
/**
- * Maps deprecated language codes to the canonical code. Strings are always
- * in pairs, with the first being the canonical code and the second being
- * a deprecated code which maps to it.
- *
- * Source: http://www.loc.gov/standards/iso639-2/php/code_changes.php
- *
- * TODO: consider building maps if this list grows much.
- */
- private static final String[] deprecatedLanguages = new String[] {
- "he", "iw", // Hebrew
- "id", "in", // Indonesian
- "jv", "jw", // Javanese, typo in original publication
- "ro", "mo", // Moldovian
- "yi", "ji", // Yiddish
- };
-
- /**
- * Maps deprecated region codes to the canonical code. Strings are always
- * in pairs, with the first being the canonical code and the second being
- * a deprecated code which maps to it.
- *
- * Note that any mappings which split an old code into multiple new codes
- * cannot be done automatically (such as cs -> rs/me) -- perhaps we could
- * have a way of flagging region codes which are no longer valid and allow
- * an appropriate warning message.
- *
- * Source: http://en.wikipedia.org/wiki/ISO_3166-1
- *
- * TODO: consider building maps if this list grows much.
- */
- private static final String[] deprecatedRegions = new String[] {
- // East Timor - http://www.iso.org/iso/newsletter_v-5_east_timor.pdf
- "TL", "TP",
- };
-
- /**
* Add in the missing locale of a deprecated pair.
*
* @param factory GwtLocaleFactory to create new instances with
@@ -81,18 +45,36 @@
*/
private static void addDeprecatedPairs(GwtLocaleFactory factory,
GwtLocale locale, List<GwtLocale> aliases) {
- int n = deprecatedLanguages.length;
- for (int i = 0; i < n; i += 2) {
- if (deprecatedLanguages[i].equals(locale.getLanguage())) {
- aliases.add(factory.fromComponents(deprecatedLanguages[i + 1],
- locale.getScript(), locale.getRegion(), locale.getVariant()));
- break;
- }
- if (deprecatedLanguages[i + 1].equals(locale.getLanguage())) {
- aliases.add(factory.fromComponents(deprecatedLanguages[i],
- locale.getScript(), locale.getRegion(), locale.getVariant()));
- break;
- }
+ if ("he".equals(locale.getLanguage())) {
+ aliases.add(factory.fromComponents("iw", locale.getScript(),
+ locale.getRegion(), locale.getVariant()));
+ } else if ("iw".equals(locale.getLanguage())) {
+ aliases.add(factory.fromComponents("he", locale.getScript(),
+ locale.getRegion(), locale.getVariant()));
+ } else if ("id".equals(locale.getLanguage())) {
+ aliases.add(factory.fromComponents("in", locale.getScript(),
+ locale.getRegion(), locale.getVariant()));
+ } else if ("in".equals(locale.getLanguage())) {
+ aliases.add(factory.fromComponents("id", locale.getScript(),
+ locale.getRegion(), locale.getVariant()));
+ } else if ("mo".equals(locale.getLanguage())) {
+ aliases.add(factory.fromComponents("ro", locale.getScript(),
+ locale.getRegion(), locale.getVariant()));
+ } else if ("ro".equals(locale.getLanguage())) {
+ aliases.add(factory.fromComponents("mo", locale.getScript(),
+ locale.getRegion(), locale.getVariant()));
+ } else if ("jv".equals(locale.getLanguage())) {
+ aliases.add(factory.fromComponents("jw", locale.getScript(),
+ locale.getRegion(), locale.getVariant()));
+ } else if ("jw".equals(locale.getLanguage())) {
+ aliases.add(factory.fromComponents("jv", locale.getScript(),
+ locale.getRegion(), locale.getVariant()));
+ } else if ("ji".equals(locale.getLanguage())) {
+ aliases.add(factory.fromComponents("yi", locale.getScript(),
+ locale.getRegion(), locale.getVariant()));
+ } else if ("yi".equals(locale.getLanguage())) {
+ aliases.add(factory.fromComponents("ji", locale.getScript(),
+ locale.getRegion(), locale.getVariant()));
}
}
@@ -177,12 +159,10 @@
}
}
} else if ("no".equals(language)) {
- if (variant == null || "BOKMAL".equals(variant)) {
+ if ("BOKMAL".equals(variant)) {
aliases.add(factory.fromComponents("nb", script, region, null));
- aliases.add(factory.fromComponents("no-bok", script, region, null));
} else if ("NYNORSK".equals(variant)) {
aliases.add(factory.fromComponents("nn", script, region, null));
- aliases.add(factory.fromComponents("no-nyn", script, region, null));
}
} else if ("nb".equals(language)) {
aliases.add(factory.fromComponents("no", script, region, "BOKMAL"));
@@ -282,9 +262,7 @@
// TODO(jat): more locale aliases? better way to encode them?
if (cachedAliases == null) {
cachedAliases = new ArrayList<GwtLocale>();
- GwtLocale canonicalForm = getCanonicalForm();
Set<GwtLocale> seen = new HashSet<GwtLocale>();
- cachedAliases.add(canonicalForm);
ArrayList<GwtLocale> nextGroup = new ArrayList<GwtLocale>();
nextGroup.add(this);
// Account for default script
@@ -305,9 +283,7 @@
continue;
}
seen.add(locale);
- if (!locale.equals(canonicalForm)) {
- cachedAliases.add(locale);
- }
+ cachedAliases.add(locale);
addDeprecatedPairs(factory, locale, nextGroup);
addSpecialAliases(factory, locale, nextGroup);
}
@@ -336,77 +312,6 @@
return buf.toString();
}
- /**
- * Returns this locale in canonical form:
- * <ul>
- * <li>Deprecated language/region tags are replaced with official versions
- * <li>
- * </ul>
- *
- * @return GwtLocale instance
- */
- public GwtLocale getCanonicalForm() {
- String canonLanguage = language;
- String canonScript = script;
- String canonRegion = region;
- String canonVariant = variant;
- // Handle deprecated language codes
- int n = deprecatedLanguages.length;
- for (int i = 0; i < n; i += 2) {
- if (deprecatedLanguages[i + 1].equals(canonLanguage)) {
- canonLanguage = deprecatedLanguages[i];
- break;
- }
- }
- // Handle deprecated region codes
- n = deprecatedRegions.length;
- for (int i = 0; i < n; i += 2) {
- if (deprecatedRegions[i + 1].equals(canonRegion)) {
- canonRegion = deprecatedRegions[i];
- break;
- }
- }
- // Special-case Chinese default scripts
- if ("zh".equals(canonLanguage)) {
- if (canonRegion != null) {
- if ("CN".equals(canonRegion) && "Hans".equals(canonScript)) {
- canonScript = null;
- } else if ("TW".equals(canonRegion) && "Hant".equals(canonScript)) {
- canonScript = null;
- }
- } else if ("Hans".equals(canonScript)) {
- canonRegion = "CN";
- canonScript = null;
- } else if ("Hant".equals(canonScript)) {
- canonRegion = "TW";
- canonScript = null;
- }
- }
- // Special-case no->nb/nn split
- if ("no-bok".equals(canonLanguage)) {
- canonLanguage = "nb";
- canonVariant = null;
- } else if ("no-nyn".equals(canonLanguage)) {
- canonLanguage = "nn";
- canonVariant = null;
- } else if ("no".equals(canonLanguage)) {
- if (canonVariant == null || "BOKMAL".equals(canonVariant)) {
- canonLanguage = "nb";
- canonVariant = null;
- } else if ("NYNORSK".equals(canonVariant)) {
- canonLanguage = "nn";
- canonVariant = null;
- }
- }
- // Remove any default script for the language
- if (canonScript != null && canonScript.equals(
- DefaultLanguageScripts.getDefaultScript(canonLanguage))) {
- canonScript = null;
- }
- return factory.fromComponents(canonLanguage, canonScript, canonRegion,
- canonVariant);
- }
-
public List<GwtLocale> getCompleteSearchList() {
// TODO(jat): get zh_Hant to come before zh in search list for zh_TW
if (cachedSearchList == null) {
diff --git a/user/src/com/google/gwt/i18n/shared/GwtLocale.java b/user/src/com/google/gwt/i18n/shared/GwtLocale.java
index 8dd7bb4..35ca036 100644
--- a/user/src/com/google/gwt/i18n/shared/GwtLocale.java
+++ b/user/src/com/google/gwt/i18n/shared/GwtLocale.java
@@ -32,8 +32,8 @@
int compareTo(GwtLocale o);
/**
- * Return the list of aliases for this locale. The canonical form of the
- * current locale is always first on the list.
+ * Return the list of aliases for this locale. The current locale is always
+ * first on the list.
*
* Language/region codes have changed over time, so some systems continue to
* use the older codes. Aliases allow GWT to use the official Unicode CLDR
@@ -43,41 +43,8 @@
*/
List<GwtLocale> getAliases();
- /**
- * Return the locale as a fixed-format string suitable for use in searching
- * for localized resources. The format is language_Script_REGION_VARIANT,
- * where language is a 2-8 letter code (possibly with 3-letter extensions),
- * script is a 4-letter code with an initial capital letter, region is a
- * 2-character country code or a 3-digit region code, and variant is a 5-8
- * character (may be 4 if the first character is numeric) code. If a
- * component is missing, its preceding _ is also omitted. If this is the
- * default locale, the empty string will be returned.
- *
- * @return String representing locale
- */
String getAsString();
- /**
- * Returns this locale in canonical form.
- * <ul>
- * <li>Deprecated language/region tags are replaced with official versions
- * <li>Default scripts are removed (including region-specific defaults for
- * Chinese)
- * <li>no/nb/nn are normalized
- * <li>Default region for zh_Hans and zh_Hant if none specified
- * </ul>
- *
- * @return GwtLocale instance
- */
- GwtLocale getCanonicalForm();
-
- /**
- * Return the complete list of locales to search for the current locale.
- * This list will always start with the canonical form of this locale, and
- * end with "default", and include all appropriate aliases along the way.
- *
- * @return search list
- */
List<GwtLocale> getCompleteSearchList();
/**
@@ -89,44 +56,20 @@
*/
List<GwtLocale> getInheritanceChain();
- /**
- * @return the language portion of the locale, or null if none.
- */
String getLanguage();
- /**
- * @return the language portion of the locale, or the empty string if none.
- */
String getLanguageNotNull();
- /**
- * @return the region portion of the locale, or null if none.
- */
String getRegion();
- /**
- * @return the region portion of the locale, or the empty string if none.
- */
String getRegionNotNull();
- /**
- * @return the script portion of the locale, or null if none.
- */
String getScript();
- /**
- * @return the script portion of the locale, or the empty string if none.
- */
String getScriptNotNull();
- /**
- * @return the variant portion of the locale, or null if none.
- */
String getVariant();
- /**
- * @return the variant portion of the locale, or the empty string if none.
- */
String getVariantNotNull();
/**
@@ -139,14 +82,8 @@
*/
boolean inheritsFrom(GwtLocale parent);
- /**
- * @return true if this is the default or root locale.
- */
boolean isDefault();
- /**
- * @return a human readable string -- "default" or the same as getAsString().
- */
String toString();
/**
diff --git a/user/test/com/google/gwt/i18n/I18NTest_es_AR_runtime.gwt.xml b/user/test/com/google/gwt/i18n/I18NTest_es_AR_runtime.gwt.xml
deleted file mode 100644
index 9cddf0b..0000000
--- a/user/test/com/google/gwt/i18n/I18NTest_es_AR_runtime.gwt.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<!-- -->
-<!-- Copyright 2009 Google Inc. -->
-<!-- Licensed under the Apache License, Version 2.0 (the "License"); you -->
-<!-- may not use this file except in compliance with the License. You may -->
-<!-- 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. License for the specific language governing permissions and -->
-<!-- limitations under the License. -->
-
-<module>
- <!-- Inherit the JUnit support -->
- <inherits name='com.google.gwt.junit.JUnit'/>
- <inherits name = 'com.google.gwt.i18n.I18N'/>
- <!-- Include client-side source for the test cases -->
- <source path="client"/>
- <extend-property name="locale" values="es_419"/>
- <set-property name = "locale" value = "es_419"/>
- <set-configuration-property name="runtime.locales" value="es_AR,es_MX"/>
- <public path="public_es_AR"/>
-</module>
diff --git a/user/test/com/google/gwt/i18n/client/I18N_es_AR_RuntimeTest.java b/user/test/com/google/gwt/i18n/client/I18N_es_AR_RuntimeTest.java
deleted file mode 100644
index f3dfe62..0000000
--- a/user/test/com/google/gwt/i18n/client/I18N_es_AR_RuntimeTest.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright 2007 Google Inc.
- *
- * 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.
- */
-package com.google.gwt.i18n.client;
-
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.i18n.client.I18N_es_MX_Test.MyConstants;
-import com.google.gwt.i18n.client.I18N_es_MX_Test.MyMessages;
-import com.google.gwt.i18n.client.impl.CurrencyData;
-import com.google.gwt.i18n.client.impl.CurrencyList;
-import com.google.gwt.junit.client.GWTTestCase;
-
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-/**
- * Tests regional inheritance for es_AR.
- */
-public class I18N_es_AR_RuntimeTest extends GWTTestCase {
-
- @Override
- public String getModuleName() {
- return "com.google.gwt.i18n.I18NTest_es_AR_runtime";
- }
-
- public void testAvailableLocales() {
- String[] locales = LocaleInfo.getAvailableLocaleNames();
- Set<String> localeSet = new HashSet<String>();
- List<String> localeList = Arrays.asList(locales);
- localeSet.addAll(localeList);
- List<String> expectedList = Arrays.asList("default", "es_419", "es_AR",
- "es_MX");
- assertEquals(expectedList.size(), localeSet.size());
- localeSet.removeAll(expectedList);
- assertEquals(0, localeSet.size());
- }
-
- public void testCurrencyNames() {
- assertEquals("Peso Argentino", CurrencyList.get().lookupName("ARS"));
- assertEquals("peso mexicano", CurrencyList.get().lookupName("MXN"));
- assertEquals("dólar estadounidense", CurrencyList.get().lookupName("USD"));
- }
-
- public void testDefaultCurrency() {
- CurrencyData data = CurrencyList.get().getDefault();
- assertEquals("ARS", data.getCurrencyCode());
- assertEquals("$", data.getCurrencySymbol());
- assertEquals(2, data.getDefaultFractionDigits());
- }
-
- public void testOtherCurrency() {
- CurrencyData ars = CurrencyList.get().lookup("ARS");
- assertEquals("ARS", ars.getCurrencyCode());
- assertEquals("$", ars.getCurrencySymbol());
- assertEquals(2, ars.getDefaultFractionDigits());
- CurrencyData data = CurrencyList.get().lookup("MXN");
- assertEquals("MXN", data.getCurrencyCode());
- assertEquals("MEX$", data.getCurrencySymbol());
- assertEquals(2, data.getDefaultFractionDigits());
- CurrencyData usd = CurrencyList.get().lookup("USD");
- assertEquals("USD", usd.getCurrencyCode());
- assertEquals("US$", usd.getCurrencySymbol());
- assertEquals(2, usd.getDefaultFractionDigits());
- boolean found = false;
- for (CurrencyData it : CurrencyList.get()) {
- if ("USD".equals(it.getCurrencyCode())) {
- assertEquals("US$", it.getCurrencySymbol());
- assertEquals(2, it.getDefaultFractionDigits());
- found = true;
- break;
- }
- }
- assertTrue("Did not find USD in iterator", found);
- }
-
- public void testRegionalInheritance() {
- MyMessages msg = GWT.create(MyMessages.class);
- assertEquals("es_419", msg.getSourceLocale());
- MyConstants cst = GWT.create(MyConstants.class);
- // Since our copile-time locale is es_419 (Latin America), we do
- // not get es_019 (Central America) in the inheritance chain for
- // es_AR as only the compile-time locales are used for translation
- // inheritance.
- assertEquals("default", cst.getSourceLocale());
- }
-
- public void testRuntimeLocale() {
- assertEquals("es_AR", LocaleInfo.getCurrentLocale().getLocaleName());
- }
-}
diff --git a/user/test/com/google/gwt/i18n/client/I18N_es_MX_RuntimeTest.java b/user/test/com/google/gwt/i18n/client/I18N_es_MX_RuntimeTest.java
index 2cba95f..18079e1 100644
--- a/user/test/com/google/gwt/i18n/client/I18N_es_MX_RuntimeTest.java
+++ b/user/test/com/google/gwt/i18n/client/I18N_es_MX_RuntimeTest.java
@@ -49,43 +49,12 @@
assertEquals(0, localeSet.size());
}
- public void testCurrencyNames() {
- assertEquals("peso argentino", CurrencyList.get().lookupName("ARS"));
- assertEquals("peso mexicano", CurrencyList.get().lookupName("MXN"));
- assertEquals("dólar estadounidense", CurrencyList.get().lookupName("USD"));
- }
-
public void testDefaultCurrency() {
CurrencyData data = CurrencyList.get().getDefault();
assertEquals("MXN", data.getCurrencyCode());
assertEquals("$", data.getCurrencySymbol());
assertEquals(2, data.getDefaultFractionDigits());
}
-
- public void testOtherCurrency() {
- CurrencyData ars = CurrencyList.get().lookup("ARS");
- assertEquals("ARS", ars.getCurrencyCode());
- assertEquals("Arg$", ars.getCurrencySymbol());
- assertEquals(2, ars.getDefaultFractionDigits());
- CurrencyData data = CurrencyList.get().lookup("MXN");
- assertEquals("MXN", data.getCurrencyCode());
- assertEquals("$", data.getCurrencySymbol());
- assertEquals(2, data.getDefaultFractionDigits());
- CurrencyData usd = CurrencyList.get().lookup("USD");
- assertEquals("USD", usd.getCurrencyCode());
- assertEquals("US$", usd.getCurrencySymbol());
- assertEquals(2, usd.getDefaultFractionDigits());
- boolean found = false;
- for (CurrencyData it : CurrencyList.get()) {
- if ("USD".equals(it.getCurrencyCode())) {
- assertEquals("US$", it.getCurrencySymbol());
- assertEquals(2, it.getDefaultFractionDigits());
- found = true;
- break;
- }
- }
- assertTrue("Did not find USD in iterator", found);
- }
public void testRegionalInheritance() {
MyMessages msg = GWT.create(MyMessages.class);
diff --git a/user/test/com/google/gwt/i18n/public_es_AR/junit.html b/user/test/com/google/gwt/i18n/public_es_AR/junit.html
deleted file mode 100644
index b316a47..0000000
--- a/user/test/com/google/gwt/i18n/public_es_AR/junit.html
+++ /dev/null
@@ -1,67 +0,0 @@
-<!--
-Copyright 2008 Google Inc.
-
-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.
--->
-<html>
-<head>
-<meta name='gwt:onLoadErrorFn' content='junitOnLoadErrorFn'>
-<meta name='gwt:onPropertyErrorFn' content='junitOnPropertyErrorFn'>
-</head>
-<body>
-<script language='javascript'>
-<!--
-// -- BEGIN CHANGE FROM junit/public/junit.html
-// Set the runtime locale for this test
-// TODO(jat): find a better way to do this that doesn't require duplcating
-// junit.html for each different runtime locale.
-window['__gwt_Locale'] = 'es_AR';
-// -- END CHANGE FROM junit/public/junit.html
-
-function junitOnLoadErrorFn(moduleName) {
- junitError('Failed to load module "' + moduleName +
- '".\nPlease see the log for details.');
-}
-
-function junitOnPropertyErrorFn(propName, allowedValues, badValue) {
- var msg = 'While attempting to load the module, property "' + propName;
- if (badValue != null) {
- msg += '" was set to the unexpected value "' + badValue + '"';
- } else {
- msg += '" was not specified';
- }
- msg += 'Allowed values: ' + allowedValues;
- junitError(msg);
-}
-
-function junitError(msg) {
- var xmlHttpRequest = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
- xmlHttpRequest.open('POST', 'junithost/loadError', true);
- xmlHttpRequest.setRequestHeader('Content-Type', 'text/x-gwt-rpc; charset=utf-8');
- xmlHttpRequest.send(msg);
-}
-
-function loadSelectionScript() {
- var moduleName = document.location.href;
- var pos = moduleName.lastIndexOf('/');
- moduleName = moduleName.substr(0, pos);
- pos = moduleName.lastIndexOf('/');
- moduleName = moduleName.substr(pos + 1);
- document.write("<script language='javascript' src='" + moduleName + ".nocache.js'></script>");
-}
-loadSelectionScript();
--->
-</script>
-<iframe src="javascript:''" id='__gwt_historyFrame' style='position:absolute;width:0;height:0;border:0'></iframe>
-</body>
-</html>
diff --git a/user/test/com/google/gwt/i18n/server/GwtLocaleTest.java b/user/test/com/google/gwt/i18n/server/GwtLocaleTest.java
index ee2eaec..3bf1298 100644
--- a/user/test/com/google/gwt/i18n/server/GwtLocaleTest.java
+++ b/user/test/com/google/gwt/i18n/server/GwtLocaleTest.java
@@ -38,13 +38,12 @@
assertContainsAndGetPosition(aliases, factory.fromString("zh_Hans_CN"));
GwtLocale zhHant = factory.fromString("zh_Hant");
aliases = zhHant.getAliases();
- assertEquals(aliases.get(0), factory.fromString("zh_TW"));
+ assertEquals(aliases.get(0), zhHant);
assertContainsAndGetPosition(aliases, factory.fromString("zh_Hant_TW"));
GwtLocale zhHans = factory.fromString("zh_Hans");
aliases = zhHans.getAliases();
- assertEquals(aliases.get(0), zhCN);
+ assertEquals(aliases.get(0), zhHans);
assertContainsAndGetPosition(aliases, factory.fromString("zh_Hans_CN"));
- assertContainsAndGetPosition(aliases, zhHans);
GwtLocale en = factory.fromString("en");
aliases = en.getAliases();
assertEquals(aliases.get(0), en);
@@ -57,11 +56,7 @@
GwtLocale pt = factory.fromString("pt");
aliases = pt.getAliases();
assertContainsAndGetPosition(aliases, factory.fromString("pt_BR"));
- GwtLocale iw = factory.fromString("iw");
- aliases = iw.getAliases();
GwtLocale he = factory.fromString("he");
- assertEquals(aliases.get(0), he);
- assertContainsAndGetPosition(aliases, factory.fromString("iw_Hebr"));
aliases = he.getAliases();
assertContainsAndGetPosition(aliases, factory.fromString("iw_Hebr"));
GwtLocale id = factory.fromString("id");