]> granicus.if.org Git - icu/commitdiff
ICU-9628 Fix J GenderInfo so that gender of a single item list is always the gender...
authorTravis Keep <keep94@gmail.com>
Tue, 6 Nov 2012 18:01:30 +0000 (18:01 +0000)
committerTravis Keep <keep94@gmail.com>
Tue, 6 Nov 2012 18:01:30 +0000 (18:01 +0000)
X-SVN-Rev: 32758

icu4j/main/classes/core/src/com/ibm/icu/util/GenderInfo.java
icu4j/main/tests/core/src/com/ibm/icu/dev/test/util/GenderInfoTest.java

index f23e57aa619f32c392b648d70c542751204bc73d..757cc51aea025bf4af66fd93008d133bdea231c2 100644 (file)
@@ -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<Gender> 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;
index 1eea4f0946b89455d2d318af58a4be4d246a824e..0d135867d2b2158c9be5754e6dcab5f6645f2491 100644 (file)
@@ -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<Gender> 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));
     }