]> git.saurik.com Git - apple/javascriptcore.git/blob - tests/stress/array-iterators-next-with-call.js
JavaScriptCore-7601.1.46.3.tar.gz
[apple/javascriptcore.git] / tests / stress / array-iterators-next-with-call.js
1 // This test checks the behavior of the %ArrayIteratorPrototype%.next methods with call.
2
3 var array = [0, 1, 2, 3, 4];
4 var arrayIterator = array[Symbol.iterator]();
5 var arrayIteratorPrototype = arrayIterator.__proto__;
6 var arrayIteratorPrototypeNext = arrayIteratorPrototype.next;
7
8 if (arrayIterator.hasOwnProperty('next'))
9 throw "next method should exists on %ArrayIteratorPrototype%";
10 if (!arrayIteratorPrototype.hasOwnProperty('next'))
11 throw "next method should exists on %ArrayIteratorPrototype%";
12
13 var array1 = [42, 43, 41];
14 var array1Iterator = array1[Symbol.iterator]();
15 var index = 0;
16 while (true) {
17 var result = arrayIteratorPrototypeNext.call(array1Iterator);
18 var value = result.value;
19 if (result.done) {
20 break;
21 }
22 if (value !== array1[index++])
23 throw "Error: bad value: " + value;
24 }
25 if (index !== 3)
26 throw "Error: bad index: " + index;
27
28 function increment(iter) {
29 return arrayIteratorPrototypeNext.call(iter);
30 }
31 var array1 = [42, 43, -20];
32 var array2 = [42, 43, -20];
33 var array1Iterator = array1[Symbol.iterator]();
34 var array2Iterator = array2[Symbol.iterator]();
35 for (var i = 0; i < 3; ++i) {
36 var value1 = increment(array1Iterator).value;
37 var value2 = increment(array2Iterator).value;
38 if (value1 !== value2)
39 throw "Error: bad value: " + value1 + " " + value2;
40 }
41
42 var array1 = [ 0, 1, 2, 4, 5, 6 ];
43 var array1Iterator = array1[Symbol.iterator]();
44
45 var value = array1Iterator.next().value;
46 if (value !== 0)
47 throw "Error: bad value: " + value;
48 var value = array1Iterator.next().value;
49 if (value !== 1)
50 throw "Error: bad value: " + value;
51 var value = array1Iterator.next().value;
52 if (value !== 2)
53 throw "Error: bad value: " + value;
54 var value = arrayIteratorPrototypeNext.call(array1Iterator).value;
55 if (value !== 4)
56 throw "Error: bad value: " + value;
57 var value = arrayIteratorPrototypeNext.call(array1Iterator).value;
58 if (value !== 5)
59 throw "Error: bad value: " + value;
60 var value = arrayIteratorPrototypeNext.call(array1Iterator).value;
61 if (value !== 6)
62 throw "Error: bad value: " + value;
63 var value = arrayIteratorPrototypeNext.call(array1Iterator).value;
64 if (value !== undefined)
65 throw "Error: bad value: " + value;
66
67 var primitives = [
68 "string",
69 42,
70 0.03,
71 false,
72 true,
73 Symbol("Cocoa"),
74 null,
75 undefined
76 ];
77 for (var primitive of primitives) {
78 var didThrow = null;
79 try {
80 arrayIteratorPrototypeNext.call(primitive);
81 } catch (e) {
82 didThrow = e;
83 }
84 if (!didThrow)
85 throw "Error: no error thrown";
86 var expectedMessage = 'TypeError: %ArrayIteratorPrototype%.next requires that |this| be an Array Iterator instance';
87 if (primitive == null)
88 expectedMessage = 'TypeError: %ArrayIteratorPrototype%.next requires that |this| not be null or undefined';
89 if (String(didThrow) !== expectedMessage)
90 throw "Error: bad error thrown: " + didThrow;
91 }
92
93 var nonRelatedObjects = [
94 {},
95 [],
96 new Date(),
97 new Error(),
98 Object(Symbol()),
99 new String("Cappuccino"),
100 new Number(42),
101 new Boolean(false),
102 function () { },
103 ];
104 for (var object of nonRelatedObjects) {
105 var didThrow = null;
106 try {
107 arrayIteratorPrototypeNext.call(object);
108 } catch (e) {
109 didThrow = e;
110 }
111 if (!didThrow)
112 throw "Error: no error thrown";
113 if (String(didThrow) !== 'TypeError: %ArrayIteratorPrototype%.next requires that |this| be an Array Iterator instance')
114 throw "Error: bad error thrown: " + didThrow;
115 }