OLD | NEW |
---|---|
1 // Copyright 2010 the V8 project authors. All rights reserved. | 1 // Copyright 2010 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 19 matching lines...) Expand all Loading... | |
30 (function() { | 30 (function() { |
31 var array = new Array(10); | 31 var array = new Array(10); |
32 assertEquals(13, array.unshift('1st', '2ns', '3rd')); | 32 assertEquals(13, array.unshift('1st', '2ns', '3rd')); |
33 assertTrue(0 in array); | 33 assertTrue(0 in array); |
34 assertTrue(1 in array); | 34 assertTrue(1 in array); |
35 assertTrue(2 in array); | 35 assertTrue(2 in array); |
36 assertFalse(3 in array); | 36 assertFalse(3 in array); |
37 })(); | 37 })(); |
38 | 38 |
39 | 39 |
40 // Check that unshift with no args has a side-effect of | 40 // Check that unshift with no args has no side-effects. |
41 // filling the holes with elements from the prototype | |
42 // (if present, of course) | |
43 (function() { | 41 (function() { |
44 var len = 3; | 42 var len = 3; |
45 var array = new Array(len); | 43 var array = new Array(len); |
46 | 44 |
47 var at0 = '@0'; | 45 var at0 = '@0'; |
48 var at2 = '@2'; | 46 var at2 = '@2'; |
49 | 47 |
50 Array.prototype[0] = at0; | 48 Array.prototype[0] = at0; |
51 Array.prototype[2] = at2; | 49 Array.prototype[2] = at2; |
52 | 50 |
53 // array owns nothing... | 51 // array owns nothing... |
54 assertFalse(array.hasOwnProperty(0)); | 52 assertFalse(array.hasOwnProperty(0)); |
55 assertFalse(array.hasOwnProperty(1)); | 53 assertFalse(array.hasOwnProperty(1)); |
56 assertFalse(array.hasOwnProperty(2)); | 54 assertFalse(array.hasOwnProperty(2)); |
57 | 55 |
58 // ... but sees values from Array.prototype | 56 // ... but sees values from Array.prototype |
59 assertEquals(array[0], at0); | 57 assertEquals(array[0], at0); |
60 assertEquals(array[1], undefined); | 58 assertEquals(array[1], undefined); |
61 assertEquals(array[2], at2); | 59 assertEquals(array[2], at2); |
62 | 60 |
63 assertEquals(len, array.unshift()); | 61 assertEquals(len, array.unshift()); |
64 | 62 |
65 assertTrue(delete Array.prototype[0]); | 63 assertTrue(delete Array.prototype[0]); |
66 assertTrue(delete Array.prototype[2]); | 64 assertTrue(delete Array.prototype[2]); |
67 | 65 |
68 // unshift makes array own 0 and 2... | 66 // array still owns nothing... |
69 assertTrue(array.hasOwnProperty(0)); | 67 assertFalse(array.hasOwnProperty(0)); |
Michael Starzinger
2014/10/22 08:45:50
I am not convinced that this is actually spec-comp
adamk
2014/10/22 17:15:35
This appears to be a difference between ES5 and ES
| |
70 assertFalse(array.hasOwnProperty(1)); | 68 assertFalse(array.hasOwnProperty(1)); |
71 assertTrue(array.hasOwnProperty(2)); | 69 assertFalse(array.hasOwnProperty(2)); |
72 | 70 |
73 // ... so they are not affected be delete. | 71 // ... so they are not affected be delete. |
74 assertEquals(array[0], at0); | 72 assertEquals(array[0], undefined); |
75 assertEquals(array[1], undefined); | 73 assertEquals(array[1], undefined); |
76 assertEquals(array[2], at2); | 74 assertEquals(array[2], undefined); |
77 })(); | 75 })(); |
78 | 76 |
79 | 77 |
80 // Now check the case with array of holes and some elements on prototype. | 78 // Now check the case with array of holes and some elements on prototype. |
81 (function() { | 79 (function() { |
82 var len = 9; | 80 var len = 9; |
83 var array = new Array(len); | 81 var array = new Array(len); |
84 Array.prototype[3] = "@3"; | 82 Array.prototype[3] = "@3"; |
85 Array.prototype[7] = "@7"; | 83 Array.prototype[7] = "@7"; |
86 | 84 |
(...skipping 21 matching lines...) Expand all Loading... | |
108 assertFalse(array.hasOwnProperty(3)); | 106 assertFalse(array.hasOwnProperty(3)); |
109 | 107 |
110 assertEquals(array[7], Array.prototype[7]); | 108 assertEquals(array[7], Array.prototype[7]); |
111 assertFalse(array.hasOwnProperty(7)); | 109 assertFalse(array.hasOwnProperty(7)); |
112 | 110 |
113 assertTrue(delete Array.prototype[3]); | 111 assertTrue(delete Array.prototype[3]); |
114 assertTrue(delete Array.prototype[5]); | 112 assertTrue(delete Array.prototype[5]); |
115 assertTrue(delete Array.prototype[7]); | 113 assertTrue(delete Array.prototype[7]); |
116 })(); | 114 })(); |
117 | 115 |
118 // Check that unshift with no args has a side-effect of | 116 // Check that unshift with no args has no side-effects. |
119 // filling the holes with elements from the prototype | |
120 // (if present, of course) | |
121 (function() { | 117 (function() { |
122 var len = 3; | 118 var len = 3; |
123 var array = new Array(len); | 119 var array = new Array(len); |
124 | 120 |
125 var at0 = '@0'; | 121 var at0 = '@0'; |
126 var at2 = '@2'; | 122 var at2 = '@2'; |
127 | 123 |
128 var array_proto = []; | 124 var array_proto = []; |
129 array_proto[0] = at0; | 125 array_proto[0] = at0; |
130 array_proto[2] = at2; | 126 array_proto[2] = at2; |
131 array.__proto__ = array_proto; | 127 array.__proto__ = array_proto; |
132 | 128 |
133 // array owns nothing... | 129 // array owns nothing... |
134 assertFalse(array.hasOwnProperty(0)); | 130 assertFalse(array.hasOwnProperty(0)); |
135 assertFalse(array.hasOwnProperty(1)); | 131 assertFalse(array.hasOwnProperty(1)); |
136 assertFalse(array.hasOwnProperty(2)); | 132 assertFalse(array.hasOwnProperty(2)); |
137 | 133 |
138 // ... but sees values from array_proto. | 134 // ... but sees values from array_proto. |
139 assertEquals(array[0], at0); | 135 assertEquals(array[0], at0); |
140 assertEquals(array[1], undefined); | 136 assertEquals(array[1], undefined); |
141 assertEquals(array[2], at2); | 137 assertEquals(array[2], at2); |
142 | 138 |
143 assertEquals(len, array.unshift()); | 139 assertEquals(len, array.unshift()); |
144 | 140 |
145 // unshift makes array own 0 and 2... | 141 // array still owns nothing. |
146 assertTrue(array.hasOwnProperty(0)); | 142 assertFalse(array.hasOwnProperty(0)); |
147 assertFalse(array.hasOwnProperty(1)); | 143 assertFalse(array.hasOwnProperty(1)); |
148 assertTrue(array.hasOwnProperty(2)); | 144 assertFalse(array.hasOwnProperty(2)); |
149 | 145 |
150 // ... so they are not affected be delete. | 146 // ... but still sees values from array_proto. |
151 assertEquals(array[0], at0); | 147 assertEquals(array[0], at0); |
152 assertEquals(array[1], undefined); | 148 assertEquals(array[1], undefined); |
153 assertEquals(array[2], at2); | 149 assertEquals(array[2], at2); |
154 })(); | 150 })(); |
155 | 151 |
156 | 152 |
157 // Now check the case with array of holes and some elements on prototype. | 153 // Now check the case with array of holes and some elements on prototype. |
158 (function() { | 154 (function() { |
159 var len = 9; | 155 var len = 9; |
160 var array = new Array(len); | 156 var array = new Array(len); |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
221 array.unshift(1) | 217 array.unshift(1) |
222 assertEquals([1, 2, 3], array); | 218 assertEquals([1, 2, 3], array); |
223 | 219 |
224 array = [2]; | 220 array = [2]; |
225 array.length = 2; | 221 array.length = 2; |
226 array.__proto__[1] = 3; | 222 array.__proto__[1] = 3; |
227 Object.defineProperty(array.__proto__, '1', {enumerable: false}); | 223 Object.defineProperty(array.__proto__, '1', {enumerable: false}); |
228 array.unshift(1); | 224 array.unshift(1); |
229 assertEquals([1, 2, 3], array); | 225 assertEquals([1, 2, 3], array); |
230 })(); | 226 })(); |
OLD | NEW |