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:container
18 * @tc.desc:test container
19 * @tc.type: FUNC
20 * @tc.require:
21 */
22import {testdProxyArray1}  from "./utility";
23
24var Stack = undefined;
25if (globalThis["ArkPrivate"] != undefined) {
26    Stack = ArkPrivate.Load(ArkPrivate.Stack);
27    let stack = new Stack();
28    let proxy = new Proxy(stack, {});
29    let res = true
30    let testArray = []
31    let map = new Map();
32
33    // test isEmpty true
34    map.set("test proxy isEmpty ture:", proxy.isEmpty() == true)
35
36    for (let i = 0; i < 10; i++) {
37        proxy.push(i)
38        testArray.push(i)
39    }
40
41    // test isEmpty false
42    map.set("test proxy isEmpty false:", proxy.isEmpty() == false)
43
44    res = true
45    for (let i = 0; i < testArray.length; i++) {
46        if (proxy[i] !== testArray[i]) {
47            res = false
48        }
49    }
50    map.set("test stack add:", res)
51
52    res = true
53    proxy.forEach((i, d) => {
54        if (d !== testArray[i]) {
55            res = false
56        }
57    })
58
59    map.set("test stack forEach:", res)
60
61    res = true
62    let j = 0
63    for (const data of proxy) {
64        if (data !== testArray[j]) {
65            res = false
66        }
67        j++;
68    }
69    map.set("test stack for of:", res);
70    testdProxyArray1(proxy, res, testArray);
71    map.set("test stack Symbol.iterator:", res)
72
73    map.set("test stack peek:", proxy.peek() === 9)
74    map.set("test stack locate:", proxy.locate(5) === 5)
75
76    // test proxy pop
77    let popStack = new Stack();
78    let popProxy = new Proxy(popStack, {});
79    for (let i = 0; i < 10; i++) {
80        popProxy.push(i);
81    }
82    for (let i = 9; i >= 0; i--) {
83        map.set("test proxy stack pop:" + i, popProxy.pop() == i);
84    }
85
86    try {
87        let myStack = new Stack();
88        myStack.push(1);
89        myStack[2147483648];
90    } catch(err) {
91        let overFlowTest = (err == "BusinessError: The type of \"index\" must be small integer.");
92        map.set("test Stack[i] overFlowTest:", overFlowTest);
93    }
94
95    let flag = undefined;
96
97    function elements(value, key, map) {
98        if (!value) {
99            if (!flag) {
100                flag = [];
101            }
102            flag.push(key);
103        }
104    }
105
106    map.forEach(elements);
107
108    let de = new Stack();
109    try {
110        de.forEach(123);
111    } catch (err) {
112        if (err.name != "BusinessError") {
113            print("Stack forEach throw error fail");
114        }
115    }
116    let test1 = new Stack();
117    for (let k = 0; k < 10; k++) {
118        test1.push(k);
119    }
120    var keyName = "";
121    for (const key in test1) {
122        keyName += key;
123    }
124    if (keyName != "0123456789") {
125        print("Stack for in fail")
126    }
127    try {
128        class MyStack extends Stack{
129            100
130        }
131        new MyStack();
132        print("Test MyStack extends Stack failed");
133    } catch (error) {
134    }
135    if (!flag) {
136        print("Test Stack success!!!");
137    } else {
138        print("Test Stack fail: " + flag);
139    }
140    const v5 = new Stack()
141    try {
142        v5[2147483649]
143    } catch (error) {
144        print(error)
145    }
146
147    const v6 = new Stack()
148    function f2(a3) {
149        return a3
150    }
151    const o5 = {
152        "get" : f2,
153    }
154    const v7 = new Proxy(v6, o5)
155    try {
156        v7[1073741823]
157    } catch (error) {
158        print(error)
159    }
160}
161export let stackRes = "Test Stack done";
162