14514f5e3Sopenharmony_ci/*
24514f5e3Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd.
34514f5e3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
44514f5e3Sopenharmony_ci * you may not use this file except in compliance with the License.
54514f5e3Sopenharmony_ci * You may obtain a copy of the License at
64514f5e3Sopenharmony_ci *
74514f5e3Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
84514f5e3Sopenharmony_ci *
94514f5e3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
104514f5e3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
114514f5e3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
124514f5e3Sopenharmony_ci * See the License for the specific language governing permissions and
134514f5e3Sopenharmony_ci * limitations under the License.
144514f5e3Sopenharmony_ci */
154514f5e3Sopenharmony_ci
164514f5e3Sopenharmony_ci/*
174514f5e3Sopenharmony_ci * @tc.name:stringSlice
184514f5e3Sopenharmony_ci * @tc.desc:test String.slice
194514f5e3Sopenharmony_ci * @tc.type: FUNC
204514f5e3Sopenharmony_ci * @tc.require: issueI5NO8G
214514f5e3Sopenharmony_ci */
224514f5e3Sopenharmony_ci
234514f5e3Sopenharmony_cifunction testLocaleCompare() {
244514f5e3Sopenharmony_ci    const testCases = [
254514f5e3Sopenharmony_ci        // LineOrConstant v.s. LineOrConstant
264514f5e3Sopenharmony_ci        { str1: 'apple', str2: 'apple' },
274514f5e3Sopenharmony_ci        { str1: 'apple', str2: 'banana' },
284514f5e3Sopenharmony_ci        { str1: 'banana', str2: 'apple' },
294514f5e3Sopenharmony_ci        { str1: 'app', str2: 'apple' },
304514f5e3Sopenharmony_ci        { str1: 'application', str2: 'apple' },
314514f5e3Sopenharmony_ci        { str1: 'Apple', str2: 'apple' },
324514f5e3Sopenharmony_ci        { str1: '123', str2: '1234' },
334514f5e3Sopenharmony_ci        { str1: '1234', str2: '123' },
344514f5e3Sopenharmony_ci        { str1: 'Zebra', str2: 'apple' },
354514f5e3Sopenharmony_ci        { str1: 'appleappleappleappleappleapple', str2: 'appleappleappleappleappleapple' },
364514f5e3Sopenharmony_ci        { str1: 'appleappleappleappleappleapple', str2: 'appleappleapplebppleappleapple' },
374514f5e3Sopenharmony_ci        { str1: 'appleappleappleAppleappleapple', str2: 'appleappleappleappleappleapple' },
384514f5e3Sopenharmony_ci        // SliceString v.s. SliceString
394514f5e3Sopenharmony_ci        { str1: 'appleappleapple'.substring(0, 5), str2: 'appleappleapple'.substring(5, 10) },
404514f5e3Sopenharmony_ci        { str1: 'appleappleapple'.substring(1, 6), str2: 'appleappleapple'.substring(6, 11) },
414514f5e3Sopenharmony_ci        { str1: 'appleappleapple'.substring(0, 5), str2: 'appleappleapple'.substring(10, 15) },
424514f5e3Sopenharmony_ci        { str1: 'appleappleapple'.substring(0, 5), str2: 'appleappleapple'.substring(5, 11) },
434514f5e3Sopenharmony_ci        // LineOrConstant v.s. TreeString
444514f5e3Sopenharmony_ci        { str1: 'HelloWorld', str2: 'Hello'.concat('World') },
454514f5e3Sopenharmony_ci        { str1: 'Ni'.concat('Hao', 'Ya'), str2: 'NiHaoYa' },
464514f5e3Sopenharmony_ci        { str1: 'HelloWorld', str2: 'Hello'.concat('World ') },
474514f5e3Sopenharmony_ci        { str1: 'Ni'.concat('Hao', 'Ya', '1'), str2: 'NiHaoYa' },
484514f5e3Sopenharmony_ci        // TreeString v.s. TreeString
494514f5e3Sopenharmony_ci        { str1: 'Hell'.concat('oWorld'), str2: 'Hello'.concat('World') },
504514f5e3Sopenharmony_ci        { str1: 'Ni'.concat('Hao', 'Ya'), str2: 'NiHao'.concat('Ya') },
514514f5e3Sopenharmony_ci        { str1: 'Hello'.concat('a'), str2: 'Hello'.concat('b') },
524514f5e3Sopenharmony_ci        { str1: 'Ni'.concat('Hao', '8'), str2: 'NiHao'.concat('7') },
534514f5e3Sopenharmony_ci        // TreeString v.s. SliceString
544514f5e3Sopenharmony_ci        { str1: 'appleappleapple'.substring(5, 10), str2: 'app'.concat('le') },
554514f5e3Sopenharmony_ci        { str1: 'hello'.concat('world'), str2: 'ohelloworld'.substring(1) },
564514f5e3Sopenharmony_ci        { str1: 'hello'.concat('world'), str2: 'ohelloworld'.substring(2) },
574514f5e3Sopenharmony_ci        { str1: 'appleappleapple'.substring(5, 11), str2: 'app'.concat('le') },
584514f5e3Sopenharmony_ci        // LineOrConstant v.s. SliceString
594514f5e3Sopenharmony_ci        { str1: 'apple', str2: 'appleappleapple'.substring(5, 10) },
604514f5e3Sopenharmony_ci        { str1: 'appleappleapple'.substring(0, 5), str2: 'apple' },
614514f5e3Sopenharmony_ci        // Complex string compare
624514f5e3Sopenharmony_ci        { str1: 'hello'.concat('world').substring(2, 4), str2: 'hello'.substring(2, 3).concat('l') },
634514f5e3Sopenharmony_ci    ];
644514f5e3Sopenharmony_ci    testCases.forEach(testCase => {
654514f5e3Sopenharmony_ci        // default locale is en-US
664514f5e3Sopenharmony_ci        const result = testCase.str1.localeCompare(testCase.str2);
674514f5e3Sopenharmony_ci        print(result);
684514f5e3Sopenharmony_ci    });
694514f5e3Sopenharmony_ci    const testCasesUni = [
704514f5e3Sopenharmony_ci        // UTF8 v.s. UTF16
714514f5e3Sopenharmony_ci        { str1: 'café', str2: 'cafe' },
724514f5e3Sopenharmony_ci        { str1: 'café', str2: 'café' },
734514f5e3Sopenharmony_ci        { str1: 'resumé', str2: 'resume' },
744514f5e3Sopenharmony_ci        { str1: 'resume', str2: 'resumé' },
754514f5e3Sopenharmony_ci        { str1: ' naïve', str2: 'naïve' },
764514f5e3Sopenharmony_ci        { str1: 'naïve', str2: ' naïve' },
774514f5e3Sopenharmony_ci        { str1: 'élan', str2: 'elan' },
784514f5e3Sopenharmony_ci        { str1: 'élan', str2: 'e' + String.fromCharCode(0x0301) + 'lan' }
794514f5e3Sopenharmony_ci    ];
804514f5e3Sopenharmony_ci    testCasesUni.forEach(testCase => {
814514f5e3Sopenharmony_ci        const result = testCase.str1.localeCompare(testCase.str2, 'en-US');
824514f5e3Sopenharmony_ci        print(result);
834514f5e3Sopenharmony_ci    });
844514f5e3Sopenharmony_ci  }
854514f5e3Sopenharmony_ci  testLocaleCompare();
864514f5e3Sopenharmony_ci
87