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