Chromium Code Reviews| 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 |