Chromium Code Reviews| Index: test/mjsunit/array-functions-prototype-misc.js |
| diff --git a/test/mjsunit/array-functions-prototype-misc.js b/test/mjsunit/array-functions-prototype-misc.js |
| index 74dc9a6be0cecfbd90d160161b7f36ef204ec04f..7492eb889274a575aecf722fd78cda49db6e8574 100644 |
| --- a/test/mjsunit/array-functions-prototype-misc.js |
| +++ b/test/mjsunit/array-functions-prototype-misc.js |
| @@ -312,3 +312,75 @@ Array.prototype[1] = undefined; |
| // Test http://code.google.com/p/chromium/issues/detail?id=21860 |
| Array.prototype.push.apply([], [1].splice(0, -(-1 % 5))); |
| + |
| + |
| +// Check that the Array functions work also properly on non-Arrays |
| +var receiver; |
| + |
| +receiver = 'a string'; |
| +assertThrows(function(){ |
| + Array.prototype.push.call(receiver); |
| +}); |
| + |
| +receiver = 0; |
| +assertEquals(undefined, receiver.length); |
| +assertEquals(0, Array.prototype.push.call(receiver)); |
| +assertEquals(1, Array.prototype.push.call(receiver, 'first')); |
| +assertEquals(undefined, receiver.length); |
| + |
| +receiver = {}; |
| +assertEquals(undefined, receiver.length); |
| +assertEquals(0, Array.prototype.push.call(receiver)); |
| +assertEquals(0, Array.prototype.push.call(receiver)); |
| +assertEquals(0, receiver.length); |
| +assertEquals(1, Array.prototype.push.call(receiver, 'first')); |
| +assertEquals(1, receiver.length); |
| +assertEquals('first', receiver[0]); |
| +assertEquals(2, Array.prototype.push.call(receiver, 'second')); |
| +assertEquals(2, receiver.length); |
| +assertEquals('first', receiver[0]); |
| +assertEquals('second', receiver[1]); |
| + |
| +receiver = {'length': 10}; |
| +assertEquals(10, Array.prototype.push.call(receiver)); |
| +assertEquals(10, receiver.length); |
| +assertEquals(11, Array.prototype.push.call(receiver, 'first')); |
| +assertEquals(11, receiver.length); |
| +assertEquals('first', receiver[10]); |
| +assertEquals(13, Array.prototype.push.call(receiver, 'second', 'third')); |
| +assertEquals(13, receiver.length); |
| +assertEquals('first', receiver[10]); |
| +assertEquals('second', receiver[11]); |
| +assertEquals('third', receiver[12]); |
| + |
| +receiver = { |
| + get length() { return 10}, |
|
Jakob Kummerow
2015/07/31 12:24:14
nit: s/10}/10; }/
|
| + set length(l) {} |
| +}; |
| +assertEquals(10, Array.prototype.push.call(receiver)); |
| +assertEquals(10, receiver.length); |
| +assertEquals(11, Array.prototype.push.call(receiver, 'first')); |
| +assertEquals(10, receiver.length); |
| +assertEquals('first', receiver[10]); |
| +assertEquals(12, Array.prototype.push.call(receiver, 'second', 'third')); |
| +assertEquals(10, receiver.length); |
| +assertEquals('second', receiver[10]); |
| +assertEquals('third', receiver[11]); |
| + |
| +// readonly length |
| +receiver = { |
| + get length() { return 10 }, |
|
Jakob Kummerow
2015/07/31 12:24:14
nit: s/10/10;/
|
| +}; |
| +assertThrows(function(){ |
| + Array.prototype.push.call(receiver); |
| +}); |
| + |
| +receiver = { |
| + set length(l) {} |
| +}; |
| +assertEquals(0, Array.prototype.push.call(receiver)); |
| +assertEquals(undefined, receiver.length); |
| +assertEquals(1, Array.prototype.push.call(receiver, 'first')); |
| +assertEquals(undefined, receiver.length); |
| +assertEquals(2, Array.prototype.push.call(receiver, 'third', 'second')); |
|
Jakob Kummerow
2015/07/31 12:24:14
(as discussed: it's saddening that you can do this
|
| +assertEquals(undefined, receiver.length); |