16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/******************************************************************** 26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * COPYRIGHT: 36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Copyright (c) 1997-2012, International Business Machines Corporation and 46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * others. All Rights Reserved. 56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ********************************************************************/ 66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* Modification History: 76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/ 86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h" 106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_FORMATTING 126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include <stdlib.h> 146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/gender.h" 156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/unum.h" 166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "intltest.h" 176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define LENGTHOF(array) (int32_t)(sizeof(array) / sizeof((array)[0])) 196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const UGender kSingleFemale[] = {UGENDER_FEMALE}; 216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const UGender kSingleMale[] = {UGENDER_MALE}; 226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const UGender kSingleOther[] = {UGENDER_OTHER}; 236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const UGender kAllFemale[] = {UGENDER_FEMALE, UGENDER_FEMALE}; 256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const UGender kAllMale[] = {UGENDER_MALE, UGENDER_MALE}; 266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const UGender kAllOther[] = {UGENDER_OTHER, UGENDER_OTHER}; 276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const UGender kFemaleMale[] = {UGENDER_FEMALE, UGENDER_MALE}; 296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const UGender kFemaleOther[] = {UGENDER_FEMALE, UGENDER_OTHER}; 306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const UGender kMaleOther[] = {UGENDER_MALE, UGENDER_OTHER}; 316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass GenderInfoTest : public IntlTest { 346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgpublic: 356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org GenderInfoTest() { 366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=0); 396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgprivate: 406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org void TestGetListGender(); 416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org void TestFallback(); 426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org void check(UGender expected_neutral, UGender expected_mixed, UGender expected_taints, const UGender* genderList, int32_t listLength); 436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org void checkLocale(const Locale& locale, UGender expected, const UGender* genderList, int32_t listLength); 446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid GenderInfoTest::runIndexedTest(int32_t index, UBool exec, const char *&name, char * /* par */) { 476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (exec) { 486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("TestSuite GenderInfoTest: "); 496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TESTCASE_AUTO_BEGIN; 516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TESTCASE_AUTO(TestGetListGender); 526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TESTCASE_AUTO(TestFallback); 536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TESTCASE_AUTO_END; 546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid GenderInfoTest::TestGetListGender() { 576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org check(UGENDER_OTHER, UGENDER_OTHER, UGENDER_OTHER, NULL, 0); 586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org check(UGENDER_FEMALE, UGENDER_FEMALE, UGENDER_FEMALE, kSingleFemale, LENGTHOF(kSingleFemale)); 596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org check(UGENDER_MALE, UGENDER_MALE, UGENDER_MALE, kSingleMale, LENGTHOF(kSingleMale)); 606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org check(UGENDER_OTHER, UGENDER_OTHER, UGENDER_OTHER, kSingleOther, LENGTHOF(kSingleOther)); 616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org check(UGENDER_OTHER, UGENDER_FEMALE, UGENDER_FEMALE, kAllFemale, LENGTHOF(kAllFemale)); 636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org check(UGENDER_OTHER, UGENDER_MALE, UGENDER_MALE, kAllMale, LENGTHOF(kAllMale)); 646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org check(UGENDER_OTHER, UGENDER_OTHER, UGENDER_MALE, kAllOther, LENGTHOF(kAllOther)); 656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org check(UGENDER_OTHER, UGENDER_OTHER, UGENDER_MALE, kFemaleMale, LENGTHOF(kFemaleMale)); 676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org check(UGENDER_OTHER, UGENDER_OTHER, UGENDER_MALE, kFemaleOther, LENGTHOF(kFemaleOther)); 686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org check(UGENDER_OTHER, UGENDER_OTHER, UGENDER_MALE, kMaleOther, LENGTHOF(kMaleOther)); 696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid GenderInfoTest::TestFallback() { 726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const GenderInfo* actual = GenderInfo::getInstance("xx", status); 746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errcheckln(status, "Fail to create GenderInfo - %s", u_errorName(status)); 766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const GenderInfo* expected = GenderInfo::getNeutralInstance(); 796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (expected != actual) { 806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("For Neutral, expected %d got %d", expected, actual); 816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org actual = GenderInfo::getInstance("fr_CA", status); 836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errcheckln(status, "Fail to create GenderInfo - %s", u_errorName(status)); 856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org expected = GenderInfo::getMaleTaintsInstance(); 886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (expected != actual) { 896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("For Male Taints, Expected %d got %d", expected, actual); 906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid GenderInfoTest::check( 946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UGender expected_neutral, UGender expected_mixed, UGender expected_taints, const UGender* genderList, int32_t listLength) { 956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org checkLocale(Locale::getUS(), expected_neutral, genderList, listLength); 966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org checkLocale("is", expected_mixed, genderList, listLength); 976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org checkLocale(Locale::getFrench(), expected_taints, genderList, listLength); 986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid GenderInfoTest::checkLocale( 1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const Locale& locale, UGender expected, const UGender* genderList, int32_t listLength) { 1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const GenderInfo* gi = GenderInfo::getInstance(locale, status); 1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errcheckln(status, "Fail to create GenderInfo - %s", u_errorName(status)); 1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UGender actual = gi->getListGender(genderList, listLength, status); 1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errcheckln(status, "Fail to get gender of list - %s", u_errorName(status)); 1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (actual != expected) { 1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("For locale: %s expected: %d got %d", locale.getName(), expected, actual); 1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgextern IntlTest *createGenderInfoTest() { 1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return new GenderInfoTest(); 1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif /* #if !UCONFIG_NO_FORMATTING */ 123