17935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/*
27935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert *******************************************************************************
37935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Copyright (C) 2003-2012, Google, International Business Machines Corporation and    *
47935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * others. All Rights Reserved.                                                *
57935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert *******************************************************************************
67935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert*/
77935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpackage com.ibm.icu.dev.test.util;
87935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
97935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Arrays;
107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.List;
117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.dev.test.TestFmwk;
137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.util.GenderInfo;
147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.util.GenderInfo.Gender;
157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.util.ULocale;
167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpublic class GenderInfoTest extends TestFmwk {
187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static void main(String[] args) {
197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        new GenderInfoTest().run(args);
207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static GenderInfo NEUTRAL_LOCALE = GenderInfo.getInstance(ULocale.ENGLISH);
237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static GenderInfo MIXED_NEUTRAL_LOCALE = GenderInfo.getInstance(new ULocale("is"));
247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static GenderInfo MALE_TAINTS_LOCALE = GenderInfo.getInstance(ULocale.FRENCH);
257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void TestEmpty() {
277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // Gender of the empty list is always OTHER regardless of gender style.
287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        check(Gender.OTHER, Gender.OTHER, Gender.OTHER);
297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void TestOne() {
327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // Gender of single item list is always gender of sole item regardless of
337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // gender style.
347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        for (Gender g : Gender.values()) {
357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            check(g, g, g, g);
367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void TestOther() {
407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        check(Gender.OTHER, Gender.MALE, Gender.MALE, Gender.MALE, Gender.MALE);
417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        check(Gender.OTHER, Gender.OTHER, Gender.MALE, Gender.MALE, Gender.FEMALE);
427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        check(Gender.OTHER, Gender.OTHER, Gender.MALE, Gender.MALE, Gender.OTHER);
437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        check(Gender.OTHER, Gender.OTHER, Gender.MALE, Gender.FEMALE, Gender.MALE);
457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        check(Gender.OTHER, Gender.FEMALE, Gender.FEMALE, Gender.FEMALE, Gender.FEMALE);
467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        check(Gender.OTHER, Gender.OTHER, Gender.MALE, Gender.FEMALE, Gender.OTHER);
477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        check(Gender.OTHER, Gender.OTHER, Gender.MALE, Gender.OTHER, Gender.MALE);
497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        check(Gender.OTHER, Gender.OTHER, Gender.MALE, Gender.OTHER, Gender.FEMALE);
507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        check(Gender.OTHER, Gender.OTHER, Gender.MALE, Gender.OTHER, Gender.OTHER);
517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void check(Gender neutral, Gender mixed, Gender taints, Gender... genders) {
547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        List<Gender> mixed0 = Arrays.asList(genders);
557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        assertEquals("neutral " + mixed0, neutral, NEUTRAL_LOCALE.getListGender(mixed0));
567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        assertEquals("mixed neutral " + mixed0, mixed, MIXED_NEUTRAL_LOCALE.getListGender(mixed0));
577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        assertEquals("male taints " + mixed0, taints, MALE_TAINTS_LOCALE.getListGender(mixed0));
587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void TestFallback() {
617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        assertEquals("Strange locale = root", GenderInfo.getInstance(ULocale.ROOT), GenderInfo.getInstance(new ULocale("xxx")));
627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        assertEquals("Strange locale = root", GenderInfo.getInstance(ULocale.FRANCE), GenderInfo.getInstance(ULocale.CANADA_FRENCH));
637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert}
65