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