19596a2c1Sopenharmony_ci/* 29596a2c1Sopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd. 39596a2c1Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 49596a2c1Sopenharmony_ci * you may not use this file except in compliance with the License. 59596a2c1Sopenharmony_ci * You may obtain a copy of the License at 69596a2c1Sopenharmony_ci * 79596a2c1Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 89596a2c1Sopenharmony_ci * 99596a2c1Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 109596a2c1Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 119596a2c1Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 129596a2c1Sopenharmony_ci * See the License for the specific language governing permissions and 139596a2c1Sopenharmony_ci * limitations under the License. 149596a2c1Sopenharmony_ci */ 159596a2c1Sopenharmony_ci 169596a2c1Sopenharmony_ci#include <gtest/gtest.h> 179596a2c1Sopenharmony_ci#include <map> 189596a2c1Sopenharmony_ci#include <vector> 199596a2c1Sopenharmony_ci 209596a2c1Sopenharmony_ci#include "accesstoken_kit.h" 219596a2c1Sopenharmony_ci#include "character.h" 229596a2c1Sopenharmony_ci#include "collator.h" 239596a2c1Sopenharmony_ci#include "date_time_filter.h" 249596a2c1Sopenharmony_ci#include "date_time_format.h" 259596a2c1Sopenharmony_ci#include "date_time_rule.h" 269596a2c1Sopenharmony_ci#include "holiday_manager.h" 279596a2c1Sopenharmony_ci#include "i18n_break_iterator.h" 289596a2c1Sopenharmony_ci#include "i18n_calendar.h" 299596a2c1Sopenharmony_ci#include "i18n_service_ability_client.h" 309596a2c1Sopenharmony_ci#include "i18n_timezone.h" 319596a2c1Sopenharmony_ci#include "i18n_types.h" 329596a2c1Sopenharmony_ci#include "index_util.h" 339596a2c1Sopenharmony_ci#include "locale_compare.h" 349596a2c1Sopenharmony_ci#include "locale_config.h" 359596a2c1Sopenharmony_ci#include "locale_info.h" 369596a2c1Sopenharmony_ci#include "nativetoken_kit.h" 379596a2c1Sopenharmony_ci#include "measure_data.h" 389596a2c1Sopenharmony_ci#include "number_format.h" 399596a2c1Sopenharmony_ci#include "plural_rules.h" 409596a2c1Sopenharmony_ci#include "preferred_language.h" 419596a2c1Sopenharmony_ci#include "regex_rule.h" 429596a2c1Sopenharmony_ci#include "relative_time_format.h" 439596a2c1Sopenharmony_ci#include "system_locale_manager.h" 449596a2c1Sopenharmony_ci#include "taboo_utils.h" 459596a2c1Sopenharmony_ci#include "taboo.h" 469596a2c1Sopenharmony_ci#include "token_setproc.h" 479596a2c1Sopenharmony_ci#include "utils.h" 489596a2c1Sopenharmony_ci#include "intl_test.h" 499596a2c1Sopenharmony_ci#include "generate_ics_file.h" 509596a2c1Sopenharmony_ci#include <unistd.h> 519596a2c1Sopenharmony_ci 529596a2c1Sopenharmony_ciusing namespace OHOS::Global::I18n; 539596a2c1Sopenharmony_ciusing testing::ext::TestSize; 549596a2c1Sopenharmony_ciusing namespace std; 559596a2c1Sopenharmony_ci 569596a2c1Sopenharmony_cinamespace OHOS { 579596a2c1Sopenharmony_cinamespace Global { 589596a2c1Sopenharmony_cinamespace I18n { 599596a2c1Sopenharmony_cistatic const uint64_t SELF_TOKEN_ID = GetSelfTokenID(); 609596a2c1Sopenharmony_cistatic constexpr int32_t I18N_UID = 3013; 619596a2c1Sopenharmony_cistatic constexpr int32_t ROOT_UID = 0; 629596a2c1Sopenharmony_ci 639596a2c1Sopenharmony_cistring IntlTest::originalLanguage; 649596a2c1Sopenharmony_cistring IntlTest::originalRegion; 659596a2c1Sopenharmony_cistring IntlTest::originalLocale; 669596a2c1Sopenharmony_ci 679596a2c1Sopenharmony_civoid IntlTest::SetUpTestCase(void) 689596a2c1Sopenharmony_ci{ 699596a2c1Sopenharmony_ci originalLanguage = LocaleConfig::GetSystemLanguage(); 709596a2c1Sopenharmony_ci originalRegion = LocaleConfig::GetSystemRegion(); 719596a2c1Sopenharmony_ci originalLocale = LocaleConfig::GetSystemLocale(); 729596a2c1Sopenharmony_ci LocaleConfig::SetSystemLanguage("zh-Hans"); 739596a2c1Sopenharmony_ci LocaleConfig::SetSystemRegion("CN"); 749596a2c1Sopenharmony_ci LocaleConfig::SetSystemLocale("zh-Hans-CN"); 759596a2c1Sopenharmony_ci} 769596a2c1Sopenharmony_ci 779596a2c1Sopenharmony_civoid IntlTest::TearDownTestCase(void) 789596a2c1Sopenharmony_ci{ 799596a2c1Sopenharmony_ci LocaleConfig::SetSystemLanguage(originalLanguage); 809596a2c1Sopenharmony_ci LocaleConfig::SetSystemRegion(originalRegion); 819596a2c1Sopenharmony_ci LocaleConfig::SetSystemLocale(originalLocale); 829596a2c1Sopenharmony_ci} 839596a2c1Sopenharmony_ci 849596a2c1Sopenharmony_civoid IntlTest::SetUp(void) 859596a2c1Sopenharmony_ci{} 869596a2c1Sopenharmony_ci 879596a2c1Sopenharmony_civoid IntlTest::TearDown(void) 889596a2c1Sopenharmony_ci{} 899596a2c1Sopenharmony_ci 909596a2c1Sopenharmony_civoid RemoveTokenAndPermissions() 919596a2c1Sopenharmony_ci{ 929596a2c1Sopenharmony_ci SetSelfTokenID(SELF_TOKEN_ID); 939596a2c1Sopenharmony_ci seteuid(ROOT_UID); 949596a2c1Sopenharmony_ci OHOS::Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo(); 959596a2c1Sopenharmony_ci seteuid(I18N_UID); 969596a2c1Sopenharmony_ci} 979596a2c1Sopenharmony_ci 989596a2c1Sopenharmony_civoid AddTokenAndPermissions() 999596a2c1Sopenharmony_ci{ 1009596a2c1Sopenharmony_ci const char* i18nPermissions[] = { 1019596a2c1Sopenharmony_ci "ohos.permission.UPDATE_CONFIGURATION" 1029596a2c1Sopenharmony_ci }; 1039596a2c1Sopenharmony_ci NativeTokenInfoParams i18nInfoInstance = { 1049596a2c1Sopenharmony_ci .dcapsNum = 0, 1059596a2c1Sopenharmony_ci .permsNum = sizeof(i18nPermissions) / sizeof(i18nPermissions[0]), 1069596a2c1Sopenharmony_ci .aclsNum = 0, 1079596a2c1Sopenharmony_ci .dcaps = nullptr, 1089596a2c1Sopenharmony_ci .perms = i18nPermissions, 1099596a2c1Sopenharmony_ci .acls = nullptr, 1109596a2c1Sopenharmony_ci .aplStr = "system_basic", 1119596a2c1Sopenharmony_ci }; 1129596a2c1Sopenharmony_ci i18nInfoInstance.processName = "I18nTest"; 1139596a2c1Sopenharmony_ci SetSelfTokenID(GetAccessTokenId(&i18nInfoInstance)); 1149596a2c1Sopenharmony_ci seteuid(ROOT_UID); 1159596a2c1Sopenharmony_ci OHOS::Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo(); 1169596a2c1Sopenharmony_ci seteuid(I18N_UID); 1179596a2c1Sopenharmony_ci} 1189596a2c1Sopenharmony_ci 1199596a2c1Sopenharmony_civoid InitTestEnvironment() 1209596a2c1Sopenharmony_ci{ 1219596a2c1Sopenharmony_ci AddTokenAndPermissions(); 1229596a2c1Sopenharmony_ci I18nServiceAbilityClient::SetSystemLocale("zh-Hans-CN"); 1239596a2c1Sopenharmony_ci RemoveTokenAndPermissions(); 1249596a2c1Sopenharmony_ci} 1259596a2c1Sopenharmony_ci 1269596a2c1Sopenharmony_civoid RestoreEnvironment(const std::string &originLocaleTag) 1279596a2c1Sopenharmony_ci{ 1289596a2c1Sopenharmony_ci AddTokenAndPermissions(); 1299596a2c1Sopenharmony_ci I18nServiceAbilityClient::SetSystemLocale(originLocaleTag); 1309596a2c1Sopenharmony_ci RemoveTokenAndPermissions(); 1319596a2c1Sopenharmony_ci} 1329596a2c1Sopenharmony_ci 1339596a2c1Sopenharmony_ci/** 1349596a2c1Sopenharmony_ci * @tc.name: IntlFuncTest001 1359596a2c1Sopenharmony_ci * @tc.desc: Test Intl DateTimeFormat.format 1369596a2c1Sopenharmony_ci * @tc.type: FUNC 1379596a2c1Sopenharmony_ci */ 1389596a2c1Sopenharmony_ciHWTEST_F(IntlTest, IntlFuncTest001, TestSize.Level1) 1399596a2c1Sopenharmony_ci{ 1409596a2c1Sopenharmony_ci string locale = "zh-CN-u-hc-h12"; 1419596a2c1Sopenharmony_ci string expects = "公元1970年1月1日星期四 上午8:20:34"; 1429596a2c1Sopenharmony_ci vector<string> locales; 1439596a2c1Sopenharmony_ci locales.push_back("jessie"); 1449596a2c1Sopenharmony_ci locales.push_back(locale); 1459596a2c1Sopenharmony_ci map<string, string> options = { { "year", "numeric" }, 1469596a2c1Sopenharmony_ci { "month", "narrow" }, 1479596a2c1Sopenharmony_ci { "day", "numeric" }, 1489596a2c1Sopenharmony_ci { "hour", "numeric" }, 1499596a2c1Sopenharmony_ci { "minute", "2-digit" }, 1509596a2c1Sopenharmony_ci { "second", "numeric" }, 1519596a2c1Sopenharmony_ci { "weekday", "long" }, 1529596a2c1Sopenharmony_ci { "era", "short"} }; 1539596a2c1Sopenharmony_ci DateTimeFormat *dateFormat = new (std::nothrow) DateTimeFormat(locales, options); 1549596a2c1Sopenharmony_ci if (!dateFormat) { 1559596a2c1Sopenharmony_ci EXPECT_TRUE(false); 1569596a2c1Sopenharmony_ci return; 1579596a2c1Sopenharmony_ci } 1589596a2c1Sopenharmony_ci int64_t milliseconds = 1234567; 1599596a2c1Sopenharmony_ci string out = dateFormat->Format(milliseconds); 1609596a2c1Sopenharmony_ci EXPECT_EQ(out, expects); 1619596a2c1Sopenharmony_ci EXPECT_EQ(dateFormat->GetYear(), "numeric"); 1629596a2c1Sopenharmony_ci EXPECT_EQ(dateFormat->GetMonth(), "narrow"); 1639596a2c1Sopenharmony_ci EXPECT_EQ(dateFormat->GetDay(), "numeric"); 1649596a2c1Sopenharmony_ci EXPECT_EQ(dateFormat->GetHour(), "numeric"); 1659596a2c1Sopenharmony_ci EXPECT_EQ(dateFormat->GetMinute(), "2-digit"); 1669596a2c1Sopenharmony_ci EXPECT_EQ(dateFormat->GetSecond(), "numeric"); 1679596a2c1Sopenharmony_ci EXPECT_EQ(dateFormat->GetWeekday(), "long"); 1689596a2c1Sopenharmony_ci EXPECT_EQ(dateFormat->GetEra(), "short"); 1699596a2c1Sopenharmony_ci EXPECT_EQ(dateFormat->GetHourCycle(), "h12"); 1709596a2c1Sopenharmony_ci delete dateFormat; 1719596a2c1Sopenharmony_ci} 1729596a2c1Sopenharmony_ci 1739596a2c1Sopenharmony_ci/** 1749596a2c1Sopenharmony_ci * @tc.name: IntlFuncTest002 1759596a2c1Sopenharmony_ci * @tc.desc: Test Intl LocaleInfo 1769596a2c1Sopenharmony_ci * @tc.type: FUNC 1779596a2c1Sopenharmony_ci */ 1789596a2c1Sopenharmony_ciHWTEST_F(IntlTest, IntlFuncTest002, TestSize.Level0) 1799596a2c1Sopenharmony_ci{ 1809596a2c1Sopenharmony_ci string locale = "ja-Jpan-JP-u-ca-japanese-hc-h12-co-emoji"; 1819596a2c1Sopenharmony_ci map<string, string> options = { { "hourCycle", "h11" }, 1829596a2c1Sopenharmony_ci { "numeric", "true" }, 1839596a2c1Sopenharmony_ci { "numberingSystem", "jpan" } }; 1849596a2c1Sopenharmony_ci LocaleInfo *loc = new (std::nothrow) LocaleInfo(locale, options); 1859596a2c1Sopenharmony_ci if (!loc) { 1869596a2c1Sopenharmony_ci EXPECT_TRUE(false); 1879596a2c1Sopenharmony_ci return; 1889596a2c1Sopenharmony_ci } 1899596a2c1Sopenharmony_ci EXPECT_EQ(loc->GetLanguage(), "ja"); 1909596a2c1Sopenharmony_ci EXPECT_EQ(loc->GetScript(), "Jpan"); 1919596a2c1Sopenharmony_ci EXPECT_EQ(loc->GetRegion(), "JP"); 1929596a2c1Sopenharmony_ci EXPECT_EQ(loc->GetBaseName(), "ja-Jpan-JP"); 1939596a2c1Sopenharmony_ci EXPECT_EQ(loc->GetCalendar(), "japanese"); 1949596a2c1Sopenharmony_ci EXPECT_EQ(loc->GetHourCycle(), "h11"); 1959596a2c1Sopenharmony_ci EXPECT_EQ(loc->GetNumberingSystem(), "jpan"); 1969596a2c1Sopenharmony_ci EXPECT_EQ(loc->Minimize(), "ja-u-hc-h11-nu-jpan-ca-japanese-co-emoji-kn-true"); 1979596a2c1Sopenharmony_ci EXPECT_EQ(loc->Maximize(), "ja-Jpan-JP-u-hc-h11-nu-jpan-ca-japanese-co-emoji-kn-true"); 1989596a2c1Sopenharmony_ci EXPECT_EQ(loc->GetNumeric(), "true"); 1999596a2c1Sopenharmony_ci EXPECT_EQ(loc->GetCaseFirst(), ""); 2009596a2c1Sopenharmony_ci delete loc; 2019596a2c1Sopenharmony_ci} 2029596a2c1Sopenharmony_ci 2039596a2c1Sopenharmony_ci/** 2049596a2c1Sopenharmony_ci * @tc.name: IntlFuncTest003 2059596a2c1Sopenharmony_ci * @tc.desc: Test Intl LocaleInfo 2069596a2c1Sopenharmony_ci * @tc.type: FUNC 2079596a2c1Sopenharmony_ci */ 2089596a2c1Sopenharmony_ciHWTEST_F(IntlTest, IntlFuncTest003, TestSize.Level1) 2099596a2c1Sopenharmony_ci{ 2109596a2c1Sopenharmony_ci string locale = "en-GB"; 2119596a2c1Sopenharmony_ci LocaleInfo *loc = new (std::nothrow) LocaleInfo(locale); 2129596a2c1Sopenharmony_ci if (!loc) { 2139596a2c1Sopenharmony_ci EXPECT_TRUE(false); 2149596a2c1Sopenharmony_ci return; 2159596a2c1Sopenharmony_ci } 2169596a2c1Sopenharmony_ci string language = "en"; 2179596a2c1Sopenharmony_ci string script = ""; 2189596a2c1Sopenharmony_ci string region = "GB"; 2199596a2c1Sopenharmony_ci string baseName = "en-GB"; 2209596a2c1Sopenharmony_ci EXPECT_EQ(loc->GetLanguage(), language); 2219596a2c1Sopenharmony_ci EXPECT_EQ(loc->GetScript(), script); 2229596a2c1Sopenharmony_ci EXPECT_EQ(loc->GetRegion(), region); 2239596a2c1Sopenharmony_ci EXPECT_EQ(loc->GetBaseName(), baseName); 2249596a2c1Sopenharmony_ci locale = "ja-u-hc-h12-nu-Jpan-JP-kf-japanese-co-emoji-kn-true"; 2259596a2c1Sopenharmony_ci LocaleInfo *localeInfo = new (std::nothrow) LocaleInfo(locale); 2269596a2c1Sopenharmony_ci EXPECT_EQ(localeInfo->GetBaseName(), "ja"); 2279596a2c1Sopenharmony_ci delete localeInfo; 2289596a2c1Sopenharmony_ci delete loc; 2299596a2c1Sopenharmony_ci} 2309596a2c1Sopenharmony_ci 2319596a2c1Sopenharmony_ci/** 2329596a2c1Sopenharmony_ci * @tc.name: IntlFuncTest004 2339596a2c1Sopenharmony_ci * @tc.desc: Test Intl DateTimeFormat.format 2349596a2c1Sopenharmony_ci * @tc.type: FUNC 2359596a2c1Sopenharmony_ci */ 2369596a2c1Sopenharmony_ciHWTEST_F(IntlTest, IntlFuncTest004, TestSize.Level1) 2379596a2c1Sopenharmony_ci{ 2389596a2c1Sopenharmony_ci string locale = "en-GB"; 2399596a2c1Sopenharmony_ci string expects = "2 January 1970, 18:17 – 12 January 1970, 18:20"; 2409596a2c1Sopenharmony_ci vector<string> locales; 2419596a2c1Sopenharmony_ci locales.push_back(locale); 2429596a2c1Sopenharmony_ci string dateStyle = "long"; 2439596a2c1Sopenharmony_ci string timeStyle = "short"; 2449596a2c1Sopenharmony_ci string hourCycle = "h24"; 2459596a2c1Sopenharmony_ci string hour12 = "false"; 2469596a2c1Sopenharmony_ci map<string, string> options = { { "dateStyle", dateStyle }, 2479596a2c1Sopenharmony_ci { "hour12", hour12 }, 2489596a2c1Sopenharmony_ci { "hourCycle", hourCycle }, 2499596a2c1Sopenharmony_ci { "timeStyle", timeStyle } }; 2509596a2c1Sopenharmony_ci DateTimeFormat *dateFormat = new (std::nothrow) DateTimeFormat(locales, options); 2519596a2c1Sopenharmony_ci if (!dateFormat) { 2529596a2c1Sopenharmony_ci EXPECT_TRUE(false); 2539596a2c1Sopenharmony_ci return; 2549596a2c1Sopenharmony_ci } 2559596a2c1Sopenharmony_ci int64_t fromMilliseconds = 123456789; 2569596a2c1Sopenharmony_ci int64_t toMilliseconds = 987654321; 2579596a2c1Sopenharmony_ci string out = dateFormat->FormatRange(fromMilliseconds, toMilliseconds); 2589596a2c1Sopenharmony_ci EXPECT_EQ(out, expects); 2599596a2c1Sopenharmony_ci EXPECT_EQ(dateFormat->GetDateStyle(), dateStyle); 2609596a2c1Sopenharmony_ci EXPECT_EQ(dateFormat->GetTimeStyle(), timeStyle); 2619596a2c1Sopenharmony_ci delete dateFormat; 2629596a2c1Sopenharmony_ci} 2639596a2c1Sopenharmony_ci 2649596a2c1Sopenharmony_ci/** 2659596a2c1Sopenharmony_ci * @tc.name: IntlFuncTest005 2669596a2c1Sopenharmony_ci * @tc.desc: Test Intl DateTimeFormat.format 2679596a2c1Sopenharmony_ci * @tc.type: FUNC 2689596a2c1Sopenharmony_ci */ 2699596a2c1Sopenharmony_ciHWTEST_F(IntlTest, IntlFuncTest005, TestSize.Level1) 2709596a2c1Sopenharmony_ci{ 2719596a2c1Sopenharmony_ci string locale = "ja"; 2729596a2c1Sopenharmony_ci string expects = "1970年1月2日金曜日"; 2739596a2c1Sopenharmony_ci vector<string> locales; 2749596a2c1Sopenharmony_ci locales.push_back(locale); 2759596a2c1Sopenharmony_ci map<string, string> options = { { "year", "numeric" }, 2769596a2c1Sopenharmony_ci { "month", "long" }, 2779596a2c1Sopenharmony_ci { "day", "numeric" }, 2789596a2c1Sopenharmony_ci { "weekday", "long"} }; 2799596a2c1Sopenharmony_ci DateTimeFormat *dateFormat = new (std::nothrow) DateTimeFormat(locales, options); 2809596a2c1Sopenharmony_ci if (!dateFormat) { 2819596a2c1Sopenharmony_ci EXPECT_TRUE(false); 2829596a2c1Sopenharmony_ci return; 2839596a2c1Sopenharmony_ci } 2849596a2c1Sopenharmony_ci int64_t milliseconds = 123456789; 2859596a2c1Sopenharmony_ci string out = dateFormat->Format(milliseconds); 2869596a2c1Sopenharmony_ci EXPECT_EQ(out, expects); 2879596a2c1Sopenharmony_ci int64_t fromMilliseconds = 123456789; 2889596a2c1Sopenharmony_ci int64_t toMilliseconds = 987654321; 2899596a2c1Sopenharmony_ci expects = "1970/01/02(金曜日)~1970/01/12(月曜日)"; 2909596a2c1Sopenharmony_ci out = dateFormat->FormatRange(fromMilliseconds, toMilliseconds); 2919596a2c1Sopenharmony_ci EXPECT_EQ(out, expects); 2929596a2c1Sopenharmony_ci delete dateFormat; 2939596a2c1Sopenharmony_ci} 2949596a2c1Sopenharmony_ci 2959596a2c1Sopenharmony_ci/** 2969596a2c1Sopenharmony_ci * @tc.name: IntlFuncTest006 2979596a2c1Sopenharmony_ci * @tc.desc: Test Intl NumberFormat.format 2989596a2c1Sopenharmony_ci * @tc.type: FUNC 2999596a2c1Sopenharmony_ci */ 3009596a2c1Sopenharmony_ciHWTEST_F(IntlTest, IntlFuncTest006, TestSize.Level1) 3019596a2c1Sopenharmony_ci{ 3029596a2c1Sopenharmony_ci string locale = "en-IN"; 3039596a2c1Sopenharmony_ci string expects = "+1,23,456.79 euros"; 3049596a2c1Sopenharmony_ci vector<string> locales; 3059596a2c1Sopenharmony_ci locales.push_back(locale); 3069596a2c1Sopenharmony_ci string useGrouping = "true"; 3079596a2c1Sopenharmony_ci string minimumIntegerDigits = "7"; 3089596a2c1Sopenharmony_ci string maximumFractionDigits = "2"; 3099596a2c1Sopenharmony_ci string style = "currency"; 3109596a2c1Sopenharmony_ci string currency = "EUR"; 3119596a2c1Sopenharmony_ci map<string, string> options = { { "useGrouping", useGrouping }, 3129596a2c1Sopenharmony_ci { "style", style }, 3139596a2c1Sopenharmony_ci { "currency", currency }, 3149596a2c1Sopenharmony_ci { "currencyDisplay", "name" }, 3159596a2c1Sopenharmony_ci { "currencySign", "accounting" }, 3169596a2c1Sopenharmony_ci { "signDisplay", "always" } }; 3179596a2c1Sopenharmony_ci NumberFormat *numFmt = new (std::nothrow) NumberFormat(locales, options); 3189596a2c1Sopenharmony_ci if (!numFmt) { 3199596a2c1Sopenharmony_ci EXPECT_TRUE(false); 3209596a2c1Sopenharmony_ci return; 3219596a2c1Sopenharmony_ci } 3229596a2c1Sopenharmony_ci string out = numFmt->Format(123456.789); 3239596a2c1Sopenharmony_ci EXPECT_EQ(out, expects); 3249596a2c1Sopenharmony_ci EXPECT_EQ(numFmt->GetUseGrouping(), useGrouping); 3259596a2c1Sopenharmony_ci EXPECT_EQ(numFmt->GetStyle(), style); 3269596a2c1Sopenharmony_ci EXPECT_EQ(numFmt->GetCurrency(), currency); 3279596a2c1Sopenharmony_ci delete numFmt; 3289596a2c1Sopenharmony_ci} 3299596a2c1Sopenharmony_ci 3309596a2c1Sopenharmony_ci/** 3319596a2c1Sopenharmony_ci * @tc.name: IntlFuncTest007 3329596a2c1Sopenharmony_ci * @tc.desc: Test Intl NumberFormat.format 3339596a2c1Sopenharmony_ci * @tc.type: FUNC 3349596a2c1Sopenharmony_ci */ 3359596a2c1Sopenharmony_ciHWTEST_F(IntlTest, IntlFuncTest007, TestSize.Level1) 3369596a2c1Sopenharmony_ci{ 3379596a2c1Sopenharmony_ci string locale = "zh-CN"; 3389596a2c1Sopenharmony_ci string expects = "0,123,456.79米"; 3399596a2c1Sopenharmony_ci vector<string> locales; 3409596a2c1Sopenharmony_ci locales.push_back("ban"); 3419596a2c1Sopenharmony_ci locales.push_back(locale); 3429596a2c1Sopenharmony_ci string minimumIntegerDigits = "7"; 3439596a2c1Sopenharmony_ci string maximumFractionDigits = "2"; 3449596a2c1Sopenharmony_ci string style = "unit"; 3459596a2c1Sopenharmony_ci map<string, string> options = { { "style", style }, 3469596a2c1Sopenharmony_ci { "minimumIntegerDigits", minimumIntegerDigits }, 3479596a2c1Sopenharmony_ci { "maximumFractionDigits", maximumFractionDigits }, 3489596a2c1Sopenharmony_ci { "unit", "meter" }, 3499596a2c1Sopenharmony_ci { "unitDisplay", "long"} }; 3509596a2c1Sopenharmony_ci NumberFormat *numFmt = new (std::nothrow) NumberFormat(locales, options); 3519596a2c1Sopenharmony_ci if (!numFmt) { 3529596a2c1Sopenharmony_ci EXPECT_TRUE(false); 3539596a2c1Sopenharmony_ci return; 3549596a2c1Sopenharmony_ci } 3559596a2c1Sopenharmony_ci string out = numFmt->Format(123456.789); 3569596a2c1Sopenharmony_ci EXPECT_EQ(out, expects); 3579596a2c1Sopenharmony_ci EXPECT_EQ(numFmt->GetStyle(), style); 3589596a2c1Sopenharmony_ci delete numFmt; 3599596a2c1Sopenharmony_ci} 3609596a2c1Sopenharmony_ci 3619596a2c1Sopenharmony_ci/** 3629596a2c1Sopenharmony_ci * @tc.name: IntlFuncTest008 3639596a2c1Sopenharmony_ci * @tc.desc: Test Intl NumberFormat.format 3649596a2c1Sopenharmony_ci * @tc.type: FUNC 3659596a2c1Sopenharmony_ci */ 3669596a2c1Sopenharmony_ciHWTEST_F(IntlTest, IntlFuncTest008, TestSize.Level1) 3679596a2c1Sopenharmony_ci{ 3689596a2c1Sopenharmony_ci string locale = "en-CN"; 3699596a2c1Sopenharmony_ci string expects = "12,345,678.9%"; 3709596a2c1Sopenharmony_ci vector<string> locales; 3719596a2c1Sopenharmony_ci locales.push_back(locale); 3729596a2c1Sopenharmony_ci string minimumIntegerDigits = "7"; 3739596a2c1Sopenharmony_ci string maximumFractionDigits = "2"; 3749596a2c1Sopenharmony_ci string style = "percent"; 3759596a2c1Sopenharmony_ci map<string, string> options = { { "style", style }, 3769596a2c1Sopenharmony_ci { "minimumIntegerDigits", minimumIntegerDigits }, 3779596a2c1Sopenharmony_ci { "maximumFractionDigits", maximumFractionDigits } }; 3789596a2c1Sopenharmony_ci NumberFormat *numFmt = new (std::nothrow) NumberFormat(locales, options); 3799596a2c1Sopenharmony_ci if (!numFmt) { 3809596a2c1Sopenharmony_ci EXPECT_TRUE(false); 3819596a2c1Sopenharmony_ci return; 3829596a2c1Sopenharmony_ci } 3839596a2c1Sopenharmony_ci string out = numFmt->Format(123456.789); 3849596a2c1Sopenharmony_ci EXPECT_EQ(out, expects); 3859596a2c1Sopenharmony_ci EXPECT_EQ(numFmt->GetStyle(), style); 3869596a2c1Sopenharmony_ci delete numFmt; 3879596a2c1Sopenharmony_ci} 3889596a2c1Sopenharmony_ci 3899596a2c1Sopenharmony_ci/** 3909596a2c1Sopenharmony_ci * @tc.name: IntlFuncTest009 3919596a2c1Sopenharmony_ci * @tc.desc: Test Intl NumberFormat.format 3929596a2c1Sopenharmony_ci * @tc.type: FUNC 3939596a2c1Sopenharmony_ci */ 3949596a2c1Sopenharmony_ciHWTEST_F(IntlTest, IntlFuncTest009, TestSize.Level1) 3959596a2c1Sopenharmony_ci{ 3969596a2c1Sopenharmony_ci string locale = "en-CN"; 3979596a2c1Sopenharmony_ci string expects = "0,123,456.79"; 3989596a2c1Sopenharmony_ci vector<string> locales; 3999596a2c1Sopenharmony_ci locales.push_back(locale); 4009596a2c1Sopenharmony_ci string minimumIntegerDigits = "7"; 4019596a2c1Sopenharmony_ci string maximumFractionDigits = "2"; 4029596a2c1Sopenharmony_ci string style = "decimal"; 4039596a2c1Sopenharmony_ci map<string, string> options = { { "style", style }, 4049596a2c1Sopenharmony_ci { "minimumIntegerDigits", minimumIntegerDigits }, 4059596a2c1Sopenharmony_ci { "maximumFractionDigits", maximumFractionDigits } }; 4069596a2c1Sopenharmony_ci NumberFormat *numFmt = new (std::nothrow) NumberFormat(locales, options); 4079596a2c1Sopenharmony_ci if (!numFmt) { 4089596a2c1Sopenharmony_ci EXPECT_TRUE(false); 4099596a2c1Sopenharmony_ci return; 4109596a2c1Sopenharmony_ci } 4119596a2c1Sopenharmony_ci string out = numFmt->Format(123456.789); 4129596a2c1Sopenharmony_ci EXPECT_EQ(out, expects); 4139596a2c1Sopenharmony_ci EXPECT_EQ(numFmt->GetStyle(), style); 4149596a2c1Sopenharmony_ci options = { { "style", "unit" }, 4159596a2c1Sopenharmony_ci { "unit", "meter" }, 4169596a2c1Sopenharmony_ci { "currency", "USD" }, 4179596a2c1Sopenharmony_ci { "currencyDisplay", "symbol" }, 4189596a2c1Sopenharmony_ci { "compactDisplay", "long" }, 4199596a2c1Sopenharmony_ci { "useGrouping", "true" }, 4209596a2c1Sopenharmony_ci { "unitUsage", "length-person" }, 4219596a2c1Sopenharmony_ci { "unitDisplay", "long" } }; 4229596a2c1Sopenharmony_ci NumberFormat *numFormat = new (std::nothrow) NumberFormat(locales, options); 4239596a2c1Sopenharmony_ci map<string, string> res; 4249596a2c1Sopenharmony_ci numFormat->GetResolvedOptions(res); 4259596a2c1Sopenharmony_ci delete numFormat; 4269596a2c1Sopenharmony_ci delete numFmt; 4279596a2c1Sopenharmony_ci} 4289596a2c1Sopenharmony_ci 4299596a2c1Sopenharmony_ci/** 4309596a2c1Sopenharmony_ci * @tc.name: IntlFuncTest0010 4319596a2c1Sopenharmony_ci * @tc.desc: Test Intl NumberFormat.format 4329596a2c1Sopenharmony_ci * @tc.type: FUNC 4339596a2c1Sopenharmony_ci */ 4349596a2c1Sopenharmony_ciHWTEST_F(IntlTest, IntlFuncTest010, TestSize.Level1) 4359596a2c1Sopenharmony_ci{ 4369596a2c1Sopenharmony_ci string locale = "en-CN"; 4379596a2c1Sopenharmony_ci string expects = "1.234568E5"; 4389596a2c1Sopenharmony_ci vector<string> locales; 4399596a2c1Sopenharmony_ci locales.push_back(locale); 4409596a2c1Sopenharmony_ci string style = "decimal"; 4419596a2c1Sopenharmony_ci map<string, string> options = { { "style", style }, 4429596a2c1Sopenharmony_ci { "notation", "scientific" } }; 4439596a2c1Sopenharmony_ci NumberFormat *numFmt = new (std::nothrow) NumberFormat(locales, options); 4449596a2c1Sopenharmony_ci if (!numFmt) { 4459596a2c1Sopenharmony_ci EXPECT_TRUE(false); 4469596a2c1Sopenharmony_ci return; 4479596a2c1Sopenharmony_ci } 4489596a2c1Sopenharmony_ci string out = numFmt->Format(123456.789); 4499596a2c1Sopenharmony_ci EXPECT_EQ(out, expects); 4509596a2c1Sopenharmony_ci EXPECT_EQ(numFmt->GetStyle(), style); 4519596a2c1Sopenharmony_ci delete numFmt; 4529596a2c1Sopenharmony_ci} 4539596a2c1Sopenharmony_ci 4549596a2c1Sopenharmony_ci/** 4559596a2c1Sopenharmony_ci * @tc.name: IntlFuncTest0011 4569596a2c1Sopenharmony_ci * @tc.desc: Test Intl NumberFormat.format 4579596a2c1Sopenharmony_ci * @tc.type: FUNC 4589596a2c1Sopenharmony_ci */ 4599596a2c1Sopenharmony_ciHWTEST_F(IntlTest, IntlFuncTest011, TestSize.Level1) 4609596a2c1Sopenharmony_ci{ 4619596a2c1Sopenharmony_ci string locale = "en-CN"; 4629596a2c1Sopenharmony_ci string expects = "123 thousand"; 4639596a2c1Sopenharmony_ci vector<string> locales; 4649596a2c1Sopenharmony_ci locales.push_back(locale); 4659596a2c1Sopenharmony_ci string style = "decimal"; 4669596a2c1Sopenharmony_ci map<string, string> options = { { "style", style }, 4679596a2c1Sopenharmony_ci { "notation", "compact" }, 4689596a2c1Sopenharmony_ci { "compactDisplay", "long" } }; 4699596a2c1Sopenharmony_ci NumberFormat *numFmt = new (std::nothrow) NumberFormat(locales, options); 4709596a2c1Sopenharmony_ci if (!numFmt) { 4719596a2c1Sopenharmony_ci EXPECT_TRUE(false); 4729596a2c1Sopenharmony_ci return; 4739596a2c1Sopenharmony_ci } 4749596a2c1Sopenharmony_ci string out = numFmt->Format(123456.789); 4759596a2c1Sopenharmony_ci EXPECT_EQ(out, expects); 4769596a2c1Sopenharmony_ci EXPECT_EQ(numFmt->GetStyle(), style); 4779596a2c1Sopenharmony_ci delete numFmt; 4789596a2c1Sopenharmony_ci} 4799596a2c1Sopenharmony_ci 4809596a2c1Sopenharmony_ci/** 4819596a2c1Sopenharmony_ci * @tc.name: IntlFuncTest0012 4829596a2c1Sopenharmony_ci * @tc.desc: Test Intl DateTimeFormat 4839596a2c1Sopenharmony_ci * @tc.type: FUNC 4849596a2c1Sopenharmony_ci */ 4859596a2c1Sopenharmony_ciHWTEST_F(IntlTest, IntlFuncTest0012, TestSize.Level1) 4869596a2c1Sopenharmony_ci{ 4879596a2c1Sopenharmony_ci string locale = "en"; 4889596a2c1Sopenharmony_ci map<string, string> options = { 4899596a2c1Sopenharmony_ci { "dateStyle", "short" } 4909596a2c1Sopenharmony_ci }; 4919596a2c1Sopenharmony_ci vector<string> locales; 4929596a2c1Sopenharmony_ci locales.push_back(locale); 4939596a2c1Sopenharmony_ci std::string expects = "3/11/82"; 4949596a2c1Sopenharmony_ci DateTimeFormat *dateFormat = new (std::nothrow) DateTimeFormat(locales, options); 4959596a2c1Sopenharmony_ci if (!dateFormat) { 4969596a2c1Sopenharmony_ci EXPECT_TRUE(false); 4979596a2c1Sopenharmony_ci return; 4989596a2c1Sopenharmony_ci } 4999596a2c1Sopenharmony_ci int64_t milliseconds = 123456789123456; 5009596a2c1Sopenharmony_ci string out = dateFormat->Format(milliseconds); 5019596a2c1Sopenharmony_ci EXPECT_EQ(out, expects); 5029596a2c1Sopenharmony_ci options = { 5039596a2c1Sopenharmony_ci { "dateStyle", "long" }, 5049596a2c1Sopenharmony_ci { "hourCycle", "h11" }, 5059596a2c1Sopenharmony_ci { "hour12", "fakeValue" } 5069596a2c1Sopenharmony_ci }; 5079596a2c1Sopenharmony_ci DateTimeFormat *dateFormatH11 = new (std::nothrow) DateTimeFormat(locales, options); 5089596a2c1Sopenharmony_ci options.insert({ "hourCycle", "h12" }); 5099596a2c1Sopenharmony_ci DateTimeFormat *dateFormatH12 = new (std::nothrow) DateTimeFormat(locales, options); 5109596a2c1Sopenharmony_ci options.insert({ "hourCycle", "h23" }); 5119596a2c1Sopenharmony_ci DateTimeFormat *dateFormatH23 = new (std::nothrow) DateTimeFormat(locales, options); 5129596a2c1Sopenharmony_ci options.insert({ "hourCycle", "h24" }); 5139596a2c1Sopenharmony_ci DateTimeFormat *dateFormatH24 = new (std::nothrow) DateTimeFormat(locales, options); 5149596a2c1Sopenharmony_ci delete dateFormatH11; 5159596a2c1Sopenharmony_ci delete dateFormatH12; 5169596a2c1Sopenharmony_ci delete dateFormatH23; 5179596a2c1Sopenharmony_ci delete dateFormatH24; 5189596a2c1Sopenharmony_ci locales.clear(); 5199596a2c1Sopenharmony_ci std::unique_ptr<DateTimeFormat> dateFormatEmpty = std::make_unique<DateTimeFormat>(locales, options); 5209596a2c1Sopenharmony_ci locales.push_back("@@@&&"); 5219596a2c1Sopenharmony_ci options = { 5229596a2c1Sopenharmony_ci { "dateStyle", "long" }, 5239596a2c1Sopenharmony_ci { "dayPeriod", "short" } 5249596a2c1Sopenharmony_ci }; 5259596a2c1Sopenharmony_ci std::unique_ptr<DateTimeFormat> dateFormatFake = std::make_unique<DateTimeFormat>(locales, options); 5269596a2c1Sopenharmony_ci options.insert({ "dayPeriod", "long" }); 5279596a2c1Sopenharmony_ci std::unique_ptr<DateTimeFormat> dateFormatDayPeriod = std::make_unique<DateTimeFormat>(locales, options); 5289596a2c1Sopenharmony_ci options.insert({ "dayPeriod", "narrow" }); 5299596a2c1Sopenharmony_ci std::unique_ptr<DateTimeFormat> dateFormatDayPeriod2 = std::make_unique<DateTimeFormat>(locales, options); 5309596a2c1Sopenharmony_ci options.insert({ "dateStyle", "long" }); 5319596a2c1Sopenharmony_ci std::unique_ptr<DateTimeFormat> dateFormatFake2 = std::make_unique<DateTimeFormat>(locales, options); 5329596a2c1Sopenharmony_ci delete dateFormat; 5339596a2c1Sopenharmony_ci} 5349596a2c1Sopenharmony_ci 5359596a2c1Sopenharmony_ci/** 5369596a2c1Sopenharmony_ci * @tc.name: IntlFuncTest0013 5379596a2c1Sopenharmony_ci * @tc.desc: Test Intl LocaleInfo 5389596a2c1Sopenharmony_ci * @tc.type: FUNC 5399596a2c1Sopenharmony_ci */ 5409596a2c1Sopenharmony_ciHWTEST_F(IntlTest, IntlFuncTest0013, TestSize.Level1) 5419596a2c1Sopenharmony_ci{ 5429596a2c1Sopenharmony_ci string locale = "en-CN"; 5439596a2c1Sopenharmony_ci vector<string> locales; 5449596a2c1Sopenharmony_ci locales.push_back(locale); 5459596a2c1Sopenharmony_ci map<string, string> options = {}; 5469596a2c1Sopenharmony_ci std::string expects = "123,456.789"; 5479596a2c1Sopenharmony_ci NumberFormat *numFmt = new (std::nothrow) NumberFormat(locales, options); 5489596a2c1Sopenharmony_ci if (!numFmt) { 5499596a2c1Sopenharmony_ci EXPECT_TRUE(false); 5509596a2c1Sopenharmony_ci return; 5519596a2c1Sopenharmony_ci } 5529596a2c1Sopenharmony_ci string out = numFmt->Format(123456.789); 5539596a2c1Sopenharmony_ci EXPECT_EQ(out, expects); 5549596a2c1Sopenharmony_ci delete numFmt; 5559596a2c1Sopenharmony_ci} 5569596a2c1Sopenharmony_ci 5579596a2c1Sopenharmony_ci/** 5589596a2c1Sopenharmony_ci * @tc.name: IntlFuncTest0014 5599596a2c1Sopenharmony_ci * @tc.desc: Test Intl LocaleInfo 5609596a2c1Sopenharmony_ci * @tc.type: FUNC 5619596a2c1Sopenharmony_ci */ 5629596a2c1Sopenharmony_ciHWTEST_F(IntlTest, IntlFuncTest0014, TestSize.Level1) 5639596a2c1Sopenharmony_ci{ 5649596a2c1Sopenharmony_ci string locale = "zh-CN-u-hc-h12"; 5659596a2c1Sopenharmony_ci string expects = "北美太平洋标准时间"; 5669596a2c1Sopenharmony_ci vector<string> locales; 5679596a2c1Sopenharmony_ci locales.push_back("jessie"); 5689596a2c1Sopenharmony_ci locales.push_back(locale); 5699596a2c1Sopenharmony_ci map<string, string> options = { { "timeZone", "America/Los_Angeles" }, { "timeZoneName", "long" } }; 5709596a2c1Sopenharmony_ci DateTimeFormat *dateFormat = new (std::nothrow) DateTimeFormat(locales, options); 5719596a2c1Sopenharmony_ci if (!dateFormat) { 5729596a2c1Sopenharmony_ci EXPECT_TRUE(false); 5739596a2c1Sopenharmony_ci return; 5749596a2c1Sopenharmony_ci } 5759596a2c1Sopenharmony_ci int64_t milliseconds = 123456789; 5769596a2c1Sopenharmony_ci string out = dateFormat->Format(milliseconds); 5779596a2c1Sopenharmony_ci EXPECT_TRUE(out.find(expects) != out.npos); 5789596a2c1Sopenharmony_ci delete dateFormat; 5799596a2c1Sopenharmony_ci} 5809596a2c1Sopenharmony_ci 5819596a2c1Sopenharmony_ci/** 5829596a2c1Sopenharmony_ci * @tc.name: IntlFuncTest0015 5839596a2c1Sopenharmony_ci * @tc.desc: Test Intl LocaleInfo 5849596a2c1Sopenharmony_ci * @tc.type: FUNC 5859596a2c1Sopenharmony_ci */ 5869596a2c1Sopenharmony_ciHWTEST_F(IntlTest, IntlFuncTest0015, TestSize.Level1) 5879596a2c1Sopenharmony_ci{ 5889596a2c1Sopenharmony_ci string locale = "zh-CN-u-hc-h12"; 5899596a2c1Sopenharmony_ci vector<string> locales; 5909596a2c1Sopenharmony_ci locales.push_back("jessie"); 5919596a2c1Sopenharmony_ci locales.push_back(locale); 5929596a2c1Sopenharmony_ci map<string, string> options = { 5939596a2c1Sopenharmony_ci { "timeZone", "America/Los_Angeles" }, 5949596a2c1Sopenharmony_ci { "timeZoneName", "short" } 5959596a2c1Sopenharmony_ci }; 5969596a2c1Sopenharmony_ci DateTimeFormat *dateFormat = new (std::nothrow) DateTimeFormat(locales, options); 5979596a2c1Sopenharmony_ci if (!dateFormat) { 5989596a2c1Sopenharmony_ci EXPECT_TRUE(false); 5999596a2c1Sopenharmony_ci return; 6009596a2c1Sopenharmony_ci } 6019596a2c1Sopenharmony_ci EXPECT_EQ(dateFormat->GetTimeZone(), "America/Los_Angeles"); 6029596a2c1Sopenharmony_ci EXPECT_EQ(dateFormat->GetTimeZoneName(), "short"); 6039596a2c1Sopenharmony_ci delete dateFormat; 6049596a2c1Sopenharmony_ci} 6059596a2c1Sopenharmony_ci 6069596a2c1Sopenharmony_ci/** 6079596a2c1Sopenharmony_ci * @tc.name: IntlFuncTest0016 6089596a2c1Sopenharmony_ci * @tc.desc: Test Intl Collator 6099596a2c1Sopenharmony_ci * @tc.type: FUNC 6109596a2c1Sopenharmony_ci */ 6119596a2c1Sopenharmony_ciHWTEST_F(IntlTest, IntlFuncTest0016, TestSize.Level1) 6129596a2c1Sopenharmony_ci{ 6139596a2c1Sopenharmony_ci // normal test case 6149596a2c1Sopenharmony_ci vector<string> locales; 6159596a2c1Sopenharmony_ci locales.push_back("en-US"); 6169596a2c1Sopenharmony_ci map<string, string> inputOptions; 6179596a2c1Sopenharmony_ci Collator *collator = new Collator(locales, inputOptions); 6189596a2c1Sopenharmony_ci const string param1 = "abc"; 6199596a2c1Sopenharmony_ci const string param2 = "cba"; 6209596a2c1Sopenharmony_ci CompareResult result = collator->Compare(param1, param2); 6219596a2c1Sopenharmony_ci EXPECT_EQ(result, CompareResult::SMALLER); 6229596a2c1Sopenharmony_ci 6239596a2c1Sopenharmony_ci map<string, string> options; 6249596a2c1Sopenharmony_ci collator->ResolvedOptions(options); 6259596a2c1Sopenharmony_ci EXPECT_EQ(options.size(), 8); 6269596a2c1Sopenharmony_ci map<string, string>::iterator it = options.find("localeMatcher"); 6279596a2c1Sopenharmony_ci if (it != options.end()) { 6289596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "best fit"); 6299596a2c1Sopenharmony_ci } 6309596a2c1Sopenharmony_ci it = options.find("locale"); 6319596a2c1Sopenharmony_ci if (it != options.end()) { 6329596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "en-US"); 6339596a2c1Sopenharmony_ci } 6349596a2c1Sopenharmony_ci it = options.find("usage"); 6359596a2c1Sopenharmony_ci if (it != options.end()) { 6369596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "sort"); 6379596a2c1Sopenharmony_ci } 6389596a2c1Sopenharmony_ci it = options.find("sensitivity"); 6399596a2c1Sopenharmony_ci if (it != options.end()) { 6409596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "variant"); 6419596a2c1Sopenharmony_ci } 6429596a2c1Sopenharmony_ci it = options.find("ignorePunctuation"); 6439596a2c1Sopenharmony_ci if (it != options.end()) { 6449596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "false"); 6459596a2c1Sopenharmony_ci } 6469596a2c1Sopenharmony_ci it = options.find("numeric"); 6479596a2c1Sopenharmony_ci if (it != options.end()) { 6489596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "false"); 6499596a2c1Sopenharmony_ci } 6509596a2c1Sopenharmony_ci it = options.find("caseFirst"); 6519596a2c1Sopenharmony_ci if (it != options.end()) { 6529596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "false"); 6539596a2c1Sopenharmony_ci } 6549596a2c1Sopenharmony_ci it = options.find("collation"); 6559596a2c1Sopenharmony_ci if (it != options.end()) { 6569596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "default"); 6579596a2c1Sopenharmony_ci } 6589596a2c1Sopenharmony_ci delete collator; 6599596a2c1Sopenharmony_ci} 6609596a2c1Sopenharmony_ci 6619596a2c1Sopenharmony_ci/** 6629596a2c1Sopenharmony_ci * @tc.name: IntlFuncTest0017 6639596a2c1Sopenharmony_ci * @tc.desc: Test Intl Collator 6649596a2c1Sopenharmony_ci * @tc.type: FUNC 6659596a2c1Sopenharmony_ci */ 6669596a2c1Sopenharmony_ciHWTEST_F(IntlTest, IntlFuncTest0017, TestSize.Level1) 6679596a2c1Sopenharmony_ci{ 6689596a2c1Sopenharmony_ci // normal test case 6699596a2c1Sopenharmony_ci vector<string> locales; 6709596a2c1Sopenharmony_ci locales.push_back("zh-Hans"); 6719596a2c1Sopenharmony_ci locales.push_back("en-US"); 6729596a2c1Sopenharmony_ci map<string, string> inputOptions = { 6739596a2c1Sopenharmony_ci { "localeMatcher", "lookup" }, 6749596a2c1Sopenharmony_ci { "usage", "search"}, 6759596a2c1Sopenharmony_ci { "sensitivity", "case"}, 6769596a2c1Sopenharmony_ci { "ignorePunctuation", "true" }, 6779596a2c1Sopenharmony_ci { "collation", "pinyin"}, 6789596a2c1Sopenharmony_ci { "numeric", "true"}, 6799596a2c1Sopenharmony_ci { "caseFirst", "upper"} 6809596a2c1Sopenharmony_ci }; 6819596a2c1Sopenharmony_ci Collator *collator = new Collator(locales, inputOptions); 6829596a2c1Sopenharmony_ci const string param1 = "啊"; 6839596a2c1Sopenharmony_ci const string param2 = "播"; 6849596a2c1Sopenharmony_ci CompareResult result = collator->Compare(param1, param2); 6859596a2c1Sopenharmony_ci EXPECT_EQ(result, CompareResult::SMALLER); 6869596a2c1Sopenharmony_ci map<string, string> options; 6879596a2c1Sopenharmony_ci collator->ResolvedOptions(options); 6889596a2c1Sopenharmony_ci EXPECT_EQ(options.size(), 8); 6899596a2c1Sopenharmony_ci map<string, string>::iterator it = options.find("localeMatcher"); 6909596a2c1Sopenharmony_ci if (it != options.end()) { 6919596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "lookup"); 6929596a2c1Sopenharmony_ci } 6939596a2c1Sopenharmony_ci it = options.find("locale"); 6949596a2c1Sopenharmony_ci if (it != options.end()) { 6959596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "zh-Hans"); 6969596a2c1Sopenharmony_ci } 6979596a2c1Sopenharmony_ci it = options.find("usage"); 6989596a2c1Sopenharmony_ci if (it != options.end()) { 6999596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "search"); 7009596a2c1Sopenharmony_ci } 7019596a2c1Sopenharmony_ci it = options.find("sensitivity"); 7029596a2c1Sopenharmony_ci if (it != options.end()) { 7039596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "case"); 7049596a2c1Sopenharmony_ci } 7059596a2c1Sopenharmony_ci delete collator; 7069596a2c1Sopenharmony_ci} 7079596a2c1Sopenharmony_ci 7089596a2c1Sopenharmony_ci/** 7099596a2c1Sopenharmony_ci * @tc.name: IntlFuncTest0018 7109596a2c1Sopenharmony_ci * @tc.desc: Test Intl Collator 7119596a2c1Sopenharmony_ci * @tc.type: FUNC 7129596a2c1Sopenharmony_ci */ 7139596a2c1Sopenharmony_ciHWTEST_F(IntlTest, IntlFuncTest0018, TestSize.Level1) 7149596a2c1Sopenharmony_ci{ 7159596a2c1Sopenharmony_ci // normal test case 7169596a2c1Sopenharmony_ci vector<string> locales; 7179596a2c1Sopenharmony_ci locales.push_back("zh-Hans"); 7189596a2c1Sopenharmony_ci locales.push_back("en-US"); 7199596a2c1Sopenharmony_ci map<string, string> inputOptions = { 7209596a2c1Sopenharmony_ci { "ignorePunctuation", "true" }, 7219596a2c1Sopenharmony_ci { "collation", "pinyin"}, 7229596a2c1Sopenharmony_ci { "numeric", "true"}, 7239596a2c1Sopenharmony_ci { "caseFirst", "upper"} 7249596a2c1Sopenharmony_ci }; 7259596a2c1Sopenharmony_ci Collator *collator = new Collator(locales, inputOptions); 7269596a2c1Sopenharmony_ci map<string, string> options; 7279596a2c1Sopenharmony_ci collator->ResolvedOptions(options); 7289596a2c1Sopenharmony_ci map<string, string>::iterator it = options.find("ignorePunctuation"); 7299596a2c1Sopenharmony_ci if (it != options.end()) { 7309596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "true"); 7319596a2c1Sopenharmony_ci } 7329596a2c1Sopenharmony_ci it = options.find("numeric"); 7339596a2c1Sopenharmony_ci if (it != options.end()) { 7349596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "true"); 7359596a2c1Sopenharmony_ci } 7369596a2c1Sopenharmony_ci it = options.find("caseFirst"); 7379596a2c1Sopenharmony_ci if (it != options.end()) { 7389596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "upper"); 7399596a2c1Sopenharmony_ci } 7409596a2c1Sopenharmony_ci it = options.find("collation"); 7419596a2c1Sopenharmony_ci if (it != options.end()) { 7429596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "pinyin"); 7439596a2c1Sopenharmony_ci } 7449596a2c1Sopenharmony_ci inputOptions = { 7459596a2c1Sopenharmony_ci { "sensitivity", "base"}, 7469596a2c1Sopenharmony_ci { "caseFirst", "lower"} 7479596a2c1Sopenharmony_ci }; 7489596a2c1Sopenharmony_ci Collator *collator2 = new Collator(locales, inputOptions); 7499596a2c1Sopenharmony_ci inputOptions = { 7509596a2c1Sopenharmony_ci { "sensitivity", "accent"}, 7519596a2c1Sopenharmony_ci { "caseFirst", "lower"} 7529596a2c1Sopenharmony_ci }; 7539596a2c1Sopenharmony_ci Collator *collator3 = new Collator(locales, inputOptions); 7549596a2c1Sopenharmony_ci delete collator; 7559596a2c1Sopenharmony_ci delete collator2; 7569596a2c1Sopenharmony_ci delete collator3; 7579596a2c1Sopenharmony_ci} 7589596a2c1Sopenharmony_ci 7599596a2c1Sopenharmony_ci/** 7609596a2c1Sopenharmony_ci * @tc.name: IntlFuncTest0019 7619596a2c1Sopenharmony_ci * @tc.desc: Test Intl Collator 7629596a2c1Sopenharmony_ci * @tc.type: FUNC 7639596a2c1Sopenharmony_ci */ 7649596a2c1Sopenharmony_ciHWTEST_F(IntlTest, IntlFuncTest0019, TestSize.Level1) 7659596a2c1Sopenharmony_ci{ 7669596a2c1Sopenharmony_ci // abnormal test case 7679596a2c1Sopenharmony_ci vector<string> locales; 7689596a2c1Sopenharmony_ci locales.push_back("7776@"); 7699596a2c1Sopenharmony_ci map<string, string> inputOptions = { 7709596a2c1Sopenharmony_ci { "localeMatcher", "fake value" }, 7719596a2c1Sopenharmony_ci { "usage", "fake value"}, 7729596a2c1Sopenharmony_ci { "sensitivity", "fake value"}, 7739596a2c1Sopenharmony_ci { "ignorePunctuation", "fake value" }, 7749596a2c1Sopenharmony_ci { "collation", "fake value"}, 7759596a2c1Sopenharmony_ci { "numeric", "fake value"}, 7769596a2c1Sopenharmony_ci { "caseFirst", "fake value"}, 7779596a2c1Sopenharmony_ci { "fake key", "fake value"} 7789596a2c1Sopenharmony_ci }; 7799596a2c1Sopenharmony_ci Collator *collator = new Collator(locales, inputOptions); 7809596a2c1Sopenharmony_ci const string param1 = "abc"; 7819596a2c1Sopenharmony_ci const string param2 = "cba"; 7829596a2c1Sopenharmony_ci CompareResult result = collator->Compare(param1, param2); 7839596a2c1Sopenharmony_ci EXPECT_EQ(result, CompareResult::SMALLER); 7849596a2c1Sopenharmony_ci 7859596a2c1Sopenharmony_ci map<string, string> options; 7869596a2c1Sopenharmony_ci collator->ResolvedOptions(options); 7879596a2c1Sopenharmony_ci EXPECT_EQ(options.size(), 8); 7889596a2c1Sopenharmony_ci map<string, string>::iterator it = options.find("localeMatcher"); 7899596a2c1Sopenharmony_ci if (it != options.end()) { 7909596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "fake value"); 7919596a2c1Sopenharmony_ci } 7929596a2c1Sopenharmony_ci std::string systemLocale = LocaleConfig::GetSystemLocale(); 7939596a2c1Sopenharmony_ci it = options.find("locale"); 7949596a2c1Sopenharmony_ci if (it != options.end()) { 7959596a2c1Sopenharmony_ci EXPECT_EQ(it->second, systemLocale); 7969596a2c1Sopenharmony_ci } 7979596a2c1Sopenharmony_ci it = options.find("usage"); 7989596a2c1Sopenharmony_ci if (it != options.end()) { 7999596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "fake value"); 8009596a2c1Sopenharmony_ci } 8019596a2c1Sopenharmony_ci it = options.find("sensitivity"); 8029596a2c1Sopenharmony_ci if (it != options.end()) { 8039596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "fake value"); 8049596a2c1Sopenharmony_ci } 8059596a2c1Sopenharmony_ci delete collator; 8069596a2c1Sopenharmony_ci} 8079596a2c1Sopenharmony_ci 8089596a2c1Sopenharmony_ci/** 8099596a2c1Sopenharmony_ci * @tc.name: IntlFuncTest0020 8109596a2c1Sopenharmony_ci * @tc.desc: Test Intl Collator 8119596a2c1Sopenharmony_ci * @tc.type: FUNC 8129596a2c1Sopenharmony_ci */ 8139596a2c1Sopenharmony_ciHWTEST_F(IntlTest, IntlFuncTest0020, TestSize.Level1) 8149596a2c1Sopenharmony_ci{ 8159596a2c1Sopenharmony_ci // abnormal test case 8169596a2c1Sopenharmony_ci vector<string> locales; 8179596a2c1Sopenharmony_ci locales.push_back("$$##"); 8189596a2c1Sopenharmony_ci map<string, string> inputOptions = { 8199596a2c1Sopenharmony_ci { "ignorePunctuation", "fake value" }, 8209596a2c1Sopenharmony_ci { "collation", "fake value"}, 8219596a2c1Sopenharmony_ci { "numeric", "fake value"}, 8229596a2c1Sopenharmony_ci { "caseFirst", "fake value"}, 8239596a2c1Sopenharmony_ci { "fake key", "fake value"} 8249596a2c1Sopenharmony_ci }; 8259596a2c1Sopenharmony_ci Collator *collator = new Collator(locales, inputOptions); 8269596a2c1Sopenharmony_ci map<string, string> options; 8279596a2c1Sopenharmony_ci collator->ResolvedOptions(options); 8289596a2c1Sopenharmony_ci map<string, string>::iterator it = options.find("ignorePunctuation"); 8299596a2c1Sopenharmony_ci if (it != options.end()) { 8309596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "fake value"); 8319596a2c1Sopenharmony_ci } 8329596a2c1Sopenharmony_ci it = options.find("numeric"); 8339596a2c1Sopenharmony_ci if (it != options.end()) { 8349596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "fake value"); 8359596a2c1Sopenharmony_ci } 8369596a2c1Sopenharmony_ci it = options.find("caseFirst"); 8379596a2c1Sopenharmony_ci if (it != options.end()) { 8389596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "fake value"); 8399596a2c1Sopenharmony_ci } 8409596a2c1Sopenharmony_ci it = options.find("collation"); 8419596a2c1Sopenharmony_ci if (it != options.end()) { 8429596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "default"); 8439596a2c1Sopenharmony_ci } 8449596a2c1Sopenharmony_ci delete collator; 8459596a2c1Sopenharmony_ci} 8469596a2c1Sopenharmony_ci 8479596a2c1Sopenharmony_ci/** 8489596a2c1Sopenharmony_ci * @tc.name: IntlFuncTest0021 8499596a2c1Sopenharmony_ci * @tc.desc: Test Intl PluralRules 8509596a2c1Sopenharmony_ci * @tc.type: FUNC 8519596a2c1Sopenharmony_ci */ 8529596a2c1Sopenharmony_ciHWTEST_F(IntlTest, IntlFuncTest0021, TestSize.Level1) 8539596a2c1Sopenharmony_ci{ 8549596a2c1Sopenharmony_ci // normal test case 8559596a2c1Sopenharmony_ci vector<string> locales; 8569596a2c1Sopenharmony_ci locales.push_back("en-US"); 8579596a2c1Sopenharmony_ci map<string, string> options; 8589596a2c1Sopenharmony_ci PluralRules *plurals = new PluralRules(locales, options); 8599596a2c1Sopenharmony_ci string res = plurals->Select(0); 8609596a2c1Sopenharmony_ci EXPECT_EQ(res, "other"); 8619596a2c1Sopenharmony_ci res = plurals->Select(1); 8629596a2c1Sopenharmony_ci EXPECT_EQ(res, "one"); 8639596a2c1Sopenharmony_ci res = plurals->Select(2); 8649596a2c1Sopenharmony_ci EXPECT_EQ(res, "other"); 8659596a2c1Sopenharmony_ci res = plurals->Select(5); 8669596a2c1Sopenharmony_ci EXPECT_EQ(res, "other"); 8679596a2c1Sopenharmony_ci res = plurals->Select(20); 8689596a2c1Sopenharmony_ci EXPECT_EQ(res, "other"); 8699596a2c1Sopenharmony_ci res = plurals->Select(200); 8709596a2c1Sopenharmony_ci EXPECT_EQ(res, "other"); 8719596a2c1Sopenharmony_ci res = plurals->Select(12.34); 8729596a2c1Sopenharmony_ci EXPECT_EQ(res, "other"); 8739596a2c1Sopenharmony_ci delete plurals; 8749596a2c1Sopenharmony_ci} 8759596a2c1Sopenharmony_ci 8769596a2c1Sopenharmony_ci/** 8779596a2c1Sopenharmony_ci * @tc.name: IntlFuncTest0022 8789596a2c1Sopenharmony_ci * @tc.desc: Test Intl PluralRules 8799596a2c1Sopenharmony_ci * @tc.type: FUNC 8809596a2c1Sopenharmony_ci */ 8819596a2c1Sopenharmony_ciHWTEST_F(IntlTest, IntlFuncTest0022, TestSize.Level1) 8829596a2c1Sopenharmony_ci{ 8839596a2c1Sopenharmony_ci // normal test case 8849596a2c1Sopenharmony_ci vector<string> locales; 8859596a2c1Sopenharmony_ci locales.push_back("ar"); 8869596a2c1Sopenharmony_ci map<string, string> options; 8879596a2c1Sopenharmony_ci PluralRules *plurals = new PluralRules(locales, options); 8889596a2c1Sopenharmony_ci string res = plurals->Select(0); 8899596a2c1Sopenharmony_ci EXPECT_EQ(res, "zero"); 8909596a2c1Sopenharmony_ci res = plurals->Select(1); 8919596a2c1Sopenharmony_ci EXPECT_EQ(res, "one"); 8929596a2c1Sopenharmony_ci res = plurals->Select(2); 8939596a2c1Sopenharmony_ci EXPECT_EQ(res, "two"); 8949596a2c1Sopenharmony_ci res = plurals->Select(5); 8959596a2c1Sopenharmony_ci EXPECT_EQ(res, "few"); 8969596a2c1Sopenharmony_ci res = plurals->Select(20); 8979596a2c1Sopenharmony_ci EXPECT_EQ(res, "many"); 8989596a2c1Sopenharmony_ci res = plurals->Select(200); 8999596a2c1Sopenharmony_ci EXPECT_EQ(res, "other"); 9009596a2c1Sopenharmony_ci res = plurals->Select(12.34); 9019596a2c1Sopenharmony_ci EXPECT_EQ(res, "other"); 9029596a2c1Sopenharmony_ci options = { 9039596a2c1Sopenharmony_ci { "localeMatcher", "best fit" }, 9049596a2c1Sopenharmony_ci { "type", "cardinal" }, 9059596a2c1Sopenharmony_ci { "minimumIntegerDigits", "1" }, 9069596a2c1Sopenharmony_ci { "minimumFractionDigits", "0" }, 9079596a2c1Sopenharmony_ci { "maximumFractionDigits", "21" }, 9089596a2c1Sopenharmony_ci }; 9099596a2c1Sopenharmony_ci PluralRules *pluralRules = new PluralRules(locales, options); 9109596a2c1Sopenharmony_ci delete pluralRules; 9119596a2c1Sopenharmony_ci delete plurals; 9129596a2c1Sopenharmony_ci} 9139596a2c1Sopenharmony_ci 9149596a2c1Sopenharmony_ci/** 9159596a2c1Sopenharmony_ci * @tc.name: IntlFuncTest0023 9169596a2c1Sopenharmony_ci * @tc.desc: Test Intl PluralRules 9179596a2c1Sopenharmony_ci * @tc.type: FUNC 9189596a2c1Sopenharmony_ci */ 9199596a2c1Sopenharmony_ciHWTEST_F(IntlTest, IntlFuncTest0023, TestSize.Level1) 9209596a2c1Sopenharmony_ci{ 9219596a2c1Sopenharmony_ci // normal test case 9229596a2c1Sopenharmony_ci vector<string> locales; 9239596a2c1Sopenharmony_ci locales.push_back("ar"); 9249596a2c1Sopenharmony_ci map<string, string> options = { 9259596a2c1Sopenharmony_ci { "localeMatcher", "best fit" }, 9269596a2c1Sopenharmony_ci { "type", "cardinal" }, 9279596a2c1Sopenharmony_ci { "minimumIntegerDigits", "1" }, 9289596a2c1Sopenharmony_ci { "minimumFractionDigits", "0" }, 9299596a2c1Sopenharmony_ci { "maximumFractionDigits", "21" }, 9309596a2c1Sopenharmony_ci { "minimumSignificantDigits", "21" }, 9319596a2c1Sopenharmony_ci { "maximumSignificantDigits", "21" }, 9329596a2c1Sopenharmony_ci }; 9339596a2c1Sopenharmony_ci PluralRules *plurals = new PluralRules(locales, options); 9349596a2c1Sopenharmony_ci string res = plurals->Select(0); 9359596a2c1Sopenharmony_ci EXPECT_EQ(res, "zero"); 9369596a2c1Sopenharmony_ci res = plurals->Select(1); 9379596a2c1Sopenharmony_ci EXPECT_EQ(res, "one"); 9389596a2c1Sopenharmony_ci res = plurals->Select(2); 9399596a2c1Sopenharmony_ci EXPECT_EQ(res, "two"); 9409596a2c1Sopenharmony_ci res = plurals->Select(5); 9419596a2c1Sopenharmony_ci EXPECT_EQ(res, "few"); 9429596a2c1Sopenharmony_ci res = plurals->Select(20); 9439596a2c1Sopenharmony_ci EXPECT_EQ(res, "many"); 9449596a2c1Sopenharmony_ci res = plurals->Select(200); 9459596a2c1Sopenharmony_ci EXPECT_EQ(res, "other"); 9469596a2c1Sopenharmony_ci res = plurals->Select(12.34); 9479596a2c1Sopenharmony_ci EXPECT_EQ(res, "other"); 9489596a2c1Sopenharmony_ci delete plurals; 9499596a2c1Sopenharmony_ci} 9509596a2c1Sopenharmony_ci 9519596a2c1Sopenharmony_ci/** 9529596a2c1Sopenharmony_ci * @tc.name: IntlFuncTest0024 9539596a2c1Sopenharmony_ci * @tc.desc: Test Intl PluralRules 9549596a2c1Sopenharmony_ci * @tc.type: FUNC 9559596a2c1Sopenharmony_ci */ 9569596a2c1Sopenharmony_ciHWTEST_F(IntlTest, IntlFuncTest0024, TestSize.Level1) 9579596a2c1Sopenharmony_ci{ 9589596a2c1Sopenharmony_ci // abnormal test cast 9599596a2c1Sopenharmony_ci // normal test case 9609596a2c1Sopenharmony_ci std::string currentSystemLocale = LocaleConfig::GetSystemLocale(); 9619596a2c1Sopenharmony_ci InitTestEnvironment(); 9629596a2c1Sopenharmony_ci vector<string> locales; 9639596a2c1Sopenharmony_ci locales.push_back("$$$###"); 9649596a2c1Sopenharmony_ci map<string, string> options = { 9659596a2c1Sopenharmony_ci { "fake_localeMatcher", "best fit" }, 9669596a2c1Sopenharmony_ci { "type", "fake_cardinal" }, 9679596a2c1Sopenharmony_ci { "minimumIntegerDigits", "11111" }, 9689596a2c1Sopenharmony_ci { "minimumFractionDigits", "-111" }, 9699596a2c1Sopenharmony_ci { "maximumFractionDigits", "-111" }, 9709596a2c1Sopenharmony_ci { "minimumSignificantDigits", "11111" }, 9719596a2c1Sopenharmony_ci { "maximumSignificantDigits", "11111" }, 9729596a2c1Sopenharmony_ci }; 9739596a2c1Sopenharmony_ci PluralRules *plurals = new PluralRules(locales, options); 9749596a2c1Sopenharmony_ci string res = plurals->Select(0); 9759596a2c1Sopenharmony_ci EXPECT_EQ(res, "other"); 9769596a2c1Sopenharmony_ci res = plurals->Select(1); 9779596a2c1Sopenharmony_ci EXPECT_EQ(res, "other"); 9789596a2c1Sopenharmony_ci res = plurals->Select(2); 9799596a2c1Sopenharmony_ci EXPECT_EQ(res, "other"); 9809596a2c1Sopenharmony_ci res = plurals->Select(5); 9819596a2c1Sopenharmony_ci EXPECT_EQ(res, "other"); 9829596a2c1Sopenharmony_ci res = plurals->Select(20); 9839596a2c1Sopenharmony_ci EXPECT_EQ(res, "other"); 9849596a2c1Sopenharmony_ci res = plurals->Select(200); 9859596a2c1Sopenharmony_ci EXPECT_EQ(res, "other"); 9869596a2c1Sopenharmony_ci res = plurals->Select(12.34); 9879596a2c1Sopenharmony_ci EXPECT_EQ(res, "other"); 9889596a2c1Sopenharmony_ci delete plurals; 9899596a2c1Sopenharmony_ci RestoreEnvironment(currentSystemLocale); 9909596a2c1Sopenharmony_ci} 9919596a2c1Sopenharmony_ci 9929596a2c1Sopenharmony_ci/** 9939596a2c1Sopenharmony_ci * @tc.name: IntlFuncTest0025 9949596a2c1Sopenharmony_ci * @tc.desc: Test Intl RelativeTimeFormat 9959596a2c1Sopenharmony_ci * @tc.type: FUNC 9969596a2c1Sopenharmony_ci */ 9979596a2c1Sopenharmony_ciHWTEST_F(IntlTest, IntlFuncTest0025, TestSize.Level1) 9989596a2c1Sopenharmony_ci{ 9999596a2c1Sopenharmony_ci vector<string> locales; 10009596a2c1Sopenharmony_ci locales.push_back("en-US"); 10019596a2c1Sopenharmony_ci map<string, string> options; 10029596a2c1Sopenharmony_ci RelativeTimeFormat *formatter = new RelativeTimeFormat(locales, options); 10039596a2c1Sopenharmony_ci 10049596a2c1Sopenharmony_ci double number = 2022; 10059596a2c1Sopenharmony_ci string unit = "year"; 10069596a2c1Sopenharmony_ci string res = formatter->Format(number, unit); 10079596a2c1Sopenharmony_ci EXPECT_EQ(res, "in 2,022 years"); 10089596a2c1Sopenharmony_ci vector<vector<string>> timeVector; 10099596a2c1Sopenharmony_ci formatter->FormatToParts(number, unit, timeVector); 10109596a2c1Sopenharmony_ci EXPECT_EQ(timeVector.size(), 5); 10119596a2c1Sopenharmony_ci 10129596a2c1Sopenharmony_ci number = 3; 10139596a2c1Sopenharmony_ci unit = "quarter"; 10149596a2c1Sopenharmony_ci res = formatter->Format(number, unit); 10159596a2c1Sopenharmony_ci EXPECT_EQ(res, "in 3 quarters"); 10169596a2c1Sopenharmony_ci formatter->FormatToParts(number, unit, timeVector); 10179596a2c1Sopenharmony_ci EXPECT_EQ(timeVector.size(), 8); 10189596a2c1Sopenharmony_ci 10199596a2c1Sopenharmony_ci number = 11; 10209596a2c1Sopenharmony_ci unit = "month"; 10219596a2c1Sopenharmony_ci res = formatter->Format(number, unit); 10229596a2c1Sopenharmony_ci EXPECT_EQ(res, "in 11 months"); 10239596a2c1Sopenharmony_ci formatter->FormatToParts(number, unit, timeVector); 10249596a2c1Sopenharmony_ci EXPECT_EQ(timeVector.size(), 11); 10259596a2c1Sopenharmony_ci 10269596a2c1Sopenharmony_ci number = 2; 10279596a2c1Sopenharmony_ci unit = "week"; 10289596a2c1Sopenharmony_ci res = formatter->Format(number, unit); 10299596a2c1Sopenharmony_ci EXPECT_EQ(res, "in 2 weeks"); 10309596a2c1Sopenharmony_ci formatter->FormatToParts(number, unit, timeVector); 10319596a2c1Sopenharmony_ci EXPECT_EQ(timeVector.size(), 14); 10329596a2c1Sopenharmony_ci 10339596a2c1Sopenharmony_ci number = 18; 10349596a2c1Sopenharmony_ci unit = "day"; 10359596a2c1Sopenharmony_ci res = formatter->Format(number, unit); 10369596a2c1Sopenharmony_ci EXPECT_EQ(res, "in 18 days"); 10379596a2c1Sopenharmony_ci formatter->FormatToParts(number, unit, timeVector); 10389596a2c1Sopenharmony_ci EXPECT_EQ(timeVector.size(), 17); 10399596a2c1Sopenharmony_ci delete formatter; 10409596a2c1Sopenharmony_ci} 10419596a2c1Sopenharmony_ci 10429596a2c1Sopenharmony_ci/** 10439596a2c1Sopenharmony_ci * @tc.name: IntlFuncTest0026 10449596a2c1Sopenharmony_ci * @tc.desc: Test Intl RelativeTimeFormat 10459596a2c1Sopenharmony_ci * @tc.type: FUNC 10469596a2c1Sopenharmony_ci */ 10479596a2c1Sopenharmony_ciHWTEST_F(IntlTest, IntlFuncTest0026, TestSize.Level1) 10489596a2c1Sopenharmony_ci{ 10499596a2c1Sopenharmony_ci vector<string> locales; 10509596a2c1Sopenharmony_ci locales.push_back("en-US"); 10519596a2c1Sopenharmony_ci map<string, string> options; 10529596a2c1Sopenharmony_ci RelativeTimeFormat *formatter = new RelativeTimeFormat(locales, options); 10539596a2c1Sopenharmony_ci 10549596a2c1Sopenharmony_ci double number = 23; 10559596a2c1Sopenharmony_ci string unit = "hour"; 10569596a2c1Sopenharmony_ci string res = formatter->Format(number, unit); 10579596a2c1Sopenharmony_ci EXPECT_EQ(res, "in 23 hours"); 10589596a2c1Sopenharmony_ci vector<vector<string>> timeVector; 10599596a2c1Sopenharmony_ci formatter->FormatToParts(number, unit, timeVector); 10609596a2c1Sopenharmony_ci EXPECT_EQ(timeVector.size(), 3); 10619596a2c1Sopenharmony_ci 10629596a2c1Sopenharmony_ci number = 59; 10639596a2c1Sopenharmony_ci unit = "minute"; 10649596a2c1Sopenharmony_ci res = formatter->Format(number, unit); 10659596a2c1Sopenharmony_ci EXPECT_EQ(res, "in 59 minutes"); 10669596a2c1Sopenharmony_ci formatter->FormatToParts(number, unit, timeVector); 10679596a2c1Sopenharmony_ci EXPECT_EQ(timeVector.size(), 6); 10689596a2c1Sopenharmony_ci 10699596a2c1Sopenharmony_ci number = 1; 10709596a2c1Sopenharmony_ci unit = "second"; 10719596a2c1Sopenharmony_ci res = formatter->Format(number, unit); 10729596a2c1Sopenharmony_ci EXPECT_EQ(res, "in 1 second"); 10739596a2c1Sopenharmony_ci formatter->FormatToParts(number, unit, timeVector); 10749596a2c1Sopenharmony_ci EXPECT_EQ(timeVector.size(), 9); 10759596a2c1Sopenharmony_ci 10769596a2c1Sopenharmony_ci delete formatter; 10779596a2c1Sopenharmony_ci} 10789596a2c1Sopenharmony_ci 10799596a2c1Sopenharmony_ci/** 10809596a2c1Sopenharmony_ci * @tc.name: IntlFuncTest0027 10819596a2c1Sopenharmony_ci * @tc.desc: Test Intl RelativeTimeFormat 10829596a2c1Sopenharmony_ci * @tc.type: FUNC 10839596a2c1Sopenharmony_ci */ 10849596a2c1Sopenharmony_ciHWTEST_F(IntlTest, IntlFuncTest0027, TestSize.Level1) 10859596a2c1Sopenharmony_ci{ 10869596a2c1Sopenharmony_ci vector<string> locales; 10879596a2c1Sopenharmony_ci locales.push_back("zh-Hans"); 10889596a2c1Sopenharmony_ci map<string, string> options = { 10899596a2c1Sopenharmony_ci { "localeMatcher", "best fit" }, 10909596a2c1Sopenharmony_ci { "numeric", "auto" }, 10919596a2c1Sopenharmony_ci { "style", "long" } 10929596a2c1Sopenharmony_ci }; 10939596a2c1Sopenharmony_ci RelativeTimeFormat *formatter = new RelativeTimeFormat(locales, options); 10949596a2c1Sopenharmony_ci 10959596a2c1Sopenharmony_ci double number = 2022; 10969596a2c1Sopenharmony_ci string unit = "year"; 10979596a2c1Sopenharmony_ci string res = formatter->Format(number, unit); 10989596a2c1Sopenharmony_ci EXPECT_EQ(res, "2,022年后"); 10999596a2c1Sopenharmony_ci vector<vector<string>> timeVector; 11009596a2c1Sopenharmony_ci formatter->FormatToParts(number, unit, timeVector); 11019596a2c1Sopenharmony_ci EXPECT_EQ(timeVector.size(), 4); 11029596a2c1Sopenharmony_ci 11039596a2c1Sopenharmony_ci number = 3; 11049596a2c1Sopenharmony_ci unit = "quarter"; 11059596a2c1Sopenharmony_ci res = formatter->Format(number, unit); 11069596a2c1Sopenharmony_ci EXPECT_EQ(res, "3个季度后"); 11079596a2c1Sopenharmony_ci formatter->FormatToParts(number, unit, timeVector); 11089596a2c1Sopenharmony_ci EXPECT_EQ(timeVector.size(), 6); 11099596a2c1Sopenharmony_ci 11109596a2c1Sopenharmony_ci number = 11; 11119596a2c1Sopenharmony_ci unit = "month"; 11129596a2c1Sopenharmony_ci res = formatter->Format(number, unit); 11139596a2c1Sopenharmony_ci EXPECT_EQ(res, "11个月后"); 11149596a2c1Sopenharmony_ci formatter->FormatToParts(number, unit, timeVector); 11159596a2c1Sopenharmony_ci EXPECT_EQ(timeVector.size(), 8); 11169596a2c1Sopenharmony_ci 11179596a2c1Sopenharmony_ci number = 2; 11189596a2c1Sopenharmony_ci unit = "week"; 11199596a2c1Sopenharmony_ci res = formatter->Format(number, unit); 11209596a2c1Sopenharmony_ci EXPECT_EQ(res, "2周后"); 11219596a2c1Sopenharmony_ci formatter->FormatToParts(number, unit, timeVector); 11229596a2c1Sopenharmony_ci EXPECT_EQ(timeVector.size(), 10); 11239596a2c1Sopenharmony_ci delete formatter; 11249596a2c1Sopenharmony_ci locales.clear(); 11259596a2c1Sopenharmony_ci locales.push_back("##$$"); 11269596a2c1Sopenharmony_ci RelativeTimeFormat *fmt = new RelativeTimeFormat(locales, options); 11279596a2c1Sopenharmony_ci delete fmt; 11289596a2c1Sopenharmony_ci} 11299596a2c1Sopenharmony_ci 11309596a2c1Sopenharmony_ci/** 11319596a2c1Sopenharmony_ci * @tc.name: IntlFuncTest0028 11329596a2c1Sopenharmony_ci * @tc.desc: Test Intl RelativeTimeFormat 11339596a2c1Sopenharmony_ci * @tc.type: FUNC 11349596a2c1Sopenharmony_ci */ 11359596a2c1Sopenharmony_ciHWTEST_F(IntlTest, IntlFuncTest0028, TestSize.Level1) 11369596a2c1Sopenharmony_ci{ 11379596a2c1Sopenharmony_ci vector<string> locales; 11389596a2c1Sopenharmony_ci locales.push_back("zh-Hans"); 11399596a2c1Sopenharmony_ci map<string, string> options = { 11409596a2c1Sopenharmony_ci { "localeMatcher", "lookup" }, 11419596a2c1Sopenharmony_ci { "numeric", "auto" }, 11429596a2c1Sopenharmony_ci { "style", "long" } 11439596a2c1Sopenharmony_ci }; 11449596a2c1Sopenharmony_ci RelativeTimeFormat *formatter = new RelativeTimeFormat(locales, options); 11459596a2c1Sopenharmony_ci 11469596a2c1Sopenharmony_ci double number = 18; 11479596a2c1Sopenharmony_ci string unit = "day"; 11489596a2c1Sopenharmony_ci string res = formatter->Format(number, unit); 11499596a2c1Sopenharmony_ci EXPECT_EQ(res, "18天后"); 11509596a2c1Sopenharmony_ci vector<vector<string>> timeVector; 11519596a2c1Sopenharmony_ci formatter->FormatToParts(number, unit, timeVector); 11529596a2c1Sopenharmony_ci EXPECT_EQ(timeVector.size(), 2); 11539596a2c1Sopenharmony_ci 11549596a2c1Sopenharmony_ci number = 23; 11559596a2c1Sopenharmony_ci unit = "hour"; 11569596a2c1Sopenharmony_ci res = formatter->Format(number, unit); 11579596a2c1Sopenharmony_ci EXPECT_EQ(res, "23小时后"); 11589596a2c1Sopenharmony_ci formatter->FormatToParts(number, unit, timeVector); 11599596a2c1Sopenharmony_ci EXPECT_EQ(timeVector.size(), 4); 11609596a2c1Sopenharmony_ci 11619596a2c1Sopenharmony_ci number = 59; 11629596a2c1Sopenharmony_ci unit = "minute"; 11639596a2c1Sopenharmony_ci res = formatter->Format(number, unit); 11649596a2c1Sopenharmony_ci EXPECT_EQ(res, "59分钟后"); 11659596a2c1Sopenharmony_ci formatter->FormatToParts(number, unit, timeVector); 11669596a2c1Sopenharmony_ci EXPECT_EQ(timeVector.size(), 6); 11679596a2c1Sopenharmony_ci 11689596a2c1Sopenharmony_ci number = 1; 11699596a2c1Sopenharmony_ci unit = "second"; 11709596a2c1Sopenharmony_ci res = formatter->Format(number, unit); 11719596a2c1Sopenharmony_ci EXPECT_EQ(res, "1秒钟后"); 11729596a2c1Sopenharmony_ci formatter->FormatToParts(number, unit, timeVector); 11739596a2c1Sopenharmony_ci EXPECT_EQ(timeVector.size(), 8); 11749596a2c1Sopenharmony_ci 11759596a2c1Sopenharmony_ci delete formatter; 11769596a2c1Sopenharmony_ci} 11779596a2c1Sopenharmony_ci 11789596a2c1Sopenharmony_ci/** 11799596a2c1Sopenharmony_ci * @tc.name: IntlFuncTest0029 11809596a2c1Sopenharmony_ci * @tc.desc: Test Intl RelativeTimeFormat 11819596a2c1Sopenharmony_ci * @tc.type: FUNC 11829596a2c1Sopenharmony_ci */ 11839596a2c1Sopenharmony_ciHWTEST_F(IntlTest, IntlFuncTest0029, TestSize.Level1) 11849596a2c1Sopenharmony_ci{ 11859596a2c1Sopenharmony_ci vector<string> locales; 11869596a2c1Sopenharmony_ci locales.push_back("####"); 11879596a2c1Sopenharmony_ci locales.push_back("zh-Hans-u-nu-latn"); 11889596a2c1Sopenharmony_ci map<string, string> options = { 11899596a2c1Sopenharmony_ci { "localeMatcher", "best fit" }, 11909596a2c1Sopenharmony_ci { "numeric", "auto" }, 11919596a2c1Sopenharmony_ci { "style", "long" } 11929596a2c1Sopenharmony_ci }; 11939596a2c1Sopenharmony_ci RelativeTimeFormat *formatter = new RelativeTimeFormat(locales, options); 11949596a2c1Sopenharmony_ci map<string, string> res; 11959596a2c1Sopenharmony_ci formatter->GetResolvedOptions(res); 11969596a2c1Sopenharmony_ci EXPECT_EQ(res.size(), 4); 11979596a2c1Sopenharmony_ci 11989596a2c1Sopenharmony_ci map<string, string>::iterator it = res.find("locale"); 11999596a2c1Sopenharmony_ci if (it != res.end()) { 12009596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "zh-Hans"); 12019596a2c1Sopenharmony_ci } 12029596a2c1Sopenharmony_ci it = res.find("style"); 12039596a2c1Sopenharmony_ci if (it != res.end()) { 12049596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "long"); 12059596a2c1Sopenharmony_ci } 12069596a2c1Sopenharmony_ci it = res.find("numeric"); 12079596a2c1Sopenharmony_ci if (it != res.end()) { 12089596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "auto"); 12099596a2c1Sopenharmony_ci } 12109596a2c1Sopenharmony_ci it = res.find("numberingSystem"); 12119596a2c1Sopenharmony_ci if (it != res.end()) { 12129596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "latn"); 12139596a2c1Sopenharmony_ci } 12149596a2c1Sopenharmony_ci delete formatter; 12159596a2c1Sopenharmony_ci} 12169596a2c1Sopenharmony_ci 12179596a2c1Sopenharmony_ci/** 12189596a2c1Sopenharmony_ci * @tc.name: IntlFuncTest0030 12199596a2c1Sopenharmony_ci * @tc.desc: Test Intl NumberFormat 12209596a2c1Sopenharmony_ci * @tc.type: FUNC 12219596a2c1Sopenharmony_ci */ 12229596a2c1Sopenharmony_ciHWTEST_F(IntlTest, IntlFuncTest0030, TestSize.Level1) 12239596a2c1Sopenharmony_ci{ 12249596a2c1Sopenharmony_ci vector<string> locales; 12259596a2c1Sopenharmony_ci locales.push_back("en-US"); 12269596a2c1Sopenharmony_ci map<string, string> options = { 12279596a2c1Sopenharmony_ci { "unitUsage", "default" } 12289596a2c1Sopenharmony_ci }; 12299596a2c1Sopenharmony_ci NumberFormat *formatter = new NumberFormat(locales, options); 12309596a2c1Sopenharmony_ci 12319596a2c1Sopenharmony_ci string res = formatter->Format(123); 12329596a2c1Sopenharmony_ci EXPECT_EQ(res, "123"); 12339596a2c1Sopenharmony_ci res = formatter->Format(123.456); 12349596a2c1Sopenharmony_ci EXPECT_EQ(res, "123.456"); 12359596a2c1Sopenharmony_ci locales.clear(); 12369596a2c1Sopenharmony_ci locales.push_back("$$@@"); 12379596a2c1Sopenharmony_ci NumberFormat *formatter2 = new NumberFormat(locales, options); 12389596a2c1Sopenharmony_ci string res2 = formatter2->Format(123); 12399596a2c1Sopenharmony_ci EXPECT_EQ(res2, "123"); 12409596a2c1Sopenharmony_ci delete formatter; 12419596a2c1Sopenharmony_ci delete formatter2; 12429596a2c1Sopenharmony_ci} 12439596a2c1Sopenharmony_ci 12449596a2c1Sopenharmony_ci/** 12459596a2c1Sopenharmony_ci * @tc.name: IntlFuncTest0031 12469596a2c1Sopenharmony_ci * @tc.desc: Test Intl NumberFormat 12479596a2c1Sopenharmony_ci * @tc.type: FUNC 12489596a2c1Sopenharmony_ci */ 12499596a2c1Sopenharmony_ciHWTEST_F(IntlTest, IntlFuncTest0031, TestSize.Level1) 12509596a2c1Sopenharmony_ci{ 12519596a2c1Sopenharmony_ci vector<string> locales; 12529596a2c1Sopenharmony_ci locales.push_back("zh-Hans"); 12539596a2c1Sopenharmony_ci map<string, string> options = { 12549596a2c1Sopenharmony_ci { "locale", "zh-Hans" }, 12559596a2c1Sopenharmony_ci { "currency", "EUR" }, 12569596a2c1Sopenharmony_ci { "currencySign", "narrowSymbol" }, 12579596a2c1Sopenharmony_ci { "currencyDisplay", "symbol" }, 12589596a2c1Sopenharmony_ci { "unit", "meter" }, 12599596a2c1Sopenharmony_ci { "unitDisplay", "long" }, 12609596a2c1Sopenharmony_ci { "unitUsage", "length-person" }, 12619596a2c1Sopenharmony_ci { "signDisplay", "always" }, 12629596a2c1Sopenharmony_ci { "compactDisplay", "long" }, 12639596a2c1Sopenharmony_ci { "notation", "standard" }, 12649596a2c1Sopenharmony_ci { "localeMatcher", "lookup" }, 12659596a2c1Sopenharmony_ci { "style", "decimal" }, 12669596a2c1Sopenharmony_ci { "numberingSystem", "latn" }, 12679596a2c1Sopenharmony_ci { "useGroup", "true" }, 12689596a2c1Sopenharmony_ci { "minimumIntegerDigits", "1" }, 12699596a2c1Sopenharmony_ci { "minimumFractionDigits", "0" }, 12709596a2c1Sopenharmony_ci { "maximumFractionDigits", "20" }, 12719596a2c1Sopenharmony_ci { "minimumSignificantDigits", "1" }, 12729596a2c1Sopenharmony_ci { "maximumSignificantDigits", "20" } 12739596a2c1Sopenharmony_ci }; 12749596a2c1Sopenharmony_ci NumberFormat *formatter = new NumberFormat(locales, options); 12759596a2c1Sopenharmony_ci 12769596a2c1Sopenharmony_ci string formatRes = formatter->Format(123); 12779596a2c1Sopenharmony_ci EXPECT_EQ(formatRes, "+123"); 12789596a2c1Sopenharmony_ci formatRes = formatter->Format(123.456); 12799596a2c1Sopenharmony_ci EXPECT_EQ(formatRes, "+123.456"); 12809596a2c1Sopenharmony_ci 12819596a2c1Sopenharmony_ci map<string, string> res; 12829596a2c1Sopenharmony_ci formatter->GetResolvedOptions(res); 12839596a2c1Sopenharmony_ci EXPECT_EQ(res.size(), 12); 12849596a2c1Sopenharmony_ci map<string, string>::iterator it = res.find("locale"); 12859596a2c1Sopenharmony_ci if (it != res.end()) { 12869596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "zh-Hans"); 12879596a2c1Sopenharmony_ci } 12889596a2c1Sopenharmony_ci it = res.find("signDisplay"); 12899596a2c1Sopenharmony_ci if (it != res.end()) { 12909596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "always"); 12919596a2c1Sopenharmony_ci } 12929596a2c1Sopenharmony_ci it = res.find("notation"); 12939596a2c1Sopenharmony_ci if (it != res.end()) { 12949596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "standard"); 12959596a2c1Sopenharmony_ci } 12969596a2c1Sopenharmony_ci delete formatter; 12979596a2c1Sopenharmony_ci} 12989596a2c1Sopenharmony_ci 12999596a2c1Sopenharmony_ci/** 13009596a2c1Sopenharmony_ci * @tc.name: IntlFuncTest0032 13019596a2c1Sopenharmony_ci * @tc.desc: Test Intl NumberFormat 13029596a2c1Sopenharmony_ci * @tc.type: FUNC 13039596a2c1Sopenharmony_ci */ 13049596a2c1Sopenharmony_ciHWTEST_F(IntlTest, IntlFuncTest0032, TestSize.Level1) 13059596a2c1Sopenharmony_ci{ 13069596a2c1Sopenharmony_ci vector<string> locales; 13079596a2c1Sopenharmony_ci locales.push_back("zh-Hans"); 13089596a2c1Sopenharmony_ci map<string, string> options = { 13099596a2c1Sopenharmony_ci { "locale", "zh-Hans" }, 13109596a2c1Sopenharmony_ci { "currency", "CNY" }, 13119596a2c1Sopenharmony_ci { "currencySign", "symbol" }, 13129596a2c1Sopenharmony_ci { "currencyDisplay", "symbol" }, 13139596a2c1Sopenharmony_ci { "unit", "meter" }, 13149596a2c1Sopenharmony_ci { "unitDisplay", "long" }, 13159596a2c1Sopenharmony_ci { "unitUsage", "length-person" }, 13169596a2c1Sopenharmony_ci { "signDisplay", "always" }, 13179596a2c1Sopenharmony_ci { "compactDisplay", "long" }, 13189596a2c1Sopenharmony_ci { "notation", "standard" }, 13199596a2c1Sopenharmony_ci { "localeMatcher", "best fit" }, 13209596a2c1Sopenharmony_ci { "style", "decimal" }, 13219596a2c1Sopenharmony_ci { "numberingSystem", "latn" }, 13229596a2c1Sopenharmony_ci { "useGroup", "true" }, 13239596a2c1Sopenharmony_ci { "minimumIntegerDigits", "1" }, 13249596a2c1Sopenharmony_ci { "minimumFractionDigits", "0" }, 13259596a2c1Sopenharmony_ci { "maximumFractionDigits", "21" }, 13269596a2c1Sopenharmony_ci { "minimumSignificantDigits", "1" }, 13279596a2c1Sopenharmony_ci { "maximumSignificantDigits", "21" } 13289596a2c1Sopenharmony_ci }; 13299596a2c1Sopenharmony_ci NumberFormat *formatter = new NumberFormat(locales, options); 13309596a2c1Sopenharmony_ci map<string, string> res; 13319596a2c1Sopenharmony_ci formatter->GetResolvedOptions(res); 13329596a2c1Sopenharmony_ci map<string, string>::iterator it = res.find("style"); 13339596a2c1Sopenharmony_ci if (it != res.end()) { 13349596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "decimal"); 13359596a2c1Sopenharmony_ci } 13369596a2c1Sopenharmony_ci it = res.find("numberingSystem"); 13379596a2c1Sopenharmony_ci if (it != res.end()) { 13389596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "latn"); 13399596a2c1Sopenharmony_ci } 13409596a2c1Sopenharmony_ci it = res.find("useGrouping"); 13419596a2c1Sopenharmony_ci if (it != res.end()) { 13429596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "true"); 13439596a2c1Sopenharmony_ci } 13449596a2c1Sopenharmony_ci it = res.find("minimumIntegerDigits"); 13459596a2c1Sopenharmony_ci if (it != res.end()) { 13469596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "1"); 13479596a2c1Sopenharmony_ci } 13489596a2c1Sopenharmony_ci it = res.find("minimumFractionDigits"); 13499596a2c1Sopenharmony_ci if (it != res.end()) { 13509596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "0"); 13519596a2c1Sopenharmony_ci } 13529596a2c1Sopenharmony_ci delete formatter; 13539596a2c1Sopenharmony_ci} 13549596a2c1Sopenharmony_ci 13559596a2c1Sopenharmony_ci/** 13569596a2c1Sopenharmony_ci * @tc.name: IntlFuncTest0033 13579596a2c1Sopenharmony_ci * @tc.desc: Test Intl NumberFormat 13589596a2c1Sopenharmony_ci * @tc.type: FUNC 13599596a2c1Sopenharmony_ci */ 13609596a2c1Sopenharmony_ciHWTEST_F(IntlTest, IntlFuncTest0033, TestSize.Level1) 13619596a2c1Sopenharmony_ci{ 13629596a2c1Sopenharmony_ci vector<string> locales; 13639596a2c1Sopenharmony_ci locales.push_back("zh-Hans"); 13649596a2c1Sopenharmony_ci map<string, string> options = { 13659596a2c1Sopenharmony_ci { "locale", "@@##" }, 13669596a2c1Sopenharmony_ci { "currency", "fake currency" }, 13679596a2c1Sopenharmony_ci { "currencySign", "fake sign" }, 13689596a2c1Sopenharmony_ci { "currencyDisplay", "symbol" }, 13699596a2c1Sopenharmony_ci { "unit", "meter" }, 13709596a2c1Sopenharmony_ci { "unitDisplay", "fake value" }, 13719596a2c1Sopenharmony_ci { "unitUsage", "length-person" }, 13729596a2c1Sopenharmony_ci { "signDisplay", "always" }, 13739596a2c1Sopenharmony_ci { "compactDisplay", "long" }, 13749596a2c1Sopenharmony_ci { "notation", "fake value" }, 13759596a2c1Sopenharmony_ci { "localeMatcher", "best fit" }, 13769596a2c1Sopenharmony_ci { "style", "decimal" }, 13779596a2c1Sopenharmony_ci { "numberingSystem", "latn" }, 13789596a2c1Sopenharmony_ci { "useGroup", "fake value" }, 13799596a2c1Sopenharmony_ci { "minimumIntegerDigits", "1" }, 13809596a2c1Sopenharmony_ci { "minimumFractionDigits", "0" }, 13819596a2c1Sopenharmony_ci { "maximumFractionDigits", "21" }, 13829596a2c1Sopenharmony_ci { "minimumSignificantDigits", "1" }, 13839596a2c1Sopenharmony_ci { "maximumSignificantDigits", "21" } 13849596a2c1Sopenharmony_ci }; 13859596a2c1Sopenharmony_ci NumberFormat *formatter = new NumberFormat(locales, options); 13869596a2c1Sopenharmony_ci map<string, string> res; 13879596a2c1Sopenharmony_ci formatter->GetResolvedOptions(res); 13889596a2c1Sopenharmony_ci map<string, string>::iterator it = res.find("maximumFractionDigits"); 13899596a2c1Sopenharmony_ci if (it != res.end()) { 13909596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "21"); 13919596a2c1Sopenharmony_ci } 13929596a2c1Sopenharmony_ci it = res.find("minimumSignificantDigits"); 13939596a2c1Sopenharmony_ci if (it != res.end()) { 13949596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "1"); 13959596a2c1Sopenharmony_ci } 13969596a2c1Sopenharmony_ci it = res.find("maximumSignificantDigits"); 13979596a2c1Sopenharmony_ci if (it != res.end()) { 13989596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "21"); 13999596a2c1Sopenharmony_ci } 14009596a2c1Sopenharmony_ci delete formatter; 14019596a2c1Sopenharmony_ci} 14029596a2c1Sopenharmony_ci 14039596a2c1Sopenharmony_ci/** 14049596a2c1Sopenharmony_ci * @tc.name: IntlFuncTest0034 14059596a2c1Sopenharmony_ci * @tc.desc: Test Intl NumberFormat 14069596a2c1Sopenharmony_ci * @tc.type: FUNC 14079596a2c1Sopenharmony_ci */ 14089596a2c1Sopenharmony_ciHWTEST_F(IntlTest, IntlFuncTest0034, TestSize.Level1) 14099596a2c1Sopenharmony_ci{ 14109596a2c1Sopenharmony_ci vector<string> locales; 14119596a2c1Sopenharmony_ci locales.push_back("en-US"); 14129596a2c1Sopenharmony_ci map<string, string> options = { 14139596a2c1Sopenharmony_ci { "locale", "$$$##43" }, 14149596a2c1Sopenharmony_ci { "currency", "USD" }, 14159596a2c1Sopenharmony_ci { "currencySign", "symbol" }, 14169596a2c1Sopenharmony_ci { "currencyDisplay", "symbol" }, 14179596a2c1Sopenharmony_ci { "unit", "fake unit" }, 14189596a2c1Sopenharmony_ci { "unitDisplay", "long" }, 14199596a2c1Sopenharmony_ci { "unitUsage", "fake usage" }, 14209596a2c1Sopenharmony_ci { "signDisplay", "always" }, 14219596a2c1Sopenharmony_ci { "compactDisplay", "long" }, 14229596a2c1Sopenharmony_ci { "notation", "standard" }, 14239596a2c1Sopenharmony_ci { "localeMatcher", "lookup" }, 14249596a2c1Sopenharmony_ci { "style", "currency" }, 14259596a2c1Sopenharmony_ci { "numberingSystem", "latn" }, 14269596a2c1Sopenharmony_ci { "useGrouping", "true" }, 14279596a2c1Sopenharmony_ci { "minimumIntegerDigits", "1" }, 14289596a2c1Sopenharmony_ci { "minimumFractionDigits", "0" }, 14299596a2c1Sopenharmony_ci { "maximumFractionDigits", "20" }, 14309596a2c1Sopenharmony_ci { "minimumSignificantDigits", "1" }, 14319596a2c1Sopenharmony_ci { "maximumSignificantDigits", "20" } 14329596a2c1Sopenharmony_ci }; 14339596a2c1Sopenharmony_ci NumberFormat *formatter = new NumberFormat(locales, options); 14349596a2c1Sopenharmony_ci string res = formatter->Format(123); 14359596a2c1Sopenharmony_ci EXPECT_EQ(res, "+$123"); 14369596a2c1Sopenharmony_ci res = formatter->Format(123.456); 14379596a2c1Sopenharmony_ci EXPECT_EQ(res, "+$123.456"); 14389596a2c1Sopenharmony_ci res = formatter->GetCurrency(); 14399596a2c1Sopenharmony_ci EXPECT_EQ(res, "USD"); 14409596a2c1Sopenharmony_ci res = formatter->GetCurrencySign(); 14419596a2c1Sopenharmony_ci EXPECT_EQ(res, "symbol"); 14429596a2c1Sopenharmony_ci res = formatter->GetStyle(); 14439596a2c1Sopenharmony_ci EXPECT_EQ(res, "currency"); 14449596a2c1Sopenharmony_ci res = formatter->GetNumberingSystem(); 14459596a2c1Sopenharmony_ci EXPECT_EQ(res, "latn"); 14469596a2c1Sopenharmony_ci delete formatter; 14479596a2c1Sopenharmony_ci} 14489596a2c1Sopenharmony_ci 14499596a2c1Sopenharmony_ci/** 14509596a2c1Sopenharmony_ci * @tc.name: IntlFuncTest0035 14519596a2c1Sopenharmony_ci * @tc.desc: Test Intl NumberFormat 14529596a2c1Sopenharmony_ci * @tc.type: FUNC 14539596a2c1Sopenharmony_ci */ 14549596a2c1Sopenharmony_ciHWTEST_F(IntlTest, IntlFuncTest0035, TestSize.Level1) 14559596a2c1Sopenharmony_ci{ 14569596a2c1Sopenharmony_ci vector<string> locales; 14579596a2c1Sopenharmony_ci locales.push_back("en-US"); 14589596a2c1Sopenharmony_ci map<string, string> options = { 14599596a2c1Sopenharmony_ci { "locale", "fake locale" }, 14609596a2c1Sopenharmony_ci { "currency", "USD" }, 14619596a2c1Sopenharmony_ci { "currencySign", "fake sign" }, 14629596a2c1Sopenharmony_ci { "currencyDisplay", "symbol" }, 14639596a2c1Sopenharmony_ci { "unit", "fake unit" }, 14649596a2c1Sopenharmony_ci { "unitDisplay", "long" }, 14659596a2c1Sopenharmony_ci { "unitUsage", "length-person" }, 14669596a2c1Sopenharmony_ci { "signDisplay", "fake display" }, 14679596a2c1Sopenharmony_ci { "compactDisplay", "long" }, 14689596a2c1Sopenharmony_ci { "notation", "standard" }, 14699596a2c1Sopenharmony_ci { "localeMatcher", "lookup" }, 14709596a2c1Sopenharmony_ci { "style", "currency" }, 14719596a2c1Sopenharmony_ci { "numberingSystem", "latn" }, 14729596a2c1Sopenharmony_ci { "useGrouping", "false" }, 14739596a2c1Sopenharmony_ci { "minimumIntegerDigits", "1" }, 14749596a2c1Sopenharmony_ci { "minimumFractionDigits", "0" }, 14759596a2c1Sopenharmony_ci { "maximumFractionDigits", "17" }, 14769596a2c1Sopenharmony_ci { "minimumSignificantDigits", "1" }, 14779596a2c1Sopenharmony_ci { "maximumSignificantDigits", "17" } 14789596a2c1Sopenharmony_ci }; 14799596a2c1Sopenharmony_ci NumberFormat *formatter = new NumberFormat(locales, options); 14809596a2c1Sopenharmony_ci string res = formatter->GetUseGrouping(); 14819596a2c1Sopenharmony_ci EXPECT_EQ(res, "false"); 14829596a2c1Sopenharmony_ci res = formatter->GetMinimumIntegerDigits(); 14839596a2c1Sopenharmony_ci EXPECT_EQ(res, "1"); 14849596a2c1Sopenharmony_ci res = formatter->GetMinimumFractionDigits(); 14859596a2c1Sopenharmony_ci EXPECT_EQ(res, "0"); 14869596a2c1Sopenharmony_ci res = formatter->GetMaximumFractionDigits(); 14879596a2c1Sopenharmony_ci EXPECT_EQ(res, "17"); 14889596a2c1Sopenharmony_ci res = formatter->GetMinimumSignificantDigits(); 14899596a2c1Sopenharmony_ci EXPECT_EQ(res, "1"); 14909596a2c1Sopenharmony_ci res = formatter->GetMaximumSignificantDigits(); 14919596a2c1Sopenharmony_ci EXPECT_EQ(res, "17"); 14929596a2c1Sopenharmony_ci delete formatter; 14939596a2c1Sopenharmony_ci} 14949596a2c1Sopenharmony_ci 14959596a2c1Sopenharmony_ci/** 14969596a2c1Sopenharmony_ci * @tc.name: IntlFuncTest0036 14979596a2c1Sopenharmony_ci * @tc.desc: Test Intl DateTimeFormat 14989596a2c1Sopenharmony_ci * @tc.type: FUNC 14999596a2c1Sopenharmony_ci */ 15009596a2c1Sopenharmony_ciHWTEST_F(IntlTest, IntlFuncTest0036, TestSize.Level1) 15019596a2c1Sopenharmony_ci{ 15029596a2c1Sopenharmony_ci vector<string> locales; 15039596a2c1Sopenharmony_ci locales.push_back("en-US"); 15049596a2c1Sopenharmony_ci map<string, string> options = { 15059596a2c1Sopenharmony_ci { "dateStyle", "short" } 15069596a2c1Sopenharmony_ci }; 15079596a2c1Sopenharmony_ci DateTimeFormat *formatter = new DateTimeFormat(locales, options); 15089596a2c1Sopenharmony_ci 15099596a2c1Sopenharmony_ci int64_t milliseconds = 123456789; 15109596a2c1Sopenharmony_ci string res = formatter->Format(milliseconds); 15119596a2c1Sopenharmony_ci EXPECT_EQ(res, "1/2/70"); 15129596a2c1Sopenharmony_ci 15139596a2c1Sopenharmony_ci int64_t milliseconds2 = 987654321; 15149596a2c1Sopenharmony_ci res = formatter->FormatRange(milliseconds, milliseconds2); 15159596a2c1Sopenharmony_ci EXPECT_EQ(res, "1/2/70 \xE2\x80\x93 1/12/70"); 15169596a2c1Sopenharmony_ci delete formatter; 15179596a2c1Sopenharmony_ci} 15189596a2c1Sopenharmony_ci 15199596a2c1Sopenharmony_ci/** 15209596a2c1Sopenharmony_ci * @tc.name: IntlFuncTest0037 15219596a2c1Sopenharmony_ci * @tc.desc: Test Intl DateTimeFormat 15229596a2c1Sopenharmony_ci * @tc.type: FUNC 15239596a2c1Sopenharmony_ci */ 15249596a2c1Sopenharmony_ciHWTEST_F(IntlTest, IntlFuncTest0037, TestSize.Level1) 15259596a2c1Sopenharmony_ci{ 15269596a2c1Sopenharmony_ci vector<string> locales; 15279596a2c1Sopenharmony_ci locales.push_back("zh-CN"); 15289596a2c1Sopenharmony_ci map<string, string> options = { 15299596a2c1Sopenharmony_ci { "locale", "zh-CN" }, 15309596a2c1Sopenharmony_ci { "dateStyle", "medium" }, 15319596a2c1Sopenharmony_ci { "timeStyle", "long" }, 15329596a2c1Sopenharmony_ci { "hourCycle", "h24" }, 15339596a2c1Sopenharmony_ci { "timeZone", "Asia/Shanghai" }, 15349596a2c1Sopenharmony_ci { "numberingSystem", "latn" }, 15359596a2c1Sopenharmony_ci { "hour12", "false" }, 15369596a2c1Sopenharmony_ci { "weekday", "long" }, 15379596a2c1Sopenharmony_ci { "era", "long" }, 15389596a2c1Sopenharmony_ci { "year", "2-digit" }, 15399596a2c1Sopenharmony_ci { "month", "2-digit" }, 15409596a2c1Sopenharmony_ci { "day", "2-digit" }, 15419596a2c1Sopenharmony_ci { "hour", "2-digit" }, 15429596a2c1Sopenharmony_ci { "minute", "2-digit" }, 15439596a2c1Sopenharmony_ci { "second", "2-digit" }, 15449596a2c1Sopenharmony_ci { "timeZoneName", "long" }, 15459596a2c1Sopenharmony_ci { "dayPeriod", "long" }, 15469596a2c1Sopenharmony_ci { "localeMatcher", "lookup" }, 15479596a2c1Sopenharmony_ci { "formatMatcher", "basic" } 15489596a2c1Sopenharmony_ci }; 15499596a2c1Sopenharmony_ci DateTimeFormat *formatter = new DateTimeFormat(locales, options); 15509596a2c1Sopenharmony_ci 15519596a2c1Sopenharmony_ci int64_t milliseconds = 123456789; 15529596a2c1Sopenharmony_ci string res = formatter->Format(milliseconds); 15539596a2c1Sopenharmony_ci // 2022年12月19日 GMT+8 15:18:24 15549596a2c1Sopenharmony_ci EXPECT_TRUE(res.length() > 0); 15559596a2c1Sopenharmony_ci 15569596a2c1Sopenharmony_ci int64_t milliseconds2 = 987654321; 15579596a2c1Sopenharmony_ci res = formatter->FormatRange(milliseconds, milliseconds2); 15589596a2c1Sopenharmony_ci // 2022/12/19 GMT+8 15:18:24 \xE2\x80\x93 2023/11/18 GMT+8 14:17:23 15599596a2c1Sopenharmony_ci EXPECT_TRUE(res.length() > 0); 15609596a2c1Sopenharmony_ci 15619596a2c1Sopenharmony_ci res = formatter->GetDateStyle(); 15629596a2c1Sopenharmony_ci EXPECT_EQ(res, "medium"); 15639596a2c1Sopenharmony_ci res = formatter->GetTimeStyle(); 15649596a2c1Sopenharmony_ci EXPECT_EQ(res, "long"); 15659596a2c1Sopenharmony_ci res = formatter->GetHourCycle(); 15669596a2c1Sopenharmony_ci EXPECT_EQ(res, "h24"); 15679596a2c1Sopenharmony_ci res = formatter->GetTimeZone(); 15689596a2c1Sopenharmony_ci EXPECT_EQ(res, "Asia/Shanghai"); 15699596a2c1Sopenharmony_ci res = formatter->GetTimeZoneName(); 15709596a2c1Sopenharmony_ci EXPECT_EQ(res, "long"); 15719596a2c1Sopenharmony_ci delete formatter; 15729596a2c1Sopenharmony_ci} 15739596a2c1Sopenharmony_ci 15749596a2c1Sopenharmony_ci/** 15759596a2c1Sopenharmony_ci * @tc.name: IntlFuncTest0038 15769596a2c1Sopenharmony_ci * @tc.desc: Test Intl DateTimeFormat 15779596a2c1Sopenharmony_ci * @tc.type: FUNC 15789596a2c1Sopenharmony_ci */ 15799596a2c1Sopenharmony_ciHWTEST_F(IntlTest, IntlFuncTest0038, TestSize.Level1) 15809596a2c1Sopenharmony_ci{ 15819596a2c1Sopenharmony_ci vector<string> locales; 15829596a2c1Sopenharmony_ci locales.push_back("zh-CN"); 15839596a2c1Sopenharmony_ci map<string, string> options = { 15849596a2c1Sopenharmony_ci { "locale", "zh-CN" }, 15859596a2c1Sopenharmony_ci { "dateStyle", "full" }, 15869596a2c1Sopenharmony_ci { "timeStyle", "full" }, 15879596a2c1Sopenharmony_ci { "hourCycle", "h24" }, 15889596a2c1Sopenharmony_ci { "timeZone", "Asia/Shanghai" }, 15899596a2c1Sopenharmony_ci { "numberingSystem", "latn" }, 15909596a2c1Sopenharmony_ci { "hour12", "false" }, 15919596a2c1Sopenharmony_ci { "weekday", "long" }, 15929596a2c1Sopenharmony_ci { "era", "long" }, 15939596a2c1Sopenharmony_ci { "year", "numeric" }, 15949596a2c1Sopenharmony_ci { "month", "numeric" }, 15959596a2c1Sopenharmony_ci { "day", "numeric" }, 15969596a2c1Sopenharmony_ci { "hour", "numeric" }, 15979596a2c1Sopenharmony_ci { "minute", "numeric" }, 15989596a2c1Sopenharmony_ci { "second", "numeric" }, 15999596a2c1Sopenharmony_ci { "timeZoneName", "long" }, 16009596a2c1Sopenharmony_ci { "dayPeriod", "long" }, 16019596a2c1Sopenharmony_ci { "localeMatcher", "lookup" }, 16029596a2c1Sopenharmony_ci { "formatMatcher", "basic" } 16039596a2c1Sopenharmony_ci }; 16049596a2c1Sopenharmony_ci DateTimeFormat *formatter = new DateTimeFormat(locales, options); 16059596a2c1Sopenharmony_ci string res = formatter->GetNumberingSystem(); 16069596a2c1Sopenharmony_ci EXPECT_EQ(res, "latn"); 16079596a2c1Sopenharmony_ci res = formatter->GetHour12(); 16089596a2c1Sopenharmony_ci EXPECT_EQ(res, "false"); 16099596a2c1Sopenharmony_ci res = formatter->GetWeekday(); 16109596a2c1Sopenharmony_ci EXPECT_EQ(res, "long"); 16119596a2c1Sopenharmony_ci res = formatter->GetEra(); 16129596a2c1Sopenharmony_ci EXPECT_EQ(res, "long"); 16139596a2c1Sopenharmony_ci res = formatter->GetYear(); 16149596a2c1Sopenharmony_ci EXPECT_EQ(res, "numeric"); 16159596a2c1Sopenharmony_ci res = formatter->GetMonth(); 16169596a2c1Sopenharmony_ci EXPECT_EQ(res, "numeric"); 16179596a2c1Sopenharmony_ci res = formatter->GetDay(); 16189596a2c1Sopenharmony_ci EXPECT_EQ(res, "numeric"); 16199596a2c1Sopenharmony_ci res = formatter->GetHour(); 16209596a2c1Sopenharmony_ci EXPECT_EQ(res, "numeric"); 16219596a2c1Sopenharmony_ci res = formatter->GetMinute(); 16229596a2c1Sopenharmony_ci EXPECT_EQ(res, "numeric"); 16239596a2c1Sopenharmony_ci res = formatter->GetSecond(); 16249596a2c1Sopenharmony_ci EXPECT_EQ(res, "numeric"); 16259596a2c1Sopenharmony_ci delete formatter; 16269596a2c1Sopenharmony_ci} 16279596a2c1Sopenharmony_ci 16289596a2c1Sopenharmony_ci/** 16299596a2c1Sopenharmony_ci * @tc.name: IntlFuncTest0039 16309596a2c1Sopenharmony_ci * @tc.desc: Test Intl DateTimeFormat 16319596a2c1Sopenharmony_ci * @tc.type: FUNC 16329596a2c1Sopenharmony_ci */ 16339596a2c1Sopenharmony_ciHWTEST_F(IntlTest, IntlFuncTest0039, TestSize.Level1) 16349596a2c1Sopenharmony_ci{ 16359596a2c1Sopenharmony_ci vector<string> locales; 16369596a2c1Sopenharmony_ci locales.push_back("en-US"); 16379596a2c1Sopenharmony_ci map<string, string> inputOptions = { 16389596a2c1Sopenharmony_ci { "locale", "en-US" }, 16399596a2c1Sopenharmony_ci { "dateStyle", "medium" }, 16409596a2c1Sopenharmony_ci { "timeStyle", "long" }, 16419596a2c1Sopenharmony_ci { "hourCycle", "h12" }, 16429596a2c1Sopenharmony_ci { "numberingSystem", "latn" }, 16439596a2c1Sopenharmony_ci { "hour12", "true" }, 16449596a2c1Sopenharmony_ci { "weekday", "long" }, 16459596a2c1Sopenharmony_ci { "era", "long" }, 16469596a2c1Sopenharmony_ci { "year", "2-digit" }, 16479596a2c1Sopenharmony_ci { "month", "2-digit" }, 16489596a2c1Sopenharmony_ci { "day", "2-digit" }, 16499596a2c1Sopenharmony_ci { "hour", "2-digit" }, 16509596a2c1Sopenharmony_ci { "minute", "2-digit" }, 16519596a2c1Sopenharmony_ci { "second", "2-digit" }, 16529596a2c1Sopenharmony_ci { "timeZoneName", "long" }, 16539596a2c1Sopenharmony_ci { "dayPeriod", "long" }, 16549596a2c1Sopenharmony_ci { "localeMatcher", "lookup" }, 16559596a2c1Sopenharmony_ci { "formatMatcher", "basic" } 16569596a2c1Sopenharmony_ci }; 16579596a2c1Sopenharmony_ci std::unique_ptr<DateTimeFormat> formatter = DateTimeFormat::CreateInstance(locales, inputOptions); 16589596a2c1Sopenharmony_ci int64_t milliseconds = 123456789; 16599596a2c1Sopenharmony_ci string res = formatter->Format(milliseconds); 16609596a2c1Sopenharmony_ci // Dec 19, 2022, 3:18:24 PM GMT+8 16619596a2c1Sopenharmony_ci EXPECT_TRUE(res.length() > 0); 16629596a2c1Sopenharmony_ci int64_t milliseconds2 = 987654321; 16639596a2c1Sopenharmony_ci res = formatter->FormatRange(milliseconds, milliseconds2); 16649596a2c1Sopenharmony_ci // Dec 19, 2022, 3:18:24 PM GMT+8 \xE2\x80\x93 Nov 18, 2023, 2:17:23 PM GMT+8 16659596a2c1Sopenharmony_ci EXPECT_TRUE(res.length() > 0); 16669596a2c1Sopenharmony_ci map<string, string> options; 16679596a2c1Sopenharmony_ci formatter->GetResolvedOptions(options); 16689596a2c1Sopenharmony_ci EXPECT_EQ(options.size(), 20); 16699596a2c1Sopenharmony_ci map<string, string>::iterator it = options.find("locale"); 16709596a2c1Sopenharmony_ci if (it != options.end()) { 16719596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "en-US"); 16729596a2c1Sopenharmony_ci } 16739596a2c1Sopenharmony_ci it = options.find("dateStyle"); 16749596a2c1Sopenharmony_ci if (it != options.end()) { 16759596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "medium"); 16769596a2c1Sopenharmony_ci } 16779596a2c1Sopenharmony_ci it = options.find("timeStyle"); 16789596a2c1Sopenharmony_ci if (it != options.end()) { 16799596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "long"); 16809596a2c1Sopenharmony_ci } 16819596a2c1Sopenharmony_ci} 16829596a2c1Sopenharmony_ci 16839596a2c1Sopenharmony_ci/** 16849596a2c1Sopenharmony_ci * @tc.name: IntlFuncTest0040 16859596a2c1Sopenharmony_ci * @tc.desc: Test Intl DateTimeFormat 16869596a2c1Sopenharmony_ci * @tc.type: FUNC 16879596a2c1Sopenharmony_ci */ 16889596a2c1Sopenharmony_ciHWTEST_F(IntlTest, IntlFuncTest0040, TestSize.Level1) 16899596a2c1Sopenharmony_ci{ 16909596a2c1Sopenharmony_ci vector<string> locales; 16919596a2c1Sopenharmony_ci locales.push_back("en-GB"); 16929596a2c1Sopenharmony_ci map<string, string> inputOptions = { 16939596a2c1Sopenharmony_ci { "locale", "en-GB" }, 16949596a2c1Sopenharmony_ci { "dateStyle", "medium" }, 16959596a2c1Sopenharmony_ci { "timeStyle", "long" }, 16969596a2c1Sopenharmony_ci { "hourCycle", "h12" }, 16979596a2c1Sopenharmony_ci { "timeZone", "Asia/Shanghai" }, 16989596a2c1Sopenharmony_ci { "numberingSystem", "latn" }, 16999596a2c1Sopenharmony_ci { "hour12", "true" }, 17009596a2c1Sopenharmony_ci { "weekday", "long" }, 17019596a2c1Sopenharmony_ci { "era", "long" }, 17029596a2c1Sopenharmony_ci { "year", "numeric" }, 17039596a2c1Sopenharmony_ci { "month", "numeric" }, 17049596a2c1Sopenharmony_ci { "day", "numeric" }, 17059596a2c1Sopenharmony_ci { "hour", "numeric" }, 17069596a2c1Sopenharmony_ci { "minute", "numeric" }, 17079596a2c1Sopenharmony_ci { "second", "numeric" }, 17089596a2c1Sopenharmony_ci { "timeZoneName", "long" }, 17099596a2c1Sopenharmony_ci { "dayPeriod", "long" }, 17109596a2c1Sopenharmony_ci { "localeMatcher", "lookup" }, 17119596a2c1Sopenharmony_ci { "formatMatcher", "basic" } 17129596a2c1Sopenharmony_ci }; 17139596a2c1Sopenharmony_ci std::unique_ptr<DateTimeFormat> formatter = DateTimeFormat::CreateInstance(locales, inputOptions); 17149596a2c1Sopenharmony_ci map<string, string> options; 17159596a2c1Sopenharmony_ci formatter->GetResolvedOptions(options); 17169596a2c1Sopenharmony_ci map<string, string>::iterator it = options.find("hourCycle"); 17179596a2c1Sopenharmony_ci if (it != options.end()) { 17189596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "h12"); 17199596a2c1Sopenharmony_ci } 17209596a2c1Sopenharmony_ci it = options.find("timeZone"); 17219596a2c1Sopenharmony_ci if (it != options.end()) { 17229596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "Asia/Shanghai"); 17239596a2c1Sopenharmony_ci } 17249596a2c1Sopenharmony_ci it = options.find("numberingSystem"); 17259596a2c1Sopenharmony_ci if (it != options.end()) { 17269596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "latn"); 17279596a2c1Sopenharmony_ci } 17289596a2c1Sopenharmony_ci it = options.find("hour12"); 17299596a2c1Sopenharmony_ci if (it != options.end()) { 17309596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "true"); 17319596a2c1Sopenharmony_ci } 17329596a2c1Sopenharmony_ci it = options.find("weekday"); 17339596a2c1Sopenharmony_ci if (it != options.end()) { 17349596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "long"); 17359596a2c1Sopenharmony_ci } 17369596a2c1Sopenharmony_ci} 17379596a2c1Sopenharmony_ci 17389596a2c1Sopenharmony_ci/** 17399596a2c1Sopenharmony_ci * @tc.name: IntlFuncTest0041 17409596a2c1Sopenharmony_ci * @tc.desc: Test Intl DateTimeFormat 17419596a2c1Sopenharmony_ci * @tc.type: FUNC 17429596a2c1Sopenharmony_ci */ 17439596a2c1Sopenharmony_ciHWTEST_F(IntlTest, IntlFuncTest0041, TestSize.Level1) 17449596a2c1Sopenharmony_ci{ 17459596a2c1Sopenharmony_ci vector<string> locales; 17469596a2c1Sopenharmony_ci locales.push_back("en-US"); 17479596a2c1Sopenharmony_ci map<string, string> inputOptions = { 17489596a2c1Sopenharmony_ci { "locale", "en-US" }, 17499596a2c1Sopenharmony_ci { "dateStyle", "medium" }, 17509596a2c1Sopenharmony_ci { "timeStyle", "medium" }, 17519596a2c1Sopenharmony_ci { "hourCycle", "h24" }, 17529596a2c1Sopenharmony_ci { "timeZone", "Asia/Shanghai" }, 17539596a2c1Sopenharmony_ci { "numberingSystem", "latn" }, 17549596a2c1Sopenharmony_ci { "hour12", "false" }, 17559596a2c1Sopenharmony_ci { "weekday", "long" }, 17569596a2c1Sopenharmony_ci { "era", "long" }, 17579596a2c1Sopenharmony_ci { "year", "2-digit" }, 17589596a2c1Sopenharmony_ci { "month", "2-digit" }, 17599596a2c1Sopenharmony_ci { "day", "2-digit" }, 17609596a2c1Sopenharmony_ci { "hour", "2-digit" }, 17619596a2c1Sopenharmony_ci { "minute", "2-digit" }, 17629596a2c1Sopenharmony_ci { "second", "2-digit" }, 17639596a2c1Sopenharmony_ci { "timeZoneName", "long" }, 17649596a2c1Sopenharmony_ci { "dayPeriod", "long" }, 17659596a2c1Sopenharmony_ci { "localeMatcher", "best fit" }, 17669596a2c1Sopenharmony_ci { "formatMatcher", "best fit" } 17679596a2c1Sopenharmony_ci }; 17689596a2c1Sopenharmony_ci std::unique_ptr<DateTimeFormat> formatter = DateTimeFormat::CreateInstance(locales, inputOptions); 17699596a2c1Sopenharmony_ci map<string, string> options; 17709596a2c1Sopenharmony_ci formatter->GetResolvedOptions(options); 17719596a2c1Sopenharmony_ci map<string, string>::iterator it = options.find("era"); 17729596a2c1Sopenharmony_ci if (it != options.end()) { 17739596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "long"); 17749596a2c1Sopenharmony_ci } 17759596a2c1Sopenharmony_ci it = options.find("year"); 17769596a2c1Sopenharmony_ci if (it != options.end()) { 17779596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "2-digit"); 17789596a2c1Sopenharmony_ci } 17799596a2c1Sopenharmony_ci it = options.find("month"); 17809596a2c1Sopenharmony_ci if (it != options.end()) { 17819596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "2-digit"); 17829596a2c1Sopenharmony_ci } 17839596a2c1Sopenharmony_ci it = options.find("day"); 17849596a2c1Sopenharmony_ci if (it != options.end()) { 17859596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "2-digit"); 17869596a2c1Sopenharmony_ci } 17879596a2c1Sopenharmony_ci it = options.find("hour"); 17889596a2c1Sopenharmony_ci if (it != options.end()) { 17899596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "2-digit"); 17909596a2c1Sopenharmony_ci } 17919596a2c1Sopenharmony_ci} 17929596a2c1Sopenharmony_ci 17939596a2c1Sopenharmony_ci/** 17949596a2c1Sopenharmony_ci * @tc.name: IntlFuncTest0042 17959596a2c1Sopenharmony_ci * @tc.desc: Test Intl DateTimeFormat 17969596a2c1Sopenharmony_ci * @tc.type: FUNC 17979596a2c1Sopenharmony_ci */ 17989596a2c1Sopenharmony_ciHWTEST_F(IntlTest, IntlFuncTest0042, TestSize.Level1) 17999596a2c1Sopenharmony_ci{ 18009596a2c1Sopenharmony_ci vector<string> locales; 18019596a2c1Sopenharmony_ci locales.push_back("en-US"); 18029596a2c1Sopenharmony_ci map<string, string> inputOptions = { 18039596a2c1Sopenharmony_ci { "locale", "en-US" }, 18049596a2c1Sopenharmony_ci { "dateStyle", "full" }, 18059596a2c1Sopenharmony_ci { "timeStyle", "long" }, 18069596a2c1Sopenharmony_ci { "hourCycle", "h12" }, 18079596a2c1Sopenharmony_ci { "timeZone", "Asia/Singapore" }, 18089596a2c1Sopenharmony_ci { "numberingSystem", "latn" }, 18099596a2c1Sopenharmony_ci { "hour12", "true" }, 18109596a2c1Sopenharmony_ci { "weekday", "long" }, 18119596a2c1Sopenharmony_ci { "era", "long" }, 18129596a2c1Sopenharmony_ci { "year", "2-digit" }, 18139596a2c1Sopenharmony_ci { "month", "2-digit" }, 18149596a2c1Sopenharmony_ci { "day", "2-digit" }, 18159596a2c1Sopenharmony_ci { "hour", "numeric" }, 18169596a2c1Sopenharmony_ci { "minute", "numeric" }, 18179596a2c1Sopenharmony_ci { "second", "numeric" }, 18189596a2c1Sopenharmony_ci { "timeZoneName", "long" }, 18199596a2c1Sopenharmony_ci { "dayPeriod", "long" }, 18209596a2c1Sopenharmony_ci { "localeMatcher", "lookup" }, 18219596a2c1Sopenharmony_ci { "formatMatcher", "basic" } 18229596a2c1Sopenharmony_ci }; 18239596a2c1Sopenharmony_ci std::unique_ptr<DateTimeFormat> formatter = DateTimeFormat::CreateInstance(locales, inputOptions); 18249596a2c1Sopenharmony_ci map<string, string> options; 18259596a2c1Sopenharmony_ci formatter->GetResolvedOptions(options); 18269596a2c1Sopenharmony_ci map<string, string>::iterator it = options.find("minute"); 18279596a2c1Sopenharmony_ci if (it != options.end()) { 18289596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "numeric"); 18299596a2c1Sopenharmony_ci } 18309596a2c1Sopenharmony_ci it = options.find("second"); 18319596a2c1Sopenharmony_ci if (it != options.end()) { 18329596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "numeric"); 18339596a2c1Sopenharmony_ci } 18349596a2c1Sopenharmony_ci it = options.find("timeZoneName"); 18359596a2c1Sopenharmony_ci if (it != options.end()) { 18369596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "long"); 18379596a2c1Sopenharmony_ci } 18389596a2c1Sopenharmony_ci it = options.find("dayPeriod"); 18399596a2c1Sopenharmony_ci if (it != options.end()) { 18409596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "long"); 18419596a2c1Sopenharmony_ci } 18429596a2c1Sopenharmony_ci} 18439596a2c1Sopenharmony_ci 18449596a2c1Sopenharmony_ci/** 18459596a2c1Sopenharmony_ci * @tc.name: IntlFuncTest0043 18469596a2c1Sopenharmony_ci * @tc.desc: Test Intl DateTimeFormat 18479596a2c1Sopenharmony_ci * @tc.type: FUNC 18489596a2c1Sopenharmony_ci */ 18499596a2c1Sopenharmony_ciHWTEST_F(IntlTest, IntlFuncTest0043, TestSize.Level1) 18509596a2c1Sopenharmony_ci{ 18519596a2c1Sopenharmony_ci vector<string> locales; 18529596a2c1Sopenharmony_ci locales.push_back("en-US"); 18539596a2c1Sopenharmony_ci map<string, string> inputOptions = { 18549596a2c1Sopenharmony_ci { "locale", "en-US" }, 18559596a2c1Sopenharmony_ci { "dateStyle", "long" }, 18569596a2c1Sopenharmony_ci { "timeStyle", "long" }, 18579596a2c1Sopenharmony_ci { "hourCycle", "h12" }, 18589596a2c1Sopenharmony_ci { "timeZone", "America/Los_Angeles" }, 18599596a2c1Sopenharmony_ci { "numberingSystem", "latn" }, 18609596a2c1Sopenharmony_ci { "hour12", "true" }, 18619596a2c1Sopenharmony_ci { "weekday", "long" }, 18629596a2c1Sopenharmony_ci { "era", "long" }, 18639596a2c1Sopenharmony_ci { "year", "numeric" }, 18649596a2c1Sopenharmony_ci { "month", "numeric" }, 18659596a2c1Sopenharmony_ci { "day", "numeric" }, 18669596a2c1Sopenharmony_ci { "hour", "2-digit" }, 18679596a2c1Sopenharmony_ci { "minute", "2-digit" }, 18689596a2c1Sopenharmony_ci { "second", "2-digit" }, 18699596a2c1Sopenharmony_ci { "timeZoneName", "long" }, 18709596a2c1Sopenharmony_ci { "dayPeriod", "long" }, 18719596a2c1Sopenharmony_ci { "localeMatcher", "lookup" }, 18729596a2c1Sopenharmony_ci { "formatMatcher", "basic" } 18739596a2c1Sopenharmony_ci }; 18749596a2c1Sopenharmony_ci std::unique_ptr<DateTimeFormat> formatter = DateTimeFormat::CreateInstance(locales, inputOptions); 18759596a2c1Sopenharmony_ci map<string, string> options; 18769596a2c1Sopenharmony_ci formatter->GetResolvedOptions(options); 18779596a2c1Sopenharmony_ci map<string, string>::iterator it = options.find("localeMatcher"); 18789596a2c1Sopenharmony_ci if (it != options.end()) { 18799596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "lookup"); 18809596a2c1Sopenharmony_ci } 18819596a2c1Sopenharmony_ci it = options.find("formatMatcher"); 18829596a2c1Sopenharmony_ci if (it != options.end()) { 18839596a2c1Sopenharmony_ci EXPECT_EQ(it->second, "basic"); 18849596a2c1Sopenharmony_ci } 18859596a2c1Sopenharmony_ci} 18869596a2c1Sopenharmony_ci 18879596a2c1Sopenharmony_ci/** 18889596a2c1Sopenharmony_ci * @tc.name: IntlFuncTest0044 18899596a2c1Sopenharmony_ci * @tc.desc: Test Intl LocaleInfo 18909596a2c1Sopenharmony_ci * @tc.type: FUNC 18919596a2c1Sopenharmony_ci */ 18929596a2c1Sopenharmony_ciHWTEST_F(IntlTest, IntlFuncTest0044, TestSize.Level1) 18939596a2c1Sopenharmony_ci{ 18949596a2c1Sopenharmony_ci string localeTag = "zh-Hans-CN"; 18959596a2c1Sopenharmony_ci map<string, string> configs = { 18969596a2c1Sopenharmony_ci { "calendar", "chinese" }, 18979596a2c1Sopenharmony_ci { "collation", "pinyin" }, 18989596a2c1Sopenharmony_ci { "hourCycle", "h12" }, 18999596a2c1Sopenharmony_ci { "numberingSystem", "latn" }, 19009596a2c1Sopenharmony_ci { "numeric", "true" }, 19019596a2c1Sopenharmony_ci { "caseFirst", "upper" } 19029596a2c1Sopenharmony_ci }; 19039596a2c1Sopenharmony_ci LocaleInfo *locale = new LocaleInfo(localeTag, configs); 19049596a2c1Sopenharmony_ci string res = locale->GetLanguage(); 19059596a2c1Sopenharmony_ci EXPECT_EQ(res, "zh"); 19069596a2c1Sopenharmony_ci res = locale->GetScript(); 19079596a2c1Sopenharmony_ci EXPECT_EQ(res, "Hans"); 19089596a2c1Sopenharmony_ci res = locale->GetRegion(); 19099596a2c1Sopenharmony_ci EXPECT_EQ(res, "CN"); 19109596a2c1Sopenharmony_ci res = locale->GetBaseName(); 19119596a2c1Sopenharmony_ci EXPECT_EQ(res, "zh-Hans-CN"); 19129596a2c1Sopenharmony_ci res = locale->GetCalendar(); 19139596a2c1Sopenharmony_ci EXPECT_EQ(res, "chinese"); 19149596a2c1Sopenharmony_ci res = locale->GetCollation(); 19159596a2c1Sopenharmony_ci EXPECT_EQ(res, "pinyin"); 19169596a2c1Sopenharmony_ci res = locale->GetHourCycle(); 19179596a2c1Sopenharmony_ci EXPECT_EQ(res, "h12"); 19189596a2c1Sopenharmony_ci res = locale->GetNumberingSystem(); 19199596a2c1Sopenharmony_ci EXPECT_EQ(res, "latn"); 19209596a2c1Sopenharmony_ci res = locale->GetNumeric(); 19219596a2c1Sopenharmony_ci EXPECT_EQ(res, "true"); 19229596a2c1Sopenharmony_ci res = locale->GetCaseFirst(); 19239596a2c1Sopenharmony_ci EXPECT_EQ(res, "upper"); 19249596a2c1Sopenharmony_ci icu::Locale icuLocale = locale->GetLocale(); 19259596a2c1Sopenharmony_ci res = locale->ToString(); 19269596a2c1Sopenharmony_ci EXPECT_EQ(res, "zh-Hans-CN-u-hc-h12-nu-latn-ca-chinese-co-pinyin-kf-upper-kn-true"); 19279596a2c1Sopenharmony_ci delete locale; 19289596a2c1Sopenharmony_ci} 19299596a2c1Sopenharmony_ci 19309596a2c1Sopenharmony_ci/** 19319596a2c1Sopenharmony_ci * @tc.name: IntlFuncTest0045 19329596a2c1Sopenharmony_ci * @tc.desc: Test Intl ReadSystemParameter 19339596a2c1Sopenharmony_ci * @tc.type: FUNC 19349596a2c1Sopenharmony_ci */ 19359596a2c1Sopenharmony_ciHWTEST_F(IntlTest, IntlFuncTest0045, TestSize.Level1) 19369596a2c1Sopenharmony_ci{ 19379596a2c1Sopenharmony_ci string paramKey = "const.global.language"; 19389596a2c1Sopenharmony_ci int paramLength = 128; 19399596a2c1Sopenharmony_ci string res = ReadSystemParameter(paramKey.c_str(), paramLength); 19409596a2c1Sopenharmony_ci EXPECT_TRUE(res.length() > 0); 19419596a2c1Sopenharmony_ci 19429596a2c1Sopenharmony_ci paramKey = "fake system param"; 19439596a2c1Sopenharmony_ci res = ReadSystemParameter(paramKey.c_str(), paramLength); 19449596a2c1Sopenharmony_ci EXPECT_TRUE(res.length() == 0); 19459596a2c1Sopenharmony_ci} 19469596a2c1Sopenharmony_ci 19479596a2c1Sopenharmony_ci/** 19489596a2c1Sopenharmony_ci * @tc.name: IntlFuncTest0046 19499596a2c1Sopenharmony_ci * @tc.desc: Test Intl GetTimezoneIdByLocation 19509596a2c1Sopenharmony_ci * @tc.type: FUNC 19519596a2c1Sopenharmony_ci */ 19529596a2c1Sopenharmony_ciHWTEST_F(IntlTest, IntlFuncTest0046, TestSize.Level1) 19539596a2c1Sopenharmony_ci{ 19549596a2c1Sopenharmony_ci //北京 19559596a2c1Sopenharmony_ci vector<std::string> Beijing = I18nTimeZone::GetTimezoneIdByLocation(116.3, 39.5); 19569596a2c1Sopenharmony_ci EXPECT_TRUE(Beijing.size() == 1 && Beijing[0] == "Asia/Shanghai"); 19579596a2c1Sopenharmony_ci //洛杉矶 19589596a2c1Sopenharmony_ci vector<std::string> LosAngeles = I18nTimeZone::GetTimezoneIdByLocation(-118.1, 34.0); 19599596a2c1Sopenharmony_ci EXPECT_TRUE(LosAngeles.size() == 1 && LosAngeles[0] == "America/Los_Angeles"); 19609596a2c1Sopenharmony_ci //里约热内卢 19619596a2c1Sopenharmony_ci vector<std::string> RIO = I18nTimeZone::GetTimezoneIdByLocation(-43.1, -22.5); 19629596a2c1Sopenharmony_ci EXPECT_TRUE(RIO.size() == 1 && RIO[0] == "America/Sao_Paulo"); 19639596a2c1Sopenharmony_ci //悉尼 19649596a2c1Sopenharmony_ci vector<std::string> Sydney = I18nTimeZone::GetTimezoneIdByLocation(150.5, -33.55); 19659596a2c1Sopenharmony_ci EXPECT_TRUE(Sydney.size() == 1 && Sydney[0] == "Australia/Sydney"); 19669596a2c1Sopenharmony_ci //乌鲁木齐 19679596a2c1Sopenharmony_ci vector<std::string> Urumqi = I18nTimeZone::GetTimezoneIdByLocation(87.7, 43.8); 19689596a2c1Sopenharmony_ci EXPECT_TRUE(Urumqi.size() == 2); 19699596a2c1Sopenharmony_ci bool containsShanghai = false; 19709596a2c1Sopenharmony_ci bool containsUrumqi = false; 19719596a2c1Sopenharmony_ci for (unsigned int i = 0; i < Urumqi.size(); i++) { 19729596a2c1Sopenharmony_ci if (Urumqi[i] == "Asia/Shanghai") { 19739596a2c1Sopenharmony_ci containsShanghai = true; 19749596a2c1Sopenharmony_ci } 19759596a2c1Sopenharmony_ci if (Urumqi[i] == "Asia/Urumqi") { 19769596a2c1Sopenharmony_ci containsUrumqi = true; 19779596a2c1Sopenharmony_ci } 19789596a2c1Sopenharmony_ci } 19799596a2c1Sopenharmony_ci EXPECT_TRUE(containsShanghai); 19809596a2c1Sopenharmony_ci EXPECT_TRUE(containsUrumqi); 19819596a2c1Sopenharmony_ci} 19829596a2c1Sopenharmony_ci} // namespace I18n 19839596a2c1Sopenharmony_ci} // namespace Global 19849596a2c1Sopenharmony_ci} // namespace OHOS