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/* 17 * @tc.name:ecmastringtable 18 * @tc.desc:test string 19 * @tc.type: FUNC 20 * @tc.require: issueI5NO8G 21 */ 22// Using to test the concat interface of EcmaStringTable about intern string and non-intern string 23{ 24 let REGISTRY = Symbol(); 25 function System() { 26 this[REGISTRY] = {}; 27 } 28 function getOrCreateLoad(loader, id) { 29 let load = loader[REGISTRY][id]; 30 print("id: " + id + " - load: "+ load); 31 load = loader[REGISTRY][id] = {}; 32 return load; 33 } 34 35 // non-intern + non-intern 36 let head1 = "no-".concat("schema:"); 37 let tail1 = "/src/".concat("xxx-js/instantiated-1af0bf5b.js"); 38 let key1 = head1 + tail1; 39 let key2 = head1 + tail1; 40 41 // intern + intern 42 let key3 = "no-schema:/src/xxx-js/instantiation.js"; 43 let key4 = "no-schema:" + "/src/xxx-js/instantiation.js"; 44 45 // non-intern + intern 46 let head2 = "no-".concat("schema:"); 47 let tail2 = "/src/xxx-js/cc.js"; 48 let key5 = "no-schema:" + "/src/xxx-js/cc.js"; 49 let key6 = head2 + tail2; 50 51 // intern + non-intern 52 let head3 = "no-schema:"; 53 let tail3 = "/src".concat("/instantiated-1af0bf5b.js"); 54 let key7 = "no-schema:" + "/src/instantiated-1af0bf5b.js"; 55 let key8 = head3 + tail3; 56 57 let keyArray = [key1, key3, key5, key7]; 58 let system = new System(); 59 for (let i = 0; i < keyArray.length; i++) { 60 getOrCreateLoad(system, keyArray[i]); 61 } 62 63 print("key1 === key2: ", key1 === key2); 64 print("key3 === key4: ", key3 === key4); 65 print("key5 === key6: ", key5 === key6); 66 print("key7 === key8: ", key7 === key8); 67 getOrCreateLoad(system, key2); 68 getOrCreateLoad(system, key4); 69 getOrCreateLoad(system, key6); 70 getOrCreateLoad(system, key8); 71} 72 73{ 74 let obj = { 75 "123一二三": "value 123一二三", 76 "1一2二3三": "value 1一2二3三", 77 "123456": "value 123456", 78 } 79 { 80 let key1 = "123一二三"; 81 let tmp1 = "123"; 82 let tmp2 = "一二三"; 83 let key2 = tmp1 + tmp2; 84 let res1 = obj[key1]; 85 let res2 = obj[key2] 86 print("res:", res1 === res2) 87 } 88 { 89 let key1 = "1一2二3三"; 90 let tmp1 = "1一2"; 91 let tmp2 = "二3三"; 92 let key2 = tmp1 + tmp2; 93 let res1 = obj[key1]; 94 let res2 = obj[key2] 95 print("res:", res1 === res2) 96 } 97 { 98 let key1 = "123一二三"; 99 let tmp1 = "123"; 100 let tmp2 = "123"; 101 let key2 = tmp1 + tmp2; 102 let res1 = obj[key1]; 103 let res2 = obj[key2] 104 print("res:", res1 !== res2) 105 } 106 { 107 let key1 = "123456"; 108 let tmp1 = "123"; 109 let tmp2 = "456"; 110 let key2 = tmp1 + tmp2; 111 let res1 = obj[key1]; 112 let res2 = obj[key2] 113 print("res:", res1 === res2) 114 } 115 { 116 let key1 = "123456"; 117 let tmp1 = "一二三"; 118 let tmp2 = "456"; 119 let key2 = tmp1 + tmp2; 120 let res1 = obj[key1]; 121 let res2 = obj[key2] 122 print("res:", res1 !== res2) 123 } 124} 125