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