1/*
2 *******************************************************************************
3 * Copyright (C) 2003-2012, Google, International Business Machines Corporation and    *
4 * others. All Rights Reserved.                                                *
5 *******************************************************************************
6*/
7package com.ibm.icu.dev.test.util;
8
9import java.util.Arrays;
10import java.util.List;
11
12import com.ibm.icu.dev.test.TestFmwk;
13import com.ibm.icu.util.GenderInfo;
14import com.ibm.icu.util.GenderInfo.Gender;
15import com.ibm.icu.util.ULocale;
16
17public class GenderInfoTest extends TestFmwk {
18    public static void main(String[] args) {
19        new GenderInfoTest().run(args);
20    }
21
22    public static GenderInfo NEUTRAL_LOCALE = GenderInfo.getInstance(ULocale.ENGLISH);
23    public static GenderInfo MIXED_NEUTRAL_LOCALE = GenderInfo.getInstance(new ULocale("is"));
24    public static GenderInfo MALE_TAINTS_LOCALE = GenderInfo.getInstance(ULocale.FRENCH);
25
26    public void TestEmpty() {
27        // Gender of the empty list is always OTHER regardless of gender style.
28        check(Gender.OTHER, Gender.OTHER, Gender.OTHER);
29    }
30
31    public void TestOne() {
32        // Gender of single item list is always gender of sole item regardless of
33        // gender style.
34        for (Gender g : Gender.values()) {
35            check(g, g, g, g);
36        }
37    }
38
39    public void TestOther() {
40        check(Gender.OTHER, Gender.MALE, Gender.MALE, Gender.MALE, Gender.MALE);
41        check(Gender.OTHER, Gender.OTHER, Gender.MALE, Gender.MALE, Gender.FEMALE);
42        check(Gender.OTHER, Gender.OTHER, Gender.MALE, Gender.MALE, Gender.OTHER);
43
44        check(Gender.OTHER, Gender.OTHER, Gender.MALE, Gender.FEMALE, Gender.MALE);
45        check(Gender.OTHER, Gender.FEMALE, Gender.FEMALE, Gender.FEMALE, Gender.FEMALE);
46        check(Gender.OTHER, Gender.OTHER, Gender.MALE, Gender.FEMALE, Gender.OTHER);
47
48        check(Gender.OTHER, Gender.OTHER, Gender.MALE, Gender.OTHER, Gender.MALE);
49        check(Gender.OTHER, Gender.OTHER, Gender.MALE, Gender.OTHER, Gender.FEMALE);
50        check(Gender.OTHER, Gender.OTHER, Gender.MALE, Gender.OTHER, Gender.OTHER);
51    }
52
53    public void check(Gender neutral, Gender mixed, Gender taints, Gender... genders) {
54        List<Gender> mixed0 = Arrays.asList(genders);
55        assertEquals("neutral " + mixed0, neutral, NEUTRAL_LOCALE.getListGender(mixed0));
56        assertEquals("mixed neutral " + mixed0, mixed, MIXED_NEUTRAL_LOCALE.getListGender(mixed0));
57        assertEquals("male taints " + mixed0, taints, MALE_TAINTS_LOCALE.getListGender(mixed0));
58    }
59
60    public void TestFallback() {
61        assertEquals("Strange locale = root", GenderInfo.getInstance(ULocale.ROOT), GenderInfo.getInstance(new ULocale("xxx")));
62        assertEquals("Strange locale = root", GenderInfo.getInstance(ULocale.FRANCE), GenderInfo.getInstance(ULocale.CANADA_FRENCH));
63    }
64}
65