1 /*
2 * Copyright (c) 2022 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 "ecmascript/ecma_string-inl.h"
17 #include "ecmascript/object_factory.h"
18 #include "ecmascript/tests/ecma_test_common.h"
19 #include "gtest/gtest.h"
20
21 using namespace panda::ecmascript;
22
23 namespace panda::test {
24 class LineEcmaStringTest : public BaseTestWithScope<false> {
25 };
26
27 /*
28 * @tc.name: ComputeSizeUtf8
29 * @tc.desc: Check whether the value returned through calling ComputeSizeUtf8 function is within expectations.
30 * @tc.type: FUNC
31 * @tc.require:
32 */
HWTEST_F_L0(LineEcmaStringTest,ComputeSizeUtf8)33 HWTEST_F_L0(LineEcmaStringTest, ComputeSizeUtf8)
34 {
35 uint32_t scale = 3333;
36 for (uint32_t i = BaseString::MAX_STRING_LENGTH - 1; i > scale; i = i - scale) {
37 uint32_t length = i;
38 EXPECT_EQ(LineEcmaString::ComputeSizeUtf8(length), length + LineString::SIZE);
39 }
40 }
41
42 /*
43 * @tc.name: ComputeSizeUtf16
44 * @tc.desc: Check whether the value returned through calling ComputeSizeUtf16 function is within expectations.
45 * @tc.type: FUNC
46 * @tc.require:
47 */
HWTEST_F_L0(LineEcmaStringTest,ComputeSizeUtf16)48 HWTEST_F_L0(LineEcmaStringTest, ComputeSizeUtf16)
49 {
50 uint32_t scale = 3333;
51 for (uint32_t i = BaseString::MAX_STRING_LENGTH - 1; i > scale; i = i - scale) {
52 uint32_t length = i;
53 EXPECT_EQ(LineEcmaString::ComputeSizeUtf16(length), 2 * length + LineString::SIZE);
54 }
55 }
56
57 class EcmaStringAccessorTest : public BaseTestWithScope<false> {
58 };
59
60 /*
61 * @tc.name: CreateLineString
62 * @tc.desc: Check whether the EcmaString created through calling CreateLineString function is within expectations.
63 * @tc.type: FUNC
64 * @tc.require:
65 */
HWTEST_F_L0(EcmaStringAccessorTest,CreateLineString)66 HWTEST_F_L0(EcmaStringAccessorTest, CreateLineString)
67 {
68 // CreateLineString( , true, ).
69 size_t sizeAllocComp = 5;
70 JSHandle<EcmaString> handleEcmaStrAllocComp(thread,
71 EcmaStringAccessor::CreateLineString(instance, sizeAllocComp, true));
72 EXPECT_EQ(EcmaStringAccessor(handleEcmaStrAllocComp).GetLength(), sizeAllocComp);
73 EXPECT_TRUE(EcmaStringAccessor(handleEcmaStrAllocComp).IsUtf8());
74 EXPECT_FALSE(EcmaStringAccessor(handleEcmaStrAllocComp).IsUtf16());
75
76 // CreateLineString( , false, ).
77 size_t sizeAllocNotComp = 5;
78 JSHandle<EcmaString> handleEcmaStrAllocNotComp(thread,
79 EcmaStringAccessor::CreateLineString(instance, sizeAllocNotComp, false));
80 EXPECT_EQ(EcmaStringAccessor(handleEcmaStrAllocNotComp).GetLength(), sizeAllocNotComp);
81 EXPECT_FALSE(EcmaStringAccessor(handleEcmaStrAllocNotComp).IsUtf8());
82 EXPECT_TRUE(EcmaStringAccessor(handleEcmaStrAllocNotComp).IsUtf16());
83 }
84
85 /*
86 * @tc.name: CreateEmptyString
87 * @tc.desc: Check whether the EcmaString created through calling CreateEmptyString function is within expectations.
88 * @tc.type: FUNC
89 * @tc.require:
90 */
HWTEST_F_L0(EcmaStringAccessorTest,CreateEmptyString)91 HWTEST_F_L0(EcmaStringAccessorTest, CreateEmptyString)
92 {
93 JSHandle<EcmaString> handleEcmaStrEmpty(thread, EcmaStringAccessor::CreateEmptyString(instance));
94 EXPECT_EQ(EcmaStringAccessor(handleEcmaStrEmpty).GetLength(), 0U);
95 EXPECT_TRUE(EcmaStringAccessor(handleEcmaStrEmpty).IsUtf8());
96 EXPECT_FALSE(EcmaStringAccessor(handleEcmaStrEmpty).IsUtf16());
97 }
98
99 /*
100 * @tc.name: CreateFromUtf8
101 * @tc.desc: Check whether the EcmaString created through calling CreateFromUtf8 function is within expectations.
102 * @tc.type: FUNC
103 * @tc.require:
104 */
HWTEST_F_L0(EcmaStringAccessorTest,CreateFromUtf8)105 HWTEST_F_L0(EcmaStringAccessorTest, CreateFromUtf8)
106 {
107 uint8_t arrayU8[] = {"xyz123!@#"};
108 size_t lengthEcmaStrU8 = sizeof(arrayU8) - 1;
109 JSHandle<EcmaString> handleEcmaStrU8(thread,
110 EcmaStringAccessor::CreateFromUtf8(instance, &arrayU8[0], lengthEcmaStrU8, true));
111 for (uint32_t i = 0; i < lengthEcmaStrU8; i++) {
112 EXPECT_EQ(arrayU8[i], EcmaStringAccessor(handleEcmaStrU8).Get(thread, i));
113 }
114 EXPECT_EQ(EcmaStringAccessor(handleEcmaStrU8).GetLength(), lengthEcmaStrU8);
115 EXPECT_TRUE(EcmaStringAccessor(handleEcmaStrU8).IsUtf8());
116 EXPECT_FALSE(EcmaStringAccessor(handleEcmaStrU8).IsUtf16());
117 }
118
119 /*
120 * @tc.name: CreateFromUtf8Chinese
121 * @tc.desc: Verifies CreateFromUtf8 method correctly creates an EcmaString from a UTF-8 encoded Chinese string.
122 * @tc.type: FUNC
123 * @tc.require:
124 */
HWTEST_F_L0(EcmaStringAccessorTest,CreateFromUtf8Chinese)125 HWTEST_F_L0(EcmaStringAccessorTest, CreateFromUtf8Chinese)
126 {
127 const char* chineseStr = u8"方舟编译器是为支持多种编程语言和多种芯片平台的联合编译及运行而设计的统一编译运行时平台";
128 JSHandle<EcmaString> handleEcmaStr(thread,
129 EcmaStringAccessor::CreateFromUtf8(instance, reinterpret_cast<const uint8_t*>(chineseStr),
130 strlen(chineseStr), false));
131 EXPECT_EQ(EcmaStringAccessor(handleEcmaStr).GetLength(), 43U);
132 EXPECT_FALSE(EcmaStringAccessor(handleEcmaStr).IsUtf8());
133 EXPECT_TRUE(EcmaStringAccessor(handleEcmaStr).IsUtf16());
134 }
135
136 /*
137 * @tc.name: CreateFromUtf16
138 * @tc.desc: Check whether the EcmaString created through calling CreateFromUtf16 function is within expectations.
139 * @tc.type: FUNC
140 * @tc.require:
141 */
HWTEST_F_L0(EcmaStringAccessorTest,CreateFromUtf16)142 HWTEST_F_L0(EcmaStringAccessorTest, CreateFromUtf16)
143 {
144 // CreateFromUtf16( , , , true).
145 uint16_t arrayU16Comp[] = {1, 23, 45, 67, 127};
146 size_t lengthEcmaStrU16Comp = sizeof(arrayU16Comp) / sizeof(arrayU16Comp[0]);
147 JSHandle<EcmaString> handleEcmaStrU16Comp(thread,
148 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16Comp[0], lengthEcmaStrU16Comp, true));
149 EXPECT_EQ(EcmaStringAccessor(handleEcmaStrU16Comp).GetLength(), lengthEcmaStrU16Comp);
150 EXPECT_TRUE(EcmaStringAccessor(handleEcmaStrU16Comp).IsUtf8());
151 EXPECT_FALSE(EcmaStringAccessor(handleEcmaStrU16Comp).IsUtf16());
152
153 // CreateFromUtf16( , , , false).
154 uint16_t arrayU16NotComp[] = {127, 33, 128, 12, 256, 11100, 65535};
155 size_t lengthEcmaStrU16NotComp = sizeof(arrayU16NotComp) / sizeof(arrayU16NotComp[0]);
156 JSHandle<EcmaString> handleEcmaStrU16NotComp(thread,
157 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16NotComp[0], lengthEcmaStrU16NotComp, false));
158 EXPECT_EQ(EcmaStringAccessor(handleEcmaStrU16NotComp).GetLength(), lengthEcmaStrU16NotComp);
159 EXPECT_FALSE(EcmaStringAccessor(handleEcmaStrU16NotComp).IsUtf8());
160 EXPECT_TRUE(EcmaStringAccessor(handleEcmaStrU16NotComp).IsUtf16());
161 }
162
163 /*
164 * @tc.name: Concat_001
165 * @tc.desc: Check whether the EcmaString returned through calling Concat function between EcmaString made by
166 * CreateFromUtf8() and EcmaString made by CreateFromUtf8() is within expectations.
167 * @tc.type: FUNC
168 * @tc.require:
169 */
HWTEST_F_L0(EcmaStringAccessorTest,Concat_001)170 HWTEST_F_L0(EcmaStringAccessorTest, Concat_001)
171 {
172 // Concat(). EcmaString made by CreateFromUtf8() and EcmaString made by CreateFromUtf8().
173 uint8_t arrayFrontU8[] = {"abcdef"};
174 uint8_t arrayBackU8[] = {"ABCDEF"};
175 uint32_t lengthEcmaStrFrontU8 = sizeof(arrayFrontU8) - 1;
176 uint32_t lengthEcmaStrBackU8 = sizeof(arrayBackU8) - 1;
177 JSHandle<EcmaString> handleEcmaStrFrontU8(thread,
178 EcmaStringAccessor::CreateFromUtf8(instance, &arrayFrontU8[0], lengthEcmaStrFrontU8, true));
179 JSHandle<EcmaString> handleEcmaStrBackU8(thread,
180 EcmaStringAccessor::CreateFromUtf8(instance, &arrayBackU8[0], lengthEcmaStrBackU8, true));
181 JSHandle<EcmaString> handleEcmaStrConcatU8(thread,
182 EcmaStringAccessor::Concat(instance, handleEcmaStrFrontU8, handleEcmaStrBackU8));
183 EXPECT_TRUE(EcmaStringAccessor(handleEcmaStrConcatU8).IsUtf8());
184 for (uint32_t i = 0; i < lengthEcmaStrFrontU8; i++) {
185 EXPECT_EQ(EcmaStringAccessor(handleEcmaStrConcatU8).Get(thread, i), arrayFrontU8[i]);
186 }
187 for (uint32_t i = 0; i < lengthEcmaStrBackU8; i++) {
188 EXPECT_EQ(EcmaStringAccessor(handleEcmaStrConcatU8).Get(thread, i + lengthEcmaStrFrontU8), arrayBackU8[i]);
189 }
190 EXPECT_EQ(EcmaStringAccessor(handleEcmaStrConcatU8).GetLength(), lengthEcmaStrFrontU8 + lengthEcmaStrBackU8);
191 }
192
193 /*
194 * @tc.name: Concat_002
195 * @tc.desc: Check whether the EcmaString returned through calling Concat function between EcmaString made by
196 * CreateFromUtf16( , , , false) and EcmaString made by CreateFromUtf16( , , , false) is within expectations.
197 * @tc.type: FUNC
198 * @tc.require:
199 */
HWTEST_F_L0(EcmaStringAccessorTest,Concat_002)200 HWTEST_F_L0(EcmaStringAccessorTest, Concat_002)
201 {
202 // Concat(). EcmaString made by CreateFromUtf16( , , , false) and EcmaString made by CreateFromUtf16( , , , false).
203 uint16_t arrayFrontU16NotComp[] = {128, 129, 256, 11100, 65535, 100};
204 uint16_t arrayBackU16NotComp[] = {88, 768, 1, 270, 345, 333};
205 uint32_t lengthEcmaStrFrontU16NotComp = sizeof(arrayFrontU16NotComp) / sizeof(arrayFrontU16NotComp[0]);
206 uint32_t lengthEcmaStrBackU16NotComp = sizeof(arrayBackU16NotComp) / sizeof(arrayBackU16NotComp[0]);
207 JSHandle<EcmaString> handleEcmaStrFrontU16NotComp(thread,
208 EcmaStringAccessor::CreateFromUtf16(instance, &arrayFrontU16NotComp[0], lengthEcmaStrFrontU16NotComp, false));
209 JSHandle<EcmaString> handleEcmaStrBackU16NotComp(thread,
210 EcmaStringAccessor::CreateFromUtf16(instance, &arrayBackU16NotComp[0], lengthEcmaStrBackU16NotComp, false));
211 JSHandle<EcmaString> handleEcmaStrConcatU16NotComp(thread,
212 EcmaStringAccessor::Concat(instance, handleEcmaStrFrontU16NotComp, handleEcmaStrBackU16NotComp));
213 EXPECT_TRUE(EcmaStringAccessor(handleEcmaStrConcatU16NotComp).IsUtf16());
214 for (uint32_t i = 0; i < lengthEcmaStrFrontU16NotComp; i++) {
215 EXPECT_EQ(EcmaStringAccessor(handleEcmaStrConcatU16NotComp).Get(thread, i), arrayFrontU16NotComp[i]);
216 }
217 for (uint32_t i = 0; i < lengthEcmaStrBackU16NotComp; i++) {
218 EXPECT_EQ(EcmaStringAccessor(handleEcmaStrConcatU16NotComp).Get(thread, i + lengthEcmaStrFrontU16NotComp),
219 arrayBackU16NotComp[i]);
220 }
221 EXPECT_EQ(EcmaStringAccessor(handleEcmaStrConcatU16NotComp).GetLength(),
222 lengthEcmaStrFrontU16NotComp + lengthEcmaStrBackU16NotComp);
223 }
224
225 /*
226 * @tc.name: Concat_003
227 * @tc.desc: Check whether the EcmaString returned through calling Concat function between EcmaString made by
228 * CreateFromUtf8() and EcmaString made by CreateFromUtf16( , , , false) is within expectations.
229 * @tc.type: FUNC
230 * @tc.require:
231 */
HWTEST_F_L0(EcmaStringAccessorTest,Concat_003)232 HWTEST_F_L0(EcmaStringAccessorTest, Concat_003)
233 {
234 // Concat(). EcmaString made by CreateFromUtf8() and EcmaString made by CreateFromUtf16( , , , false).
235 EcmaTestCommon::ConcatCommonCase2(thread, instance);
236 }
237
238 /*
239 * @tc.name: FastSubString_001
240 * @tc.desc: Check whether the EcmaString returned through calling FastSubString function from EcmaString made by
241 * CreateFromUtf8() is within expectations.
242 * @tc.type: FUNC
243 * @tc.require:
244 */
HWTEST_F_L0(EcmaStringAccessorTest,FastSubString_001)245 HWTEST_F_L0(EcmaStringAccessorTest, FastSubString_001)
246 {
247 // FastSubString(). From EcmaString made by CreateFromUtf8().
248 std::vector<uint8_t> arrayU8{3, 7, 19, 54, 99};
249 auto func = std::bind(EcmaStringAccessor::CreateFromUtf8, std::placeholders::_1, std::placeholders::_2,
250 std::placeholders::_3, std::placeholders::_4, MemSpaceType::SHARED_OLD_SPACE);
251 EcmaTestCommon::FastSubStringCommonCase(thread, instance, arrayU8, func);
252 }
253
254 /*
255 * @tc.name: FastSubString_002
256 * @tc.desc: Check whether the EcmaString returned through calling FastSubString function from EcmaString made by
257 * CreateFromUtf16( , , , true) is within expectations.
258 * @tc.type: FUNC
259 * @tc.require:
260 */
HWTEST_F_L0(EcmaStringAccessorTest,FastSubString_002)261 HWTEST_F_L0(EcmaStringAccessorTest, FastSubString_002)
262 {
263 // FastSubString(). From EcmaString made by CreateFromUtf16( , , , true).
264 uint16_t arrayU16Comp[] = {1, 12, 34, 56, 127};
265 uint32_t lengthEcmaStrU16Comp = sizeof(arrayU16Comp) / sizeof(arrayU16Comp[0]);
266 JSHandle<EcmaString> handleEcmaStrU16Comp(thread,
267 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16Comp[0], lengthEcmaStrU16Comp, true));
268 uint32_t indexStartSubU16Comp = 0;
269 uint32_t lengthSubU16Comp = 2;
270 JSHandle<EcmaString> handleEcmaStrSubU16Comp(thread,
271 EcmaStringAccessor::FastSubString(instance, handleEcmaStrU16Comp, indexStartSubU16Comp, lengthSubU16Comp));
272 for (uint32_t i = 0; i < lengthSubU16Comp; i++) {
273 EXPECT_EQ(EcmaStringAccessor(handleEcmaStrSubU16Comp).Get(thread, i),
274 EcmaStringAccessor(handleEcmaStrU16Comp).Get(thread, i + indexStartSubU16Comp));
275 }
276 EXPECT_EQ(EcmaStringAccessor(handleEcmaStrSubU16Comp).GetLength(), lengthSubU16Comp);
277 }
278
279 /*
280 * @tc.name: FastSubString_003
281 * @tc.desc: Check whether the EcmaString returned through calling FastSubString function from EcmaString made by
282 * CreateFromUtf16( , , , false) is within expectations.
283 * @tc.type: FUNC
284 * @tc.require:
285 */
HWTEST_F_L0(EcmaStringAccessorTest,FastSubString_003)286 HWTEST_F_L0(EcmaStringAccessorTest, FastSubString_003)
287 {
288 // FastSubString(). From EcmaString made by CreateFromUtf16( , , , false).
289 uint16_t arrayU16NotComp[] = {19, 54, 256, 11100, 65535};
290 uint32_t lengthEcmaStrU16NotComp = sizeof(arrayU16NotComp) / sizeof(arrayU16NotComp[0]);
291 JSHandle<EcmaString> handleEcmaStrU16NotComp(thread,
292 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16NotComp[0], lengthEcmaStrU16NotComp, false));
293 uint32_t indexStartSubU16NotComp = 0;
294 uint32_t lengthSubU16NotComp = 2;
295 JSHandle<EcmaString> handleEcmaStrSubU16NotComp(thread, EcmaStringAccessor::FastSubString(
296 instance, handleEcmaStrU16NotComp, indexStartSubU16NotComp, lengthSubU16NotComp));
297 for (uint32_t i = 0; i < lengthSubU16NotComp; i++) {
298 EXPECT_EQ(EcmaStringAccessor(handleEcmaStrSubU16NotComp).Get(thread, i),
299 EcmaStringAccessor(handleEcmaStrU16NotComp).Get(thread, i + indexStartSubU16NotComp));
300 }
301 EXPECT_EQ(EcmaStringAccessor(handleEcmaStrSubU16NotComp).GetLength(), lengthSubU16NotComp);
302 }
303
304 /*
305 * @tc.name: FastSubString_004
306 * @tc.desc: Check whether the EcmaString returned through calling FastSubString function from EcmaString
307 * @tc.type: FUNC
308 * @tc.require:
309 */
HWTEST_F_L0(EcmaStringAccessorTest,FastSubString_004)310 HWTEST_F_L0(EcmaStringAccessorTest, FastSubString_004)
311 {
312 ObjectFactory* factory = instance->GetFactory();
313 {
314 JSHandle<EcmaString> sourceString = factory->NewFromUtf8("整数integer");
315 JSHandle<EcmaString> tmpString = factory->NewFromASCII("integer");
316 EXPECT_TRUE(EcmaStringAccessor(sourceString).IsUtf16());
317 EcmaString *res = EcmaStringAccessor::FastSubString(instance, sourceString, 2, 7);
318 EXPECT_TRUE(EcmaStringAccessor(res).IsUtf8());
319 EXPECT_TRUE(EcmaStringAccessor::StringsAreEqual(thread, res, *tmpString));
320 }
321 {
322 JSHandle<EcmaString> sourceString = factory->NewFromUtf8("整数integer");
323 JSHandle<EcmaString> tmpString = factory->NewFromUtf8("整数");
324 EXPECT_TRUE(EcmaStringAccessor(sourceString).IsUtf16());
325 EcmaString *res = EcmaStringAccessor::FastSubString(instance, sourceString, 0, 2);
326 EXPECT_TRUE(EcmaStringAccessor(res).IsUtf16());
327 EXPECT_TRUE(EcmaStringAccessor::StringsAreEqual(thread, res, *tmpString));
328 }
329 {
330 JSHandle<EcmaString> sourceString = factory->NewFromUtf8("整数integer");
331 JSHandle<EcmaString> tmpString = factory->NewFromUtf8("数intege");
332 EXPECT_TRUE(EcmaStringAccessor(sourceString).IsUtf16());
333 EcmaString *res = EcmaStringAccessor::FastSubString(instance, sourceString, 1, 7);
334 EXPECT_TRUE(EcmaStringAccessor(res).IsUtf16());
335 EXPECT_TRUE(EcmaStringAccessor::StringsAreEqual(thread, res, *tmpString));
336 }
337 {
338 JSHandle<EcmaString> sourceString = factory->NewFromASCII("integer123");
339 JSHandle<EcmaString> tmpString = factory->NewFromASCII("integer");
340 EXPECT_TRUE(EcmaStringAccessor(sourceString).IsUtf8());
341 EcmaString *res = EcmaStringAccessor::FastSubString(instance, sourceString, 0, 7);
342 EXPECT_TRUE(EcmaStringAccessor(res).IsUtf8());
343 EXPECT_TRUE(EcmaStringAccessor::StringsAreEqual(thread, res, *tmpString));
344 }
345 }
346
347 /*
348 * @tc.name: GetUtf8Length
349 * @tc.desc: Check whether the value returned through calling GetUtf8Length function is within expectations.
350 * @tc.type: FUNC
351 * @tc.require:
352 */
HWTEST_F_L0(EcmaStringAccessorTest,GetUtf8Length)353 HWTEST_F_L0(EcmaStringAccessorTest, GetUtf8Length)
354 {
355 uint8_t arrayU8[6] = {3, 7, 19, 54, 99};
356 uint16_t arrayU16Comp[] = {1, 12, 34, 56, 127};
357 uint16_t arrayU16NotComp[] = {19, 54, 256, 11100, 65535};
358 uint32_t lengthEcmaStrU8 = sizeof(arrayU8) - 1;
359 uint32_t lengthEcmaStrU16Comp = sizeof(arrayU16Comp) / sizeof(arrayU16Comp[0]);
360 uint32_t lengthEcmaStrU16NotComp = sizeof(arrayU16NotComp) / sizeof(arrayU16NotComp[0]);
361 JSHandle<EcmaString> handleEcmaStrU8(thread,
362 EcmaStringAccessor::CreateFromUtf8(instance, &arrayU8[0], lengthEcmaStrU8, true));
363 JSHandle<EcmaString> handleEcmaStrU16Comp(thread,
364 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16Comp[0], lengthEcmaStrU16Comp, true));
365 JSHandle<EcmaString> handleEcmaStrU16NotComp(thread,
366 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16NotComp[0], lengthEcmaStrU16NotComp, false));
367 EXPECT_EQ(EcmaStringAccessor(handleEcmaStrU8).GetUtf8Length(thread), lengthEcmaStrU8 + 1);
368 EXPECT_EQ(EcmaStringAccessor(handleEcmaStrU16Comp).GetUtf8Length(thread), lengthEcmaStrU16Comp + 1);
369 EXPECT_EQ(EcmaStringAccessor(handleEcmaStrU16NotComp).GetUtf8Length(thread), 2 * lengthEcmaStrU16NotComp + 1);
370 }
371
372 /*
373 * @tc.name: ObjectSize
374 * @tc.desc: Check whether the value returned through calling ObjectSize function is within expectations.
375 * @tc.type: FUNC
376 * @tc.require:
377 */
HWTEST_F_L0(EcmaStringAccessorTest,ObjectSize)378 HWTEST_F_L0(EcmaStringAccessorTest, ObjectSize)
379 {
380 JSHandle<EcmaString> handleEcmaStrEmpty(thread, EcmaStringAccessor::CreateEmptyString(instance));
381 EXPECT_EQ(EcmaStringAccessor(handleEcmaStrEmpty).ObjectSize(), BaseString::SIZE + 0);
382
383 size_t lengthEcmaStrAllocComp = 5;
384 JSHandle<EcmaString> handleEcmaStrAllocComp(thread,
385 EcmaStringAccessor::CreateLineString(instance, lengthEcmaStrAllocComp, true));
386 EXPECT_EQ(EcmaStringAccessor(handleEcmaStrAllocComp).ObjectSize(),
387 BaseString::SIZE + sizeof(uint8_t) * lengthEcmaStrAllocComp);
388
389 size_t lengthEcmaStrAllocNotComp = 5;
390 JSHandle<EcmaString> handleEcmaStrAllocNotComp(thread,
391 EcmaStringAccessor::CreateLineString(instance, lengthEcmaStrAllocNotComp, false));
392 EXPECT_EQ(EcmaStringAccessor(handleEcmaStrAllocNotComp).ObjectSize(),
393 BaseString::SIZE + sizeof(uint16_t) * lengthEcmaStrAllocNotComp);
394
395 uint8_t arrayU8[] = {"abcde"};
396 size_t lengthEcmaStrU8 = sizeof(arrayU8) - 1;
397 JSHandle<EcmaString> handleEcmaStrU8(thread,
398 EcmaStringAccessor::CreateFromUtf8(instance, &arrayU8[0], lengthEcmaStrU8, true));
399 EXPECT_EQ(EcmaStringAccessor(handleEcmaStrU8).ObjectSize(), BaseString::SIZE + sizeof(uint8_t) * lengthEcmaStrU8);
400
401 // ObjectSize(). EcmaString made by CreateFromUtf16( , , , true).
402 uint16_t arrayU16Comp[] = {1, 23, 45, 67, 127};
403 size_t lengthEcmaStrU16Comp = sizeof(arrayU16Comp) / sizeof(arrayU16Comp[0]);
404 JSHandle<EcmaString> handleEcmaStrU16Comp(thread,
405 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16Comp[0], lengthEcmaStrU16Comp, true));
406 EXPECT_EQ(EcmaStringAccessor(handleEcmaStrU16Comp).ObjectSize(),
407 BaseString::SIZE + sizeof(uint8_t) * lengthEcmaStrU16Comp);
408
409 // ObjectSize(). EcmaString made by CreateFromUtf16( , , , false).
410 uint16_t arrayU16NotComp[] = {127, 128, 256, 11100, 65535};
411 size_t lengthEcmaStrU16NotComp = sizeof(arrayU16NotComp) / sizeof(arrayU16NotComp[0]);
412 JSHandle<EcmaString> handleEcmaStrU16NotComp(thread,
413 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16NotComp[0], lengthEcmaStrU16NotComp, false));
414 EXPECT_EQ(EcmaStringAccessor(handleEcmaStrU16NotComp).ObjectSize(),
415 BaseString::SIZE + sizeof(uint16_t) * lengthEcmaStrU16NotComp);
416 }
417
418 /*
419 * @tc.name: SetInternString
420 * @tc.desc: Call SetInternString function, check whether the bool returned through calling IsInternString function
421 * is within expectations.
422 * @tc.type: FUNC
423 * @tc.require:
424 */
HWTEST_F_L0(EcmaStringAccessorTest,SetInternString)425 HWTEST_F_L0(EcmaStringAccessorTest, SetInternString)
426 {
427 uint8_t arrayU8[] = {"abc"};
428 uint32_t lengthEcmaStrU8 = sizeof(arrayU8) - 1;
429 JSHandle<EcmaString> handleEcmaStrU8(thread,
430 EcmaStringAccessor::CreateFromUtf8(instance, &arrayU8[0], lengthEcmaStrU8, true));
431 EXPECT_FALSE(EcmaStringAccessor(handleEcmaStrU8).IsInternString());
432 EcmaStringAccessor(handleEcmaStrU8).SetInternString();
433 EXPECT_TRUE(EcmaStringAccessor(handleEcmaStrU8).IsInternString());
434
435 uint16_t arrayU16Comp[] = {97, 98, 99};
436 uint32_t lengthEcmaStrU16Comp = sizeof(arrayU16Comp) / sizeof(arrayU16Comp[0]);
437 JSHandle<EcmaString> handleEcmaStrU16Comp(thread,
438 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16Comp[0], lengthEcmaStrU16Comp, true));
439 EXPECT_FALSE(EcmaStringAccessor(handleEcmaStrU16Comp).IsInternString());
440 EcmaStringAccessor(handleEcmaStrU16Comp).SetInternString();
441 EXPECT_TRUE(EcmaStringAccessor(handleEcmaStrU16Comp).IsInternString());
442
443 uint16_t arrayU16NotComp[] = {97, 98, 99};
444 uint32_t lengthEcmaStrU16NotComp = sizeof(arrayU16NotComp) / sizeof(arrayU16NotComp[0]);
445 JSHandle<EcmaString> handleEcmaStrU16NotComp(thread,
446 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16NotComp[0], lengthEcmaStrU16NotComp, true));
447 EXPECT_FALSE(EcmaStringAccessor(handleEcmaStrU16NotComp).IsInternString());
448 EcmaStringAccessor(handleEcmaStrU16NotComp).SetInternString();
449 EXPECT_TRUE(EcmaStringAccessor(handleEcmaStrU16NotComp).IsInternString());
450 }
451
452 /*
453 * @tc.name: GetDataUtf8
454 * @tc.desc: Check whether the pointer returned through calling GetDataUtf8 function is within expectations.
455 * @tc.type: FUNC
456 * @tc.require:
457 */
HWTEST_F_L0(EcmaStringAccessorTest,GetDataUtf8)458 HWTEST_F_L0(EcmaStringAccessorTest, GetDataUtf8)
459 {
460 // From EcmaString made by CreateFromUtf8().
461 uint8_t arrayU8[] = {"abcde"};
462 uint32_t lengthEcmaStrU8 = sizeof(arrayU8) - 1;
463 JSHandle<EcmaString> handleEcmaStrU8(thread,
464 EcmaStringAccessor::CreateFromUtf8(instance, &arrayU8[0], lengthEcmaStrU8, true));
465 for (uint32_t i = 0; i < lengthEcmaStrU8; i++) {
466 EXPECT_EQ(*(EcmaStringAccessor(handleEcmaStrU8).GetDataUtf8() + i), arrayU8[i]);
467 }
468
469 // From EcmaString made by CreateFromUtf16( , , , true).
470 uint16_t arrayU16Comp[] = {3, 1, 34, 123, 127, 111, 42, 3, 20, 10};
471 uint32_t lengthEcmaStrU16Comp = sizeof(arrayU16Comp) / sizeof(arrayU16Comp[0]);
472 JSHandle<EcmaString> handleEcmaStrU16Comp(thread,
473 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16Comp[0], lengthEcmaStrU16Comp, true));
474 for (uint32_t i = 0; i < sizeof(arrayU16Comp) / arrayU16Comp[0]; i++) {
475 EXPECT_EQ(*(EcmaStringAccessor(handleEcmaStrU16Comp).GetDataUtf8() + i), arrayU16Comp[i]);
476 }
477 }
478
479 /*
480 * @tc.name: GetDataUtf16
481 * @tc.desc: Check whether the pointer returned through calling GetDataUtf16 function is within expectations.
482 * @tc.type: FUNC
483 * @tc.require:
484 */
HWTEST_F_L0(EcmaStringAccessorTest,GetDataUtf16)485 HWTEST_F_L0(EcmaStringAccessorTest, GetDataUtf16)
486 {
487 // From EcmaString made by CreateFromUtf16( , , , false).
488 uint16_t arrayU16NotComp[] = {67, 777, 1999, 1, 45, 66, 23456, 65535, 127, 333};
489 uint32_t lengthEcmaStrU16NotComp = sizeof(arrayU16NotComp) / sizeof(arrayU16NotComp[0]);
490 JSHandle<EcmaString> handleEcmaStrU16NotComp(thread,
491 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16NotComp[0], lengthEcmaStrU16NotComp, false));
492 for (uint32_t i = 0; i < lengthEcmaStrU16NotComp; i++) {
493 EXPECT_EQ(*(EcmaStringAccessor(handleEcmaStrU16NotComp).GetDataUtf16() + i), arrayU16NotComp[i]);
494 }
495 }
496
497 /*
498 * @tc.name: WriteToFlatUtf8
499 * @tc.desc: Check whether the returned value and the changed array through a source EcmaString's calling
500 * WriteToFlatUtf8 function are within expectations.
501 * @tc.type: FUNC
502 * @tc.require:
503 */
HWTEST_F_L0(EcmaStringAccessorTest,WriteToFlatUtf8)504 HWTEST_F_L0(EcmaStringAccessorTest, WriteToFlatUtf8)
505 {
506 // WriteToFlatUtf8(). From EcmaString made by CreateFromUtf8().
507 uint8_t arrayU8CopyFrom[6] = {1, 12, 34, 56, 127};
508 uint32_t lengthEcmaStrU8CopyFrom = sizeof(arrayU8CopyFrom) - 1;
509 JSHandle<EcmaString> handleEcmaStrU8CopyFrom(thread,
510 EcmaStringAccessor::CreateFromUtf8(instance, &arrayU8CopyFrom[0], lengthEcmaStrU8CopyFrom, true));
511 const size_t lengthArrayU8Target = 6;
512 uint8_t arrayU8CopyTo[lengthArrayU8Target];
513
514 size_t lengthReturnU8 = EcmaStringAccessor(handleEcmaStrU8CopyFrom)
515 .WriteToFlatUtf8(thread, &arrayU8CopyTo[0], lengthArrayU8Target);
516
517 EXPECT_EQ(lengthReturnU8, lengthArrayU8Target);
518 for (uint32_t i = 0; i < lengthReturnU8 - 1; i++) {
519 EXPECT_EQ(arrayU8CopyTo[i], arrayU8CopyFrom[i]);
520 }
521 EXPECT_EQ(arrayU8CopyTo[lengthReturnU8 - 1], 0);
522
523 // CopyDataUtf8(). From EcmaString made by CreateFromUtf16( , , , true).
524 uint16_t arrayU16CompCopyFrom[] = {1, 12, 34, 56, 127};
525 uint32_t lengthEcmaStrU16CompCopyFrom = sizeof(arrayU16CompCopyFrom) / sizeof(arrayU16CompCopyFrom[0]);
526 JSHandle<EcmaString> handleEcmaStrU16CompCopyFrom(thread,
527 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16CompCopyFrom[0], lengthEcmaStrU16CompCopyFrom, true));
528 const size_t lengthArrayU16Target = 6;
529 uint8_t arrayU8CompCopyTo[lengthArrayU16Target];
530
531 size_t lengthReturnU16Comp = EcmaStringAccessor(handleEcmaStrU16CompCopyFrom)
532 .WriteToFlatUtf8(thread, &arrayU8CompCopyTo[0], lengthArrayU16Target);
533
534 EXPECT_EQ(lengthReturnU16Comp, lengthArrayU16Target);
535 for (uint32_t i = 0; i < lengthReturnU16Comp - 1; i++) {
536 EXPECT_EQ(arrayU8CompCopyTo[i], arrayU16CompCopyFrom[i]);
537 }
538 EXPECT_EQ(arrayU8CompCopyTo[lengthReturnU16Comp - 1], 0U);
539
540 uint8_t buffer[200] = {0};
541 std::string str(
542 "您订单尾号为:1442的车辆提车点已由重庆市渝北区龙兴镇新能源办公大楼变更为重庆市江北区鱼嘴镇永和路39号2屋208室,请携带好相关材料按照预约时间前往提车点提车2,如有296ss");
543 JSHandle<EcmaString> ecmaStr = thread->GetEcmaVM()->GetFactory()->NewFromStdString(str);
544 uint32_t len = EcmaStringAccessor(ecmaStr).WriteToFlatUtf8(thread, buffer, 198, true);
545 EXPECT_EQ(len, 197);
546 }
547
548 /*
549 * @tc.name: WriteToFlatUtf16
550 * @tc.desc: Check whether the returned value and the changed array through a source EcmaString's calling
551 * WriteToFlatUtf16 function are within expectations.
552 * @tc.type: FUNC
553 * @tc.require:
554 */
HWTEST_F_L0(EcmaStringAccessorTest,WriteToFlatUtf16)555 HWTEST_F_L0(EcmaStringAccessorTest, WriteToFlatUtf16)
556 {
557 // WriteToFlatUtf16(). From EcmaString made by CreateFromUtf16( , , , false).
558 uint16_t arrayU16NotCompCopyFrom[10] = {67, 777, 1999, 1, 45, 66, 23456, 65535, 127, 333};
559 uint32_t lengthEcmaStrU16NotCompCopyFrom = sizeof(arrayU16NotCompCopyFrom) / sizeof(arrayU16NotCompCopyFrom[0]);
560 JSHandle<EcmaString> handleEcmaStrU16NotCompCopyFrom(thread, EcmaStringAccessor::CreateFromUtf16(
561 instance, &arrayU16NotCompCopyFrom[0], lengthEcmaStrU16NotCompCopyFrom, false));
562 const size_t lengthArrayU16Target = 13;
563 uint16_t arrayU16NotCompCopyTo[lengthArrayU16Target];
564 uint8_t defaultOneByteValueOfArrayU16NotCompCopyTo = 244;
565 int checkResUtf16 = memset_s(&arrayU16NotCompCopyTo[0], sizeof(uint16_t) * lengthArrayU16Target,
566 defaultOneByteValueOfArrayU16NotCompCopyTo, sizeof(uint16_t) * lengthArrayU16Target);
567 EXPECT_TRUE(checkResUtf16 == 0);
568
569 size_t lengthReturnU16NotComp = EcmaStringAccessor(handleEcmaStrU16NotCompCopyFrom)
570 .WriteToFlatUtf16(thread, &arrayU16NotCompCopyTo[0], lengthArrayU16Target);
571
572 EXPECT_EQ(lengthReturnU16NotComp, lengthEcmaStrU16NotCompCopyFrom);
573 for (uint32_t i = 0; i < lengthReturnU16NotComp; i++) {
574 EXPECT_EQ(arrayU16NotCompCopyTo[i], EcmaStringAccessor(handleEcmaStrU16NotCompCopyFrom).Get(thread, i));
575 }
576 for (uint32_t i = lengthReturnU16NotComp; i < lengthArrayU16Target; i++) {
577 EXPECT_EQ(arrayU16NotCompCopyTo[i], ((uint16_t)defaultOneByteValueOfArrayU16NotCompCopyTo) * (1 + (1 << 8)));
578 }
579 }
580
581 /*
582 * @tc.name: ReadData_001
583 * @tc.desc: Check whether the target EcmaString made by CreateLineString( , true, ) changed through calling ReadData
584 * function with a source EcmaString made by CreateFromUtf8() is within expectations.
585 * @tc.type: FUNC
586 * @tc.require:
587 */
HWTEST_F_L0(EcmaStringAccessorTest,ReadData_001)588 HWTEST_F_L0(EcmaStringAccessorTest, ReadData_001)
589 {
590 // ReadData(). From EcmaString made by CreateFromUtf8() to EcmaString made by CreateLineString( , true, ).
591 uint8_t arrayU8WriteFrom[6] = {1, 12, 34, 56, 127};
592 uint32_t lengthEcmaStrU8WriteFrom = sizeof(arrayU8WriteFrom) - 1;
593 JSHandle<EcmaString> handleEcmaStrU8WriteFrom(thread,
594 EcmaStringAccessor::CreateFromUtf8(instance, &arrayU8WriteFrom[0], lengthEcmaStrU8WriteFrom, true));
595 size_t sizeEcmaStrU8WriteTo = 5;
596 JSHandle<EcmaString> handleEcmaStrAllocTrueWriteTo(thread,
597 EcmaStringAccessor::CreateLineString(instance, sizeEcmaStrU8WriteTo, true));
598 uint32_t indexStartWriteFromArrayU8 = 2;
599 uint32_t lengthWriteFromArrayU8 = 2;
600 EcmaStringAccessor::ReadData(thread, *handleEcmaStrAllocTrueWriteTo, *handleEcmaStrU8WriteFrom,
601 indexStartWriteFromArrayU8, sizeEcmaStrU8WriteTo, lengthWriteFromArrayU8);
602 for (uint32_t i = 0; i < lengthWriteFromArrayU8; i++) {
603 EXPECT_EQ(EcmaStringAccessor(handleEcmaStrAllocTrueWriteTo).Get(thread, i + indexStartWriteFromArrayU8),
604 EcmaStringAccessor(handleEcmaStrU8WriteFrom).Get(thread, i));
605 }
606 }
607
608 /*
609 * @tc.name: ReadData_002
610 * @tc.desc: Check whether the target EcmaString made by CreateLineString( , false, ) changed through calling
611 * ReadData function with a source EcmaString made by CreateFromUtf16( , , , false) is within expectations.
612 * @tc.type: FUNC
613 * @tc.require:
614 */
HWTEST_F_L0(EcmaStringAccessorTest,ReadData_002)615 HWTEST_F_L0(EcmaStringAccessorTest, ReadData_002)
616 {
617 /* ReadData(). From EcmaString made by CreateFromUtf16( , , , false) to EcmaStringU16 made by
618 * CreateLineString( , false, ).
619 */
620 uint16_t arrayU16WriteFrom[10] = {67, 777, 1999, 1, 45, 66, 23456, 65535, 127, 333};
621 uint32_t lengthEcmaStrU16WriteFrom = sizeof(arrayU16WriteFrom) / sizeof(arrayU16WriteFrom[0]);
622 JSHandle<EcmaString> handleEcmaStrU16WriteFrom(thread,
623 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16WriteFrom[0], lengthEcmaStrU16WriteFrom, false));
624 size_t sizeEcmaStrU16WriteTo = 10;
625 JSHandle<EcmaString> handleEcmaStrU16WriteTo(thread,
626 EcmaStringAccessor::CreateLineString(instance, sizeEcmaStrU16WriteTo, false));
627 uint32_t indexStartWriteFromArrayU16 = 3;
628 uint32_t numBytesWriteFromArrayU16 = 2 * 3;
629 EcmaStringAccessor::ReadData(thread, *handleEcmaStrU16WriteTo, *handleEcmaStrU16WriteFrom,
630 indexStartWriteFromArrayU16, sizeEcmaStrU16WriteTo, numBytesWriteFromArrayU16);
631 for (uint32_t i = 0; i < (numBytesWriteFromArrayU16 / 2); i++) {
632 EXPECT_EQ(EcmaStringAccessor(handleEcmaStrU16WriteTo).Get(thread, i + indexStartWriteFromArrayU16),
633 EcmaStringAccessor(handleEcmaStrU16WriteFrom).Get(thread, i));
634 }
635 }
636
637 /*
638 * @tc.name: ReadData_003
639 * @tc.desc: Check whether the target EcmaString made by CreateLineString( , false, ) changed through calling
640 * ReadData function with a source EcmaString made by CreateFromUtf8() is within expectations.
641 * @tc.type: FUNC
642 * @tc.require:
643 */
HWTEST_F_L0(EcmaStringAccessorTest,ReadData_003)644 HWTEST_F_L0(EcmaStringAccessorTest, ReadData_003)
645 {
646 // ReadData(). From EcmaString made by CreateFromUtf8() to EcmaString made by CreateLineString( , false, ).
647 uint8_t arrayU8WriteFrom[6] = {1, 12, 34, 56, 127};
648 uint32_t lengthEcmaStrU8WriteFrom = sizeof(arrayU8WriteFrom) - 1;
649 JSHandle<EcmaString> handleEcmaStrU8WriteFrom(thread,
650 EcmaStringAccessor::CreateFromUtf8(instance, &arrayU8WriteFrom[0], lengthEcmaStrU8WriteFrom, true));
651 size_t sizeEcmaStrU16WriteTo = 10;
652 JSHandle<EcmaString> handleEcmaStrU16WriteTo(thread,
653 EcmaStringAccessor::CreateLineString(instance, sizeEcmaStrU16WriteTo, false));
654 uint32_t indexStartWriteFromU8ToU16 = 1;
655 uint32_t numBytesWriteFromU8ToU16 = 4;
656 EcmaStringAccessor::ReadData(thread, *handleEcmaStrU16WriteTo, *handleEcmaStrU8WriteFrom,
657 indexStartWriteFromU8ToU16, sizeEcmaStrU16WriteTo,
658 numBytesWriteFromU8ToU16);
659 for (uint32_t i = 0; i < numBytesWriteFromU8ToU16; i++) {
660 EXPECT_EQ(EcmaStringAccessor(handleEcmaStrU16WriteTo).Get(thread, i + indexStartWriteFromU8ToU16),
661 EcmaStringAccessor(handleEcmaStrU8WriteFrom).Get(thread, i));
662 }
663 }
664
665 /*
666 * @tc.name: Set_001
667 * @tc.desc: Check whether the target EcmaString made by CreateLineString( , true, ) changed through calling Set
668 * function from a source char is within expectations.
669 * @tc.type: FUNC
670 * @tc.require:
671 */
HWTEST_F_L0(EcmaStringAccessorTest,Set_001)672 HWTEST_F_L0(EcmaStringAccessorTest, Set_001)
673 {
674 // Set(). From char to EcmaString made by CreateLineString( , true, ).
675 char u8Write = 'a';
676 size_t sizeEcmaStrU8WriteTo = 5;
677 JSHandle<EcmaString> handleEcmaStrAllocTrueWriteTo(thread,
678 EcmaStringAccessor::CreateLineString(instance, sizeEcmaStrU8WriteTo, true));
679 uint32_t indexAtWriteFromU8 = 4;
680 EcmaStringAccessor(handleEcmaStrAllocTrueWriteTo).Set(indexAtWriteFromU8, u8Write);
681 EXPECT_EQ(EcmaStringAccessor(handleEcmaStrAllocTrueWriteTo).Get(thread, indexAtWriteFromU8), u8Write);
682 }
683
684 /*
685 * @tc.name: Set_002
686 * @tc.desc: Check whether the target EcmaString made by CreateLineString( , false, ) changed through calling
687 * Set function with a source char is within expectations.
688 * @tc.type: FUNC
689 * @tc.require:
690 */
HWTEST_F_L0(EcmaStringAccessorTest,Set_002)691 HWTEST_F_L0(EcmaStringAccessorTest, Set_002)
692 {
693 // Set(). From char to EcmaString made by CreateLineString( , false, ).
694 size_t sizeEcmaStrU16WriteTo = 10;
695 JSHandle<EcmaString> handleEcmaStrU16WriteTo(thread,
696 EcmaStringAccessor::CreateLineString(instance, sizeEcmaStrU16WriteTo, false));
697 char u8Write = 'a';
698 uint32_t indexAt = 4;
699 EcmaStringAccessor(handleEcmaStrU16WriteTo).Set(indexAt, u8Write);
700 EXPECT_EQ(EcmaStringAccessor(handleEcmaStrU16WriteTo).Get(thread, indexAt), u8Write);
701 }
702
703 /*
704 * @tc.name: GetHashcode_001
705 * @tc.desc: Check whether the value returned through an EcmaString made by CreateFromUtf8() calling GetHashcode
706 * function is within expectations.
707 * @tc.type: FUNC
708 * @tc.require:
709 */
HWTEST_F_L0(EcmaStringAccessorTest,GetHashcode_001)710 HWTEST_F_L0(EcmaStringAccessorTest, GetHashcode_001)
711 {
712 // GetHashcode(). EcmaString made by CreateFromUtf8().
713 uint8_t arrayU8[] = {"abc"};
714 uint32_t lengthEcmaStrU8 = sizeof(arrayU8) - 1;
715 JSHandle<EcmaString> handleEcmaStrU8(thread,
716 EcmaStringAccessor::CreateFromUtf8(instance, &arrayU8[0], lengthEcmaStrU8, true));
717 uint32_t hashExpect = 0;
718 for (uint32_t i = 0; i < lengthEcmaStrU8; i++) {
719 hashExpect = hashExpect * 31 + arrayU8[i];
720 }
721 EXPECT_EQ(EcmaStringAccessor(handleEcmaStrU8).GetHashcode(thread), hashExpect);
722 }
723
724 /*
725 * @tc.name: GetHashcode_002
726 * @tc.desc: Check whether the value returned through an EcmaString made by CreateFromUtf16( , , , true) calling
727 * GetHashcode function is within expectations.
728 * @tc.type: FUNC
729 * @tc.require:
730 */
HWTEST_F_L0(EcmaStringAccessorTest,GetHashcode_002)731 HWTEST_F_L0(EcmaStringAccessorTest, GetHashcode_002)
732 {
733 // GetHashcode(). EcmaString made by CreateFromUtf16( , , , true).
734 uint16_t arrayU16Comp[] = {45, 92, 78, 24};
735 uint32_t lengthEcmaStrU16Comp = sizeof(arrayU16Comp) / sizeof(arrayU16Comp[0]);
736 JSHandle<EcmaString> handleEcmaStrU16Comp(thread,
737 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16Comp[0], lengthEcmaStrU16Comp, true));
738 uint32_t hashExpect = 0;
739 for (uint32_t i = 0; i < lengthEcmaStrU16Comp; i++) {
740 hashExpect = hashExpect * 31 + arrayU16Comp[i];
741 }
742 EXPECT_EQ(EcmaStringAccessor(handleEcmaStrU16Comp).GetHashcode(thread), hashExpect);
743 }
744
745 /*
746 * @tc.name: GetHashcode_003
747 * @tc.desc: Check whether the value returned through an EcmaString made by CreateFromUtf16( , , , false) calling
748 * GetHashcode function is within expectations.
749 * @tc.type: FUNC
750 * @tc.require:
751 */
HWTEST_F_L0(EcmaStringAccessorTest,GetHashcode_003)752 HWTEST_F_L0(EcmaStringAccessorTest, GetHashcode_003)
753 {
754 // GetHashcode(). EcmaString made by CreateFromUtf16( , , , false).
755 uint16_t arrayU16NotComp[] = {199, 1, 256, 65535, 777};
756 uint32_t lengthEcmaStrU16NotComp = sizeof(arrayU16NotComp) / sizeof(arrayU16NotComp[0]);
757 JSHandle<EcmaString> handleEcmaStrU16NotComp(thread,
758 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16NotComp[0], lengthEcmaStrU16NotComp, false));
759 uint32_t hashExpect = 0;
760 for (uint32_t i = 0; i < lengthEcmaStrU16NotComp; i++) {
761 hashExpect = hashExpect * 31 + arrayU16NotComp[i];
762 }
763 EXPECT_EQ(EcmaStringAccessor(handleEcmaStrU16NotComp).GetHashcode(thread), hashExpect);
764 }
765
766 /*
767 * @tc.name: GetHashcode_004
768 * @tc.desc: Check whether the value returned through an EcmaString made by CreateEmptyString() calling GetHashcode
769 * function is within expectations.
770 * @tc.type: FUNC
771 * @tc.require:
772 */
HWTEST_F_L0(EcmaStringAccessorTest,GetHashcode_004)773 HWTEST_F_L0(EcmaStringAccessorTest, GetHashcode_004)
774 {
775 // GetHashcode(). EcmaString made by CreateEmptyString().
776 JSHandle<EcmaString> handleEcmaStrEmpty(thread, EcmaStringAccessor::CreateEmptyString(instance));
777 EXPECT_EQ(EcmaStringAccessor(handleEcmaStrEmpty).GetHashcode(thread), 0U);
778 }
779
780 /*
781 * @tc.name: ComputeHashcodeUtf8
782 * @tc.desc: Check whether the value returned through calling ComputeHashcodeUtf8 function with an Array(uint8_t) is
783 * within expectations.
784 * @tc.type: FUNC
785 * @tc.require:
786 */
HWTEST_F_L0(EcmaStringAccessorTest,ComputeHashcodeUtf8)787 HWTEST_F_L0(EcmaStringAccessorTest, ComputeHashcodeUtf8)
788 {
789 uint8_t arrayU8[] = {"abc"};
790 uint32_t lengthEcmaStrU8 = sizeof(arrayU8) - 1;
791 uint32_t hashExpect = 0;
792 for (uint32_t i = 0; i < lengthEcmaStrU8; i++) {
793 hashExpect = hashExpect * 31 + arrayU8[i];
794 }
795 EXPECT_EQ(EcmaStringAccessor::ComputeHashcodeUtf8(&arrayU8[0], lengthEcmaStrU8, true), hashExpect);
796 }
797
798 /*
799 * @tc.name: ComputeHashcodeUtf16
800 * @tc.desc: Check whether the value returned through calling ComputeHashcodeUtf16 function with an Array(uint16_t) is
801 * within expectations.
802 * @tc.type: FUNC
803 * @tc.require:
804 */
HWTEST_F_L0(EcmaStringAccessorTest,ComputeHashcodeUtf16)805 HWTEST_F_L0(EcmaStringAccessorTest, ComputeHashcodeUtf16)
806 {
807 uint16_t arrayU16[] = {199, 1, 256, 65535, 777};
808 uint32_t lengthEcmaStrU16 = sizeof(arrayU16) / sizeof(arrayU16[0]);
809 uint32_t hashExpect = 0;
810 for (uint32_t i = 0; i < lengthEcmaStrU16; i++) {
811 hashExpect = hashExpect * 31 + arrayU16[i];
812 }
813 EXPECT_EQ(EcmaStringAccessor::ComputeHashcodeUtf16(&arrayU16[0], lengthEcmaStrU16), hashExpect);
814 }
815
816 /*
817 * @tc.name: IndexOf_001
818 * @tc.desc: Check whether the value returned through a source EcmaString made by CreateFromUtf8() calling IndexOf
819 * function with a target EcmaString made by CreateFromUtf8() is within expectations.
820 * @tc.type: FUNC
821 * @tc.require:
822 */
HWTEST_F_L0(EcmaStringAccessorTest,IndexOf_001)823 HWTEST_F_L0(EcmaStringAccessorTest, IndexOf_001)
824 {
825 // IndexOf(). Find EcmaString made by CreateFromUtf8() From EcmaString made by CreateFromUtf8().
826 uint8_t arrayU8From[7] = {23, 25, 1, 3, 39, 80};
827 uint8_t arrayU8Target[4] = {1, 3, 39};
828 uint32_t lengthEcmaStrU8From = sizeof(arrayU8From) - 1;
829 uint32_t lengthEcmaStrU8Target = sizeof(arrayU8Target) - 1;
830 JSHandle<EcmaString> handleEcmaStr(thread,
831 EcmaStringAccessor::CreateFromUtf8(instance, &arrayU8From[0], lengthEcmaStrU8From, true));
832 JSHandle<EcmaString> handleEcmaStr1(thread,
833 EcmaStringAccessor::CreateFromUtf8(instance, &arrayU8Target[0], lengthEcmaStrU8Target, true));
834 int32_t posStart = 0;
835 EXPECT_EQ(EcmaStringAccessor::IndexOf(instance, handleEcmaStr, handleEcmaStr1, posStart), 2);
836 EXPECT_EQ(EcmaStringAccessor::IndexOf(instance, handleEcmaStr1, handleEcmaStr, posStart), -1);
837 posStart = -1;
838 EXPECT_EQ(EcmaStringAccessor::IndexOf(instance, handleEcmaStr, handleEcmaStr1, posStart), 2);
839 posStart = 1;
840 EXPECT_EQ(EcmaStringAccessor::IndexOf(instance, handleEcmaStr, handleEcmaStr1, posStart), 2);
841 posStart = 2;
842 EXPECT_EQ(EcmaStringAccessor::IndexOf(instance, handleEcmaStr, handleEcmaStr1, posStart), 2);
843 posStart = 3;
844 EXPECT_EQ(EcmaStringAccessor::IndexOf(instance, handleEcmaStr, handleEcmaStr1, posStart), -1);
845 }
846
847 /*
848 * @tc.name: IndexOf_002
849 * @tc.desc: Check whether the value returned through a source EcmaString made by CreateFromUtf16( , , , false) calling
850 * IndexOf function with a target EcmaString made by CreateFromUtf8() is within expectations.
851 * @tc.type: FUNC
852 * @tc.require:
853 */
HWTEST_F_L0(EcmaStringAccessorTest,IndexOf_002)854 HWTEST_F_L0(EcmaStringAccessorTest, IndexOf_002)
855 {
856 // IndexOf(). Find EcmaString made by CreateFromUtf8() From EcmaString made by CreateFromUtf16( , , , false).
857 uint8_t arrayU8Target[4] = {1, 3, 39};
858 uint16_t arrayU16NotCompFromNo1[] = {67, 65535, 127, 777, 1453, 44, 1, 3, 39, 80, 333};
859 uint32_t lengthEcmaStrU8Target = sizeof(arrayU8Target) - 1;
860 uint32_t lengthEcmaStrU16NotCompFromNo1 = sizeof(arrayU16NotCompFromNo1) / sizeof(arrayU16NotCompFromNo1[0]);
861 JSHandle<EcmaString> handleEcmaStr(thread,
862 EcmaStringAccessor::CreateFromUtf8(instance, &arrayU8Target[0], lengthEcmaStrU8Target, true));
863 JSHandle<EcmaString> handleEcmaStr1(thread, EcmaStringAccessor::CreateFromUtf16(
864 instance, &arrayU16NotCompFromNo1[0], lengthEcmaStrU16NotCompFromNo1, false));
865 int32_t posStart = 0;
866 EXPECT_EQ(EcmaStringAccessor::IndexOf(instance, handleEcmaStr1, handleEcmaStr, posStart), 6);
867 EXPECT_EQ(EcmaStringAccessor::IndexOf(instance, handleEcmaStr, handleEcmaStr1, posStart), -1);
868 posStart = -1;
869 EXPECT_EQ(EcmaStringAccessor::IndexOf(instance, handleEcmaStr1, handleEcmaStr, posStart), 6);
870 posStart = 1;
871 EXPECT_EQ(EcmaStringAccessor::IndexOf(instance, handleEcmaStr1, handleEcmaStr, posStart), 6);
872 posStart = 6;
873 EXPECT_EQ(EcmaStringAccessor::IndexOf(instance, handleEcmaStr1, handleEcmaStr, posStart), 6);
874 posStart = 7;
875 EXPECT_EQ(EcmaStringAccessor::IndexOf(instance, handleEcmaStr1, handleEcmaStr, posStart), -1);
876 }
877
878 /*
879 * @tc.name: IndexOf_003
880 * @tc.desc: Check whether the value returned through a source EcmaString made by CreateFromUtf16( , , , false) calling
881 * IndexOf function with a target EcmaString made by CreateFromUtf16( , , , false) is within expectations.
882 * @tc.type: FUNC
883 * @tc.require:
884 */
HWTEST_F_L0(EcmaStringAccessorTest,IndexOf_003)885 HWTEST_F_L0(EcmaStringAccessorTest, IndexOf_003)
886 {
887 /* IndexOf(). Find EcmaString made by CreateFromUtf16( , , , false) From EcmaString made by
888 * CreateFromUtf16( , , , false).
889 */
890 uint16_t arrayU16NotCompTarget[] = {1453, 44};
891 uint16_t arrayU16NotCompFrom[] = {67, 65535, 127, 777, 1453, 44, 1, 3, 39, 80, 333};
892 uint32_t lengthEcmaStrU16NotCompTarget = sizeof(arrayU16NotCompTarget) / sizeof(arrayU16NotCompTarget[0]);
893 uint32_t lengthEcmaStrU16NotCompFrom = sizeof(arrayU16NotCompFrom) / sizeof(arrayU16NotCompFrom[0]);
894 JSHandle<EcmaString> handleEcmaStrU16NotCompTarget(thread, EcmaStringAccessor::CreateFromUtf16(
895 instance, &arrayU16NotCompTarget[0], lengthEcmaStrU16NotCompTarget, false));
896 JSHandle<EcmaString> handleEcmaStrU16NotCompFrom(thread,
897 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16NotCompFrom[0], lengthEcmaStrU16NotCompFrom, false));
898 int32_t posStart = 0;
899 EXPECT_EQ(EcmaStringAccessor::IndexOf(instance,
900 handleEcmaStrU16NotCompFrom, handleEcmaStrU16NotCompTarget, posStart), 4);
901 EXPECT_EQ(EcmaStringAccessor::IndexOf(instance,
902 handleEcmaStrU16NotCompTarget, handleEcmaStrU16NotCompFrom, posStart), -1);
903 posStart = -1;
904 EXPECT_EQ(EcmaStringAccessor::IndexOf(instance,
905 handleEcmaStrU16NotCompFrom, handleEcmaStrU16NotCompTarget, posStart), 4);
906 posStart = 1;
907 EXPECT_EQ(EcmaStringAccessor::IndexOf(instance,
908 handleEcmaStrU16NotCompFrom, handleEcmaStrU16NotCompTarget, posStart), 4);
909 posStart = 4;
910 EXPECT_EQ(EcmaStringAccessor::IndexOf(instance,
911 handleEcmaStrU16NotCompFrom, handleEcmaStrU16NotCompTarget, posStart), 4);
912 posStart = 5;
913 EXPECT_EQ(EcmaStringAccessor::IndexOf(instance,
914 handleEcmaStrU16NotCompFrom, handleEcmaStrU16NotCompTarget, posStart), -1);
915 }
916
917 /*
918 * @tc.name: IndexOf_004
919 * @tc.desc: Check whether the value returned through a source EcmaString made by CreateFromUtf8() calling IndexOf
920 * function with a target EcmaString made by CreateFromUtf16() is within expectations.
921 * @tc.type: FUNC
922 * @tc.require:
923 */
HWTEST_F_L0(EcmaStringAccessorTest,IndexOf_004)924 HWTEST_F_L0(EcmaStringAccessorTest, IndexOf_004)
925 {
926 // IndexOf(). Find EcmaString made by CreateFromUtf16() From EcmaString made by CreateFromUtf8().
927 std::vector<uint16_t> ecmaStrU16NotCompTarget = {3, 39, 80};
928 std::vector<uint8_t> arrayU8From{23, 25, 1, 3, 39, 80};
929 auto func = std::bind(EcmaStringAccessor::CreateFromUtf8, std::placeholders::_1, std::placeholders::_2,
930 std::placeholders::_3, std::placeholders::_4, MemSpaceType::SHARED_OLD_SPACE);
931 EcmaTestCommon::IndexOfCommonCase(thread, instance, ecmaStrU16NotCompTarget, arrayU8From, func);
932 }
933
934 /*
935 * @tc.name: Compare_001
936 * @tc.desc: Check whether the value returned through calling Compare function between EcmaStrings made by
937 * CreateFromUtf8() is within expectations.
938 * @tc.type: FUNC
939 * @tc.require:
940 */
HWTEST_F_L0(EcmaStringAccessorTest,Compare_001)941 HWTEST_F_L0(EcmaStringAccessorTest, Compare_001)
942 {
943 // Compare(). Between EcmaStrings made by CreateFromUtf8().
944 uint8_t arrayU8No1[3] = {1, 23};
945 uint8_t arrayU8No2[4] = {1, 23, 49};
946 uint8_t arrayU8No3[6] = {1, 23, 45, 97, 127};
947 uint32_t lengthEcmaStrU8No1 = sizeof(arrayU8No1) - 1;
948 uint32_t lengthEcmaStrU8No2 = sizeof(arrayU8No2) - 1;
949 uint32_t lengthEcmaStrU8No3 = sizeof(arrayU8No3) - 1;
950 JSHandle<EcmaString> handleEcmaStrU8No1(thread,
951 EcmaStringAccessor::CreateFromUtf8(instance, &arrayU8No1[0], lengthEcmaStrU8No1, true));
952 JSHandle<EcmaString> handleEcmaStrU8No2(thread,
953 EcmaStringAccessor::CreateFromUtf8(instance, &arrayU8No2[0], lengthEcmaStrU8No2, true));
954 JSHandle<EcmaString> handleEcmaStrU8No3(thread,
955 EcmaStringAccessor::CreateFromUtf8(instance, &arrayU8No3[0], lengthEcmaStrU8No3, true));
956 EXPECT_EQ(EcmaStringAccessor::Compare(instance, handleEcmaStrU8No1, handleEcmaStrU8No2), -1);
957 EXPECT_EQ(EcmaStringAccessor::Compare(instance, handleEcmaStrU8No2, handleEcmaStrU8No1), 1);
958 EXPECT_EQ(EcmaStringAccessor::Compare(instance, handleEcmaStrU8No2, handleEcmaStrU8No3), 49 - 45);
959 EXPECT_EQ(EcmaStringAccessor::Compare(instance, handleEcmaStrU8No3, handleEcmaStrU8No2), 45 - 49);
960 }
961
962 /*
963 * @tc.name: Compare_002
964 * @tc.desc: Check whether the value returned through calling Compare function between EcmaStrings made by
965 * CreateFromUtf16( , , , true) is within expectations.
966 * @tc.type: FUNC
967 * @tc.require:
968 */
HWTEST_F_L0(EcmaStringAccessorTest,Compare_002)969 HWTEST_F_L0(EcmaStringAccessorTest, Compare_002)
970 {
971 // Compare(). Between EcmaStrings made by CreateFromUtf16( , , , true).
972 uint16_t arrayU16CompNo1[] = {1, 23};
973 uint16_t arrayU16CompNo2[] = {1, 23, 49};
974 uint16_t arrayU16CompNo3[] = {1, 23, 45, 97, 127};
975 uint32_t lengthEcmaStrU16CompNo1 = sizeof(arrayU16CompNo1) / sizeof(arrayU16CompNo1[0]);
976 uint32_t lengthEcmaStrU16CompNo2 = sizeof(arrayU16CompNo2) / sizeof(arrayU16CompNo2[0]);
977 uint32_t lengthEcmaStrU16CompNo3 = sizeof(arrayU16CompNo3) / sizeof(arrayU16CompNo3[0]);
978 JSHandle<EcmaString> handleEcmaStrU16CompNo1(thread,
979 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16CompNo1[0], lengthEcmaStrU16CompNo1, true));
980 JSHandle<EcmaString> handleEcmaStrU16CompNo2(thread,
981 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16CompNo2[0], lengthEcmaStrU16CompNo2, true));
982 JSHandle<EcmaString> handleEcmaStrU16CompNo3(thread,
983 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16CompNo3[0], lengthEcmaStrU16CompNo3, true));
984 EXPECT_EQ(EcmaStringAccessor::Compare(instance, handleEcmaStrU16CompNo1, handleEcmaStrU16CompNo2), -1);
985 EXPECT_EQ(EcmaStringAccessor::Compare(instance, handleEcmaStrU16CompNo2, handleEcmaStrU16CompNo1), 1);
986 EXPECT_EQ(EcmaStringAccessor::Compare(instance, handleEcmaStrU16CompNo2, handleEcmaStrU16CompNo3), 49 - 45);
987 EXPECT_EQ(EcmaStringAccessor::Compare(instance, handleEcmaStrU16CompNo3, handleEcmaStrU16CompNo2), 45 - 49);
988 }
989
990 /*
991 * @tc.name: Compare_003
992 * @tc.desc: Check whether the value returned through calling Compare function between EcmaString made by
993 * CreateFromUtf8() and EcmaString made by CreateFromUtf16( , , , true) made by CreateFromUtf16( , , , true) is within
994 * expectations.
995 * @tc.type: FUNC
996 * @tc.require:
997 */
HWTEST_F_L0(EcmaStringAccessorTest,Compare_003)998 HWTEST_F_L0(EcmaStringAccessorTest, Compare_003)
999 {
1000 auto createUtf8 = std::bind(EcmaStringAccessor::CreateFromUtf8, std::placeholders::_1, std::placeholders::_2,
1001 std::placeholders::_3, std::placeholders::_4, MemSpaceType::SHARED_OLD_SPACE);
1002 auto createUtf16 = std::bind(EcmaStringAccessor::CreateFromUtf16, std::placeholders::_1, std::placeholders::_2,
1003 std::placeholders::_3, std::placeholders::_4, MemSpaceType::SHARED_OLD_SPACE);
1004 EcmaTestCommon::CompareCommonCase(thread, instance, createUtf8, createUtf16, EcmaStringAccessor::Compare);
1005 }
1006
1007 /*
1008 * @tc.name: Compare_004
1009 * @tc.desc: Check whether the value returned through calling Compare function between EcmaStrings made by
1010 * CreateFromUtf16( , , , false) is within expectations.
1011 * @tc.type: FUNC
1012 * @tc.require:
1013 */
HWTEST_F_L0(EcmaStringAccessorTest,Compare_004)1014 HWTEST_F_L0(EcmaStringAccessorTest, Compare_004)
1015 {
1016 // Compare(). Between EcmaStrings made by CreateFromUtf16( , , , false).
1017 uint16_t arrayU16NotCompNo1[] = {1, 23};
1018 uint16_t arrayU16NotCompNo2[] = {1, 23, 49};
1019 uint16_t arrayU16NotCompNo3[] = {1, 23, 456, 6789, 65535, 127};
1020 uint32_t lengthEcmaStrU16NotCompNo1 = sizeof(arrayU16NotCompNo1) / sizeof(arrayU16NotCompNo1[0]);
1021 uint32_t lengthEcmaStrU16NotCompNo2 = sizeof(arrayU16NotCompNo2) / sizeof(arrayU16NotCompNo2[0]);
1022 uint32_t lengthEcmaStrU16NotCompNo3 = sizeof(arrayU16NotCompNo3) / sizeof(arrayU16NotCompNo3[0]);
1023 JSHandle<EcmaString> handleEcmaStrU16NotCompNo1(thread,
1024 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16NotCompNo1[0], lengthEcmaStrU16NotCompNo1, true));
1025 JSHandle<EcmaString> handleEcmaStrU16NotCompNo2(thread,
1026 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16NotCompNo2[0], lengthEcmaStrU16NotCompNo2, true));
1027 JSHandle<EcmaString> handleEcmaStrU16NotCompNo3(thread,
1028 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16NotCompNo3[0], lengthEcmaStrU16NotCompNo3, false));
1029 EXPECT_EQ(EcmaStringAccessor::Compare(instance, handleEcmaStrU16NotCompNo1, handleEcmaStrU16NotCompNo2), -1);
1030 EXPECT_EQ(EcmaStringAccessor::Compare(instance, handleEcmaStrU16NotCompNo2, handleEcmaStrU16NotCompNo1), 1);
1031 EXPECT_EQ(EcmaStringAccessor::Compare(instance, handleEcmaStrU16NotCompNo2, handleEcmaStrU16NotCompNo3), 49 - 456);
1032 EXPECT_EQ(EcmaStringAccessor::Compare(instance, handleEcmaStrU16NotCompNo3, handleEcmaStrU16NotCompNo2), 456 - 49);
1033 }
1034
1035 /*
1036 * @tc.name: Compare_005
1037 * @tc.desc: Check whether the value returned through calling Compare function between EcmaString made by
1038 * CreateFromUtf8() and EcmaString made by CreateFromUtf16( , , , false) is within expectations.
1039 * @tc.type: FUNC
1040 * @tc.require:
1041 */
HWTEST_F_L0(EcmaStringAccessorTest,Compare_005)1042 HWTEST_F_L0(EcmaStringAccessorTest, Compare_005)
1043 {
1044 // Compare(). EcmaString made by CreateFromUtf8() and EcmaString made by CreateFromUtf16( , , , false).
1045 uint8_t arrayU8No1[3] = {1, 23};
1046 uint32_t lengthEcmaStrU8No1 = sizeof(arrayU8No1) - 1;
1047 JSHandle<EcmaString> handleEcmaStrU8No1(thread,
1048 EcmaStringAccessor::CreateFromUtf8(instance, &arrayU8No1[0], lengthEcmaStrU8No1, true));
1049
1050 uint8_t arrayU8No2[4] = {1, 23, 49};
1051 uint32_t lengthEcmaStrU8No2 = sizeof(arrayU8No2) - 1;
1052 JSHandle<EcmaString> handleEcmaStrU8No2(thread,
1053 EcmaStringAccessor::CreateFromUtf8(instance, &arrayU8No2[0], lengthEcmaStrU8No2, true));
1054
1055 uint16_t arrayU16NotCompNo1[] = {1, 23};
1056 uint32_t lengthEcmaStrU16NotCompNo1 = sizeof(arrayU16NotCompNo1) / sizeof(arrayU16NotCompNo1[0]);
1057 JSHandle<EcmaString> handleEcmaStrU16NotCompNo1(thread,
1058 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16NotCompNo1[0], lengthEcmaStrU16NotCompNo1, true));
1059 EXPECT_EQ(EcmaStringAccessor::Compare(instance, handleEcmaStrU8No1, handleEcmaStrU16NotCompNo1), 0);
1060 EXPECT_EQ(EcmaStringAccessor::Compare(instance, handleEcmaStrU16NotCompNo1, handleEcmaStrU8No1), 0);
1061
1062 uint16_t arrayU16NotCompNo2[] = {1, 23, 49};
1063 uint32_t lengthEcmaStrU16NotCompNo2 = sizeof(arrayU16NotCompNo2) / sizeof(arrayU16NotCompNo2[0]);
1064 JSHandle<EcmaString> handleEcmaStrU16NotCompNo2(thread,
1065 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16NotCompNo2[0], lengthEcmaStrU16NotCompNo2, true));
1066 EXPECT_EQ(EcmaStringAccessor::Compare(instance, handleEcmaStrU8No1, handleEcmaStrU16NotCompNo2), -1);
1067 EXPECT_EQ(EcmaStringAccessor::Compare(instance, handleEcmaStrU16NotCompNo2, handleEcmaStrU8No1), 1);
1068
1069 uint16_t arrayU16NotCompNo3[] = {1, 23, 456, 6789, 65535, 127};
1070 uint32_t lengthEcmaStrU16NotCompNo3 = sizeof(arrayU16NotCompNo3) / sizeof(arrayU16NotCompNo3[0]);
1071 JSHandle<EcmaString> handleEcmaStrU16NotCompNo3(thread,
1072 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16NotCompNo3[0], lengthEcmaStrU16NotCompNo3, false));
1073 EXPECT_EQ(EcmaStringAccessor::Compare(instance, handleEcmaStrU8No2, handleEcmaStrU16NotCompNo3), 49 - 456);
1074 EXPECT_EQ(EcmaStringAccessor::Compare(instance, handleEcmaStrU16NotCompNo3, handleEcmaStrU8No2), 456 - 49);
1075 }
1076
1077 /*
1078 * @tc.name: Compare_006
1079 * @tc.desc: Check whether the value returned through calling Compare function between EcmaString made by
1080 * CreateFromUtf16( , , , true) and EcmaString made by CreateFromUtf16( , , , false) is within expectations.
1081 * @tc.type: FUNC
1082 * @tc.require:
1083 */
HWTEST_F_L0(EcmaStringAccessorTest,Compare_006)1084 HWTEST_F_L0(EcmaStringAccessorTest, Compare_006)
1085 {
1086 // Compare(). EcmaString made by CreateFromUtf16( , , , true) and EcmaString made by CreateFromUtf16( , , , false).
1087 uint16_t arrayU16CompNo1[] = {1, 23};
1088 uint32_t lengthEcmaStrU16CompNo1 = sizeof(arrayU16CompNo1) / sizeof(arrayU16CompNo1[0]);
1089 JSHandle<EcmaString> handleEcmaStrU16CompNo1(thread,
1090 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16CompNo1[0], lengthEcmaStrU16CompNo1, true));
1091
1092 uint16_t arrayU16CompNo2[] = {1, 23, 49};
1093 uint32_t lengthEcmaStrU16CompNo2 = sizeof(arrayU16CompNo2) / sizeof(arrayU16CompNo2[0]);
1094 JSHandle<EcmaString> handleEcmaStrU16CompNo2(thread,
1095 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16CompNo2[0], lengthEcmaStrU16CompNo2, true));
1096
1097 uint16_t arrayU16NotCompNo1[] = {1, 23};
1098 uint32_t lengthEcmaStrU16NotCompNo1 = sizeof(arrayU16NotCompNo1) / sizeof(arrayU16NotCompNo1[0]);
1099 JSHandle<EcmaString> handleEcmaStrU16NotCompNo1(thread,
1100 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16NotCompNo1[0], lengthEcmaStrU16NotCompNo1, true));
1101
1102 uint16_t arrayU16NotCompNo2[] = {1, 23, 49};
1103 uint32_t lengthEcmaStrU16NotCompNo2 = sizeof(arrayU16NotCompNo2) / sizeof(arrayU16NotCompNo2[0]);
1104 JSHandle<EcmaString> handleEcmaStrU16NotCompNo2(thread,
1105 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16NotCompNo2[0], lengthEcmaStrU16NotCompNo2, true));
1106
1107 uint16_t arrayU16NotCompNo3[] = {1, 23, 456, 6789, 65535, 127};
1108 uint32_t lengthEcmaStrU16NotCompNo3 = sizeof(arrayU16NotCompNo3) / sizeof(arrayU16NotCompNo3[0]);
1109 JSHandle<EcmaString> handleEcmaStrU16NotCompNo3(thread,
1110 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16NotCompNo3[0], lengthEcmaStrU16NotCompNo3, false));
1111
1112 EXPECT_EQ(EcmaStringAccessor::Compare(instance, handleEcmaStrU16CompNo1, handleEcmaStrU16NotCompNo1), 0);
1113 EXPECT_EQ(EcmaStringAccessor::Compare(instance, handleEcmaStrU16NotCompNo1, handleEcmaStrU16CompNo1), 0);
1114 EXPECT_EQ(EcmaStringAccessor::Compare(instance, handleEcmaStrU16CompNo1, handleEcmaStrU16NotCompNo2), -1);
1115 EXPECT_EQ(EcmaStringAccessor::Compare(instance, handleEcmaStrU16NotCompNo2, handleEcmaStrU16CompNo1), 1);
1116 EXPECT_EQ(EcmaStringAccessor::Compare(instance, handleEcmaStrU16CompNo2, handleEcmaStrU16NotCompNo3), 49 - 456);
1117 EXPECT_EQ(EcmaStringAccessor::Compare(instance, handleEcmaStrU16NotCompNo3, handleEcmaStrU16CompNo2), 456 - 49);
1118 }
1119
1120 /*
1121 * @tc.name: StringsAreEqual_001
1122 * @tc.desc: Check whether the bool returned through calling StringsAreEqual function with two EcmaStrings made by
1123 * CreateFromUtf8() is within expectations.
1124 * @tc.type: FUNC
1125 * @tc.require:
1126 */
HWTEST_F_L0(EcmaStringAccessorTest,StringsAreEqual_001)1127 HWTEST_F_L0(EcmaStringAccessorTest, StringsAreEqual_001)
1128 {
1129 // StringsAreEqual().
1130 uint8_t arrayU8No1[4] = {45, 92, 78};
1131 uint8_t arrayU8No2[4] = {45, 92, 78};
1132 uint8_t arrayU8No3[5] = {45, 92, 78, 1};
1133 uint32_t lengthEcmaStrU8No1 = sizeof(arrayU8No1) - 1;
1134 uint32_t lengthEcmaStrU8No2 = sizeof(arrayU8No2) - 1;
1135 uint32_t lengthEcmaStrU8No3 = sizeof(arrayU8No3) - 1;
1136 JSHandle<EcmaString> handleEcmaStrU8No1(thread,
1137 EcmaStringAccessor::CreateFromUtf8(instance, &arrayU8No1[0], lengthEcmaStrU8No1, true));
1138 JSHandle<EcmaString> handleEcmaStrU8No2(thread,
1139 EcmaStringAccessor::CreateFromUtf8(instance, &arrayU8No2[0], lengthEcmaStrU8No2, true));
1140 JSHandle<EcmaString> handleEcmaStrU8No3(thread,
1141 EcmaStringAccessor::CreateFromUtf8(instance, &arrayU8No3[0], lengthEcmaStrU8No3, true));
1142 EXPECT_TRUE(EcmaStringAccessor::StringsAreEqual(thread, *handleEcmaStrU8No1, *handleEcmaStrU8No2));
1143 EXPECT_FALSE(EcmaStringAccessor::StringsAreEqual(thread, *handleEcmaStrU8No1, *handleEcmaStrU8No3));
1144 EXPECT_FALSE(EcmaStringAccessor::StringsAreEqual(thread, *handleEcmaStrU8No3, *handleEcmaStrU8No1));
1145 }
1146
1147 /*
1148 * @tc.name: StringsAreEqual_002
1149 * @tc.desc: Check whether the bool returned through calling StringsAreEqual function with a EcmaString made by
1150 * CreateFromUtf8() and a EcmaString made by CreateFromUtf16(, , , true) is within expectations.
1151 * @tc.type: FUNC
1152 * @tc.require:
1153 */
HWTEST_F_L0(EcmaStringAccessorTest,StringsAreEqual_002)1154 HWTEST_F_L0(EcmaStringAccessorTest, StringsAreEqual_002)
1155 {
1156 // StringsAreEqual().
1157 uint8_t arrayU8No1[4] = {45, 92, 78};
1158 uint16_t arrayU16CompNo2[] = {45, 92, 78};
1159 uint16_t arrayU16CompNo3[] = {45, 92, 78, 1};
1160 uint32_t lengthEcmaStrU8No1 = sizeof(arrayU8No1) - 1;
1161 uint32_t lengthEcmaStrU16CompNo2 = sizeof(arrayU16CompNo2) / sizeof(arrayU16CompNo2[0]);
1162 uint32_t lengthEcmaStrU16CompNo3 = sizeof(arrayU16CompNo3) / sizeof(arrayU16CompNo3[0]);
1163 JSHandle<EcmaString> handleEcmaStrU8No1(thread,
1164 EcmaStringAccessor::CreateFromUtf8(instance, &arrayU8No1[0], lengthEcmaStrU8No1, true));
1165 JSHandle<EcmaString> handleEcmaStrU16CompNo2(thread,
1166 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16CompNo2[0], lengthEcmaStrU16CompNo2, true));
1167 JSHandle<EcmaString> handleEcmaStrU16CompNo3(thread,
1168 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16CompNo3[0], lengthEcmaStrU16CompNo3, true));
1169 EXPECT_TRUE(EcmaStringAccessor::StringsAreEqual(thread, *handleEcmaStrU8No1, *handleEcmaStrU16CompNo2));
1170 EXPECT_FALSE(EcmaStringAccessor::StringsAreEqual(thread, *handleEcmaStrU8No1, *handleEcmaStrU16CompNo3));
1171 }
1172
1173 /*
1174 * @tc.name: StringsAreEqual_003
1175 * @tc.desc: Check whether the bool returned through calling StringsAreEqual function with two EcmaStrings made by
1176 * CreateFromUtf16(, , , true) is within expectations.
1177 * @tc.type: FUNC
1178 * @tc.require:
1179 */
HWTEST_F_L0(EcmaStringAccessorTest,StringsAreEqual_003)1180 HWTEST_F_L0(EcmaStringAccessorTest, StringsAreEqual_003)
1181 {
1182 // StringsAreEqual().
1183 uint16_t arrayU16CompNo1[] = {45, 92, 78};
1184 uint16_t arrayU16CompNo2[] = {45, 92, 78};
1185 uint16_t arrayU16CompNo3[] = {45, 92, 78, 1};
1186 uint32_t lengthEcmaStrU16CompNo1 = sizeof(arrayU16CompNo1) / sizeof(arrayU16CompNo1[0]);
1187 uint32_t lengthEcmaStrU16CompNo2 = sizeof(arrayU16CompNo2) / sizeof(arrayU16CompNo2[0]);
1188 uint32_t lengthEcmaStrU16CompNo3 = sizeof(arrayU16CompNo3) / sizeof(arrayU16CompNo3[0]);
1189 JSHandle<EcmaString> handleEcmaStrU16CompNo1(thread,
1190 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16CompNo1[0], lengthEcmaStrU16CompNo1, true));
1191 JSHandle<EcmaString> handleEcmaStrU16CompNo2(thread,
1192 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16CompNo2[0], lengthEcmaStrU16CompNo2, true));
1193 JSHandle<EcmaString> handleEcmaStrU16CompNo3(thread,
1194 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16CompNo3[0], lengthEcmaStrU16CompNo3, true));
1195 EXPECT_TRUE(EcmaStringAccessor::StringsAreEqual(thread, *handleEcmaStrU16CompNo1, *handleEcmaStrU16CompNo2));
1196 EXPECT_FALSE(EcmaStringAccessor::StringsAreEqual(thread, *handleEcmaStrU16CompNo1, *handleEcmaStrU16CompNo3));
1197 EXPECT_FALSE(EcmaStringAccessor::StringsAreEqual(thread, *handleEcmaStrU16CompNo3, *handleEcmaStrU16CompNo1));
1198 }
1199
1200 /*
1201 * @tc.name: StringsAreEqual_004
1202 * @tc.desc: Check whether the bool returned through calling StringsAreEqual function with a EcmaString made by
1203 * CreateFromUtf8() and a EcmaString made by CreateFromUtf16(, , , false) is within expectations.
1204 * @tc.type: FUNC
1205 * @tc.require:
1206 */
HWTEST_F_L0(EcmaStringAccessorTest,StringsAreEqual_004)1207 HWTEST_F_L0(EcmaStringAccessorTest, StringsAreEqual_004)
1208 {
1209 // StringsAreEqual().
1210 uint8_t arrayU8No1[4] = {45, 92, 78};
1211 uint16_t arrayU16NotCompNo1[] = {45, 92, 78};
1212 uint32_t lengthEcmaStrU8No1 = sizeof(arrayU8No1) - 1;
1213 uint32_t lengthEcmaStrU16NotCompNo1 = sizeof(arrayU16NotCompNo1) / sizeof(arrayU16NotCompNo1[0]);
1214 JSHandle<EcmaString> handleEcmaStrU8No1(thread,
1215 EcmaStringAccessor::CreateFromUtf8(instance, &arrayU8No1[0], lengthEcmaStrU8No1, true));
1216 JSHandle<EcmaString> handleEcmaStrU16NotCompNo1(thread,
1217 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16NotCompNo1[0], lengthEcmaStrU16NotCompNo1, true));
1218 EXPECT_TRUE(EcmaStringAccessor::StringsAreEqual(thread, *handleEcmaStrU8No1, *handleEcmaStrU16NotCompNo1));
1219 EXPECT_TRUE(EcmaStringAccessor::StringsAreEqual(thread, *handleEcmaStrU16NotCompNo1, *handleEcmaStrU8No1));
1220 }
1221
1222 /*
1223 * @tc.name: StringsAreEqual_005
1224 * @tc.desc: Check whether the bool returned through calling StringsAreEqual function with a EcmaString made by
1225 * CreateFromUtf16(, , , true) and a EcmaString made by CreateFromUtf16(, , , false) is within expectations.
1226 * @tc.type: FUNC
1227 * @tc.require:
1228 */
HWTEST_F_L0(EcmaStringAccessorTest,StringsAreEqual_005)1229 HWTEST_F_L0(EcmaStringAccessorTest, StringsAreEqual_005)
1230 {
1231 // StringsAreEqual().
1232 uint16_t arrayU16CompNo1[] = {45, 92, 78};
1233 uint16_t arrayU16NotCompNo1[] = {45, 92, 78};
1234 uint32_t lengthEcmaStrU16CompNo1 = sizeof(arrayU16CompNo1) / sizeof(arrayU16CompNo1[0]);
1235 uint32_t lengthEcmaStrU16NotCompNo1 = sizeof(arrayU16NotCompNo1) / sizeof(arrayU16NotCompNo1[0]);
1236 JSHandle<EcmaString> handleEcmaStrU16CompNo1(thread,
1237 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16CompNo1[0], lengthEcmaStrU16CompNo1, true));
1238 JSHandle<EcmaString> handleEcmaStrU16NotCompNo1(thread,
1239 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16NotCompNo1[0], lengthEcmaStrU16NotCompNo1, true));
1240 EXPECT_TRUE(EcmaStringAccessor::StringsAreEqual(thread, *handleEcmaStrU16CompNo1, *handleEcmaStrU16NotCompNo1));
1241 EXPECT_TRUE(EcmaStringAccessor::StringsAreEqual(thread, *handleEcmaStrU16NotCompNo1, *handleEcmaStrU16CompNo1));
1242 }
1243
1244 /*
1245 * @tc.name: StringsAreEqual_006
1246 * @tc.desc: Check whether the bool returned through calling StringsAreEqual function with two EcmaStrings made by
1247 * CreateFromUtf16(, , , false) is within expectations.
1248 * @tc.type: FUNC
1249 * @tc.require:
1250 */
HWTEST_F_L0(EcmaStringAccessorTest,StringsAreEqual_006)1251 HWTEST_F_L0(EcmaStringAccessorTest, StringsAreEqual_006)
1252 {
1253 // StringsAreEqual().
1254 uint16_t arrayU16NotCompNo1[] = {234, 345, 127, 2345, 65535, 5};
1255 uint16_t arrayU16NotCompNo2[] = {234, 345, 127, 2345, 65535, 5};
1256 uint16_t arrayU16NotCompNo3[] = {1, 234, 345, 127, 2345, 65535, 5};
1257 uint32_t lengthEcmaStrU16NotCompNo1 = sizeof(arrayU16NotCompNo1) / sizeof(arrayU16NotCompNo1[0]);
1258 uint32_t lengthEcmaStrU16NotCompNo2 = sizeof(arrayU16NotCompNo2) / sizeof(arrayU16NotCompNo2[0]);
1259 uint32_t lengthEcmaStrU16NotCompNo3 = sizeof(arrayU16NotCompNo3) / sizeof(arrayU16NotCompNo3[0]);
1260 JSHandle<EcmaString> handleEcmaStrU16NotCompNo1(thread,
1261 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16NotCompNo1[0], lengthEcmaStrU16NotCompNo1, false));
1262 JSHandle<EcmaString> handleEcmaStrU16NotCompNo2(thread,
1263 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16NotCompNo2[0], lengthEcmaStrU16NotCompNo2, false));
1264 JSHandle<EcmaString> handleEcmaStrU16NotCompNo3(thread,
1265 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16NotCompNo3[0], lengthEcmaStrU16NotCompNo3, false));
1266 EXPECT_TRUE(EcmaStringAccessor::StringsAreEqual(thread, *handleEcmaStrU16NotCompNo1, *handleEcmaStrU16NotCompNo2));
1267 EXPECT_FALSE(EcmaStringAccessor::StringsAreEqual(thread, *handleEcmaStrU16NotCompNo1, *handleEcmaStrU16NotCompNo3));
1268 EXPECT_FALSE(EcmaStringAccessor::StringsAreEqual(thread, *handleEcmaStrU16NotCompNo3, *handleEcmaStrU16NotCompNo1));
1269 }
1270
1271 /*
1272 * @tc.name: StringsAreEqualUtf8_001
1273 * @tc.desc: Check whether the bool returned through calling StringIsEqualUint8Data function with an EcmaString made by
1274 * CreateFromUtf8() and an Array(uint8_t) is within expectations.
1275 * @tc.type: FUNC
1276 * @tc.require:
1277 */
HWTEST_F_L0(EcmaStringAccessorTest,StringsAreEqualUtf8_001)1278 HWTEST_F_L0(EcmaStringAccessorTest, StringsAreEqualUtf8_001)
1279 {
1280 // StringIsEqualUint8Data(). EcmaString made by CreateFromUtf8(), Array:U8.
1281 uint8_t arrayU8No1[4] = {45, 92, 78};
1282 uint8_t arrayU8No2[5] = {45, 92, 78, 24};
1283 uint8_t arrayU8No3[3] = {45, 92};
1284 uint32_t lengthEcmaStrU8No1 = sizeof(arrayU8No1) - 1;
1285 uint32_t lengthEcmaStrU8No2 = sizeof(arrayU8No2) - 1;
1286 uint32_t lengthEcmaStrU8No3 = sizeof(arrayU8No3) - 1;
1287 JSHandle<EcmaString> handleEcmaStrU8No1(thread,
1288 EcmaStringAccessor::CreateFromUtf8(instance, &arrayU8No1[0], lengthEcmaStrU8No1, true));
1289 JSHandle<EcmaString> handleEcmaStrU8No2(thread,
1290 EcmaStringAccessor::CreateFromUtf8(instance, &arrayU8No2[0], lengthEcmaStrU8No2, true));
1291 JSHandle<EcmaString> handleEcmaStrU8No3(thread,
1292 EcmaStringAccessor::CreateFromUtf8(instance, &arrayU8No3[0], lengthEcmaStrU8No3, true));
1293 EXPECT_TRUE(EcmaStringAccessor::StringIsEqualUint8Data(
1294 thread, *handleEcmaStrU8No1, &arrayU8No1[0], lengthEcmaStrU8No1, true));
1295 EXPECT_FALSE(EcmaStringAccessor::StringIsEqualUint8Data(
1296 thread, *handleEcmaStrU8No1, &arrayU8No1[0], lengthEcmaStrU8No1, false));
1297 EXPECT_FALSE(EcmaStringAccessor::StringIsEqualUint8Data(
1298 thread, *handleEcmaStrU8No2, &arrayU8No1[0], lengthEcmaStrU8No1, true));
1299 EXPECT_FALSE(EcmaStringAccessor::StringIsEqualUint8Data(
1300 thread, *handleEcmaStrU8No3, &arrayU8No1[0], lengthEcmaStrU8No1, true));
1301 }
1302
1303 /*
1304 * @tc.name: StringsAreEqualUtf8_002
1305 * @tc.desc: Check whether the bool returned through calling StringIsEqualUint8Data function with an EcmaString made by
1306 * CreateFromUtf16( , , , true) and an Array(uint8_t) is within expectations.
1307 * @tc.type: FUNC
1308 * @tc.require:
1309 */
HWTEST_F_L0(EcmaStringAccessorTest,StringsAreEqualUtf8_002)1310 HWTEST_F_L0(EcmaStringAccessorTest, StringsAreEqualUtf8_002)
1311 {
1312 // StringIsEqualUint8Data(). EcmaString made by CreateFromUtf16( , , , true), Array:U8.
1313 uint8_t arrayU8No1[4] = {45, 92, 78};
1314 uint32_t lengthEcmaStrU8No1 = sizeof(arrayU8No1) - 1;
1315
1316 uint16_t arrayU16CompNo1[] = {45, 92, 78};
1317 uint32_t lengthEcmaStrU16CompNo1 = sizeof(arrayU16CompNo1) / sizeof(arrayU16CompNo1[0]);
1318
1319 uint16_t arrayU16CompNo2[] = {45, 92, 78, 24};
1320 uint32_t lengthEcmaStrU16CompNo2 = sizeof(arrayU16CompNo2) / sizeof(arrayU16CompNo2[0]);
1321
1322 uint16_t arrayU16CompNo3[] = {45, 92};
1323 uint32_t lengthEcmaStrU16CompNo3 = sizeof(arrayU16CompNo3) / sizeof(arrayU16CompNo3[0]);
1324 JSHandle<EcmaString> handleEcmaStrU16CompNo1(thread,
1325 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16CompNo1[0], lengthEcmaStrU16CompNo1, true));
1326 JSHandle<EcmaString> handleEcmaStrU16CompNo2(thread,
1327 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16CompNo2[0], lengthEcmaStrU16CompNo2, true));
1328 JSHandle<EcmaString> handleEcmaStrU16CompNo3(thread,
1329 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16CompNo3[0], lengthEcmaStrU16CompNo3, true));
1330 EXPECT_TRUE(EcmaStringAccessor::StringIsEqualUint8Data(
1331 thread, *handleEcmaStrU16CompNo1, &arrayU8No1[0], lengthEcmaStrU8No1, true));
1332 EXPECT_FALSE(EcmaStringAccessor::StringIsEqualUint8Data(
1333 thread, *handleEcmaStrU16CompNo1, &arrayU8No1[0], lengthEcmaStrU8No1, false));
1334 EXPECT_FALSE(EcmaStringAccessor::StringIsEqualUint8Data(
1335 thread, *handleEcmaStrU16CompNo2, &arrayU8No1[0], lengthEcmaStrU8No1, true));
1336 EXPECT_FALSE(EcmaStringAccessor::StringIsEqualUint8Data(
1337 thread, *handleEcmaStrU16CompNo3, &arrayU8No1[0], lengthEcmaStrU8No1, true));
1338 }
1339
1340 /*
1341 * @tc.name: StringsAreEqualUtf8_003
1342 * @tc.desc: Check whether the bool returned through calling StringIsEqualUint8Data function with an EcmaString made by
1343 * CreateFromUtf16( , , , false) and an Array(uint8_t) is within expectations.
1344 * @tc.type: FUNC
1345 * @tc.require:
1346 */
HWTEST_F_L0(EcmaStringAccessorTest,StringsAreEqualUtf8_003)1347 HWTEST_F_L0(EcmaStringAccessorTest, StringsAreEqualUtf8_003)
1348 {
1349 // StringIsEqualUint8Data(). EcmaString made by CreateFromUtf16( , , , false), Array:U8.
1350 EcmaTestCommon::StringIsEqualCommonCase(thread, instance, EcmaStringAccessor::StringIsEqualUint8Data);
1351 }
1352
1353 /*
1354 * @tc.name: StringsAreEqualUtf16_001
1355 * @tc.desc: Check whether the bool returned through calling StringsAreEqualUtf16 function with an EcmaString made by
1356 * CreateFromUtf8() and an Array(uint16_t) is within expectations.
1357 * @tc.type: FUNC
1358 * @tc.require:
1359 */
HWTEST_F_L0(EcmaStringAccessorTest,StringsAreEqualUtf16_001)1360 HWTEST_F_L0(EcmaStringAccessorTest, StringsAreEqualUtf16_001)
1361 {
1362 // StringsAreEqualUtf16(). EcmaString made by CreateFromUtf8, Array:U16(1-127).
1363 uint8_t arrayU8No1[4] = {45, 92, 78};
1364 uint8_t arrayU8No2[5] = {45, 92, 78, 24};
1365 uint8_t arrayU8No3[3] = {45, 92};
1366 uint16_t arrayU16NotCompNo1[] = {45, 92, 78};
1367 uint32_t lengthEcmaStrU8No1 = sizeof(arrayU8No1) - 1;
1368 uint32_t lengthEcmaStrU8No2 = sizeof(arrayU8No2) - 1;
1369 uint32_t lengthEcmaStrU8No3 = sizeof(arrayU8No3) - 1;
1370 uint32_t lengthEcmaStrU16NotCompNo1 = sizeof(arrayU16NotCompNo1) / sizeof(arrayU16NotCompNo1[0]);
1371 JSHandle<EcmaString> handleEcmaStrU8No1(thread,
1372 EcmaStringAccessor::CreateFromUtf8(instance, &arrayU8No1[0], lengthEcmaStrU8No1, true));
1373 JSHandle<EcmaString> handleEcmaStrU8No2(thread,
1374 EcmaStringAccessor::CreateFromUtf8(instance, &arrayU8No2[0], lengthEcmaStrU8No2, true));
1375 JSHandle<EcmaString> handleEcmaStrU8No3(thread,
1376 EcmaStringAccessor::CreateFromUtf8(instance, &arrayU8No3[0], lengthEcmaStrU8No3, true));
1377 EXPECT_TRUE(EcmaStringAccessor::StringsAreEqualUtf16(
1378 thread, *handleEcmaStrU8No1, &arrayU16NotCompNo1[0], lengthEcmaStrU16NotCompNo1));
1379 EXPECT_FALSE(EcmaStringAccessor::StringsAreEqualUtf16(
1380 thread, *handleEcmaStrU8No2, &arrayU16NotCompNo1[0], lengthEcmaStrU16NotCompNo1));
1381 EXPECT_FALSE(EcmaStringAccessor::StringsAreEqualUtf16(
1382 thread, *handleEcmaStrU8No3, &arrayU16NotCompNo1[0], lengthEcmaStrU16NotCompNo1));
1383 }
1384
1385 /*
1386 * @tc.name: StringsAreEqualUtf16_002
1387 * @tc.desc: Check whether the bool returned through calling StringsAreEqualUtf16 function with an EcmaString made by
1388 * CreateFromUtf16( , , , true) and an Array(uint16_t) is within expectations.
1389 * @tc.type: FUNC
1390 * @tc.require:
1391 */
HWTEST_F_L0(EcmaStringAccessorTest,StringsAreEqualUtf16_002)1392 HWTEST_F_L0(EcmaStringAccessorTest, StringsAreEqualUtf16_002)
1393 {
1394 // StringsAreEqualUtf16(). EcmaString made by CreateFromUtf16( , , , true), Array:U16(1-127).
1395 uint16_t arrayU16CompNo1[] = {45, 92, 78};
1396 uint32_t lengthEcmaStrU16CompNo1 = sizeof(arrayU16CompNo1) / sizeof(arrayU16CompNo1[0]);
1397 JSHandle<EcmaString> handleEcmaStrU16CompNo1(thread,
1398 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16CompNo1[0], lengthEcmaStrU16CompNo1, true));
1399
1400 uint16_t arrayU16CompNo2[] = {45, 92, 78, 24};
1401 uint32_t lengthEcmaStrU16CompNo2 = sizeof(arrayU16CompNo2) / sizeof(arrayU16CompNo2[0]);
1402 JSHandle<EcmaString> handleEcmaStrU16CompNo2(thread,
1403 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16CompNo2[0], lengthEcmaStrU16CompNo2, true));
1404
1405 uint16_t arrayU16CompNo3[] = {45, 92};
1406 uint32_t lengthEcmaStrU16CompNo3 = sizeof(arrayU16CompNo3) / sizeof(arrayU16CompNo3[0]);
1407 JSHandle<EcmaString> handleEcmaStrU16CompNo3(thread,
1408 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16CompNo3[0], lengthEcmaStrU16CompNo3, true));
1409
1410 uint16_t arrayU16CompNo4[] = {25645, 25692, 25678}; // 25645 % 256 == 45...
1411 uint32_t lengthEcmaStrU16CompNo4 = sizeof(arrayU16CompNo4) / sizeof(arrayU16CompNo4[0]);
1412 JSHandle<EcmaString> handleEcmaStrU16CompNo4(thread,
1413 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16CompNo4[0], lengthEcmaStrU16CompNo4, true));
1414
1415 EXPECT_TRUE(EcmaStringAccessor::StringsAreEqualUtf16(
1416 thread, *handleEcmaStrU16CompNo1, &arrayU16CompNo1[0], lengthEcmaStrU16CompNo1));
1417 EXPECT_FALSE(EcmaStringAccessor::StringsAreEqualUtf16(
1418 thread, *handleEcmaStrU16CompNo2, &arrayU16CompNo1[0], lengthEcmaStrU16CompNo1));
1419 EXPECT_FALSE(EcmaStringAccessor::StringsAreEqualUtf16(
1420 thread, *handleEcmaStrU16CompNo3, &arrayU16CompNo1[0], lengthEcmaStrU16CompNo1));
1421 EXPECT_TRUE(EcmaStringAccessor::StringsAreEqualUtf16(
1422 thread, *handleEcmaStrU16CompNo4, &arrayU16CompNo1[0], lengthEcmaStrU16CompNo1));
1423 }
1424
1425 /*
1426 * @tc.name: StringsAreEqualUtf16_003
1427 * @tc.desc: Check whether the bool returned through calling StringsAreEqualUtf16 function with an EcmaString made by
1428 * CreateFromUtf16( , , , false) and an Array(uint16_t) is within expectations.
1429 * @tc.type: FUNC
1430 * @tc.require:
1431 */
HWTEST_F_L0(EcmaStringAccessorTest,StringsAreEqualUtf16_003)1432 HWTEST_F_L0(EcmaStringAccessorTest, StringsAreEqualUtf16_003)
1433 {
1434 // StringsAreEqualUtf16(). EcmaString made by CreateFromUtf16( , , , false), Array:U16(0-65535).
1435 uint16_t arrayU16NotCompNo1[] = {25645, 25692, 25678};
1436 uint16_t arrayU16NotCompNo2[] = {25645, 25692, 78}; // 25645 % 256 == 45...
1437 uint16_t arrayU16NotCompNo3[] = {25645, 25692, 25678, 65535};
1438 uint16_t arrayU16NotCompNo4[] = {25645, 25692};
1439 uint32_t lengthEcmaStrU16NotCompNo1 = sizeof(arrayU16NotCompNo1) / sizeof(arrayU16NotCompNo1[0]);
1440 uint32_t lengthEcmaStrU16NotCompNo2 = sizeof(arrayU16NotCompNo2) / sizeof(arrayU16NotCompNo2[0]);
1441 uint32_t lengthEcmaStrU16NotCompNo3 = sizeof(arrayU16NotCompNo3) / sizeof(arrayU16NotCompNo3[0]);
1442 uint32_t lengthEcmaStrU16NotCompNo4 = sizeof(arrayU16NotCompNo4) / sizeof(arrayU16NotCompNo4[0]);
1443 JSHandle<EcmaString> handleEcmaStrU16NotCompNo1(thread,
1444 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16NotCompNo1[0], lengthEcmaStrU16NotCompNo1, false));
1445 JSHandle<EcmaString> handleEcmaStrU16NotCompNo2(thread,
1446 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16NotCompNo2[0], lengthEcmaStrU16NotCompNo2, false));
1447 JSHandle<EcmaString> handleEcmaStrU16NotCompNo3(thread,
1448 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16NotCompNo3[0], lengthEcmaStrU16NotCompNo3, false));
1449 JSHandle<EcmaString> handleEcmaStrU16NotCompNo4(thread,
1450 EcmaStringAccessor::CreateFromUtf16(instance, &arrayU16NotCompNo4[0], lengthEcmaStrU16NotCompNo4, false));
1451 EXPECT_TRUE(EcmaStringAccessor::StringsAreEqualUtf16(thread, *handleEcmaStrU16NotCompNo1, &arrayU16NotCompNo1[0],
1452 lengthEcmaStrU16NotCompNo1));
1453 EXPECT_FALSE(EcmaStringAccessor::StringsAreEqualUtf16(thread, *handleEcmaStrU16NotCompNo1, &arrayU16NotCompNo2[0],
1454 lengthEcmaStrU16NotCompNo2));
1455 EXPECT_FALSE(EcmaStringAccessor::StringsAreEqualUtf16(thread, *handleEcmaStrU16NotCompNo2, &arrayU16NotCompNo1[0],
1456 lengthEcmaStrU16NotCompNo1));
1457 EXPECT_FALSE(EcmaStringAccessor::StringsAreEqualUtf16(thread, *handleEcmaStrU16NotCompNo3, &arrayU16NotCompNo1[0],
1458 lengthEcmaStrU16NotCompNo1));
1459 EXPECT_FALSE(EcmaStringAccessor::StringsAreEqualUtf16(thread, *handleEcmaStrU16NotCompNo4, &arrayU16NotCompNo1[0],
1460 lengthEcmaStrU16NotCompNo1));
1461 }
1462
1463 /*
1464 * @tc.name: EqualToSplicedString_001
1465 * @tc.desc: Tests whether the source string is equal to the concatenated string.
1466 * is within expectations.
1467 * @tc.type: FUNC
1468 * @tc.require:
1469 */
HWTEST_F_L0(EcmaStringAccessorTest,EqualToSplicedString_001)1470 HWTEST_F_L0(EcmaStringAccessorTest, EqualToSplicedString_001)
1471 {
1472 ObjectFactory* factory = instance->GetFactory();
1473 {
1474 JSHandle<EcmaString> sourceString = factory->NewFromUtf8("Start开始");
1475 JSHandle<EcmaString> firstString = factory->NewFromASCII("Start");
1476 JSHandle<EcmaString> secondString = factory->NewFromUtf8("开始");
1477 EXPECT_TRUE(EcmaStringAccessor(sourceString).IsUtf16());
1478 EXPECT_TRUE(EcmaStringAccessor(firstString).IsUtf8());
1479 EXPECT_TRUE(EcmaStringAccessor(secondString).IsUtf16());
1480 bool result = EcmaStringAccessor(sourceString).EqualToSplicedString(thread, *firstString, *secondString);
1481 EXPECT_TRUE(result);
1482 }
1483
1484 {
1485 JSHandle<EcmaString> sourceString = factory->NewFromUtf8("Start开始");
1486 JSHandle<EcmaString> firstString = factory->NewFromASCII("Start");
1487 JSHandle<EcmaString> secondString = factory->NewFromASCII("start");
1488 EXPECT_TRUE(EcmaStringAccessor(sourceString).IsUtf16());
1489 EXPECT_TRUE(EcmaStringAccessor(firstString).IsUtf8());
1490 EXPECT_TRUE(EcmaStringAccessor(secondString).IsUtf8());
1491 bool result = EcmaStringAccessor(sourceString).EqualToSplicedString(thread, *firstString, *secondString);
1492 EXPECT_TRUE(!result);
1493 }
1494
1495 {
1496 JSHandle<EcmaString> sourceString = factory->NewFromUtf8("Start开始");
1497 JSHandle<EcmaString> firstString = factory->NewFromUtf8("Start开");
1498 JSHandle<EcmaString> secondString = factory->NewFromUtf8("始");
1499 EXPECT_TRUE(EcmaStringAccessor(sourceString).IsUtf16());
1500 EXPECT_TRUE(EcmaStringAccessor(firstString).IsUtf16());
1501 EXPECT_TRUE(EcmaStringAccessor(secondString).IsUtf16());
1502 bool result = EcmaStringAccessor(sourceString).EqualToSplicedString(thread, *firstString, *secondString);
1503 EXPECT_TRUE(result);
1504 }
1505
1506 {
1507 JSHandle<EcmaString> sourceString = factory->NewFromUtf8("Startstart");
1508 JSHandle<EcmaString> firstString = factory->NewFromASCII("Start");
1509 JSHandle<EcmaString> secondString = factory->NewFromASCII("start");
1510 EXPECT_TRUE(EcmaStringAccessor(sourceString).IsUtf8());
1511 EXPECT_TRUE(EcmaStringAccessor(firstString).IsUtf8());
1512 EXPECT_TRUE(EcmaStringAccessor(secondString).IsUtf8());
1513 bool result = EcmaStringAccessor(sourceString).EqualToSplicedString(thread, *firstString, *secondString);
1514 EXPECT_TRUE(result);
1515 }
1516
1517 {
1518 JSHandle<EcmaString> sourceString = factory->NewFromUtf8("Startstart");
1519 JSHandle<EcmaString> firstString = factory->NewFromASCII("Start");
1520 JSHandle<EcmaString> secondString = factory->NewFromUtf8("开始");
1521 EXPECT_TRUE(EcmaStringAccessor(sourceString).IsUtf8());
1522 EXPECT_TRUE(EcmaStringAccessor(firstString).IsUtf8());
1523 EXPECT_TRUE(EcmaStringAccessor(secondString).IsUtf16());
1524 bool result = EcmaStringAccessor(sourceString).EqualToSplicedString(thread, *firstString, *secondString);
1525 EXPECT_TRUE(!result);
1526 }
1527
1528 {
1529 JSHandle<EcmaString> sourceString = factory->NewFromUtf8("Startstat");
1530 JSHandle<EcmaString> firstString = factory->NewFromASCII("Start");
1531 JSHandle<EcmaString> secondString = factory->NewFromASCII("start");
1532 EXPECT_TRUE(EcmaStringAccessor(sourceString).IsUtf8());
1533 EXPECT_TRUE(EcmaStringAccessor(firstString).IsUtf8());
1534 EXPECT_TRUE(EcmaStringAccessor(secondString).IsUtf8());
1535 bool result = EcmaStringAccessor(sourceString).EqualToSplicedString(thread, *firstString, *secondString);
1536 EXPECT_TRUE(!result);
1537 }
1538
1539 {
1540 JSHandle<EcmaString> sourceString = factory->NewFromUtf8("Start开始");
1541 JSHandle<EcmaString> firstString = factory->NewFromUtf8("Stat开");
1542 JSHandle<EcmaString> secondString = factory->NewFromUtf8("始");
1543 EXPECT_TRUE(EcmaStringAccessor(sourceString).IsUtf16());
1544 EXPECT_TRUE(EcmaStringAccessor(firstString).IsUtf16());
1545 EXPECT_TRUE(EcmaStringAccessor(secondString).IsUtf16());
1546 bool result = EcmaStringAccessor(sourceString).EqualToSplicedString(thread, *firstString, *secondString);
1547 EXPECT_TRUE(!result);
1548 }
1549
1550 {
1551 JSHandle<EcmaString> sourceString = factory->NewFromUtf8("Start开始");
1552 JSHandle<EcmaString> firstString = factory->NewFromASCII("Stat");
1553 JSHandle<EcmaString> secondString = factory->NewFromUtf8("开始");
1554 EXPECT_TRUE(EcmaStringAccessor(sourceString).IsUtf16());
1555 EXPECT_TRUE(EcmaStringAccessor(firstString).IsUtf8());
1556 EXPECT_TRUE(EcmaStringAccessor(secondString).IsUtf16());
1557 bool result = EcmaStringAccessor(sourceString).EqualToSplicedString(thread, *firstString, *secondString);
1558 EXPECT_TRUE(!result);
1559 }
1560 }
1561
1562 /*
1563 * @tc.name: EqualToSplicedString_002
1564 * @tc.desc: Tests whether the source string is equal to the concatenated string.
1565 * is within expectations.
1566 * @tc.type: FUNC
1567 * @tc.require:
1568 */
HWTEST_F_L0(EcmaStringAccessorTest,EqualToSplicedString_002)1569 HWTEST_F_L0(EcmaStringAccessorTest, EqualToSplicedString_002)
1570 {
1571 ObjectFactory* factory = instance->GetFactory();
1572 {
1573 JSHandle<EcmaString> allString = factory->NewFromUtf8("123A");
1574 JSHandle<EcmaString> firstString = factory->NewFromUtf8("123");
1575 JSHandle<EcmaString> secondString = factory->NewFromUtf8("A");
1576 JSHandle<EcmaString> ans = factory->ConcatFromString(firstString, secondString);
1577 bool result = EcmaStringAccessor::StringsAreEqual(thread, *allString, *ans);
1578 EXPECT_TRUE(result);
1579 }
1580
1581 {
1582 JSHandle<EcmaString> allString = factory->NewFromUtf8("A123");
1583 JSHandle<EcmaString> firstString = factory->NewFromUtf8("A");
1584 JSHandle<EcmaString> secondString = factory->NewFromUtf8("123");
1585 JSHandle<EcmaString> ans = factory->ConcatFromString(firstString, secondString);
1586 bool result = EcmaStringAccessor::StringsAreEqual(thread, *allString, *ans);
1587 EXPECT_TRUE(result);
1588 }
1589
1590 {
1591 JSHandle<EcmaString> allString = factory->NewFromUtf8("123456789A");
1592 JSHandle<EcmaString> firstString = factory->NewFromUtf8("123456789");
1593 JSHandle<EcmaString> secondString = factory->NewFromUtf8("A");
1594 JSHandle<EcmaString> ans = factory->ConcatFromString(firstString, secondString);
1595 bool result = EcmaStringAccessor::StringsAreEqual(thread, *allString, *ans);
1596 EXPECT_TRUE(result);
1597 }
1598
1599 {
1600 JSHandle<EcmaString> allString = factory->NewFromUtf8("123456789011A");
1601 JSHandle<EcmaString> firstString = factory->NewFromUtf8("123456789011");
1602 JSHandle<EcmaString> secondString = factory->NewFromUtf8("A");
1603 JSHandle<EcmaString> ans = factory->ConcatFromString(firstString, secondString);
1604 bool result = EcmaStringAccessor::StringsAreEqual(thread, *allString, *ans);
1605 EXPECT_TRUE(result);
1606 }
1607 }
1608
1609 /*
1610 * @tc.name: EqualToSplicedString_003
1611 * @tc.desc: Tests whether the source string is equal to the concatenated string.
1612 * is within expectations.
1613 * @tc.type: FUNC
1614 * @tc.require:
1615 */
HWTEST_F_L0(EcmaStringAccessorTest,EqualToSplicedString_003)1616 HWTEST_F_L0(EcmaStringAccessorTest, EqualToSplicedString_003)
1617 {
1618 ObjectFactory* factory = instance->GetFactory();
1619 {
1620 JSHandle<EcmaString> allString = factory->NewFromUtf8("12345678901");
1621 JSHandle<EcmaString> firstString = factory->NewFromUtf8("123456789");
1622 JSHandle<EcmaString> secondString = factory->NewFromUtf8("01");
1623 JSHandle<EcmaString> ans = factory->ConcatFromString(firstString, secondString);
1624 bool result = EcmaStringAccessor::StringsAreEqual(thread, *allString, *ans);
1625 EXPECT_TRUE(result);
1626 }
1627
1628 {
1629 JSHandle<EcmaString> allString = factory->NewFromUtf8("12345678901");
1630 JSHandle<EcmaString> firstString = factory->NewFromUtf8("1234567890");
1631 JSHandle<EcmaString> secondString = factory->NewFromUtf8("1");
1632 JSHandle<EcmaString> ans = factory->ConcatFromString(firstString, secondString);
1633 bool result = EcmaStringAccessor::StringsAreEqual(thread, *allString, *ans);
1634 EXPECT_TRUE(result);
1635 }
1636
1637 {
1638 JSHandle<EcmaString> allString = factory->NewFromUtf8("12345678901");
1639 JSHandle<EcmaString> firstString = factory->NewFromUtf8("123456789");
1640 JSHandle<EcmaString> secondString = factory->NewFromUtf8("01");
1641 JSHandle<EcmaString> ans = factory->ConcatFromString(firstString, secondString);
1642 bool result = EcmaStringAccessor::StringsAreEqual(thread, *allString, *ans);
1643 EXPECT_TRUE(result);
1644 }
1645
1646 {
1647 JSHandle<EcmaString> allString = factory->NewFromUtf8("12345678901");
1648 JSHandle<EcmaString> firstString = factory->NewFromUtf8("12345678");
1649 JSHandle<EcmaString> secondString = factory->NewFromUtf8("901");
1650 JSHandle<EcmaString> ans = factory->ConcatFromString(firstString, secondString);
1651 bool result = EcmaStringAccessor::StringsAreEqual(thread, *allString, *ans);
1652 EXPECT_TRUE(result);
1653 }
1654
1655 {
1656 JSHandle<EcmaString> allString = factory->NewFromUtf8("12345678901");
1657 JSHandle<EcmaString> firstString = factory->NewFromUtf8("1234567");
1658 JSHandle<EcmaString> secondString = factory->NewFromUtf8("8901");
1659 JSHandle<EcmaString> ans = factory->ConcatFromString(firstString, secondString);
1660 bool result = EcmaStringAccessor::StringsAreEqual(thread, *allString, *ans);
1661 EXPECT_TRUE(result);
1662 }
1663
1664 {
1665 JSHandle<EcmaString> allString = factory->NewFromUtf8("123456789");
1666 JSHandle<EcmaString> firstString = factory->NewFromUtf8("12345");
1667 JSHandle<EcmaString> secondString = factory->NewFromUtf8("6789");
1668 JSHandle<EcmaString> ans = factory->ConcatFromString(firstString, secondString);
1669 bool result = EcmaStringAccessor::StringsAreEqual(thread, *allString, *ans);
1670 EXPECT_TRUE(result);
1671 }
1672
1673 {
1674 JSHandle<EcmaString> allString = factory->NewFromUtf8("123456789");
1675 JSHandle<EcmaString> firstString = factory->NewFromUtf8("1234");
1676 JSHandle<EcmaString> secondString = factory->NewFromUtf8("56789");
1677 JSHandle<EcmaString> ans = factory->ConcatFromString(firstString, secondString);
1678 bool result = EcmaStringAccessor::StringsAreEqual(thread, *allString, *ans);
1679 EXPECT_TRUE(result);
1680 }
1681 }
1682
1683 /*
1684 * @tc.name: EqualToSplicedString_004
1685 * @tc.desc: Tests whether the source string is equal to the concatenated string.
1686 * is within expectations.
1687 * @tc.type: FUNC
1688 * @tc.require:
1689 */
1690
HWTEST_F_L0(EcmaStringAccessorTest,EqualToSplicedString_004)1691 HWTEST_F_L0(EcmaStringAccessorTest, EqualToSplicedString_004)
1692 {
1693 ObjectFactory* factory = instance->GetFactory();
1694 {
1695 JSHandle<EcmaString> allString = factory->NewFromUtf8("你好在干嘛");
1696 JSHandle<EcmaString> firstString = factory->NewFromUtf8("你好");
1697 JSHandle<EcmaString> secondString = factory->NewFromUtf8("在干嘛");
1698 JSHandle<EcmaString> ans = factory->ConcatFromString(firstString, secondString);
1699 bool result = EcmaStringAccessor::StringsAreEqual(thread, *allString, *ans);
1700 EXPECT_TRUE(result);
1701 }
1702
1703 {
1704 JSHandle<EcmaString> allString = factory->NewFromUtf8("你吃饭了么");
1705 JSHandle<EcmaString> firstString = factory->NewFromUtf8("你吃");
1706 JSHandle<EcmaString> secondString = factory->NewFromUtf8("饭了么");
1707 JSHandle<EcmaString> ans = factory->ConcatFromString(firstString, secondString);
1708 bool result = EcmaStringAccessor::StringsAreEqual(thread, *allString, *ans);
1709 EXPECT_TRUE(result);
1710 }
1711
1712 {
1713 JSHandle<EcmaString> allString = factory->NewFromUtf8("你你你你你你你你你我我我我我我我我我");
1714 JSHandle<EcmaString> firstString = factory->NewFromUtf8("你你你你你你你你你");
1715 JSHandle<EcmaString> secondString = factory->NewFromUtf8("我我我我我我我我我");
1716 JSHandle<EcmaString> ans = factory->ConcatFromString(firstString, secondString);
1717 bool result = EcmaStringAccessor::StringsAreEqual(thread, *allString, *ans);
1718 EXPECT_TRUE(result);
1719 }
1720 }
1721
1722 /*
1723 * @tc.name: EqualToSplicedString_005
1724 * @tc.desc: Tests whether the source string is equal to the concatenated string.
1725 * is within expectations.
1726 * @tc.type: FUNC
1727 * @tc.require:
1728 */
HWTEST_F_L0(EcmaStringAccessorTest,EqualToSplicedString_005)1729 HWTEST_F_L0(EcmaStringAccessorTest, EqualToSplicedString_005)
1730 {
1731 ObjectFactory* factory = instance->GetFactory();
1732 {
1733 JSHandle<EcmaString> allString = factory->NewFromUtf8("你好233");
1734 JSHandle<EcmaString> firstString = factory->NewFromUtf8("你");
1735 JSHandle<EcmaString> secondString = factory->NewFromUtf8("好233");
1736 JSHandle<EcmaString> ans = factory->ConcatFromString(firstString, secondString);
1737 bool result = EcmaStringAccessor::StringsAreEqual(thread, *allString, *ans);
1738 EXPECT_TRUE(result);
1739 }
1740
1741 {
1742 JSHandle<EcmaString> allString = factory->NewFromUtf8("你好abc");
1743 JSHandle<EcmaString> firstString = factory->NewFromUtf8("你好");
1744 JSHandle<EcmaString> secondString = factory->NewFromUtf8("abc");
1745 JSHandle<EcmaString> ans = factory->ConcatFromString(firstString, secondString);
1746 bool result = EcmaStringAccessor::StringsAreEqual(thread, *allString, *ans);
1747 EXPECT_TRUE(result);
1748 }
1749
1750 {
1751 JSHandle<EcmaString> allString = factory->NewFromUtf8("233你好");
1752 JSHandle<EcmaString> firstString = factory->NewFromUtf8("233");
1753 JSHandle<EcmaString> secondString = factory->NewFromUtf8("你好");
1754 JSHandle<EcmaString> ans = factory->ConcatFromString(firstString, secondString);
1755 bool result = EcmaStringAccessor::StringsAreEqual(thread, *allString, *ans);
1756 EXPECT_TRUE(result);
1757 }
1758
1759 {
1760 JSHandle<EcmaString> allString = factory->NewFromUtf8("abc你好");
1761 JSHandle<EcmaString> firstString = factory->NewFromUtf8("abc");
1762 JSHandle<EcmaString> secondString = factory->NewFromUtf8("你好");
1763 JSHandle<EcmaString> ans = factory->ConcatFromString(firstString, secondString);
1764 bool result = EcmaStringAccessor::StringsAreEqual(thread, *allString, *ans);
1765 EXPECT_TRUE(result);
1766 }
1767
1768 {
1769 JSHandle<EcmaString> allString = factory->NewFromUtf8("你吃饭了么abc");
1770 JSHandle<EcmaString> firstString = factory->NewFromUtf8("你吃");
1771 JSHandle<EcmaString> secondString = factory->NewFromUtf8("饭了么abc");
1772 JSHandle<EcmaString> ans = factory->ConcatFromString(firstString, secondString);
1773 bool result = EcmaStringAccessor::StringsAreEqual(thread, *allString, *ans);
1774 EXPECT_TRUE(result);
1775 }
1776
1777 {
1778 JSHandle<EcmaString> allString = factory->NewFromUtf8("你吃饭了么abc");
1779 JSHandle<EcmaString> firstString = factory->NewFromUtf8("你吃饭了么");
1780 JSHandle<EcmaString> secondString = factory->NewFromUtf8("abc");
1781 JSHandle<EcmaString> ans = factory->ConcatFromString(firstString, secondString);
1782 bool result = EcmaStringAccessor::StringsAreEqual(thread, *allString, *ans);
1783 EXPECT_TRUE(result);
1784 }
1785 }
1786
1787 /*
1788 * @tc.name: EqualToSplicedString_006
1789 * @tc.desc: Tests whether the source string is equal to the concatenated string.
1790 * is within expectations.
1791 * @tc.type: FUNC
1792 * @tc.require:
1793 */
HWTEST_F_L0(EcmaStringAccessorTest,EqualToSplicedString_006)1794 HWTEST_F_L0(EcmaStringAccessorTest, EqualToSplicedString_006)
1795 {
1796 ObjectFactory* factory = instance->GetFactory();
1797 {
1798 JSHandle<EcmaString> allString = factory->NewFromUtf8("你好");
1799 JSHandle<EcmaString> firstString = factory->NewFromUtf8("你好");
1800 JSHandle<EcmaString> secondString = factory->NewFromUtf8("");
1801 JSHandle<EcmaString> ans = factory->ConcatFromString(firstString, secondString);
1802 bool result = EcmaStringAccessor::StringsAreEqual(thread, *allString, *ans);
1803 EXPECT_TRUE(result);
1804 }
1805
1806 {
1807 JSHandle<EcmaString> allString = factory->NewFromUtf8("你好");
1808 JSHandle<EcmaString> firstString = factory->NewFromUtf8("");
1809 JSHandle<EcmaString> secondString = factory->NewFromUtf8("你好");
1810 JSHandle<EcmaString> ans = factory->ConcatFromString(firstString, secondString);
1811 bool result = EcmaStringAccessor::StringsAreEqual(thread, *allString, *ans);
1812 EXPECT_TRUE(result);
1813 }
1814
1815 {
1816 JSHandle<EcmaString> allString = factory->NewFromUtf8("233");
1817 JSHandle<EcmaString> firstString = factory->NewFromUtf8("233");
1818 JSHandle<EcmaString> secondString = factory->NewFromUtf8("");
1819 JSHandle<EcmaString> ans = factory->ConcatFromString(firstString, secondString);
1820 bool result = EcmaStringAccessor::StringsAreEqual(thread, *allString, *ans);
1821 EXPECT_TRUE(result);
1822 }
1823
1824 {
1825 JSHandle<EcmaString> allString = factory->NewFromUtf8("233");
1826 JSHandle<EcmaString> firstString = factory->NewFromUtf8("");
1827 JSHandle<EcmaString> secondString = factory->NewFromUtf8("233");
1828 JSHandle<EcmaString> ans = factory->ConcatFromString(firstString, secondString);
1829 bool result = EcmaStringAccessor::StringsAreEqual(thread, *allString, *ans);
1830 EXPECT_TRUE(result);
1831 }
1832 }
1833
1834 /*
1835 * @tc.name: CanBeCompressed
1836 * @tc.desc: Check whether the bool returned through calling CanBeCompressed function is within expectations.
1837 * @tc.type: FUNC
1838 * @tc.require:
1839 */
HWTEST_F_L0(EcmaStringAccessorTest,CanBeCompressed)1840 HWTEST_F_L0(EcmaStringAccessorTest, CanBeCompressed)
1841 {
1842 uint8_t arrayU8[] = {12, 34, 77, 127, 99, 1};
1843 uint16_t arrayU16Comp[] = {1, 4, 37, 91, 127, 1};
1844 uint16_t arrayU16NotComp[] = {72, 43, 337, 961, 1317, 65535};
1845 EXPECT_TRUE(EcmaStringAccessor::CanBeCompressed(arrayU8, sizeof(arrayU8) / sizeof(arrayU8[0])));
1846 EXPECT_TRUE(EcmaStringAccessor::CanBeCompressed(arrayU16Comp, sizeof(arrayU16Comp) / sizeof(arrayU16Comp[0])));
1847 EXPECT_FALSE(EcmaStringAccessor::CanBeCompressed(arrayU16NotComp, sizeof(arrayU16Comp) / sizeof(arrayU16Comp[0])));
1848 }
1849
1850 /*
1851 * @tc.name: TryToLower
1852 * @tc.desc: Check whether the EcmaString created through calling TryToLower function is within expectations.
1853 * is within expectations.
1854 * @tc.type: FUNC
1855 * @tc.require:
1856 */
HWTEST_F_L0(EcmaStringAccessorTest,TryToLower)1857 HWTEST_F_L0(EcmaStringAccessorTest, TryToLower)
1858 {
1859 ObjectFactory* factory = instance->GetFactory();
1860 JSHandle<EcmaString> lowerStr = factory->NewFromASCII("aaabbbcccddd");
1861 JSHandle<EcmaString> upperStr = factory->NewFromASCII("AAABBBCCCDDD");
1862 JSHandle<EcmaString> testStr1 = factory->NewFromASCII("aaaBBBcccDDD");
1863 JSHandle<EcmaString> testStr2 = factory->NewFromASCII("AAAbbbcccDDD");
1864 std::vector<JSHandle<EcmaString>> caseStrings{upperStr, testStr1, testStr2};
1865 EcmaTestCommon::TryLowerCommonCase(thread, instance, lowerStr, caseStrings);
1866 }
1867 } // namespace panda::test