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