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 // non-intern + non-intern 58 let numhead1 = "12".concat("022"); 59 let numtail1 = "4".concat("21"); 60 let numkey1 = numhead1 + numtail1; 61 let numkey2 = numhead1 + numtail1; 62 63 // intern + intern 64 let numkey3 = "123420002"; 65 let numkey4 = "12342" + "0002"; 66 67 // non-intern + intern 68 let numhead2 = "90".concat("88"); 69 let numtail2 = "90"; 70 let numkey5 = "90" + "8890"; 71 let numkey6 = numhead2 + numtail2; 72 73 // intern + non-intern 74 let numhead3 = "90880"; 75 let numtail3 = "0".concat("0"); 76 let numkey7 = "90880" + "00"; 77 let numkey8 = numhead3 + numtail3; 78 79 // intern + intern 80 let numkey9 = "999999999"; 81 let numkey10 = "9999".concat("99999"); 82 83 // intern + intern 84 let numkey11 = "1000000000"; 85 let numkey12 = "10".concat("00000000"); 86 87 // intern + intern 88 let numkey13 = "0100000"; 89 let numkey14 = "010".concat("0000"); 90 91 let keyArray = [key1, key3, key5, key7, numkey1, numkey3, numkey5, numkey7, numkey9, numkey11, numkey13]; 92 let system = new System(); 93 for (let i = 0; i < keyArray.length; i++) { 94 getOrCreateLoad(system, keyArray[i]); 95 } 96 97 print("key1 === key2: ", key1 === key2); 98 print("key3 === key4: ", key3 === key4); 99 print("key5 === key6: ", key5 === key6); 100 print("key7 === key8: ", key7 === key8); 101 getOrCreateLoad(system, key2); 102 getOrCreateLoad(system, key4); 103 getOrCreateLoad(system, key6); 104 getOrCreateLoad(system, key8); 105 106 print("numkey1 === numkey2: ", numkey1 === numkey2); 107 print("numkey3 === numkey4: ", numkey3 === numkey4); 108 print("numkey5 === numkey6: ", numkey5 === numkey6); 109 print("numkey7 === numkey8: ", numkey7 === numkey8); 110 print("numkey9 === numkey10: ", numkey9 === numkey10); 111 print("numkey11 === numkey12: ", numkey11 === numkey12); 112 getOrCreateLoad(system, numkey2); 113 getOrCreateLoad(system, numkey4); 114 getOrCreateLoad(system, numkey6); 115 getOrCreateLoad(system, numkey8); 116 getOrCreateLoad(system, numkey10); 117 getOrCreateLoad(system, numkey12); 118} 119 120{ 121 let obj = { 122 "123一二三": "value 123一二三", 123 "1一2二3三": "value 1一2二3三", 124 "123456": "value 123456", 125 } 126 { 127 let key1 = "123一二三"; 128 let tmp1 = "123"; 129 let tmp2 = "一二三"; 130 let key2 = tmp1 + tmp2; 131 let res1 = obj[key1]; 132 let res2 = obj[key2] 133 print("res:", res1 === res2) 134 } 135 { 136 let key1 = "1一2二3三"; 137 let tmp1 = "1一2"; 138 let tmp2 = "二3三"; 139 let key2 = tmp1 + tmp2; 140 let res1 = obj[key1]; 141 let res2 = obj[key2] 142 print("res:", res1 === res2) 143 } 144 { 145 let key1 = "123一二三"; 146 let tmp1 = "123"; 147 let tmp2 = "123"; 148 let key2 = tmp1 + tmp2; 149 let res1 = obj[key1]; 150 let res2 = obj[key2] 151 print("res:", res1 !== res2) 152 } 153 { 154 let key1 = "123456"; 155 let tmp1 = "123"; 156 let tmp2 = "456"; 157 let key2 = tmp1 + tmp2; 158 let res1 = obj[key1]; 159 let res2 = obj[key2] 160 print("res:", res1 === res2) 161 } 162 { 163 let key1 = "123456"; 164 let tmp1 = "一二三"; 165 let tmp2 = "456"; 166 let key2 = tmp1 + tmp2; 167 let res1 = obj[key1]; 168 let res2 = obj[key2] 169 print("res:", res1 !== res2) 170 } 171} 172 173{ 174 var x = []; 175 x[42949672964] = 1; // insert string to EcmaStringTable in ObjectOperator::HandleKey. 176 print(x["42949672964"]); 177 178 var x = []; 179 x[12345.6789] = 2; // insert string to EcmaStringTable in ObjectOperator::HandleKey. 180 print(x["12345.6789"]); 181 182 let obj = { 183 "123456234": "value 123456", 184 } 185 let key = "123456234"; 186 print(obj[key]); 187 188} 189