| 399 | |
| 400 | // Test packed element array built-in functions with freeze. |
| 401 | function testPackedFrozenArray1(obj) { |
| 402 | assertTrue(Object.isSealed(obj)); |
| 403 | // Verify that the value can't be written |
| 404 | obj1 = new Array(...obj); |
| 405 | var length = obj.length; |
| 406 | for (var i = 0; i < length-1; i++) { |
| 407 | obj[i] = 'new'; |
| 408 | assertEquals(obj1[i], obj[i]); |
| 409 | } |
| 410 | // for symbol we cannot compare directly |
| 411 | assertTrue(typeof obj[length-1] == 'symbol'); |
| 412 | |
| 413 | // Verify that the length can't be written by builtins. |
| 414 | assertTrue(Array.isArray(obj)); |
| 415 | assertThrows(function() { obj.pop(); }, TypeError); |
| 416 | assertThrows(function() { obj.push(); }, TypeError); |
| 417 | assertThrows(function() { obj.shift(); }, TypeError); |
| 418 | assertThrows(function() { obj.unshift(); }, TypeError); |
| 419 | assertThrows(function() { obj.copyWithin(0,0); }, TypeError); |
| 420 | assertThrows(function() { obj.fill(0); }, TypeError); |
| 421 | assertThrows(function() { obj.reverse(); }, TypeError); |
| 422 | assertThrows(function() { obj.sort(); }, TypeError); |
| 423 | assertThrows(function() { obj.splice(0); }, TypeError); |
| 424 | assertThrows(function() { obj.splice(0, 0); }, TypeError); |
| 425 | assertTrue(Object.isFrozen(obj)); |
| 426 | |
| 427 | // Verify search, filter, iterator |
| 428 | assertEquals(obj.lastIndexOf(1), 2); |
| 429 | assertEquals(obj.indexOf('a'), 4); |
| 430 | assertEquals(obj.indexOf(undefined), 0); |
| 431 | assertFalse(obj.includes(Symbol("test"))); |
| 432 | assertTrue(obj.includes(undefined)); |
| 433 | assertFalse(obj.includes(NaN)); |
| 434 | assertTrue(obj.includes()); |
| 435 | assertEquals(obj.find(x => x==0), undefined); |
| 436 | assertEquals(obj.findIndex(x => x=='a'), 4); |
| 437 | assertTrue(obj.some(x => typeof x == 'symbol')); |
| 438 | assertFalse(obj.every(x => x == -1)); |
| 439 | var filteredArray = obj.filter(e => typeof e == "symbol"); |
| 440 | assertEquals(filteredArray.length, 1); |
| 441 | assertEquals(obj.map(x => x), obj); |
| 442 | var countPositiveNumber = 0; |
| 443 | obj.forEach(function(item, index) { |
| 444 | if (item === 1) { |
| 445 | countPositiveNumber++; |
| 446 | assertEquals(index, 2); |
| 447 | } |
| 448 | }); |
| 449 | assertEquals(countPositiveNumber, 1); |
| 450 | assertEquals(obj.length, obj.concat([]).length); |
| 451 | var iterator = obj.values(); |
| 452 | assertEquals(iterator.next().value, undefined); |
| 453 | assertEquals(iterator.next().value, null); |
| 454 | var iterator = obj.keys(); |
| 455 | assertEquals(iterator.next().value, 0); |
| 456 | assertEquals(iterator.next().value, 1); |
| 457 | var iterator = obj.entries(); |
| 458 | assertEquals(iterator.next().value, [0, undefined]); |