void Win32NumberTest::testLocales(TestLog *log) { int32_t lcidCount = 0; Win32Utilities::LCIDRecord *lcidRecords = Win32Utilities::getLocales(lcidCount); for(int i = 0; i < lcidCount; i += 1) { UErrorCode status = U_ZERO_ERROR; char localeID[128]; // NULL localeID means ICU didn't recognize the lcid if (lcidRecords[i].localeID == NULL) { continue; } strcpy(localeID, lcidRecords[i].localeID); if (strchr(localeID, '@') > 0) { strcat(localeID, ";"); } else { strcat(localeID, "@"); } strcat(localeID, "compat=host"); Locale ulocale(localeID); NumberFormat *wnf = NumberFormat::createInstance(ulocale, status); NumberFormat *wcf = NumberFormat::createCurrencyInstance(ulocale, status); testLocale(lcidRecords[i].localeID, lcidRecords[i].lcid, wnf, FALSE, log); testLocale(lcidRecords[i].localeID, lcidRecords[i].lcid, wcf, TRUE, log); #if 0 char *old_locale = strdup(setlocale(LC_ALL, NULL)); setlocale(LC_ALL, "German"); testLocale(lcidRecords[i].localeID, lcidRecords[i].lcid, wnf, FALSE, log); testLocale(lcidRecords[i].localeID, lcidRecords[i].lcid, wcf, TRUE, log); setlocale(LC_ALL, old_locale); free(old_locale); #endif delete wcf; delete wnf; } Win32Utilities::freeLocales(lcidRecords); }
int main() { std::locale ulocale( std::locale(), new codecvt_to_upper); std::wstring peter = L"peter"; std::wofstream ws( "out.txt"); ws << peter; ws.close(); std::wifstream in( "out.txt"); in.imbue( ulocale); wchar_t c; while ( in >> c) { std::wcout << c; } }
void PluralFormatTest::helperTestResults(const char** localeArray, int32_t capacityOfArray, UnicodeString& testPattern, int8_t *expResults) { UErrorCode status; UnicodeString plResult; const UnicodeString PLKeywordLookups[6] = { UNICODE_STRING_SIMPLE("zero"), UNICODE_STRING_SIMPLE("one"), UNICODE_STRING_SIMPLE("two"), UNICODE_STRING_SIMPLE("few"), UNICODE_STRING_SIMPLE("many"), UNICODE_STRING_SIMPLE("other"), }; for (int32_t i=0; i<capacityOfArray; ++i) { const char *locale = localeArray[i]; Locale ulocale((const char *)locale); status = U_ZERO_ERROR; PluralFormat plFmt(ulocale, testPattern, status); if (U_FAILURE(status)) { dataerrln("Failed to apply pattern to locale:"+UnicodeString(localeArray[i]) + " - " + u_errorName(status)); continue; } for (int32_t n=0; n<PLURAL_TEST_ARRAY_SIZE; ++n) { if (expResults[n]!=-1) { status = U_ZERO_ERROR; plResult = plFmt.format(n, status); if (U_FAILURE(status)) { errln("ERROR: Failed to format number in locale data tests with locale: "+ UnicodeString(localeArray[i])); } if (plResult != PLKeywordLookups[expResults[n]]){ plResult = plFmt.format(n, status); errln("ERROR: Unexpected format result in locale: "+UnicodeString(localeArray[i])+ UnicodeString(" got:")+plResult+ UnicodeString(" expecting:")+ PLKeywordLookups[expResults[n]]); } } } } }
int LoadScriptIntoVector( const wchar_t* _input, Script& _vector ) { // Load file std::locale ulocale(std::locale(), new std::codecvt_utf8<wchar_t>) ; std::wifstream inputFile; inputFile.open(_input); inputFile.imbue(ulocale); // Check file if(!inputFile){ printf("Failed to load: %s\n", _input); return -1; }; // Load meaningful lines into vector std::wstring line; while (std::getline(inputFile , line)) { if(line != to_wstring("")){ std::wstringstream iss(line); std::wstring item; iss >> item; if(item == to_wstring("label")) { Chapter temp; iss >> temp.m_name; temp.m_name.erase(temp.m_name.end() - 1); _vector.m_chapter.push_back(temp); }; ScriptLine temp; temp.m_line = line; if(_vector.m_chapter.size() == 0) { Chapter temp; _vector.m_chapter.push_back(temp); }; _vector.m_chapter.back().m_script.push_back(temp); };
/** * Test locale data used in PluralFormat class. */ void PluralFormatTest::pluralFormatLocaleTest(/*char *par*/) { int8_t pluralResults[PLURAL_TEST_ARRAY_SIZE]; // 0: is for default // ======= Test DefaultRule logln("Testing PluralRules with no rule."); const char* oneRuleLocales[4] = {"ja", "ko", "tr", "vi"}; UnicodeString testPattern = UNICODE_STRING_SIMPLE("other{other}"); uprv_memset(pluralResults, -1, sizeof(pluralResults)); pluralResults[0]= PFT_OTHER; // other helperTestResults(oneRuleLocales, 4, testPattern, pluralResults); // ====== Test Singular1 locales. logln("Testing singular1 locales."); const char* singular1Locales[52] = {"bem","da","de","el","en","eo","es","et","fi", "fo","gl","he","it","nb","nl","nn","no","pt","pt_PT","sv","af","bg","bn","ca","eu","fur","fy", "gu","ha","is","ku","lb","ml","mr","nah","ne","om","or","pa","pap","ps","so","sq","sw","ta", "te","tk","ur","zu","mn","gsw","rm"}; testPattern = UNICODE_STRING_SIMPLE("one{one} other{other}"); uprv_memset(pluralResults, -1, sizeof(pluralResults)); pluralResults[0]= PFT_OTHER; pluralResults[1]= PFT_ONE; pluralResults[2]= PFT_OTHER; helperTestResults(singular1Locales, 52, testPattern, pluralResults); // ======== Test Singular01 locales. logln("Testing singular1 locales."); const char* singular01Locales[3] = {"ff","fr","kab"}; testPattern = UNICODE_STRING_SIMPLE("one{one} other{other}"); uprv_memset(pluralResults, -1, sizeof(pluralResults)); pluralResults[0]= PFT_ONE; pluralResults[2]= PFT_OTHER; helperTestResults(singular01Locales, 3, testPattern, pluralResults); // ======== Test ZeroSingular locales. logln("Testing singular1 locales."); const char* zeroSingularLocales[1] = {"lv"}; testPattern = UNICODE_STRING_SIMPLE("zero{zero} one{one} other{other}"); uprv_memset(pluralResults, -1, sizeof(pluralResults)); pluralResults[0]= PFT_ZERO; pluralResults[1]= PFT_ONE; pluralResults[2]= PFT_OTHER; for (int32_t i=2; i<20; ++i) { if (i==11) continue; pluralResults[i*10+1] = PFT_ONE; pluralResults[i*10+2] = PFT_OTHER; } helperTestResults(zeroSingularLocales, 1, testPattern, pluralResults); // ======== Test singular dual locales. logln("Testing singular1 locales."); const char* singularDualLocales[1] = {"ga"}; testPattern = UNICODE_STRING_SIMPLE("one{one} two{two} other{other}"); uprv_memset(pluralResults, -1, sizeof(pluralResults)); pluralResults[0]= PFT_OTHER; pluralResults[1]= PFT_ONE; pluralResults[2]= PFT_TWO; pluralResults[3]= PFT_OTHER; helperTestResults(singularDualLocales, 1, testPattern, pluralResults); // ======== Test Singular Zero Some locales. logln("Testing singular1 locales."); const char* singularZeroSomeLocales[1] = {"ro"}; testPattern = UNICODE_STRING_SIMPLE("few{few} one{one} other{other}"); uprv_memset(pluralResults, -1, sizeof(pluralResults)); pluralResults[0]= PFT_FEW; for (int32_t i=1; i<20; ++i) { if (i==11) continue; pluralResults[i] = PFT_FEW; pluralResults[100+i] = PFT_FEW; } pluralResults[1]= PFT_ONE; helperTestResults(singularZeroSomeLocales, 1, testPattern, pluralResults); // ======== Test Special 12/19. logln("Testing special 12 and 19."); const char* special12_19Locales[1] = {"lt"}; testPattern = UNICODE_STRING_SIMPLE("one{one} few{few} other{other}"); uprv_memset(pluralResults, -1, sizeof(pluralResults)); pluralResults[0]= PFT_OTHER; pluralResults[1]= PFT_ONE; pluralResults[2]= PFT_FEW; pluralResults[10]= PFT_OTHER; for (int32_t i=2; i<20; ++i) { if (i==11) continue; pluralResults[i*10+1] = PFT_ONE; pluralResults[i*10+2] = PFT_FEW; pluralResults[(i+1)*10] = PFT_OTHER; } helperTestResults(special12_19Locales, 1, testPattern, pluralResults); // ======== Test Paucal Except 11 14. logln("Testing Paucal Except 11 and 14."); const char* paucal01Locales[4] = {"hr","ru","sr","uk"}; testPattern = UNICODE_STRING_SIMPLE("one{one} many{many} few{few} other{other}"); uprv_memset(pluralResults, -1, sizeof(pluralResults)); pluralResults[0]= PFT_MANY; pluralResults[1]= PFT_ONE; pluralResults[2]= PFT_FEW; pluralResults[5]= PFT_MANY; pluralResults[6]= PFT_MANY; pluralResults[7]= PFT_MANY; pluralResults[8]= PFT_MANY; pluralResults[9]= PFT_MANY; for (int32_t i=2; i<20; ++i) { if (i==11) continue; pluralResults[i*10+1] = PFT_ONE; pluralResults[i*10+2] = PFT_FEW; pluralResults[i*10+5] = PFT_MANY; pluralResults[i*10+6] = PFT_MANY; pluralResults[i*10+7] = PFT_MANY; pluralResults[i*10+8] = PFT_MANY; pluralResults[i*10+9] = PFT_MANY; } helperTestResults(paucal01Locales, 4, testPattern, pluralResults); // ======== Test Singular Paucal. logln("Testing Singular Paucal."); const char* singularPaucalLocales[2] = {"cs","sk"}; testPattern = UNICODE_STRING_SIMPLE("one{one} few{few} other{other}"); uprv_memset(pluralResults, -1, sizeof(pluralResults)); pluralResults[0]= PFT_OTHER; pluralResults[1]= PFT_ONE; pluralResults[2]= PFT_FEW; pluralResults[5]= PFT_OTHER; helperTestResults(singularPaucalLocales, 2, testPattern, pluralResults); // ======== Test Paucal (1), (2,3,4). logln("Testing Paucal (1), (2,3,4)."); const char* paucal02Locales[1] = {"pl"}; testPattern = UNICODE_STRING_SIMPLE("one{one} few{few} other{other}"); uprv_memset(pluralResults, -1, sizeof(pluralResults)); pluralResults[0]= PFT_OTHER; pluralResults[1]= PFT_ONE; pluralResults[5]= PFT_OTHER; for (int32_t i=0; i<20; ++i) { if ((i==1)||(i==11)) { pluralResults[i*10+2] = PFT_OTHER; pluralResults[i*10+3] = PFT_OTHER; pluralResults[i*10+4] = PFT_OTHER; } else { pluralResults[i*10+2] = PFT_FEW; pluralResults[i*10+3] = PFT_FEW; pluralResults[i*10+4] = PFT_FEW; pluralResults[i*10+5] = PFT_OTHER; } } helperTestResults(paucal02Locales, 1, testPattern, pluralResults); // ======== Test Paucal (1), (2), (3,4). logln("Testing Paucal (1), (2), (3,4)."); const char* paucal03Locales[1] = {"sl"}; testPattern = UNICODE_STRING_SIMPLE("one{one} two{two} few{few} other{other}"); uprv_memset(pluralResults, -1, sizeof(pluralResults)); pluralResults[0]= PFT_OTHER; pluralResults[1]= PFT_ONE; pluralResults[2]= PFT_TWO; pluralResults[3]= PFT_FEW; pluralResults[5]= PFT_OTHER; pluralResults[101]= PFT_ONE; pluralResults[102]= PFT_TWO; pluralResults[103]= PFT_FEW; pluralResults[105]= PFT_OTHER; helperTestResults(paucal03Locales, 1, testPattern, pluralResults); // TODO: move this test to Unit Test after CLDR 1.6 is final and we support float // ======= Test French "WITHIN rule logln("Testing PluralRules with fr rule."); testPattern = UNICODE_STRING_SIMPLE("one{one} other{other}"); Locale ulocale((const char *)"fr"); UErrorCode status = U_ZERO_ERROR; PluralFormat plFmt(ulocale, testPattern, status); if (U_FAILURE(status)) { dataerrln("Failed to apply pattern to fr locale - %s", u_errorName(status)); } else { status = U_ZERO_ERROR; UnicodeString plResult = plFmt.format(0.0, status); // retrun ONE plResult = plFmt.format(0.5, status); // retrun ONE plResult = plFmt.format(1.0, status); // retrun ONE plResult = plFmt.format(1.9, status); // retrun ONE plResult = plFmt.format(2.0, status); // retrun OTHER } }
void Win32DateTimeTest::testLocales(TestLog *log) { SYSTEMTIME winNow; UDate icuNow = 0; SYSTEMTIME st; FILETIME ft; UnicodeString zoneID; const TimeZone *tz = TimeZone::createDefault(); TIME_ZONE_INFORMATION tzi; tz->getID(zoneID); if (! uprv_getWindowsTimeZoneInfo(&tzi, zoneID.getBuffer(), zoneID.length())) { UBool found = FALSE; int32_t ec = TimeZone::countEquivalentIDs(zoneID); for (int z = 0; z < ec; z += 1) { UnicodeString equiv = TimeZone::getEquivalentID(zoneID, z); if (found = uprv_getWindowsTimeZoneInfo(&tzi, equiv.getBuffer(), equiv.length())) { break; } } if (! found) { GetTimeZoneInformation(&tzi); } } GetSystemTime(&st); SystemTimeToFileTime(&st, &ft); SystemTimeToTzSpecificLocalTime(&tzi, &st, &winNow); int64_t wftNow = ((int64_t) ft.dwHighDateTime << 32) + ft.dwLowDateTime; UErrorCode status = U_ZERO_ERROR; int64_t udtsNow = utmscale_fromInt64(wftNow, UDTS_WINDOWS_FILE_TIME, &status); icuNow = (UDate) utmscale_toInt64(udtsNow, UDTS_ICU4C_TIME, &status); int32_t lcidCount = 0; Win32Utilities::LCIDRecord *lcidRecords = Win32Utilities::getLocales(lcidCount); for(int i = 0; i < lcidCount; i += 1) { UErrorCode status = U_ZERO_ERROR; WCHAR longDateFormat[81], longTimeFormat[81], wdBuffer[256], wtBuffer[256]; int32_t calType = 0; // NULL localeID means ICU didn't recognize this locale if (lcidRecords[i].localeID == NULL) { continue; } GetLocaleInfoW(lcidRecords[i].lcid, LOCALE_SLONGDATE, longDateFormat, 81); GetLocaleInfoW(lcidRecords[i].lcid, LOCALE_STIMEFORMAT, longTimeFormat, 81); GetLocaleInfoW(lcidRecords[i].lcid, LOCALE_RETURN_NUMBER|LOCALE_ICALENDARTYPE, (LPWSTR) calType, sizeof(int32_t)); char localeID[64]; uprv_strcpy(localeID, lcidRecords[i].localeID); uprv_strcat(localeID, getCalendarType(calType)); UnicodeString ubBuffer, udBuffer, utBuffer; Locale ulocale(localeID); int32_t wdLength, wtLength; wdLength = GetDateFormatW(lcidRecords[i].lcid, DATE_LONGDATE, &winNow, NULL, wdBuffer, UPRV_LENGTHOF(wdBuffer)); wtLength = GetTimeFormatW(lcidRecords[i].lcid, 0, &winNow, NULL, wtBuffer, UPRV_LENGTHOF(wtBuffer)); if (uprv_strchr(localeID, '@') > 0) { uprv_strcat(localeID, ";"); } else { uprv_strcat(localeID, "@"); } uprv_strcat(localeID, "compat=host"); Locale wlocale(localeID); DateFormat *wbf = DateFormat::createDateTimeInstance(DateFormat::kFull, DateFormat::kFull, wlocale); DateFormat *wdf = DateFormat::createDateInstance(DateFormat::kFull, wlocale); DateFormat *wtf = DateFormat::createTimeInstance(DateFormat::kFull, wlocale); wbf->format(icuNow, ubBuffer); wdf->format(icuNow, udBuffer); wtf->format(icuNow, utBuffer); if (ubBuffer.indexOf(wdBuffer, wdLength - 1, 0) < 0) { UnicodeString baseName(wlocale.getBaseName()); UnicodeString expected(wdBuffer); log->errln("DateTime format error for locale " + baseName + ": expected date \"" + expected + "\" got \"" + ubBuffer + "\""); } if (ubBuffer.indexOf(wtBuffer, wtLength - 1, 0) < 0) { UnicodeString baseName(wlocale.getBaseName()); UnicodeString expected(wtBuffer); log->errln("DateTime format error for locale " + baseName + ": expected time \"" + expected + "\" got \"" + ubBuffer + "\""); } if (udBuffer.compare(wdBuffer) != 0) { UnicodeString baseName(wlocale.getBaseName()); UnicodeString expected(wdBuffer); log->errln("Date format error for locale " + baseName + ": expected \"" + expected + "\" got \"" + udBuffer + "\""); } if (utBuffer.compare(wtBuffer) != 0) { UnicodeString baseName(wlocale.getBaseName()); UnicodeString expected(wtBuffer); log->errln("Time format error for locale " + baseName + ": expected \"" + expected + "\" got \"" + utBuffer + "\""); } delete wbf; delete wdf; delete wtf; } Win32Utilities::freeLocales(lcidRecords); delete tz; }