| 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..a2c1410837c256553b9d9d0bf0e6f2e848162d05 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; },
|
| + 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; },
|
| +};
|
| +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'));
|
| +assertEquals(undefined, receiver.length);
|
|
|