From: Travis Keep Date: Tue, 6 Nov 2012 18:01:30 +0000 (+0000) Subject: ICU-9628 Fix J GenderInfo so that gender of a single item list is always the gender... X-Git-Tag: milestone-59-0-1~3357 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3fe72af5b065ecf9f443abf7335d0e57d5a63006;p=icu ICU-9628 Fix J GenderInfo so that gender of a single item list is always the gender of the sole item. X-SVN-Rev: 32758 --- diff --git a/icu4j/main/classes/core/src/com/ibm/icu/util/GenderInfo.java b/icu4j/main/classes/core/src/com/ibm/icu/util/GenderInfo.java index f23e57aa619..757cc51aea0 100644 --- a/icu4j/main/classes/core/src/com/ibm/icu/util/GenderInfo.java +++ b/icu4j/main/classes/core/src/com/ibm/icu/util/GenderInfo.java @@ -52,11 +52,13 @@ public class GenderInfo { /** * Enum only meant for use in CLDR and in testing. Indicates the category for the locale. + * This only affects gender for lists more than one. For lists of 1 item, the gender + * of the list always equals the gender of that sole item. * @internal */ public enum ListGenderStyle { /** - * Always OTHER (if more than one) + * Always OTHER (if more than one). */ NEUTRAL, /** @@ -65,8 +67,8 @@ public class GenderInfo { */ MIXED_NEUTRAL, /** - * gender(all female) = female, otherwise gender(list) = male. - * In particular, any 'other' value makes the overall gender be 'male'. + * If more than one, gender(all female) = female, otherwise gender(list) = male. + * If more than one, any 'other' value makes the overall gender be 'male'. */ MALE_TAINTS; @@ -108,13 +110,15 @@ public class GenderInfo { * @internal */ public Gender getListGender(List genders) { - if (genders.size() == 0 || style == ListGenderStyle.NEUTRAL) { + if (genders.size() == 0) { return Gender.OTHER; // degenerate case } if (genders.size() == 1) { return genders.get(0); // degenerate case } switch(style) { + case NEUTRAL: + return Gender.OTHER; case MIXED_NEUTRAL: boolean hasFemale = false; boolean hasMale = false; diff --git a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/util/GenderInfoTest.java b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/util/GenderInfoTest.java index 1eea4f0946b..0d135867d2b 100644 --- a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/util/GenderInfoTest.java +++ b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/util/GenderInfoTest.java @@ -24,26 +24,35 @@ public class GenderInfoTest extends TestFmwk { public static GenderInfo MALE_TAINTS_LOCALE = GenderInfo.getInstance(ULocale.FRENCH); public void TestEmpty() { - check(Gender.OTHER, Gender.OTHER); + // Gender of the empty list is always OTHER regardless of gender style. + check(Gender.OTHER, Gender.OTHER, Gender.OTHER); } public void TestOne() { + // Gender of single item list is always gender of sole item regardless of + // gender style. for (Gender g : Gender.values()) { - check(g, g, g); + check(g, g, g, g); } } public void TestOther() { - check(Gender.OTHER, Gender.MALE, Gender.MALE, Gender.FEMALE); - check(Gender.OTHER, Gender.MALE, Gender.FEMALE, Gender.MALE); - check(Gender.MALE, Gender.MALE, Gender.MALE, Gender.MALE); - check(Gender.FEMALE, Gender.FEMALE, Gender.FEMALE, Gender.FEMALE); - check(Gender.OTHER, Gender.MALE, Gender.FEMALE, Gender.OTHER); + check(Gender.OTHER, Gender.MALE, Gender.MALE, Gender.MALE, Gender.MALE); + check(Gender.OTHER, Gender.OTHER, Gender.MALE, Gender.MALE, Gender.FEMALE); + check(Gender.OTHER, Gender.OTHER, Gender.MALE, Gender.MALE, Gender.OTHER); + + check(Gender.OTHER, Gender.OTHER, Gender.MALE, Gender.FEMALE, Gender.MALE); + check(Gender.OTHER, Gender.FEMALE, Gender.FEMALE, Gender.FEMALE, Gender.FEMALE); + check(Gender.OTHER, Gender.OTHER, Gender.MALE, Gender.FEMALE, Gender.OTHER); + + check(Gender.OTHER, Gender.OTHER, Gender.MALE, Gender.OTHER, Gender.MALE); + check(Gender.OTHER, Gender.OTHER, Gender.MALE, Gender.OTHER, Gender.FEMALE); + check(Gender.OTHER, Gender.OTHER, Gender.MALE, Gender.OTHER, Gender.OTHER); } - public void check(Gender mixed, Gender taints, Gender... genders) { + public void check(Gender neutral, Gender mixed, Gender taints, Gender... genders) { List mixed0 = Arrays.asList(genders); - assertEquals("neutral " + mixed0, Gender.OTHER, NEUTRAL_LOCALE.getListGender(mixed0)); + assertEquals("neutral " + mixed0, neutral, NEUTRAL_LOCALE.getListGender(mixed0)); assertEquals("mixed neutral " + mixed0, mixed, MIXED_NEUTRAL_LOCALE.getListGender(mixed0)); assertEquals("male taints " + mixed0, taints, MALE_TAINTS_LOCALE.getListGender(mixed0)); }