1 /*
2 * Copyright (c) 2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include <gtest/gtest.h>
17 #include <map>
18 #include <vector>
19 #include "translit_test.h"
20 #include <unistd.h>
21 #include "unicode/utypes.h"
22 #include "unicode/translit.h"
23 #include "ohos/init_data.h"
24
25 using namespace OHOS::Global::I18n;
26 using testing::ext::TestSize;
27 using namespace std;
28 using namespace testing;
29
30 namespace OHOS {
31 namespace Global {
32 namespace I18n {
33
34 std::map<std::string, std::string> TranslitTest::translitTestCases {
35 {"阿胶", "ē jiāo"},
36 {"挨打", "ái dǎ"},
37 {"扒手", "pá shǒu"},
38 {"扒草", "pá cǎo"},
39 {"刀把", "dāo bà"},
40 {"话把儿", "huà bà er"},
41 {"单薄", "dān bó"},
42 {"稀薄", "xī bó"},
43 {"背包", "bēi bāo"},
44 {"背枪", "bēi qiāng"},
45 {"剥皮", "bāo pí"},
46 {"称心", "chèn xīn"},
47 {"对称", "duì chèn"},
48 {"冲床", "chòng chuáng"},
49 {"冲子", "chòng zi"},
50 {"处罚", "chǔ fá"},
51 {"处置", "chǔ zhì"},
52 {"朝阳", "zhāo yáng"},
53 {"朝霞", "zhāo xiá"},
54 {"朝气", "zhāo qì"},
55 {"重复", "chóng fù"},
56 {"重新", "chóng xīn"},
57 {"答理", "dā lǐ"},
58 {"答应", "dā yìng"},
59 {"山大王", "shān dài wáng"},
60 {"当天", "dàng tiān"},
61 {"颠倒", "diān dǎo"},
62 {"倒下", "dǎo xià"},
63 {"得喝水了", "děi hē shuǐ le"},
64 {"好得很", "hǎo de hěn"},
65 {"的确", "dí què"},
66 {"目的", "mù dì"},
67 {"一语中的", "yī yǔ zhòng dì"},
68 {"都市", "dū shì"},
69 {"首都", "shǒu dū"},
70 {"弹琴", "tán qín"},
71 {"弹力", "tán lì"},
72 {"理发", "lǐ fà"},
73 {"头发", "tóu fà"},
74 {"身分", "shēn fèn"},
75 {"一分子", "yī fèn zi"},
76 {"可汗", "kè hán"},
77 {"大汗", "dà hán"},
78 {"呼号", "hū háo"},
79 {"号叫", "háo jiào"},
80 {"应和", "yìng hè"},
81 {"和诗", "hè shī"},
82 {"和面", "huó miàn"},
83 {"和泥", "huó ní"},
84 {"搀和", "chān huo"},
85 {"搅和", "jiǎo huo"},
86 {"喝令", "hè lìng"},
87 {"喝彩", "hè cǎi"},
88 {"好奇", "hào qí"},
89 {"好学", "hào xué"},
90 {"还原", "huán yuán"},
91 {"还书", "huán shū"},
92 {"茶几", "chá jī"},
93 {"几乎", "jī hū"},
94 {"假期", "jià qī"},
95 {"假日", "jià rì"},
96 {"间断", "jiàn duàn"},
97 {"相间", "xiāng jiàn"},
98 {"将士", "jiàng shì"},
99 {"虾兵蟹将", "xiā bīng xiè jiàng"},
100 {"角色", "jué sè"},
101 {"角斗", "jué dòu"},
102 {"教书", "jiāo shū"},
103 {"教给", "jiāo gěi"},
104 {"结果", "jié guǒ"},
105 {"结实", "jiē shí"},
106 {"睡觉", "shuì jiào"},
107 {"午觉", "wǔ jiào"},
108 {"关卡", "guān qiǎ"},
109 {"卡子", "qiǎ zi"},
110 {"看守", "kān shǒu"},
111 {"看管", "kān guǎn"},
112 {"空白", "kòng bái"},
113 {"空地", "kòng dì"},
114 {"空闲", "kòng xián"},
115 {"露头", "lòu tóu"},
116 {"露马脚", "lòu mǎ jiǎo"},
117 {"丢三落四", "diū sān là sì"},
118 {"落下", "là xià"},
119 {"了解", "liǎo jiě"},
120 {"不了了之", "bù liǎo liǎo zhī"},
121 {"音乐", "yīn yuè"},
122 {"乐曲", "yuè qǔ"},
123 {"埋怨", "mán yuàn"},
124 {"没收", "mò shōu"},
125 {"淹没", "yān mò"},
126 {"难民", "nàn mín"},
127 {"难兄难弟", "nàn xiōng nàn dì"},
128 {"宁可", "nìng kě"},
129 {"宁折不弯", "nìng zhé bù wān"},
130 {"勉强", "miǎn qiǎng"},
131 {"强迫", "qiǎng pò"},
132 {"强词夺理", "qiǎng cí duó lǐ"},
133 {"倔强", "jué jiàng"},
134 {"曲调", "qǔ diào"},
135 {"曲艺", "qǔ yì"},
136 {"歌曲", "gē qǔ"},
137 {"数落", "shǔ luò"},
138 {"数数", "shǔ shù"},
139 {"少年", "shào nián"},
140 {"少先队", "shào xiān duì"},
141 {"调皮", "tiáo pí"},
142 {"调和", "tiáo hé"},
143 {"挑战", "tiǎo zhàn"},
144 {"挑拨", "tiǎo bō"},
145 {"威吓", "wēi hè"},
146 {"恐吓", "kǒng hè"},
147 {"朝鲜", "cháo xiǎn"},
148 {"鲜为人知", "xiǎn wéi rén zhī"},
149 {"行市", "háng shì"},
150 {"银行", "yín háng"},
151 {"道行", "dào héng"},
152 {"鸡血", "jī xiě"},
153 {"狗血", "gǒu xiě"},
154 {"馒头", "mán tou"},
155 {"流了点血", "liú le diǎn xiě"},
156 {"相声", "xiàng shēng"},
157 {"面相", "miàn xiàng"},
158 {"应付", "yìng fù"},
159 {"应对", "yìng duì"},
160 {"要求", "yāo qiú"},
161 {"着急", "zháo jí"},
162 {"着迷", "zháo mí"},
163 {"着凉", "zháo liáng"},
164 {"着落", "zhuó luò"},
165 {"着重", "zhuó zhòng"},
166 {"着手", "zhuó shǒu"},
167 {"正月", "zhēng yuè"},
168 {"中奖", "zhòng jiǎng"},
169 {"中靶", "zhòng bǎ"},
170 {"耕种", "gēng zhòng"},
171 {"种植", "zhòng zhí"},
172 {"转动", "zhuàn dòng"},
173 {"转速", "zhuàn sù"},
174 {"只身", "zhī shēn"},
175 {"一只", "yī zhī"},
176 {"西藏", "xī zàng"},
177 {"藏民", "zàng mín"},
178 {"青藏高原", "qīng zàng gāo yuán"},
179 {"散文", "sǎn wén"},
180 {"参差", "cēn cī"},
181 {"缝纫", "féng rèn"},
182 {"劲敌", "jìng dí"},
183 {"扇风", "shān fēng"},
184 {"畜牧", "xù mù"},
185 {"弄堂", "lòng táng"},
186 {"伎俩", "jì liǎng"},
187 {"草率", "cǎo shuài"},
188 {"漂泊", "piāo bó"},
189 {"泊车", "bó chē"},
190 {"膀胱", "páng guāng"},
191 {"复辟", "fù bì"},
192 {"单于", "chán yú"},
193 {"折本", "shé běn"},
194 {"一沓纸", "yì dá zhǐ"},
195 {"引吭高歌", "yǐn háng gāo gē"},
196 {"出差", "chū chāi"},
197 {"差不多", "chà bù duō"},
198 {"差错", "chā cuò"},
199 {"盛饭", "chéng fàn"},
200 {"创伤", "chuāng shāng"},
201 {"雪茄", "xuě jiā"},
202 {"番茄", "fān qié"},
203 {"茄子", "qié zi"},
204 {"发疟子", "fā yào zǐ"},
205 {"自怨自艾", "zì yuàn zì yì"},
206 {"传记", "zhuàn jì"},
207 {"荷枪实弹", "hè qiāng shí dàn"},
208 {"涨红了脸", "zhàng hóng le liǎn"},
209 {"校对", "jiào duì"},
210 {"奇数", "jī shù"},
211 {"炮制", "páo zhì"},
212 {"供给", "gōng jǐ"},
213 {"冠冕堂皇", "guān miǎn táng huáng"},
214 {"干活", "gàn huó"},
215 {"巷道", "hàng dào"},
216 {"薄荷", "bò hé"},
217 {"可恶", "kě wù"},
218 {"大腹便便", "dà fù pián pián"},
219 {"星宿", "xīng xiù"},
220 {"号啕大哭", "háo táo dà kū"},
221 {"倾轧", "qīng yà"},
222 {"模样", "mú yàng"},
223 {"宿舍", "sù shè"},
224 {"殷红", "yān hóng"},
225 {"还要", "hái yào"},
226 {"系领带", "jì lǐng dài"},
227 {"放假", "fàng jià"},
228 {"空降", "kōng jiàng"},
229 {"塞外", "sài wài"},
230 {"屏气凝神", "bǐng qì níng shén"},
231 {"考卷", "kǎo juàn"},
232 {"乐亭", "lào tíng"},
233 {"好为人师", "hào wéi rén shī"},
234 {"窥伺", "kuī sì"},
235 {"处理", "chǔ lǐ"},
236 };
237
SetUpTestCase(void)238 void TranslitTest::SetUpTestCase(void)
239 {
240 SetHwIcuDirectory();
241 }
242
TearDownTestCase(void)243 void TranslitTest::TearDownTestCase(void)
244 {
245 }
246
SetUp(void)247 void TranslitTest::SetUp(void)
248 {}
249
TearDown(void)250 void TranslitTest::TearDown(void)
251 {}
252
253 /**
254 * @tc.name: TranslitTest0001
255 * @tc.desc: Test icu::Transliterator
256 * @tc.type: FUNC
257 */
258 HWTEST_F(TranslitTest, TranslitTest0001, TestSize.Level1)
259 {
260 const std::string transId = "Any-Latn";
261 UErrorCode status = U_ZERO_ERROR;
262 icu::UnicodeString unistr = icu::UnicodeString::fromUTF8(transId);
263 icu::Transliterator *trans = icu::Transliterator::createInstance(unistr, UTransDirection::UTRANS_FORWARD, status);
264 ASSERT_TRUE(U_SUCCESS(status));
265 ASSERT_TRUE(trans != nullptr);
266 for (auto iter = translitTestCases.begin(); iter != translitTestCases.end(); ++iter) {
267 std::string word = iter->first;
268 std::string expect = iter->second;
269 icu::UnicodeString uniWord = icu::UnicodeString::fromUTF8(word.data());
270 trans->transliterate(uniWord);
271 std::string result;
272 uniWord.toUTF8String(result);
273 EXPECT_EQ(result, expect);
274 }
275 delete trans;
276 }
277 } // namespace I18n
278 } // namespace Global
279 } // namespace OHOS