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 Queue = undefined; 25if (globalThis["ArkPrivate"] != undefined) { 26 Queue = ArkPrivate.Load(ArkPrivate.Queue); 27 let v4 = new Queue(); 28 v4[3829299154] = Queue; 29 print(v4.length); 30 let queue = new Queue(); 31 let proxy = new Proxy(queue, {}); 32 let res = true 33 let testArray = [] 34 let map = new Map(); 35 for(let i = 0; i < 10; i++) { 36 proxy.add(i) 37 testArray.push(i) 38 } 39 40 res = true 41 for(let i = 0; i < testArray.length; i++) { 42 if (proxy[i] !== testArray[i]) { 43 res = false 44 } 45 } 46 map.set("test queue add:", res) 47 48 res = true 49 proxy.forEach((i, d) => { 50 if (d !== testArray[i]) { 51 res = false 52 } 53 }) 54 55 map.set("test queue forEach:", res) 56 57 res = true 58 let j = 0 59 for (const data of proxy) { 60 if (data !== testArray[j]) { 61 res = false 62 } 63 j++; 64 } 65 map.set("test queue for of:", res) 66 testdProxyArray1(proxy, res, testArray); 67 68 map.set("test queue Symbol.iterator:", res) 69 70 map.set("test queue popFirst:", proxy.getFirst() === 0) 71 map.set("test queue pop:", proxy.pop() === 0) 72 73 try { 74 let myQueue = new Queue(); 75 myQueue.add(1); 76 myQueue[2147483648]; 77 } catch(err) { 78 let overFlowTest = (err == "BusinessError: The type of \"index\" must be small integer."); 79 map.set("test Queue[i] overFlowTest:", overFlowTest); 80 } 81 82 { 83 let queue = new Queue(); 84 let result = queue.add(1); 85 map.set("test Queue add0001:", result == true); 86 } 87 88 { 89 let queue = new Queue(); 90 let result = queue.add("a"); 91 map.set("test Queue add0002:", result == true); 92 } 93 94 { 95 let queue = new Queue(); 96 let a = { 97 name: "Dylon", age: "13" 98 }; 99 let result = queue.add(a); 100 map.set("test Queue add0003:", result == true); 101 } 102 103 { 104 let queue = new Queue(); 105 let a = { 106 name: "Dylon", age: "13" 107 }; 108 let b = 'a' 109 let c = 1 110 let result1 = queue.add(a) 111 let result2 = queue.add(b) 112 let result3 = queue.add(c) 113 let myFlag = true; 114 if (result1 != true || result2 != true || result3 != true) { 115 myFlag = false; 116 } 117 map.set("test Queue add0004:", myFlag); 118 } 119 120 { 121 let queue = new Queue(); 122 let result = queue.add(undefined) 123 map.set("test Queue add0005:", result == true); 124 } 125 126 { 127 let queue = new Queue(); 128 let a = { 129 name: "Dylon", age: "13" 130 }; 131 let b = 'a' 132 let c = 1 133 queue.add(a) 134 queue.add(b) 135 queue.add(c) 136 let result = queue.pop(); 137 map.set("test Queue pop0001:", result == a); 138 } 139 140 { 141 let queue = new Queue(); 142 let result = queue.pop(); 143 map.set("test Queue pop0002:", result == undefined); 144 } 145 146 { 147 let queue = new Queue(); 148 let a = { 149 name: "Dylon", age: "13" 150 }; 151 let b = 'a' 152 let c = 1 153 queue.add(a) 154 queue.add(b) 155 queue.add(c) 156 let result = queue.getFirst(); 157 map.set("test Queue getFirst0001:", result == a); 158 } 159 160 { 161 let queue = new Queue(); 162 let result = queue.getFirst(); 163 map.set("test Queue getFirst0002:", result == undefined); 164 } 165 166 { 167 let queue = new Queue(); 168 let a = { 169 name: "Dylon", age: "13" 170 }; 171 let b = 'a'; 172 let c = 1; 173 queue.add(a); 174 queue.add(b); 175 queue.add(c); 176 let myFlag = true; 177 queue.forEach((value, index) => { 178 let result = value; 179 let result1 = index; 180 if (result != value || result1 != index) { 181 myFlag = false; 182 } 183 map.set("test Queue forEach0001:", myFlag); 184 }); 185 } 186 187 { 188 let queue = new Queue(); 189 let a = { 190 name: "Dylon", age: "13" 191 }; 192 let b = 'a'; 193 let c = 1; 194 queue.add(a); 195 queue.add(b); 196 queue.add(c); 197 let iter = queue[Symbol.iterator](); 198 let temp = iter.next().value; 199 let myFlag = true; 200 while (temp != undefined) { 201 temp = iter.next().value; 202 if (temp != temp) { 203 myFlag = false; 204 } 205 } 206 map.set("test Queue [Symbol.iterator]0001:", myFlag); 207 } 208 209 { 210 let queue = new Queue(); 211 let a = { 212 name: "Dylon", age: "13" 213 }; 214 let b = 'a'; 215 let c = 1; 216 queue.add(a); 217 queue.add(b); 218 queue.add(c); 219 let myFlag = true; 220 queue.forEach(() => { 221 if (queue.length != 3) { 222 myFlag = false; 223 } 224 }); 225 map.set("test Queue forEach0002:", myFlag); 226 } 227 228 { 229 let queue = new Queue(); 230 let a = { 231 name: "Dylon", age: "13" 232 }; 233 queue.add(a); 234 let myFlag = true; 235 queue.forEach((value) => { 236 if (queue.getFirst() != value) { 237 myFlag = false; 238 } 239 }); 240 map.set("test Queue forEach0003:", myFlag); 241 } 242 243 { 244 let queue = new Queue(); 245 let a = { 246 name: "Dylon", age: "13" 247 }; 248 queue.add(a); 249 let myFlag = true; 250 queue.forEach((value, index, queue) => { 251 if (queue.getFirst() != value) { 252 myFlag = false; 253 } 254 }); 255 map.set("test Queue forEach0004:", myFlag); 256 } 257 258 { 259 let queue = new Queue(); 260 queue.add(1); 261 let myFlag = true; 262 queue.forEach((value, index, queue) => { 263 if (queue.getFirst() != value) { 264 myFlag = false; 265 } 266 }, queue); 267 if (queue.getFirst() != 1) { 268 myFlag = false; 269 } 270 map.set("test Queue forEach0005:", myFlag); 271 } 272 273 let flag = undefined; 274 function elements(value, key, map) { 275 if (!value) { 276 if (!flag) { 277 flag = []; 278 } 279 flag.push(key); 280 } 281 } 282 283 let myTest = new Queue(); 284 var arr1 = []; 285 for (var i = 0; i < 10; i++) { 286 myTest.add(i); 287 } 288 for (var i = 0; i < 5; i++) { 289 myTest.pop(); 290 } 291 myTest.forEach( 292 function myFunc(item, index, arr) { 293 arr1.push(item); 294 } 295 ); 296 for (let j = 5; j < 10; j++) { 297 if (arr1[j - 5] != j) { 298 print("Queue forEach first argv fail"); 299 } 300 } 301 302 let de = new Queue(); 303 try { 304 de.forEach(123); 305 } catch(err) { 306 if (err.name != "BusinessError") { 307 print("Queue forEach throw error fail"); 308 } 309 } 310 let test1 = new Queue(); 311 for (let k = 0; k < 10; k++) { 312 test1.add(k); 313 } 314 var keyName = ""; 315 for (const key in test1) { 316 keyName += key; 317 } 318 if (keyName != "0123456789") { 319 print("Queue for in fail") 320 } 321 map.forEach(elements); 322 if (!flag) { 323 print("Test Queue success!!!"); 324 } else { 325 print("Test Queue fail: " + flag); 326 } 327 328 let size_test = new Queue(); 329 for (var i = 0; i < 6; i++) { 330 size_test.add(i); 331 } 332 print(size_test.length); 333 334 const v1 = [Queue,Queue,Queue,Queue]; 335 const v2 = new Queue(); 336 const v3 = [-63084,3,536870889,-1926,29182,-4294967296,1222477883]; 337 const v5 = [v1]; 338 try { 339 Reflect.apply(v3.unshift, v2, v5); 340 } catch(error) { 341 print(error); 342 } 343 const v6 = new Queue() 344 function f2(a3) { 345 return a3 346 } 347 const o5 = { 348 "get" : f2, 349 } 350 const v7 = new Proxy(v6, o5) 351 try { 352 v7[1073741823] 353 } catch (error) { 354 print(error) 355 } 356 class C4 extends Queue{ 357 constructor(a) { 358 super() 359 super[a] = 11 360 const o10 = { 361 ...this 362 } 363 } 364 } 365 new C4(38062) 366 367 /* 368 * @tc.name: checkcontainerloadhclass 369 * @tc.desc: Test ContainersQueueStubBuilder::ForEach whether judge isHeapObject 370 * before loading hClass. 371 * @tc.type: FUNC 372 * @tc.require: issueIBQ709 373 */ 374 { 375 let v1 = new Queue(0); 376 let arr1 = [1]; 377 try { 378 Reflect.apply(v1.forEach, 123, arr1); 379 } catch (e) { 380 print(e); 381 } 382 } 383} 384export let queueRes = "Test Queue done"; 385