/**
* 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,
/**
*/
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;
* @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;
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));
}