From aecdefedd8e227aefb0267b23328009bad438477 Mon Sep 17 00:00:00 2001 From: Norbert Runge Date: Mon, 19 Sep 2016 16:23:26 +0000 Subject: [PATCH] ICU-12590 X-SVN-Rev: 39279 --- .../test/format/DateIntervalFormatTest.java | 37 +++++++ .../ibm/icu/dev/test/lang/UCharacterTest.java | 28 +++++- .../ibm/icu/dev/test/lang/UnicodeSetTest.java | 34 +++++++ .../ibm/icu/dev/test/util/CurrencyTest.java | 39 ++++++++ .../dev/test/localespi/TimeZoneNameTest.java | 97 +++++++++++++++++++ 5 files changed, 234 insertions(+), 1 deletion(-) diff --git a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/DateIntervalFormatTest.java b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/DateIntervalFormatTest.java index 514f0240375..dee86416df4 100644 --- a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/DateIntervalFormatTest.java +++ b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/DateIntervalFormatTest.java @@ -1353,6 +1353,43 @@ public class DateIntervalFormatTest extends com.ibm.icu.dev.test.TestFmwk { } } + @Test + public void testGetInstance_String_DateIntervalInfo() { + DateIntervalInfo dateIntervalInfo = new DateIntervalInfo(new ULocale("ca")); + DateIntervalFormat dateIntervalFormat = DateIntervalFormat.getInstance( + DateFormat.YEAR_MONTH, Locale.ENGLISH, dateIntervalInfo); + Calendar from = Calendar.getInstance(); + from.set(2000, Calendar.JANUARY, 1, 12, 0); + Calendar to = Calendar.getInstance(); + to.set(2001, Calendar.FEBRUARY, 1, 12, 0); + DateInterval interval = new DateInterval(from.getTimeInMillis(), to.getTimeInMillis()); + dateIntervalFormat.setTimeZone(from.getTimeZone()); + // Month names are default (English), format is Catalan + assertEquals("Wrong date interval", + "January de 2000 – February de 2001", dateIntervalFormat.format(interval)); + } + + @Test + public void testGetInstance_String_Locale_DateIntervalInfo() { + DateIntervalInfo dateIntervalInfo = new DateIntervalInfo(new ULocale("ca")); + DateIntervalFormat dateIntervalFormat = DateIntervalFormat.getInstance( + DateFormat.YEAR_MONTH, Locale.GERMAN, dateIntervalInfo); + Calendar from = Calendar.getInstance(); + from.set(2000, Calendar.JANUARY, 1, 12, 0); + Calendar to = Calendar.getInstance(); + to.set(2001, Calendar.FEBRUARY, 1, 12, 0); + DateInterval interval = new DateInterval(from.getTimeInMillis(), to.getTimeInMillis()); + dateIntervalFormat.setTimeZone(from.getTimeZone()); + // Month names are German, format is Catalan + assertEquals("Wrong date interval", + "Januar de 2000 – Februar de 2001", dateIntervalFormat.format(interval)); + } + + @Test(expected = UnsupportedOperationException.class) + public void testParseObject_notSupported() throws ParseException { + DateIntervalFormat.getInstance(DateFormat.YEAR_MONTH).parseObject(""); + } + @Test public void TestTicket9919GetInstance() { // Creating a DateIntervalFormat with a custom DateIntervalInfo diff --git a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/lang/UCharacterTest.java b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/lang/UCharacterTest.java index b01083e0913..b092ccd54ea 100644 --- a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/lang/UCharacterTest.java +++ b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/lang/UCharacterTest.java @@ -2979,7 +2979,7 @@ public final class UCharacterTest extends TestFmwk } /* - * The following method tests + * The following methods test * public static String toTitleCase(Locale locale, String str, BreakIterator breakiter) */ @Test @@ -3002,6 +3002,19 @@ public final class UCharacterTest extends TestFmwk // TODO: Tests when "if(titleLimit=0)" is false } + + @Test + public void testToTitleCase_Locale_String_BreakIterator_I() { + String titleCase = UCharacter.toTitleCase(Locale.forLanguageTag("nl"), "ijsland", null, + UCharacter.FOLD_CASE_DEFAULT); + assertEquals("Wrong title casing", "IJsland", titleCase); + } + + @Test + public void testToTitleCase_String_BreakIterator_en() { + String titleCase = UCharacter.toTitleCase(Locale.forLanguageTag("en"), "ijsland", null); + assertEquals("Wrong title casing", "Ijsland", titleCase); + } /* * The following method tests * public static String toUpperCase(ULocale locale, String str) @@ -3554,4 +3567,17 @@ public final class UCharacterTest extends TestFmwk if(us.isFrozen() != true) errln("Unicode.isFrozen() was suppose to return true."); } + + /* Tests the methods + * public static String getNameAlias() and + * public static String getCharFromNameAlias() + */ + @Test + public void testNameAliasing() { + int input = '\u01a2'; + String alias = UCharacter.getNameAlias(input); + assertEquals("Wrong name alias", "LATIN CAPITAL LETTER GHA", alias); + int output = UCharacter.getCharFromNameAlias(alias); + assertEquals("alias for '" + input + "'", input, output); + } } diff --git a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/lang/UnicodeSetTest.java b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/lang/UnicodeSetTest.java index 28adb0581ac..6472e735e50 100644 --- a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/lang/UnicodeSetTest.java +++ b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/lang/UnicodeSetTest.java @@ -13,6 +13,7 @@ import java.text.ParsePosition; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; @@ -2705,4 +2706,37 @@ public class UnicodeSetTest extends TestFmwk { ++i; } } + + @Test + public void testAddAll_CharacterSequences() { + UnicodeSet unicodeSet = new UnicodeSet(); + unicodeSet.addAll("a", "b"); + assertEquals("Wrong UnicodeSet pattern", "[ab]", unicodeSet.toPattern(true)); + unicodeSet.addAll("b", "x"); + assertEquals("Wrong UnicodeSet pattern", "[abx]", unicodeSet.toPattern(true)); + unicodeSet.addAll(new CharSequence[]{new StringBuilder("foo"), new StringBuffer("bar")}); + assertEquals("Wrong UnicodeSet pattern", "[abx{bar}{foo}]", unicodeSet.toPattern(true)); + } + + @Test + public void testCompareTo() { + Set test_set = Collections.emptySet(); + assertEquals("UnicodeSet not empty", 0, UnicodeSet.EMPTY.compareTo(test_set)); + assertEquals("UnicodeSet comparison wrong", + 0, UnicodeSet.fromAll("a").compareTo(Collections.singleton("a"))); + + // Longer is bigger + assertTrue("UnicodeSet is empty", + UnicodeSet.ALL_CODE_POINTS.compareTo(test_set) > 0); + assertTrue("UnicodeSet not empty", + UnicodeSet.EMPTY.compareTo(Collections.singleton("a")) < 0); + + // Equal length compares on first difference. + assertTrue("UnicodeSet comparison wrong", + UnicodeSet.fromAll("a").compareTo(Collections.singleton("b")) < 0); + assertTrue("UnicodeSet comparison wrong", + UnicodeSet.fromAll("ab").compareTo(Arrays.asList("a", "c")) < 0); + assertTrue("UnicodeSet comparison wrong", + UnicodeSet.fromAll("b").compareTo(Collections.singleton("a")) > 0); + } } diff --git a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/util/CurrencyTest.java b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/util/CurrencyTest.java index 7b644b6dbdf..aa2a445f24e 100644 --- a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/util/CurrencyTest.java +++ b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/util/CurrencyTest.java @@ -200,6 +200,19 @@ public class CurrencyTest extends TestFmwk { // TODO add more tests later } + @Test + public void testGetName_Locale_Int_String_BooleanArray() { + Currency currency = Currency.getInstance(ULocale.CHINA); + boolean[] isChoiceFormat = new boolean[1]; + int nameStyle = Currency.LONG_NAME; + String pluralCount = ""; + String ulocaleName = + currency.getName(ULocale.CANADA, nameStyle, pluralCount, isChoiceFormat); + assertEquals("currency name mismatch", "Chinese Yuan", ulocaleName); + String localeName = currency.getName(Locale.CANADA, nameStyle, pluralCount, isChoiceFormat); + assertEquals("currency name mismatch", ulocaleName, localeName); + } + @Test public void TestCoverage() { Currency usd = Currency.getInstance("USD"); @@ -781,4 +794,30 @@ public class CurrencyTest extends TestFmwk { public void TestCurrencyInfoCtor() { new CurrencyMetaInfo.CurrencyInfo("region", "code", 0, 0, 1); } + + /** + * Test cases for rounding and fractions. + */ + @Test + public void testGetDefaultFractionDigits_CurrencyUsage() { + Currency currency = Currency.getInstance(ULocale.CHINA); + int cashFractionDigits = currency.getDefaultFractionDigits(Currency.CurrencyUsage.CASH); + assertEquals("number of digits in fraction incorrect", 2, cashFractionDigits); + } + + @Test + public void testGetRoundingIncrement() { + Currency currency = Currency.getInstance(ULocale.JAPAN); + // It appears as though this always returns 0 irrespective of the currency. + double roundingIncrement = currency.getRoundingIncrement(); + assertEquals("Rounding increment not zero", 0.0, roundingIncrement, 0.0); + } + @Test + public void testGetRoundingIncrement_CurrencyUsage() { + Currency currency = Currency.getInstance(ULocale.JAPAN); + // It appears as though this always returns 0 irrespective of the currency or usage. + double roundingIncrement = currency.getRoundingIncrement(Currency.CurrencyUsage.CASH); + // TODO: replace the JUnit import with TestFmwk assertEquals. + assertEquals("Rounding increment not zero", 0.0, roundingIncrement, 0.0); + } } diff --git a/icu4j/main/tests/localespi/src/com/ibm/icu/dev/test/localespi/TimeZoneNameTest.java b/icu4j/main/tests/localespi/src/com/ibm/icu/dev/test/localespi/TimeZoneNameTest.java index 162100fa636..4c9ec3c435d 100644 --- a/icu4j/main/tests/localespi/src/com/ibm/icu/dev/test/localespi/TimeZoneNameTest.java +++ b/icu4j/main/tests/localespi/src/com/ibm/icu/dev/test/localespi/TimeZoneNameTest.java @@ -8,6 +8,7 @@ */ package com.ibm.icu.dev.test.localespi; +import java.util.Collections; import java.util.HashSet; import java.util.Locale; import java.util.Set; @@ -154,4 +155,100 @@ public class TimeZoneNameTest extends TestFmwk { } } } + + @Test + public void testGetInstance_Locale() { + TimeZoneNames uLocaleInstance = TimeZoneNames.getInstance(ULocale.CANADA); + TimeZoneNames localeInstance = TimeZoneNames.getInstance(Locale.CANADA); + + Set uLocaleAvailableIds = uLocaleInstance.getAvailableMetaZoneIDs(); + Set localeAvailableIds = localeInstance.getAvailableMetaZoneIDs(); + assertEquals("Available ids", uLocaleAvailableIds, localeAvailableIds); + + for (String availableId : uLocaleAvailableIds) { + long date = 1458385200000L; + TimeZoneNames.NameType nameType = TimeZoneNames.NameType.SHORT_GENERIC; + String uLocaleName = uLocaleInstance.getDisplayName(availableId, nameType, date); + String localeName = localeInstance.getDisplayName(availableId, nameType, date); + assertEquals("Id: " + availableId, uLocaleName, localeName); + } + } + + @Test + public void testGetAvailableMetaZoneIDs() { + TimeZoneNames japaneseNames = TimeZoneNames.getInstance(ULocale.JAPANESE); + Set allJapan = japaneseNames.getAvailableMetaZoneIDs(); + + TimeZoneNames tzdbNames = TimeZoneNames.getTZDBInstance(ULocale.CHINESE); + Set tzdbAll = tzdbNames.getAvailableMetaZoneIDs(); + + // The data is the same in the current implementation. + assertEquals("MetaZone IDs different between locales", allJapan, tzdbAll); + + // Make sure that there is something. + assertTrue("count of zone ids is less than 100", allJapan.size() >= 180); + } + + @Test + public void testGetAvailableMetaZoneIDs_String() { + TimeZoneNames japaneseNames = TimeZoneNames.getInstance(ULocale.JAPANESE); + assertEquals("Timezone name mismatch", Collections.singleton("America_Pacific"), + japaneseNames.getAvailableMetaZoneIDs("America/Los_Angeles")); + + TimeZoneNames tzdbNames = TimeZoneNames.getTZDBInstance(ULocale.CHINESE); + assertEquals("Timezone name mismatch", Collections.singleton("Taipei"), + tzdbNames.getAvailableMetaZoneIDs("Asia/Taipei")); + } + + @Test + public void testGetMetaZoneDisplayName() { + TimeZoneNames usNames = TimeZoneNames.getInstance(ULocale.US); + + String europeanCentralName = usNames.getMetaZoneDisplayName("Europe_Central", + TimeZoneNames.NameType.LONG_STANDARD); + assertEquals("Timezone name mismatch", "Central European Standard Time", + europeanCentralName); + + TimeZoneNames tzdbNames = TimeZoneNames.getTZDBInstance(ULocale.CHINESE); + String americaPacificName = tzdbNames.getMetaZoneDisplayName("America_Pacific", + TimeZoneNames.NameType.SHORT_DAYLIGHT); + assertEquals("Timezone name mismatch", "PDT", americaPacificName); + } + + @Test + public void testGetMetaZoneID() { + TimeZoneNames usNames = TimeZoneNames.getInstance(ULocale.US); + + String europeanCentralName = usNames.getMetaZoneID("Europe/Paris", 0); + assertEquals("Timezone name mismatch", "Europe_Central", europeanCentralName); + + TimeZoneNames tzdbNames = TimeZoneNames.getTZDBInstance(ULocale.KOREAN); + String seoulName = tzdbNames.getMetaZoneID("Asia/Seoul", 0); + assertEquals("Timezone name mismatch", "Korea", seoulName); + + // Now try Jan 1st 1945 GMT + seoulName = tzdbNames.getMetaZoneID("Asia/Seoul", -786240000000L); + assertNull("Timezone name mismatch", seoulName); + } + + @Test + public void testGetTimeZoneDisplayName() { + TimeZoneNames frenchNames = TimeZoneNames.getInstance(ULocale.FRENCH); + String dublinName = frenchNames.getTimeZoneDisplayName("Europe/Dublin", + TimeZoneNames.NameType.LONG_DAYLIGHT); + assertEquals("Timezone name mismatch", "heure d’été irlandaise", dublinName); + + String dublinLocation = frenchNames.getTimeZoneDisplayName("Europe/Dublin", + TimeZoneNames.NameType.EXEMPLAR_LOCATION); + assertEquals("Timezone name mismatch", "Dublin", dublinLocation); + + // All the names returned by this are null. + TimeZoneNames tzdbNames = TimeZoneNames.getTZDBInstance(ULocale.KOREAN); + for (String tzId : TimeZone.getAvailableIDs()) { + for (TimeZoneNames.NameType nameType : TimeZoneNames.NameType.values()) { + String name = tzdbNames.getTimeZoneDisplayName(tzId, nameType); + assertNull("TZ:" + tzId + ", NameType: " + nameType + ", value: " + name, name); + } + } + } } -- 2.40.0