From: Artur Date: Tue, 24 Jan 2017 07:15:49 +0000 (+0200) Subject: Remove invalid trailing comma from Thai date format (#8311) X-Git-Tag: 7.7.7~11 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=1b15047ffee1536143564b1829c12023313fecc3;p=vaadin-framework.git Remove invalid trailing comma from Thai date format (#8311) * Remove invalid trailing comma from Thai date format Fixes #8303 --- diff --git a/server/src/main/java/com/vaadin/server/LocaleService.java b/server/src/main/java/com/vaadin/server/LocaleService.java index 6435a08cdd..b5fd545bc2 100644 --- a/server/src/main/java/com/vaadin/server/LocaleService.java +++ b/server/src/main/java/com/vaadin/server/LocaleService.java @@ -158,57 +158,31 @@ public class LocaleService implements Serializable { /* * Date formatting (MM/DD/YYYY etc.) */ - - DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, - DateFormat.SHORT, locale); + DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.SHORT, + locale); + DateFormat timeFormat = DateFormat.getTimeInstance(DateFormat.SHORT, + locale); if (!(dateFormat instanceof SimpleDateFormat)) { getLogger().warning("Unable to get default date pattern for locale " + locale.toString()); dateFormat = new SimpleDateFormat(); } - final String df = ((SimpleDateFormat) dateFormat).toPattern(); - - int timeStart = df.indexOf("H"); - if (timeStart < 0) { - timeStart = df.indexOf("h"); - } - final int ampm_first = df.indexOf("a"); - // E.g. in Korean locale AM/PM is before h:mm - // TODO should take that into consideration on client-side as well, - // now always h:mm a - if (ampm_first > 0 && ampm_first < timeStart) { - timeStart = ampm_first; - } - // Hebrew locale has time before the date - final boolean timeFirst = timeStart == 0; - String dateformat; - if (timeFirst) { - int dateStart = df.indexOf(' '); - if (ampm_first > dateStart) { - dateStart = df.indexOf(' ', ampm_first); - } - dateformat = df.substring(dateStart + 1); - } else { - dateformat = df.substring(0, timeStart - 1); + if (!(timeFormat instanceof SimpleDateFormat)) { + getLogger().warning("Unable to get default time pattern for locale " + + locale.toString()); + timeFormat = new SimpleDateFormat(); } + final String datePattern = ((SimpleDateFormat) dateFormat).toPattern(); + final String timePattern = ((SimpleDateFormat) timeFormat).toPattern(); - localeData.dateFormat = dateformat.trim(); + localeData.dateFormat = datePattern.trim(); - /* - * Time formatting (24 or 12 hour clock and AM/PM suffixes) - */ - final String timeformat = df.substring(timeStart, df.length()); - /* - * Doesn't return second or milliseconds. - * - * We use timeformat to determine 12/24-hour clock - */ - final boolean twelve_hour_clock = timeformat.indexOf("a") > -1; + final boolean twelve_hour_clock = timePattern.indexOf("a") > -1; // TODO there are other possibilities as well, like 'h' in french // (ignore them, too complicated) - final String hour_min_delimiter = timeformat.indexOf(".") > -1 ? "." + final String hour_min_delimiter = timePattern.indexOf(".") > -1 ? "." : ":"; - // outWriter.print("\"tf\":\"" + timeformat + "\","); + localeData.twelveHourClock = twelve_hour_clock; localeData.hourMinuteDelimiter = hour_min_delimiter; if (twelve_hour_clock) { diff --git a/server/src/test/java/com/vaadin/server/LocaleServiceTest.java b/server/src/test/java/com/vaadin/server/LocaleServiceTest.java new file mode 100644 index 0000000000..adb4d5579e --- /dev/null +++ b/server/src/test/java/com/vaadin/server/LocaleServiceTest.java @@ -0,0 +1,1026 @@ +package com.vaadin.server; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Locale; +import java.util.Map; +import java.util.Set; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mockito; + +import com.vaadin.shared.ui.ui.UIState.LocaleData; +import com.vaadin.shared.ui.ui.UIState.LocaleServiceState; +import com.vaadin.ui.UI; + +public class LocaleServiceTest { + + private static Set JAVA8_SUPPORTED_LOCALES = new HashSet(); + static { + // From + // http://www.oracle.com/technetwork/java/javase/java8locales-2095355.html + JAVA8_SUPPORTED_LOCALES.add("sq-AL"); + JAVA8_SUPPORTED_LOCALES.add("ar-DZ"); + JAVA8_SUPPORTED_LOCALES.add("ar-BH"); + JAVA8_SUPPORTED_LOCALES.add("ar-EG"); + JAVA8_SUPPORTED_LOCALES.add("ar-IQ"); + JAVA8_SUPPORTED_LOCALES.add("ar-JO"); + JAVA8_SUPPORTED_LOCALES.add("ar-KW"); + JAVA8_SUPPORTED_LOCALES.add("ar-LB"); + JAVA8_SUPPORTED_LOCALES.add("ar-LY"); + JAVA8_SUPPORTED_LOCALES.add("ar-MA"); + JAVA8_SUPPORTED_LOCALES.add("ar-OM"); + JAVA8_SUPPORTED_LOCALES.add("ar-QA"); + JAVA8_SUPPORTED_LOCALES.add("ar-SA"); + JAVA8_SUPPORTED_LOCALES.add("ar-SD"); + JAVA8_SUPPORTED_LOCALES.add("ar-SY"); + JAVA8_SUPPORTED_LOCALES.add("ar-TN"); + JAVA8_SUPPORTED_LOCALES.add("ar-AE"); + JAVA8_SUPPORTED_LOCALES.add("ar-YE"); + JAVA8_SUPPORTED_LOCALES.add("be-BY"); + JAVA8_SUPPORTED_LOCALES.add("bg-BG"); + JAVA8_SUPPORTED_LOCALES.add("ca-ES"); + JAVA8_SUPPORTED_LOCALES.add("zh-CN"); + JAVA8_SUPPORTED_LOCALES.add("zh-SG"); + JAVA8_SUPPORTED_LOCALES.add("zh-HK"); + JAVA8_SUPPORTED_LOCALES.add("zh-TW"); + JAVA8_SUPPORTED_LOCALES.add("hr-HR"); + JAVA8_SUPPORTED_LOCALES.add("cs-CZ"); + JAVA8_SUPPORTED_LOCALES.add("da-DK"); + JAVA8_SUPPORTED_LOCALES.add("nl-BE"); + JAVA8_SUPPORTED_LOCALES.add("nl-NL"); + JAVA8_SUPPORTED_LOCALES.add("en-AU"); + JAVA8_SUPPORTED_LOCALES.add("en-CA"); + JAVA8_SUPPORTED_LOCALES.add("en-IN"); + JAVA8_SUPPORTED_LOCALES.add("en-IE"); + JAVA8_SUPPORTED_LOCALES.add("en-MT"); + JAVA8_SUPPORTED_LOCALES.add("en-NZ"); + JAVA8_SUPPORTED_LOCALES.add("en-PH"); + JAVA8_SUPPORTED_LOCALES.add("en-SG"); + JAVA8_SUPPORTED_LOCALES.add("en-ZA"); + JAVA8_SUPPORTED_LOCALES.add("en-GB"); + JAVA8_SUPPORTED_LOCALES.add("en-US"); + JAVA8_SUPPORTED_LOCALES.add("et-EE"); + JAVA8_SUPPORTED_LOCALES.add("fi-FI"); + JAVA8_SUPPORTED_LOCALES.add("fr-BE"); + JAVA8_SUPPORTED_LOCALES.add("fr-CA"); + JAVA8_SUPPORTED_LOCALES.add("fr-FR"); + JAVA8_SUPPORTED_LOCALES.add("fr-LU"); + JAVA8_SUPPORTED_LOCALES.add("fr-CH"); + JAVA8_SUPPORTED_LOCALES.add("de-AT"); + JAVA8_SUPPORTED_LOCALES.add("de-DE"); + JAVA8_SUPPORTED_LOCALES.add("de-LU"); + JAVA8_SUPPORTED_LOCALES.add("de-CH"); + JAVA8_SUPPORTED_LOCALES.add("el-CY"); + JAVA8_SUPPORTED_LOCALES.add("el-GR"); + JAVA8_SUPPORTED_LOCALES.add("iw-IL"); + JAVA8_SUPPORTED_LOCALES.add("hi-IN"); + JAVA8_SUPPORTED_LOCALES.add("hu-HU"); + JAVA8_SUPPORTED_LOCALES.add("is-IS"); + JAVA8_SUPPORTED_LOCALES.add("in-ID"); + JAVA8_SUPPORTED_LOCALES.add("ga-IE"); + JAVA8_SUPPORTED_LOCALES.add("it-IT"); + JAVA8_SUPPORTED_LOCALES.add("it-CH"); + JAVA8_SUPPORTED_LOCALES.add("ja-JP"); + JAVA8_SUPPORTED_LOCALES.add("ja-JP-u-ca-japanese"); + JAVA8_SUPPORTED_LOCALES.add("ja-JP-x-lvariant-JP"); + JAVA8_SUPPORTED_LOCALES.add("ko-KR"); + JAVA8_SUPPORTED_LOCALES.add("lv-LV"); + JAVA8_SUPPORTED_LOCALES.add("lt-LT"); + JAVA8_SUPPORTED_LOCALES.add("mk-MK"); + JAVA8_SUPPORTED_LOCALES.add("ms-MY"); + JAVA8_SUPPORTED_LOCALES.add("mt-MT"); + JAVA8_SUPPORTED_LOCALES.add("no-NO"); + JAVA8_SUPPORTED_LOCALES.add("nb-NO"); + JAVA8_SUPPORTED_LOCALES.add("nn-NO"); + JAVA8_SUPPORTED_LOCALES.add("no-NO-x-lvariant-NY"); + JAVA8_SUPPORTED_LOCALES.add("pl-PL"); + JAVA8_SUPPORTED_LOCALES.add("pt-BR"); + JAVA8_SUPPORTED_LOCALES.add("pt-PT"); + JAVA8_SUPPORTED_LOCALES.add("ro-RO"); + JAVA8_SUPPORTED_LOCALES.add("ru-RU"); + JAVA8_SUPPORTED_LOCALES.add("sr-BA"); + JAVA8_SUPPORTED_LOCALES.add("sr-ME"); + JAVA8_SUPPORTED_LOCALES.add("sr-RS"); + JAVA8_SUPPORTED_LOCALES.add("sr-Latn-BA"); + JAVA8_SUPPORTED_LOCALES.add("sr-Latn-ME"); + JAVA8_SUPPORTED_LOCALES.add("sr-Latn-RS"); + JAVA8_SUPPORTED_LOCALES.add("sk-SK"); + JAVA8_SUPPORTED_LOCALES.add("sl-SI"); + JAVA8_SUPPORTED_LOCALES.add("es-AR"); + JAVA8_SUPPORTED_LOCALES.add("es-BO"); + JAVA8_SUPPORTED_LOCALES.add("es-CL"); + JAVA8_SUPPORTED_LOCALES.add("es-CO"); + JAVA8_SUPPORTED_LOCALES.add("es-CR"); + JAVA8_SUPPORTED_LOCALES.add("es-DO"); + JAVA8_SUPPORTED_LOCALES.add("es-EC"); + JAVA8_SUPPORTED_LOCALES.add("es-SV"); + JAVA8_SUPPORTED_LOCALES.add("es-GT"); + JAVA8_SUPPORTED_LOCALES.add("es-HN"); + JAVA8_SUPPORTED_LOCALES.add("es-MX"); + JAVA8_SUPPORTED_LOCALES.add("es-NI"); + JAVA8_SUPPORTED_LOCALES.add("es-PA"); + JAVA8_SUPPORTED_LOCALES.add("es-PY"); + JAVA8_SUPPORTED_LOCALES.add("es-PE"); + JAVA8_SUPPORTED_LOCALES.add("es-PR"); + JAVA8_SUPPORTED_LOCALES.add("es-ES"); + JAVA8_SUPPORTED_LOCALES.add("es-US"); + JAVA8_SUPPORTED_LOCALES.add("es-UY"); + JAVA8_SUPPORTED_LOCALES.add("es-VE"); + JAVA8_SUPPORTED_LOCALES.add("sv-SE"); + JAVA8_SUPPORTED_LOCALES.add("th-TH"); + JAVA8_SUPPORTED_LOCALES.add("th-TH-u-ca-buddhist"); + JAVA8_SUPPORTED_LOCALES.add("th-TH-u-ca-buddhist-nu-thai"); + JAVA8_SUPPORTED_LOCALES.add("th-TH-x-lvariant-TH"); + JAVA8_SUPPORTED_LOCALES.add("tr-TR"); + JAVA8_SUPPORTED_LOCALES.add("uk-UA"); + JAVA8_SUPPORTED_LOCALES.add("vi-VN"); + } + private static Map expectedLocaleData = new HashMap(); + + static { + + LocaleData en_IE = new LocaleData(); + en_IE.dateFormat = "dd/MM/yy"; + en_IE.twelveHourClock = false; + en_IE.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("en", "IE"), en_IE); + + LocaleData ar_KW = new LocaleData(); + ar_KW.dateFormat = "dd/MM/yy"; + ar_KW.twelveHourClock = true; + ar_KW.hourMinuteDelimiter = ":"; + ar_KW.am = "ص"; + ar_KW.pm = "م"; + expectedLocaleData.put(new Locale("ar", "KW"), ar_KW); + + LocaleData ms_MY = new LocaleData(); + ms_MY.dateFormat = "dd/MM/yyyy"; + ms_MY.twelveHourClock = false; + ms_MY.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("ms", "MY"), ms_MY); + + LocaleData en_IN = new LocaleData(); + en_IN.dateFormat = "d/M/yy"; + en_IN.twelveHourClock = true; + en_IN.hourMinuteDelimiter = ":"; + en_IN.am = "AM"; + en_IN.pm = "PM"; + expectedLocaleData.put(new Locale("en", "IN"), en_IN); + + LocaleData es_BO = new LocaleData(); + es_BO.dateFormat = "dd-MM-yy"; + es_BO.twelveHourClock = true; + es_BO.hourMinuteDelimiter = ":"; + es_BO.am = "AM"; + es_BO.pm = "PM"; + expectedLocaleData.put(new Locale("es", "BO"), es_BO); + + LocaleData ar_SY = new LocaleData(); + ar_SY.dateFormat = "dd/MM/yy"; + ar_SY.twelveHourClock = true; + ar_SY.hourMinuteDelimiter = ":"; + ar_SY.am = "ص"; + ar_SY.pm = "م"; + expectedLocaleData.put(new Locale("ar", "SY"), ar_SY); + + LocaleData en_ZA = new LocaleData(); + en_ZA.dateFormat = "yyyy/MM/dd"; + en_ZA.twelveHourClock = true; + en_ZA.hourMinuteDelimiter = ":"; + en_ZA.am = "AM"; + en_ZA.pm = "PM"; + expectedLocaleData.put(new Locale("en", "ZA"), en_ZA); + + LocaleData no_NO = new LocaleData(); + no_NO.dateFormat = "dd.MM.yy"; + no_NO.twelveHourClock = false; + no_NO.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("no", "NO"), no_NO); + + LocaleData sr_LATN_BA = new LocaleData(); + sr_LATN_BA.dateFormat = "d.M.yy."; + sr_LATN_BA.twelveHourClock = false; + sr_LATN_BA.hourMinuteDelimiter = "."; + expectedLocaleData.put(new Locale("sr", "LATN", "BA"), sr_LATN_BA); + + LocaleData el_GR = new LocaleData(); + el_GR.dateFormat = "d/M/yyyy"; + el_GR.twelveHourClock = true; + el_GR.hourMinuteDelimiter = ":"; + el_GR.am = "πμ"; + el_GR.pm = "μμ"; + expectedLocaleData.put(new Locale("el", "GR"), el_GR); + + LocaleData sr_LATN_RS = new LocaleData(); + sr_LATN_RS.dateFormat = "d.M.yy."; + sr_LATN_RS.twelveHourClock = false; + sr_LATN_RS.hourMinuteDelimiter = "."; + expectedLocaleData.put(new Locale("sr", "LATN", "RS"), sr_LATN_RS); + + LocaleData nl_NL = new LocaleData(); + nl_NL.dateFormat = "d-M-yy"; + nl_NL.twelveHourClock = false; + nl_NL.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("nl", "NL"), nl_NL); + + LocaleData ar_LB = new LocaleData(); + ar_LB.dateFormat = "dd/MM/yy"; + ar_LB.twelveHourClock = true; + ar_LB.hourMinuteDelimiter = ":"; + ar_LB.am = "ص"; + ar_LB.pm = "م"; + expectedLocaleData.put(new Locale("ar", "LB"), ar_LB); + + LocaleData en_AU = new LocaleData(); + en_AU.dateFormat = "d/MM/yy"; + en_AU.twelveHourClock = true; + en_AU.hourMinuteDelimiter = ":"; + en_AU.am = "AM"; + en_AU.pm = "PM"; + expectedLocaleData.put(new Locale("en", "AU"), en_AU); + + LocaleData mk_MK = new LocaleData(); + mk_MK.dateFormat = "d.M.yy"; + mk_MK.twelveHourClock = false; + mk_MK.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("mk", "MK"), mk_MK); + + LocaleData ar_TN = new LocaleData(); + ar_TN.dateFormat = "dd/MM/yy"; + ar_TN.twelveHourClock = true; + ar_TN.hourMinuteDelimiter = ":"; + ar_TN.am = "ص"; + ar_TN.pm = "م"; + expectedLocaleData.put(new Locale("ar", "TN"), ar_TN); + + LocaleData ar_LY = new LocaleData(); + ar_LY.dateFormat = "dd/MM/yy"; + ar_LY.twelveHourClock = true; + ar_LY.hourMinuteDelimiter = ":"; + ar_LY.am = "ص"; + ar_LY.pm = "م"; + expectedLocaleData.put(new Locale("ar", "LY"), ar_LY); + + LocaleData hu_HU = new LocaleData(); + hu_HU.dateFormat = "yyyy.MM.dd."; + hu_HU.twelveHourClock = false; + hu_HU.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("hu", "HU"), hu_HU); + + LocaleData es_SV = new LocaleData(); + es_SV.dateFormat = "MM-dd-yy"; + es_SV.twelveHourClock = true; + es_SV.hourMinuteDelimiter = ":"; + es_SV.am = "AM"; + es_SV.pm = "PM"; + expectedLocaleData.put(new Locale("es", "SV"), es_SV); + + LocaleData es_CR = new LocaleData(); + es_CR.dateFormat = "dd/MM/yy"; + es_CR.twelveHourClock = true; + es_CR.hourMinuteDelimiter = ":"; + es_CR.am = "AM"; + es_CR.pm = "PM"; + expectedLocaleData.put(new Locale("es", "CR"), es_CR); + + LocaleData es_CL = new LocaleData(); + es_CL.dateFormat = "dd-MM-yy"; + es_CL.twelveHourClock = false; + es_CL.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("es", "CL"), es_CL); + + LocaleData fr_CA = new LocaleData(); + fr_CA.dateFormat = "yy-MM-dd"; + fr_CA.twelveHourClock = false; + fr_CA.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("fr", "CA"), fr_CA); + + LocaleData es_CO = new LocaleData(); + es_CO.dateFormat = "d/MM/yy"; + es_CO.twelveHourClock = true; + es_CO.hourMinuteDelimiter = ":"; + es_CO.am = "AM"; + es_CO.pm = "PM"; + expectedLocaleData.put(new Locale("es", "CO"), es_CO); + + LocaleData pl_PL = new LocaleData(); + pl_PL.dateFormat = "dd.MM.yy"; + pl_PL.twelveHourClock = false; + pl_PL.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("pl", "PL"), pl_PL); + + LocaleData pt_PT = new LocaleData(); + pt_PT.dateFormat = "dd-MM-yyyy"; + pt_PT.twelveHourClock = false; + pt_PT.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("pt", "PT"), pt_PT); + + LocaleData ar_EG = new LocaleData(); + ar_EG.dateFormat = "dd/MM/yy"; + ar_EG.twelveHourClock = true; + ar_EG.hourMinuteDelimiter = ":"; + ar_EG.am = "ص"; + ar_EG.pm = "م"; + expectedLocaleData.put(new Locale("ar", "EG"), ar_EG); + + LocaleData fr_BE = new LocaleData(); + fr_BE.dateFormat = "d/MM/yy"; + fr_BE.twelveHourClock = false; + fr_BE.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("fr", "BE"), fr_BE); + + LocaleData ga_IE = new LocaleData(); + ga_IE.dateFormat = "dd/MM/yyyy"; + ga_IE.twelveHourClock = false; + ga_IE.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("ga", "IE"), ga_IE); + + LocaleData ar_DZ = new LocaleData(); + ar_DZ.dateFormat = "dd/MM/yy"; + ar_DZ.twelveHourClock = true; + ar_DZ.hourMinuteDelimiter = ":"; + ar_DZ.am = "ص"; + ar_DZ.pm = "م"; + expectedLocaleData.put(new Locale("ar", "DZ"), ar_DZ); + + LocaleData en_SG = new LocaleData(); + en_SG.dateFormat = "d/M/yy"; + en_SG.twelveHourClock = true; + en_SG.hourMinuteDelimiter = ":"; + en_SG.am = "AM"; + en_SG.pm = "PM"; + expectedLocaleData.put(new Locale("en", "SG"), en_SG); + + LocaleData in_ID = new LocaleData(); + in_ID.dateFormat = "dd/MM/yy"; + in_ID.twelveHourClock = false; + in_ID.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("in", "ID"), in_ID); + + LocaleData ar_MA = new LocaleData(); + ar_MA.dateFormat = "dd/MM/yy"; + ar_MA.twelveHourClock = true; + ar_MA.hourMinuteDelimiter = ":"; + ar_MA.am = "ص"; + ar_MA.pm = "م"; + expectedLocaleData.put(new Locale("ar", "MA"), ar_MA); + + LocaleData th_TH_u_ca_buddhist_nu_thai = new LocaleData(); + th_TH_u_ca_buddhist_nu_thai.dateFormat = "d/M/yyyy"; + th_TH_u_ca_buddhist_nu_thai.twelveHourClock = false; + th_TH_u_ca_buddhist_nu_thai.hourMinuteDelimiter = "."; + expectedLocaleData.put(new Locale("th", "TH", "u-ca-buddhist-nu-thai"), + th_TH_u_ca_buddhist_nu_thai); + + LocaleData nb_NO = new LocaleData(); + nb_NO.dateFormat = "dd.MM.yy"; + nb_NO.twelveHourClock = false; + nb_NO.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("nb", "NO"), nb_NO); + + LocaleData es_HN = new LocaleData(); + es_HN.dateFormat = "MM-dd-yy"; + es_HN.twelveHourClock = true; + es_HN.hourMinuteDelimiter = ":"; + es_HN.am = "AM"; + es_HN.pm = "PM"; + expectedLocaleData.put(new Locale("es", "HN"), es_HN); + + LocaleData hr_HR = new LocaleData(); + hr_HR.dateFormat = "dd.MM.yy."; + hr_HR.twelveHourClock = false; + hr_HR.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("hr", "HR"), hr_HR); + + LocaleData es_PR = new LocaleData(); + es_PR.dateFormat = "MM-dd-yy"; + es_PR.twelveHourClock = true; + es_PR.hourMinuteDelimiter = ":"; + es_PR.am = "AM"; + es_PR.pm = "PM"; + expectedLocaleData.put(new Locale("es", "PR"), es_PR); + + LocaleData es_PY = new LocaleData(); + es_PY.dateFormat = "dd/MM/yy"; + es_PY.twelveHourClock = true; + es_PY.hourMinuteDelimiter = ":"; + es_PY.am = "AM"; + es_PY.pm = "PM"; + expectedLocaleData.put(new Locale("es", "PY"), es_PY); + + LocaleData sr_ME = new LocaleData(); + sr_ME.dateFormat = "d.M.yy."; + sr_ME.twelveHourClock = false; + sr_ME.hourMinuteDelimiter = "."; + expectedLocaleData.put(new Locale("sr", "ME"), sr_ME); + + LocaleData de_AT = new LocaleData(); + de_AT.dateFormat = "dd.MM.yy"; + de_AT.twelveHourClock = false; + de_AT.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("de", "AT"), de_AT); + + LocaleData is_IS = new LocaleData(); + is_IS.dateFormat = "d.M.yyyy"; + is_IS.twelveHourClock = false; + is_IS.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("is", "IS"), is_IS); + + LocaleData bg_BG = new LocaleData(); + bg_BG.dateFormat = "dd.MM.yy"; + bg_BG.twelveHourClock = false; + bg_BG.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("bg", "BG"), bg_BG); + + LocaleData cs_CZ = new LocaleData(); + cs_CZ.dateFormat = "d.M.yy"; + cs_CZ.twelveHourClock = false; + cs_CZ.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("cs", "CZ"), cs_CZ); + + LocaleData en_PH = new LocaleData(); + en_PH.dateFormat = "M/d/yy"; + en_PH.twelveHourClock = true; + en_PH.hourMinuteDelimiter = ":"; + en_PH.am = "AM"; + en_PH.pm = "PM"; + expectedLocaleData.put(new Locale("en", "PH"), en_PH); + + LocaleData zh_TW = new LocaleData(); + zh_TW.dateFormat = "yyyy/M/d"; + zh_TW.twelveHourClock = true; + zh_TW.hourMinuteDelimiter = ":"; + zh_TW.am = "上午"; + zh_TW.pm = "下午"; + expectedLocaleData.put(new Locale("zh", "TW"), zh_TW); + + LocaleData ko_KR = new LocaleData(); + ko_KR.dateFormat = "yy. M. d"; + ko_KR.twelveHourClock = true; + ko_KR.hourMinuteDelimiter = ":"; + ko_KR.am = "오전"; + ko_KR.pm = "오후"; + expectedLocaleData.put(new Locale("ko", "KR"), ko_KR); + + LocaleData sk_SK = new LocaleData(); + sk_SK.dateFormat = "d.M.yyyy"; + sk_SK.twelveHourClock = false; + sk_SK.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("sk", "SK"), sk_SK); + + LocaleData sr_LATN_ME = new LocaleData(); + sr_LATN_ME.dateFormat = "d.M.yy."; + sr_LATN_ME.twelveHourClock = false; + sr_LATN_ME.hourMinuteDelimiter = "."; + expectedLocaleData.put(new Locale("sr", "LATN", "ME"), sr_LATN_ME); + + LocaleData ar_OM = new LocaleData(); + ar_OM.dateFormat = "dd/MM/yy"; + ar_OM.twelveHourClock = true; + ar_OM.hourMinuteDelimiter = ":"; + ar_OM.am = "ص"; + ar_OM.pm = "م"; + expectedLocaleData.put(new Locale("ar", "OM"), ar_OM); + + LocaleData ru_RU = new LocaleData(); + ru_RU.dateFormat = "dd.MM.yy"; + ru_RU.twelveHourClock = false; + ru_RU.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("ru", "RU"), ru_RU); + + LocaleData sq_AL = new LocaleData(); + sq_AL.dateFormat = "yy-MM-dd"; + sq_AL.twelveHourClock = true; + sq_AL.hourMinuteDelimiter = "."; + sq_AL.am = "PD"; + sq_AL.pm = "MD"; + expectedLocaleData.put(new Locale("sq", "AL"), sq_AL); + + LocaleData es_AR = new LocaleData(); + es_AR.dateFormat = "dd/MM/yy"; + es_AR.twelveHourClock = false; + es_AR.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("es", "AR"), es_AR); + + LocaleData sv_SE = new LocaleData(); + sv_SE.dateFormat = "yyyy-MM-dd"; + sv_SE.twelveHourClock = false; + sv_SE.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("sv", "SE"), sv_SE); + + LocaleData ja_JP_x_lvariant_JP = new LocaleData(); + ja_JP_x_lvariant_JP.dateFormat = "yy/MM/dd"; + ja_JP_x_lvariant_JP.twelveHourClock = false; + ja_JP_x_lvariant_JP.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("ja", "JP", "x-lvariant-JP"), + ja_JP_x_lvariant_JP); + + LocaleData da_DK = new LocaleData(); + da_DK.dateFormat = "dd-MM-yy"; + da_DK.twelveHourClock = false; + da_DK.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("da", "DK"), da_DK); + + LocaleData uk_UA = new LocaleData(); + uk_UA.dateFormat = "dd.MM.yy"; + uk_UA.twelveHourClock = false; + uk_UA.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("uk", "UA"), uk_UA); + + LocaleData th_TH_u_ca_buddhist = new LocaleData(); + th_TH_u_ca_buddhist.dateFormat = "d/M/yyyy"; + th_TH_u_ca_buddhist.twelveHourClock = false; + th_TH_u_ca_buddhist.hourMinuteDelimiter = "."; + expectedLocaleData.put(new Locale("th", "TH", "u-ca-buddhist"), + th_TH_u_ca_buddhist); + + LocaleData en_US = new LocaleData(); + en_US.dateFormat = "M/d/yy"; + en_US.twelveHourClock = true; + en_US.hourMinuteDelimiter = ":"; + en_US.am = "AM"; + en_US.pm = "PM"; + expectedLocaleData.put(new Locale("en", "US"), en_US); + + LocaleData lv_LV = new LocaleData(); + lv_LV.dateFormat = "yy.d.M"; + lv_LV.twelveHourClock = false; + lv_LV.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("lv", "LV"), lv_LV); + + LocaleData ja_JP_u_ca_japanese = new LocaleData(); + ja_JP_u_ca_japanese.dateFormat = "yy/MM/dd"; + ja_JP_u_ca_japanese.twelveHourClock = false; + ja_JP_u_ca_japanese.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("ja", "JP", "u-ca-japanese"), + ja_JP_u_ca_japanese); + + LocaleData en_MT = new LocaleData(); + en_MT.dateFormat = "dd/MM/yyyy"; + en_MT.twelveHourClock = false; + en_MT.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("en", "MT"), en_MT); + + LocaleData zh_CN = new LocaleData(); + zh_CN.dateFormat = "yy-M-d"; + zh_CN.twelveHourClock = true; + zh_CN.hourMinuteDelimiter = ":"; + zh_CN.am = "上午"; + zh_CN.pm = "下午"; + expectedLocaleData.put(new Locale("zh", "CN"), zh_CN); + + LocaleData nl_BE = new LocaleData(); + nl_BE.dateFormat = "d/MM/yy"; + nl_BE.twelveHourClock = false; + nl_BE.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("nl", "BE"), nl_BE); + + LocaleData hi_IN = new LocaleData(); + hi_IN.dateFormat = "d/M/yy"; + hi_IN.twelveHourClock = true; + hi_IN.hourMinuteDelimiter = ":"; + hi_IN.am = "पूर्वाह्न"; + hi_IN.pm = "अपराह्न"; + expectedLocaleData.put(new Locale("hi", "IN"), hi_IN); + + LocaleData el_CY = new LocaleData(); + el_CY.dateFormat = "dd/MM/yyyy"; + el_CY.twelveHourClock = true; + el_CY.hourMinuteDelimiter = ":"; + el_CY.am = "ΠΜ"; + el_CY.pm = "ΜΜ"; + expectedLocaleData.put(new Locale("el", "CY"), el_CY); + + LocaleData de_CH = new LocaleData(); + de_CH.dateFormat = "dd.MM.yy"; + de_CH.twelveHourClock = false; + de_CH.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("de", "CH"), de_CH); + + LocaleData ja_JP = new LocaleData(); + ja_JP.dateFormat = "yy/MM/dd"; + ja_JP.twelveHourClock = false; + ja_JP.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("ja", "JP"), ja_JP); + + LocaleData ar_YE = new LocaleData(); + ar_YE.dateFormat = "dd/MM/yy"; + ar_YE.twelveHourClock = true; + ar_YE.hourMinuteDelimiter = ":"; + ar_YE.am = "ص"; + ar_YE.pm = "م"; + expectedLocaleData.put(new Locale("ar", "YE"), ar_YE); + + LocaleData ar_QA = new LocaleData(); + ar_QA.dateFormat = "dd/MM/yy"; + ar_QA.twelveHourClock = true; + ar_QA.hourMinuteDelimiter = ":"; + ar_QA.am = "ص"; + ar_QA.pm = "م"; + expectedLocaleData.put(new Locale("ar", "QA"), ar_QA); + + LocaleData es_GT = new LocaleData(); + es_GT.dateFormat = "d/MM/yy"; + es_GT.twelveHourClock = true; + es_GT.hourMinuteDelimiter = ":"; + es_GT.am = "AM"; + es_GT.pm = "PM"; + expectedLocaleData.put(new Locale("es", "GT"), es_GT); + + LocaleData nn_NO = new LocaleData(); + nn_NO.dateFormat = "dd.MM.yy"; + nn_NO.twelveHourClock = false; + nn_NO.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("nn", "NO"), nn_NO); + + LocaleData es_PE = new LocaleData(); + es_PE.dateFormat = "dd/MM/yy"; + es_PE.twelveHourClock = true; + es_PE.hourMinuteDelimiter = ":"; + es_PE.am = "AM"; + es_PE.pm = "PM"; + expectedLocaleData.put(new Locale("es", "PE"), es_PE); + + LocaleData en_NZ = new LocaleData(); + en_NZ.dateFormat = "d/MM/yy"; + en_NZ.twelveHourClock = true; + en_NZ.hourMinuteDelimiter = ":"; + en_NZ.am = "AM"; + en_NZ.pm = "PM"; + expectedLocaleData.put(new Locale("en", "NZ"), en_NZ); + + LocaleData be_BY = new LocaleData(); + be_BY.dateFormat = "d.M.yy"; + be_BY.twelveHourClock = false; + be_BY.hourMinuteDelimiter = "."; + expectedLocaleData.put(new Locale("be", "BY"), be_BY); + + LocaleData zh_SG = new LocaleData(); + zh_SG.dateFormat = "dd/MM/yy"; + zh_SG.twelveHourClock = true; + zh_SG.hourMinuteDelimiter = ":"; + zh_SG.am = "上午"; + zh_SG.pm = "下午"; + expectedLocaleData.put(new Locale("zh", "SG"), zh_SG); + + LocaleData ro_RO = new LocaleData(); + ro_RO.dateFormat = "dd.MM.yyyy"; + ro_RO.twelveHourClock = false; + ro_RO.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("ro", "RO"), ro_RO); + + LocaleData es_PA = new LocaleData(); + es_PA.dateFormat = "MM/dd/yy"; + es_PA.twelveHourClock = true; + es_PA.hourMinuteDelimiter = ":"; + es_PA.am = "AM"; + es_PA.pm = "PM"; + expectedLocaleData.put(new Locale("es", "PA"), es_PA); + + LocaleData mt_MT = new LocaleData(); + mt_MT.dateFormat = "dd/MM/yyyy"; + mt_MT.twelveHourClock = false; + mt_MT.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("mt", "MT"), mt_MT); + + LocaleData et_EE = new LocaleData(); + et_EE.dateFormat = "d.MM.yy"; + et_EE.twelveHourClock = false; + et_EE.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("et", "EE"), et_EE); + + LocaleData it_CH = new LocaleData(); + it_CH.dateFormat = "dd.MM.yy"; + it_CH.twelveHourClock = false; + it_CH.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("it", "CH"), it_CH); + + LocaleData th_TH_x_lvariant_TH = new LocaleData(); + th_TH_x_lvariant_TH.dateFormat = "d/M/yyyy"; + th_TH_x_lvariant_TH.twelveHourClock = false; + th_TH_x_lvariant_TH.hourMinuteDelimiter = "."; + expectedLocaleData.put(new Locale("th", "TH", "x-lvariant-TH"), + th_TH_x_lvariant_TH); + + LocaleData tr_TR = new LocaleData(); + tr_TR.dateFormat = "dd.MM.yyyy"; + tr_TR.twelveHourClock = false; + tr_TR.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("tr", "TR"), tr_TR); + + LocaleData fr_FR = new LocaleData(); + fr_FR.dateFormat = "dd/MM/yy"; + fr_FR.twelveHourClock = false; + fr_FR.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("fr", "FR"), fr_FR); + + LocaleData vi_VN = new LocaleData(); + vi_VN.dateFormat = "dd/MM/yyyy"; + vi_VN.twelveHourClock = false; + vi_VN.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("vi", "VN"), vi_VN); + + LocaleData en_GB = new LocaleData(); + en_GB.dateFormat = "dd/MM/yy"; + en_GB.twelveHourClock = false; + en_GB.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("en", "GB"), en_GB); + + LocaleData fi_FI = new LocaleData(); + fi_FI.dateFormat = "d.M.yyyy"; + fi_FI.twelveHourClock = false; + fi_FI.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("fi", "FI"), fi_FI); + + LocaleData en_CA = new LocaleData(); + en_CA.dateFormat = "dd/MM/yy"; + en_CA.twelveHourClock = true; + en_CA.hourMinuteDelimiter = ":"; + en_CA.am = "AM"; + en_CA.pm = "PM"; + expectedLocaleData.put(new Locale("en", "CA"), en_CA); + + LocaleData lt_LT = new LocaleData(); + lt_LT.dateFormat = "yy.M.d"; + lt_LT.twelveHourClock = false; + lt_LT.hourMinuteDelimiter = "."; + expectedLocaleData.put(new Locale("lt", "LT"), lt_LT); + + LocaleData ar_AE = new LocaleData(); + ar_AE.dateFormat = "dd/MM/yy"; + ar_AE.twelveHourClock = true; + ar_AE.hourMinuteDelimiter = ":"; + ar_AE.am = "ص"; + ar_AE.pm = "م"; + expectedLocaleData.put(new Locale("ar", "AE"), ar_AE); + + LocaleData sl_SI = new LocaleData(); + sl_SI.dateFormat = "d.M.y"; + sl_SI.twelveHourClock = false; + sl_SI.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("sl", "SI"), sl_SI); + + LocaleData es_DO = new LocaleData(); + es_DO.dateFormat = "dd/MM/yy"; + es_DO.twelveHourClock = true; + es_DO.hourMinuteDelimiter = ":"; + es_DO.am = "AM"; + es_DO.pm = "PM"; + expectedLocaleData.put(new Locale("es", "DO"), es_DO); + + LocaleData ar_IQ = new LocaleData(); + ar_IQ.dateFormat = "dd/MM/yy"; + ar_IQ.twelveHourClock = true; + ar_IQ.hourMinuteDelimiter = ":"; + ar_IQ.am = "ص"; + ar_IQ.pm = "م"; + expectedLocaleData.put(new Locale("ar", "IQ"), ar_IQ); + + LocaleData fr_CH = new LocaleData(); + fr_CH.dateFormat = "dd.MM.yy"; + fr_CH.twelveHourClock = false; + fr_CH.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("fr", "CH"), fr_CH); + + LocaleData es_EC = new LocaleData(); + es_EC.dateFormat = "dd/MM/yy"; + es_EC.twelveHourClock = false; + es_EC.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("es", "EC"), es_EC); + + LocaleData es_US = new LocaleData(); + es_US.dateFormat = "M/d/yy"; + es_US.twelveHourClock = true; + es_US.hourMinuteDelimiter = ":"; + es_US.am = "a.m."; + es_US.pm = "p.m."; + expectedLocaleData.put(new Locale("es", "US"), es_US); + + LocaleData iw_IL = new LocaleData(); + iw_IL.dateFormat = "dd/MM/yy"; + iw_IL.twelveHourClock = false; + iw_IL.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("iw", "IL"), iw_IL); + + LocaleData ar_SA = new LocaleData(); + ar_SA.dateFormat = "dd/MM/yy"; + ar_SA.twelveHourClock = true; + ar_SA.hourMinuteDelimiter = ":"; + ar_SA.am = "ص"; + ar_SA.pm = "م"; + expectedLocaleData.put(new Locale("ar", "SA"), ar_SA); + + LocaleData ca_ES = new LocaleData(); + ca_ES.dateFormat = "dd/MM/yy"; + ca_ES.twelveHourClock = false; + ca_ES.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("ca", "ES"), ca_ES); + + LocaleData de_DE = new LocaleData(); + de_DE.dateFormat = "dd.MM.yy"; + de_DE.twelveHourClock = false; + de_DE.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("de", "DE"), de_DE); + + LocaleData sr_BA = new LocaleData(); + sr_BA.dateFormat = "yy-MM-dd"; + sr_BA.twelveHourClock = false; + sr_BA.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("sr", "BA"), sr_BA); + + LocaleData zh_HK = new LocaleData(); + zh_HK.dateFormat = "yy'年'M'月'd'日'"; + zh_HK.twelveHourClock = true; + zh_HK.hourMinuteDelimiter = ":"; + zh_HK.am = "上午"; + zh_HK.pm = "下午"; + expectedLocaleData.put(new Locale("zh", "HK"), zh_HK); + + LocaleData ar_SD = new LocaleData(); + ar_SD.dateFormat = "dd/MM/yy"; + ar_SD.twelveHourClock = true; + ar_SD.hourMinuteDelimiter = ":"; + ar_SD.am = "ص"; + ar_SD.pm = "م"; + expectedLocaleData.put(new Locale("ar", "SD"), ar_SD); + + LocaleData pt_BR = new LocaleData(); + pt_BR.dateFormat = "dd/MM/yy"; + pt_BR.twelveHourClock = false; + pt_BR.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("pt", "BR"), pt_BR); + + LocaleData sr_RS = new LocaleData(); + sr_RS.dateFormat = "d.M.yy."; + sr_RS.twelveHourClock = false; + sr_RS.hourMinuteDelimiter = "."; + expectedLocaleData.put(new Locale("sr", "RS"), sr_RS); + + LocaleData es_UY = new LocaleData(); + es_UY.dateFormat = "dd/MM/yy"; + es_UY.twelveHourClock = true; + es_UY.hourMinuteDelimiter = ":"; + es_UY.am = "AM"; + es_UY.pm = "PM"; + expectedLocaleData.put(new Locale("es", "UY"), es_UY); + + LocaleData ar_BH = new LocaleData(); + ar_BH.dateFormat = "dd/MM/yy"; + ar_BH.twelveHourClock = true; + ar_BH.hourMinuteDelimiter = ":"; + ar_BH.am = "ص"; + ar_BH.pm = "م"; + expectedLocaleData.put(new Locale("ar", "BH"), ar_BH); + + LocaleData es_ES = new LocaleData(); + es_ES.dateFormat = "d/MM/yy"; + es_ES.twelveHourClock = false; + es_ES.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("es", "ES"), es_ES); + + LocaleData ar_JO = new LocaleData(); + ar_JO.dateFormat = "dd/MM/yy"; + ar_JO.twelveHourClock = true; + ar_JO.hourMinuteDelimiter = ":"; + ar_JO.am = "ص"; + ar_JO.pm = "م"; + expectedLocaleData.put(new Locale("ar", "JO"), ar_JO); + + LocaleData es_VE = new LocaleData(); + es_VE.dateFormat = "dd/MM/yy"; + es_VE.twelveHourClock = true; + es_VE.hourMinuteDelimiter = ":"; + es_VE.am = "AM"; + es_VE.pm = "PM"; + expectedLocaleData.put(new Locale("es", "VE"), es_VE); + + LocaleData es_MX = new LocaleData(); + es_MX.dateFormat = "d/MM/yy"; + es_MX.twelveHourClock = true; + es_MX.hourMinuteDelimiter = ":"; + es_MX.am = "AM"; + es_MX.pm = "PM"; + expectedLocaleData.put(new Locale("es", "MX"), es_MX); + + LocaleData it_IT = new LocaleData(); + it_IT.dateFormat = "dd/MM/yy"; + it_IT.twelveHourClock = false; + it_IT.hourMinuteDelimiter = "."; + expectedLocaleData.put(new Locale("it", "IT"), it_IT); + + LocaleData no_NO_x_lvariant_NY = new LocaleData(); + no_NO_x_lvariant_NY.dateFormat = "dd.MM.yy"; + no_NO_x_lvariant_NY.twelveHourClock = false; + no_NO_x_lvariant_NY.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("no", "NO", "x-lvariant-NY"), + no_NO_x_lvariant_NY); + + LocaleData de_LU = new LocaleData(); + de_LU.dateFormat = "dd.MM.yy"; + de_LU.twelveHourClock = false; + de_LU.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("de", "LU"), de_LU); + + LocaleData fr_LU = new LocaleData(); + fr_LU.dateFormat = "dd/MM/yy"; + fr_LU.twelveHourClock = false; + fr_LU.hourMinuteDelimiter = ":"; + expectedLocaleData.put(new Locale("fr", "LU"), fr_LU); + + LocaleData es_NI = new LocaleData(); + es_NI.dateFormat = "MM-dd-yy"; + es_NI.twelveHourClock = true; + es_NI.hourMinuteDelimiter = ":"; + es_NI.am = "AM"; + es_NI.pm = "PM"; + expectedLocaleData.put(new Locale("es", "NI"), es_NI); + + LocaleData th_TH = new LocaleData(); + th_TH.dateFormat = "d/M/yyyy"; + th_TH.twelveHourClock = false; + th_TH.hourMinuteDelimiter = "."; + expectedLocaleData.put(new Locale("th", "TH"), th_TH); + } + + private LocaleService localeService; + + @Before + public void setup() { + localeService = new LocaleService(Mockito.mock(UI.class), + new LocaleServiceState()); + } + + @Test + public void localeDateTimeFormat() { + for (Locale l : expectedLocaleData.keySet()) { + Assert.assertEquals("Error verifying locale " + l, + expectedLocaleData.get(l).dateFormat, + localeService.createLocaleData(l).dateFormat); + Assert.assertEquals("Error verifying locale " + l, + expectedLocaleData.get(l).twelveHourClock, + localeService.createLocaleData(l).twelveHourClock); + Assert.assertEquals("Error verifying locale " + l, + expectedLocaleData.get(l).am, + localeService.createLocaleData(l).am); + Assert.assertEquals("Error verifying locale " + l, + expectedLocaleData.get(l).pm, + localeService.createLocaleData(l).pm); + } + } + + public static void main(String[] args) { + for (String s : JAVA8_SUPPORTED_LOCALES) { + String[] parts = s.split("-", 3); + Locale l; + if (parts.length == 1) { + l = new Locale(parts[0]); + } else if (parts.length == 2) { + l = new Locale(parts[0], parts[1]); + } else if (parts.length == 3) { + l = new Locale(parts[0], parts[1], parts[2]); + } else { + throw new RuntimeException("Unexpected locale: " + s); + } + generateData(l); + } + } + + /** + * Helper method for generating the above data using LocaleService. + * + * @param locale + * the locale to generate data for + */ + private static void generateData(Locale locale) { + System.out.println(); + String id = locale.getLanguage(); + if (!locale.getCountry().equals("")) { + id += "_" + locale.getCountry(); + if (!locale.getVariant().equals("")) { + id += "_" + locale.getVariant(); + } + } + + String field = id.replace('-', '_'); + LocaleService localeService = new LocaleService(Mockito.mock(UI.class), + new LocaleServiceState()); + LocaleData localeData = localeService.createLocaleData(locale); + System.out.println("LocaleData " + field + " = new LocaleData();"); + System.out.println( + field + ".dateFormat = \"" + localeData.dateFormat + "\";"); + System.out.println(field + ".twelveHourClock = " + + localeData.twelveHourClock + ";"); + System.out.println(field + ".hourMinuteDelimiter = \"" + + localeData.hourMinuteDelimiter + "\";"); + if (localeData.twelveHourClock) { + System.out.println(field + ".am = \"" + localeData.am + "\";"); + System.out.println(field + ".pm = \"" + localeData.pm + "\";"); + } + System.out.println("expectedLocaleData.put(new Locale(\"" + + id.replaceAll("_", "\",\"") + "\"), " + field + ");"); + } + +}