non-extensible-elements2.js (7066B)
1 load(libdir + "asserts.js"); 2 3 function testPopSimple() { 4 var a = [4, 3, 2, 1, 0]; 5 Object.preventExtensions(a); 6 for (var i = 0; i < 5; i++) 7 assertEq(a.pop(), i); 8 assertEq(a.length, 0); 9 10 a = [1, 2, 3]; 11 Object.seal(a); 12 for (var i = 0; i < 10; i++) 13 assertThrowsInstanceOf(() => a.pop(), TypeError); 14 assertEq(a.toString(), "1,2,3"); 15 16 a = [1, 2, 3]; 17 Object.freeze(a); 18 for (var i = 0; i < 10; i++) 19 assertThrowsInstanceOf(() => a.pop(), TypeError); 20 assertEq(a.toString(), "1,2,3"); 21 } 22 testPopSimple(); 23 24 function testPopHoles() { 25 var a = [1, , 3]; 26 Object.preventExtensions(a); 27 assertEq(a.pop(), 3); 28 assertEq(a.pop(), undefined); 29 assertEq(a.pop(), 1); 30 assertEq(a.length, 0); 31 32 a = [1, ,]; 33 Object.seal(a); 34 assertEq(a.pop(), undefined); 35 for (var i = 0; i < 10; i++) 36 assertThrowsInstanceOf(() => a.pop(), TypeError); 37 assertEq(a.toString(), "1"); 38 39 a = [1, ,]; 40 Object.freeze(a); 41 for (var i = 0; i < 10; i++) 42 assertThrowsInstanceOf(() => a.pop(), TypeError); 43 assertEq(a.toString(), "1,"); 44 } 45 testPopHoles(); 46 47 function testPushSimple() { 48 var a = [1, 2, 3]; 49 Object.preventExtensions(a); 50 for (var i = 0; i < 10; i++) 51 assertThrowsInstanceOf(() => a.push(4), TypeError); 52 assertEq(a.length, 3); 53 assertEq(a.toString(), "1,2,3"); 54 55 a = [1, 2, 3]; 56 Object.seal(a); 57 for (var i = 0; i < 10; i++) 58 assertThrowsInstanceOf(() => a.push(4), TypeError); 59 assertEq(a.toString(), "1,2,3"); 60 61 a = [1, 2, 3]; 62 Object.freeze(a); 63 for (var i = 0; i < 10; i++) 64 assertThrowsInstanceOf(() => a.push(4), TypeError); 65 assertEq(a.toString(), "1,2,3"); 66 } 67 testPushSimple(); 68 69 function testPushHoles() { 70 var a = [,,,]; 71 Object.preventExtensions(a); 72 for (var i = 0; i < 10; i++) 73 assertThrowsInstanceOf(() => a.push(4), TypeError); 74 assertEq(a.length, 3); 75 assertEq(a.toString(), ",,"); 76 77 a = [,,,]; 78 Object.seal(a); 79 for (var i = 0; i < 10; i++) 80 assertThrowsInstanceOf(() => a.push(4), TypeError); 81 assertEq(a.toString(), ",,"); 82 83 a = [,,,]; 84 Object.freeze(a); 85 for (var i = 0; i < 10; i++) 86 assertThrowsInstanceOf(() => a.push(4), TypeError); 87 assertEq(a.toString(), ",,"); 88 } 89 testPushHoles(); 90 91 function testReverseSimple() { 92 var a = [1, 2, 3]; 93 Object.preventExtensions(a); 94 a.reverse(); 95 assertEq(a.toString(), "3,2,1"); 96 97 a = [1, 2, 3]; 98 Object.seal(a); 99 a.reverse(); 100 assertEq(a.toString(), "3,2,1"); 101 102 a = [1, 2, 3]; 103 Object.freeze(a); 104 assertThrowsInstanceOf(() => a.reverse(), TypeError); 105 assertEq(a.toString(), "1,2,3"); 106 } 107 testReverseSimple(); 108 109 function testReverseHoles() { 110 var a = [1, 2, , 4]; 111 Object.preventExtensions(a); 112 assertThrowsInstanceOf(() => a.reverse(), TypeError); 113 assertEq(a.toString(), "4,,,1"); 114 115 a = [1, 2, , 4]; 116 Object.seal(a); 117 assertThrowsInstanceOf(() => a.reverse(), TypeError); 118 assertEq(a.toString(), "4,2,,1"); 119 120 a = [1, 2, , 4]; 121 Object.freeze(a); 122 assertThrowsInstanceOf(() => a.reverse(), TypeError); 123 assertEq(a.toString(), "1,2,,4"); 124 } 125 testReverseHoles(); 126 127 function testShiftSimple() { 128 var a = [1, 2, 3]; 129 Object.preventExtensions(a); 130 assertEq(a.shift(), 1); 131 assertEq(a.toString(), "2,3"); 132 for (var i = 0; i < 10; i++) 133 a.shift(); 134 assertEq(a.length, 0); 135 136 a = [1, 2, 3]; 137 Object.seal(a); 138 for (var i = 0; i < 10; i++) 139 assertThrowsInstanceOf(() => a.shift(), TypeError); 140 assertEq(a.toString(), "3,3,3"); 141 142 a = [1, 2, 3]; 143 Object.freeze(a); 144 for (var i = 0; i < 10; i++) 145 assertThrowsInstanceOf(() => a.shift(), TypeError); 146 assertEq(a.toString(), "1,2,3"); 147 } 148 testShiftSimple(); 149 testShiftSimple(); 150 151 function testShiftHoles() { 152 var a = [1, 2, , 4]; 153 Object.preventExtensions(a); 154 for (var i = 0; i < 10; i++) 155 assertThrowsInstanceOf(() => a.shift(), TypeError); 156 assertEq(a.toString(), ",,,4"); 157 158 a = [1, 2, , 4]; 159 Object.seal(a); 160 for (var i = 0; i < 10; i++) 161 assertThrowsInstanceOf(() => a.shift(), TypeError); 162 assertEq(a.toString(), "2,2,,4"); 163 164 a = [1, 2, , 4]; 165 Object.freeze(a); 166 for (var i = 0; i < 10; i++) 167 assertThrowsInstanceOf(() => a.shift(), TypeError); 168 assertEq(a.toString(), "1,2,,4"); 169 } 170 testShiftHoles(); 171 testShiftHoles(); 172 173 function testUnshiftSimple() { 174 var a = [1, 2, 3]; 175 Object.preventExtensions(a); 176 assertThrowsInstanceOf(() => a.unshift(0), TypeError); 177 assertEq(a.toString(), "1,2,3"); 178 179 a = [1, 2, 3]; 180 Object.seal(a); 181 assertThrowsInstanceOf(() => a.unshift(0), TypeError); 182 assertEq(a.toString(), "1,2,3"); 183 184 a = [1, 2, 3]; 185 Object.freeze(a); 186 assertThrowsInstanceOf(() => a.unshift(0), TypeError); 187 assertEq(a.toString(), "1,2,3"); 188 } 189 testUnshiftSimple(); 190 191 function testUnshiftHoles() { 192 var a = [,,,]; 193 Object.preventExtensions(a); 194 assertThrowsInstanceOf(() => a.unshift(0), TypeError); 195 assertEq(a.toString(), ",,"); 196 197 a = [,,,]; 198 Object.seal(a); 199 assertThrowsInstanceOf(() => a.unshift(0), TypeError); 200 assertEq(a.toString(), ",,"); 201 202 a = [,,,]; 203 Object.freeze(a); 204 assertThrowsInstanceOf(() => a.unshift(0), TypeError); 205 assertEq(a.toString(), ",,"); 206 } 207 testUnshiftHoles(); 208 209 function testSpliceDelete() { 210 var a = [1, 2, 3]; 211 Object.preventExtensions(a); 212 a.splice(1, 2); 213 assertEq(a.toString(), "1"); 214 215 a = [1, 2, 3]; 216 Object.seal(a); 217 assertThrowsInstanceOf(() => a.splice(1, 2), TypeError); 218 assertEq(a.toString(), "1,2,3"); 219 220 a = [1, 2, 3]; 221 Object.freeze(a); 222 assertThrowsInstanceOf(() => a.splice(1, 2), TypeError); 223 assertEq(a.toString(), "1,2,3"); 224 } 225 testSpliceDelete(); 226 227 function testSpliceAdd() { 228 var a = [1, 2, 3]; 229 Object.preventExtensions(a); 230 assertThrowsInstanceOf(() => a.splice(2, 1, 4, 5), TypeError); 231 assertEq(a.toString(), "1,2,4"); 232 233 a = [1, 2, 3]; 234 Object.seal(a); 235 assertThrowsInstanceOf(() => a.splice(2, 1, 4, 5), TypeError); 236 assertEq(a.toString(), "1,2,4"); 237 238 a = [1, 2, 3]; 239 Object.freeze(a); 240 assertThrowsInstanceOf(() => a.splice(2, 1, 4, 5), TypeError); 241 assertEq(a.toString(), "1,2,3"); 242 } 243 testSpliceAdd(); 244 245 function testSortSimple() { 246 var a = [3, 1, 2]; 247 Object.preventExtensions(a); 248 a.sort(); 249 assertEq(a.toString(), "1,2,3"); 250 251 a = [3, 1, 2]; 252 Object.seal(a); 253 a.sort(); 254 assertEq(a.toString(), "1,2,3"); 255 256 a = [3, 1, 2]; 257 Object.freeze(a); 258 assertThrowsInstanceOf(() => a.sort(), TypeError); 259 assertEq(a.toString(), "3,1,2"); 260 } 261 testSortSimple(); 262 263 function testSortHoles() { 264 var a = [, , 3, 1, 2]; 265 Object.preventExtensions(a); 266 assertThrowsInstanceOf(() => a.sort(), TypeError); 267 assertEq(a.toString(), ",,3,1,2"); 268 269 a = [, , 3, 1, 2]; 270 Object.seal(a); 271 assertThrowsInstanceOf(() => a.sort(), TypeError); 272 assertEq(a.toString(), ",,3,1,2"); 273 274 a = [, , 3, 1, 2]; 275 Object.freeze(a); 276 assertThrowsInstanceOf(() => a.sort(), TypeError); 277 assertEq(a.toString(), ",,3,1,2"); 278 } 279 testSortHoles();