1/* 2 * Copyright (c) 2023 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/* 17 * @tc.name:storeicbyname 18 * @tc.desc:test storeicbyname 19 * @tc.type: FUNC 20 * @tc.require: issueI7UTOA 21 */ 22 23var r = /./; 24var coercibleValue = { 25 length: 1, 26 groups: {length : 1.1}, 27}; 28r.exec = function() { 29 return coercibleValue; 30}; 31let a = r[Symbol.replace]('', '[$<length>]'); 32assert_equal(a,"[1.1]") 33 34let lineString1 = "这是一段lineString,A1这是替换的字符串A2" 35let treeString1 = "这是一段treeString,".concat("B1这是替换的字符串B2") 36let slicedString = "这是一段slicedString,C1这是要替换的字符串C2,xxxxxxxx".slice(0, 30); 37 38var re1 = /[ABC]/; 39var re2 = /[ABC]/g; 40 41var res1 = lineString1.replace(re1, "X"); 42var res2 = lineString1.replace(re2, "X"); 43var res3 = treeString1.replace(re1, "X"); 44var res4 = treeString1.replace(re2, "X"); 45var res5 = slicedString.replace(re1, "X"); 46var res6 = slicedString.replace(re2, "X"); 47 48assert_equal(res1,"这是一段lineString,X1这是替换的字符串A2") 49assert_equal(res2,"这是一段lineString,X1这是替换的字符串X2") 50assert_equal(res3,"这是一段treeString,X1这是替换的字符串B2") 51assert_equal(res4,"这是一段treeString,X1这是替换的字符串X2") 52assert_equal(res5,"这是一段slicedString,X1这是要替换的字符串C2") 53assert_equal(res6,"这是一段slicedString,X1这是要替换的字符串X2") 54 55let lineString2 = "aaaaAbbbbBccccCaaaabbbbcccc" 56 57function func1() { 58 return "xxxxxxx".concat("yyyyyyyyy") 59} 60var res = lineString2.replace(re2, func1); 61assert_equal(res,"aaaaxxxxxxxyyyyyyyyybbbbxxxxxxxyyyyyyyyyccccxxxxxxxyyyyyyyyyaaaabbbbcccc"); 62 63function func2() { 64 return "xxxxxxx".concat("xxxxxxx") 65} 66res = lineString2.replace(re2, func2); 67assert_equal(res,"aaaaxxxxxxxxxxxxxxbbbbxxxxxxxxxxxxxxccccxxxxxxxxxxxxxxaaaabbbbcccc"); 68 69function func3() { 70 return "xxxxxxxxxxxxxx".concat("yyyyyyyy") 71} 72res = lineString2.replace(re2, func3); 73assert_equal(res,"aaaaxxxxxxxxxxxxxxyyyyyyyybbbbxxxxxxxxxxxxxxyyyyyyyyccccxxxxxxxxxxxxxxyyyyyyyyaaaabbbbcccc"); 74 75function func4() { 76 return "xxxxxxxxxxxxxx".concat("y") 77} 78res = lineString2.replace(re2, func4); 79assert_equal(res,"aaaaxxxxxxxxxxxxxxybbbbxxxxxxxxxxxxxxyccccxxxxxxxxxxxxxxyaaaabbbbcccc"); 80 81function func5() { 82 return "哈哈哈哈哈哈哈".concat("嘻嘻嘻嘻嘻嘻嘻嘻嘻") 83} 84res = lineString2.replace(re2, func5); 85assert_equal(res,"aaaa哈哈哈哈哈哈哈嘻嘻嘻嘻嘻嘻嘻嘻嘻bbbb哈哈哈哈哈哈哈嘻嘻嘻嘻嘻嘻嘻嘻嘻cccc哈哈哈哈哈哈哈嘻嘻嘻嘻嘻嘻嘻嘻嘻aaaabbbbcccc") 86 87function func6() { 88 return "哈哈哈哈哈哈哈".concat("哈哈哈哈哈哈哈") 89} 90res = lineString2.replace(re2, func6); 91assert_equal(res,"aaaa哈哈哈哈哈哈哈哈哈哈哈哈哈哈bbbb哈哈哈哈哈哈哈哈哈哈哈哈哈哈cccc哈哈哈哈哈哈哈哈哈哈哈哈哈哈aaaabbbbcccc") 92 93function func7() { 94 return "哈哈哈哈哈哈哈哈哈".concat("嘻嘻嘻嘻嘻嘻嘻") 95} 96res = lineString2.replace(re2, func7); 97assert_equal(res,"aaaa哈哈哈哈哈哈哈哈哈嘻嘻嘻嘻嘻嘻嘻bbbb哈哈哈哈哈哈哈哈哈嘻嘻嘻嘻嘻嘻嘻cccc哈哈哈哈哈哈哈哈哈嘻嘻嘻嘻嘻嘻嘻aaaabbbbcccc") 98 99function func8() { 100 return "哈哈哈哈哈哈哈哈哈".concat("嘻") 101} 102res = lineString2.replace(re2, func8); 103assert_equal(res,"aaaa哈哈哈哈哈哈哈哈哈嘻bbbb哈哈哈哈哈哈哈哈哈嘻cccc哈哈哈哈哈哈哈哈哈嘻aaaabbbbcccc") 104 105const v3 = new BigUint64Array(128); 106for (let v4 = 0; v4 < 5; v4++) { 107 (v3 + 3).replace(/c(?<=a)8\P{sc=Greek}(a)/igus, 3); 108} 109 110let v5 = String.fromCharCode(0).replaceAll(/(?<a>.)/ug); 111assert_equal("undefinedss".replace(undefined,v5),"undefinedss"); 112assert_equal("undefinedss".replaceAll(undefined,v5),"undefinedss"); 113 114test_end();