• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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