14514f5e3Sopenharmony_ci/* 24514f5e3Sopenharmony_ci * Copyright (c) 2022 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:container 184514f5e3Sopenharmony_ci * @tc.desc:test container 194514f5e3Sopenharmony_ci * @tc.type: FUNC 204514f5e3Sopenharmony_ci * @tc.require: 214514f5e3Sopenharmony_ci */ 224514f5e3Sopenharmony_civar PlainArray = undefined; 234514f5e3Sopenharmony_ciif (globalThis["ArkPrivate"] != undefined) { 244514f5e3Sopenharmony_ci PlainArray = ArkPrivate.Load(ArkPrivate.PlainArray); 254514f5e3Sopenharmony_ci 264514f5e3Sopenharmony_ci let map = new Map(); 274514f5e3Sopenharmony_ci let plainArray = new PlainArray(); 284514f5e3Sopenharmony_ci let proxy = new Proxy(plainArray, {}); 294514f5e3Sopenharmony_ci let testArray = ["0", "1", "2", "3", "4", "5"] 304514f5e3Sopenharmony_ci let res = true 314514f5e3Sopenharmony_ci let ret = proxy.add(0, "0") 324514f5e3Sopenharmony_ci proxy.add(1, "1") 334514f5e3Sopenharmony_ci proxy.add(2, "2") 344514f5e3Sopenharmony_ci proxy.add(3, "3") 354514f5e3Sopenharmony_ci proxy.add(4, "4") 364514f5e3Sopenharmony_ci proxy.add(5, "5") 374514f5e3Sopenharmony_ci 384514f5e3Sopenharmony_ci for(let i = 0; i < testArray.length; i++) { 394514f5e3Sopenharmony_ci if (proxy[i] !== testArray[i]) { 404514f5e3Sopenharmony_ci res = false 414514f5e3Sopenharmony_ci } 424514f5e3Sopenharmony_ci } 434514f5e3Sopenharmony_ci map.set("test plainarray add:", res) 444514f5e3Sopenharmony_ci map.set("test plainarray 'add' ret:", ret === undefined) 454514f5e3Sopenharmony_ci map.set("test plainarray length:", proxy.length === 6) 464514f5e3Sopenharmony_ci map.set("test plainarray has:", proxy.has(2)) 474514f5e3Sopenharmony_ci map.set("test plainarray getIndexOfValue:", proxy.getIndexOfValue("1") === 1) 484514f5e3Sopenharmony_ci map.set("test plainarray getIndexOfKey:", proxy.getIndexOfKey(5) === 5) 494514f5e3Sopenharmony_ci map.set("test plainarray getKeyAt:", proxy.getKeyAt(1) === 1) 504514f5e3Sopenharmony_ci map.set("test plainarray getValueAt:", proxy.getValueAt(2) === "2") 514514f5e3Sopenharmony_ci 524514f5e3Sopenharmony_ci let newPlainArray = proxy.clone() 534514f5e3Sopenharmony_ci res = true 544514f5e3Sopenharmony_ci for(let i = 0; i < testArray.length; i++) { 554514f5e3Sopenharmony_ci if (newPlainArray[i] !== testArray[i]) { 564514f5e3Sopenharmony_ci res = false 574514f5e3Sopenharmony_ci } 584514f5e3Sopenharmony_ci } 594514f5e3Sopenharmony_ci map.set("test plainarray clone:", res) 604514f5e3Sopenharmony_ci 614514f5e3Sopenharmony_ci const removeRes = proxy.remove(3) 624514f5e3Sopenharmony_ci testArray.splice(3, 1) 634514f5e3Sopenharmony_ci map.set("test plainarray removeRes:", removeRes) 644514f5e3Sopenharmony_ci 654514f5e3Sopenharmony_ci proxy.removeAt(2) 664514f5e3Sopenharmony_ci testArray.splice(2, 1) 674514f5e3Sopenharmony_ci res = true 684514f5e3Sopenharmony_ci for(let i = 0; i < testArray.length; i++) { 694514f5e3Sopenharmony_ci if (proxy.get(i) !== testArray[i]) { 704514f5e3Sopenharmony_ci res = false 714514f5e3Sopenharmony_ci } 724514f5e3Sopenharmony_ci } 734514f5e3Sopenharmony_ci 744514f5e3Sopenharmony_ci newPlainArray = proxy.clone() 754514f5e3Sopenharmony_ci res = proxy.removeRangeFrom(1, 2) 764514f5e3Sopenharmony_ci testArray.splice(1, 2) 774514f5e3Sopenharmony_ci if (res > 0) { 784514f5e3Sopenharmony_ci res = newPlainArray.removeRangeFrom(0, 100) 794514f5e3Sopenharmony_ci if (res > 0) { 804514f5e3Sopenharmony_ci res = newPlainArray.isEmpty() 814514f5e3Sopenharmony_ci } 824514f5e3Sopenharmony_ci } 834514f5e3Sopenharmony_ci map.set("test plainarray removeRangeFrom:", res) 844514f5e3Sopenharmony_ci 854514f5e3Sopenharmony_ci res = true 864514f5e3Sopenharmony_ci proxy.forEach((i, d) => { 874514f5e3Sopenharmony_ci }) 884514f5e3Sopenharmony_ci 894514f5e3Sopenharmony_ci map.set("test plainarray forEach:", res) 904514f5e3Sopenharmony_ci 914514f5e3Sopenharmony_ci res = true 924514f5e3Sopenharmony_ci let testArray3 = [0, 5] 934514f5e3Sopenharmony_ci let j = 0 944514f5e3Sopenharmony_ci for (const data of proxy) { 954514f5e3Sopenharmony_ci } 964514f5e3Sopenharmony_ci map.set("test plainarray for of:", res) 974514f5e3Sopenharmony_ci 984514f5e3Sopenharmony_ci res = true 994514f5e3Sopenharmony_ci let itr = proxy[Symbol.iterator](); 1004514f5e3Sopenharmony_ci let tmp = undefined; 1014514f5e3Sopenharmony_ci let testArray1 = [] 1024514f5e3Sopenharmony_ci do { 1034514f5e3Sopenharmony_ci tmp = itr.next().value; 1044514f5e3Sopenharmony_ci testArray1.push(tmp); 1054514f5e3Sopenharmony_ci } while (tmp != undefined); 1064514f5e3Sopenharmony_ci map.set("test plainarray Symbol.iterator:", res) 1074514f5e3Sopenharmony_ci 1084514f5e3Sopenharmony_ci let arr2 = new PlainArray(); 1094514f5e3Sopenharmony_ci let proxy1 = new Proxy(arr2, {}); 1104514f5e3Sopenharmony_ci proxy1.add(0, "0") 1114514f5e3Sopenharmony_ci proxy1.add(1, "1") 1124514f5e3Sopenharmony_ci proxy1.add(2, "2") 1134514f5e3Sopenharmony_ci proxy1.add(3, "3") 1144514f5e3Sopenharmony_ci proxy1.add(4, "4") 1154514f5e3Sopenharmony_ci proxy1.add(5, "5") 1164514f5e3Sopenharmony_ci proxy1.setValueAt(2, "123") 1174514f5e3Sopenharmony_ci map.set("test plainarray setValueAt and get:", proxy1.get(2) === "123") 1184514f5e3Sopenharmony_ci ret = proxy1.clear() 1194514f5e3Sopenharmony_ci map.set("test plainarray clear:", proxy1.length === 0) 1204514f5e3Sopenharmony_ci map.set("test plainarray 'clear' ret:", ret === undefined) 1214514f5e3Sopenharmony_ci map.set("test plainarray isEmpty:", proxy1.isEmpty()) 1224514f5e3Sopenharmony_ci proxy1.add(0, "0") 1234514f5e3Sopenharmony_ci proxy1.add(1, "1") 1244514f5e3Sopenharmony_ci proxy1.add(2, "2") 1254514f5e3Sopenharmony_ci proxy1.add(3, "3") 1264514f5e3Sopenharmony_ci proxy1.add(4, "4") 1274514f5e3Sopenharmony_ci proxy1.add(5, "5") 1284514f5e3Sopenharmony_ci map.set("test plainarray toString:", proxy1.toString() == "0:0,1:1,2:2,3:3,4:4,5:5"); 1294514f5e3Sopenharmony_ci let empty_pa = new PlainArray(); 1304514f5e3Sopenharmony_ci try { 1314514f5e3Sopenharmony_ci empty_pa.getValueAt(0); 1324514f5e3Sopenharmony_ci } catch(err) { 1334514f5e3Sopenharmony_ci res = (err =="BusinessError: Container is empty") 1344514f5e3Sopenharmony_ci map.set("test getValueAt exception when arraylist is empty:", res) 1354514f5e3Sopenharmony_ci } 1364514f5e3Sopenharmony_ci try { 1374514f5e3Sopenharmony_ci empty_pa.removeRangeFrom(0, 1); 1384514f5e3Sopenharmony_ci } catch(err) { 1394514f5e3Sopenharmony_ci res = (err =="BusinessError: Container is empty") 1404514f5e3Sopenharmony_ci map.set("test removeRangeFrom exception when arraylist is empty:", res) 1414514f5e3Sopenharmony_ci } 1424514f5e3Sopenharmony_ci try { 1434514f5e3Sopenharmony_ci empty_pa.setValueAt(0); 1444514f5e3Sopenharmony_ci } catch(err) { 1454514f5e3Sopenharmony_ci res = (err =="BusinessError: Container is empty") 1464514f5e3Sopenharmony_ci map.set("test setValueAt exception when arraylist is empty:", res) 1474514f5e3Sopenharmony_ci } 1484514f5e3Sopenharmony_ci 1494514f5e3Sopenharmony_ci try { 1504514f5e3Sopenharmony_ci let myPlainArray = new PlainArray(); 1514514f5e3Sopenharmony_ci myPlainArray.add(1); 1524514f5e3Sopenharmony_ci myPlainArray[2147483648]; 1534514f5e3Sopenharmony_ci } catch(err) { 1544514f5e3Sopenharmony_ci let overFlowTest = (err == "BusinessError: The type of \"index\" must be small integer."); 1554514f5e3Sopenharmony_ci map.set("test PlainArray[i] overFlowTest:", overFlowTest); 1564514f5e3Sopenharmony_ci } 1574514f5e3Sopenharmony_ci 1584514f5e3Sopenharmony_ci res = undefined; 1594514f5e3Sopenharmony_ci function elements(value, key, map) { 1604514f5e3Sopenharmony_ci if (!value) { 1614514f5e3Sopenharmony_ci if (!res) { 1624514f5e3Sopenharmony_ci res = []; 1634514f5e3Sopenharmony_ci } 1644514f5e3Sopenharmony_ci res.push(key); 1654514f5e3Sopenharmony_ci } 1664514f5e3Sopenharmony_ci } 1674514f5e3Sopenharmony_ci map.forEach(elements); 1684514f5e3Sopenharmony_ci 1694514f5e3Sopenharmony_ci let de = new PlainArray(); 1704514f5e3Sopenharmony_ci try { 1714514f5e3Sopenharmony_ci de.forEach(123); 1724514f5e3Sopenharmony_ci } catch(err) { 1734514f5e3Sopenharmony_ci if (err.name != "BusinessError") { 1744514f5e3Sopenharmony_ci print("PlainArray forEach throw error fail"); 1754514f5e3Sopenharmony_ci } 1764514f5e3Sopenharmony_ci } 1774514f5e3Sopenharmony_ci 1784514f5e3Sopenharmony_ci // Math.floor as index input should not throw exception. 1794514f5e3Sopenharmony_ci let myPa = new PlainArray(); 1804514f5e3Sopenharmony_ci myPa.add(0, "a"); 1814514f5e3Sopenharmony_ci myPa.add(Math.floor(1.5), "b"); 1824514f5e3Sopenharmony_ci myPa.has(Math.floor(1.5)); 1834514f5e3Sopenharmony_ci myPa.get(Math.floor(1.5)); 1844514f5e3Sopenharmony_ci myPa.getValueAt(Math.floor(1.5)); 1854514f5e3Sopenharmony_ci myPa.setValueAt(Math.floor(1.5), "c"); 1864514f5e3Sopenharmony_ci myPa.getKeyAt(Math.floor(1.5)); 1874514f5e3Sopenharmony_ci myPa.getIndexOfKey(Math.floor(1.5)); 1884514f5e3Sopenharmony_ci myPa.removeAt(Math.floor(1.5)); 1894514f5e3Sopenharmony_ci 1904514f5e3Sopenharmony_ci if (!res) { 1914514f5e3Sopenharmony_ci print("Test PlainArray success!!!"); 1924514f5e3Sopenharmony_ci } else { 1934514f5e3Sopenharmony_ci print("Test PlainArray fail: " + res); 1944514f5e3Sopenharmony_ci } 1954514f5e3Sopenharmony_ci const v6 = new PlainArray() 1964514f5e3Sopenharmony_ci function f2(a3) { 1974514f5e3Sopenharmony_ci return a3 1984514f5e3Sopenharmony_ci } 1994514f5e3Sopenharmony_ci const o5 = { 2004514f5e3Sopenharmony_ci "get" : f2, 2014514f5e3Sopenharmony_ci } 2024514f5e3Sopenharmony_ci const v7 = new Proxy(v6, o5) 2034514f5e3Sopenharmony_ci try { 2044514f5e3Sopenharmony_ci v7[1073741823] 2054514f5e3Sopenharmony_ci } catch (error) { 2064514f5e3Sopenharmony_ci print(error) 2074514f5e3Sopenharmony_ci } 2084514f5e3Sopenharmony_ci} 2094514f5e3Sopenharmony_ciexport let plainarrayRes = "Test PlainArray done"; 210