| Index: test/mjsunit/array-concat.js
|
| diff --git a/test/mjsunit/array-concat.js b/test/mjsunit/array-concat.js
|
| index 2346c8de67d8faf99ebe6c4324032a503066ca5f..db89f4d0b8001868d01ba6b21a48941706ce59a0 100644
|
| --- a/test/mjsunit/array-concat.js
|
| +++ b/test/mjsunit/array-concat.js
|
| @@ -29,7 +29,82 @@
|
| * @fileoverview Test concat on small and large arrays
|
| */
|
|
|
| -var poses = [140, 4000000000];
|
| +var poses;
|
| +
|
| +poses = [140, 4000000000];
|
| +while (pos = poses.shift()) {
|
| + var a = new Array(pos);
|
| + var array_proto = [];
|
| + a.__proto__ = array_proto;
|
| + assertEquals(pos, a.length);
|
| + a.push('foo');
|
| + assertEquals(pos + 1, a.length);
|
| + var b = ['bar'];
|
| + var c = a.concat(b);
|
| + assertEquals(pos + 2, c.length);
|
| + assertEquals("undefined", typeof(c[pos - 1]));
|
| + assertEquals("foo", c[pos]);
|
| + assertEquals("bar", c[pos + 1]);
|
| +
|
| + // Can we fool the system by putting a number in a string?
|
| + var onetwofour = "124";
|
| + a[onetwofour] = 'doo';
|
| + assertEquals(a[124], 'doo');
|
| + c = a.concat(b);
|
| + assertEquals(c[124], 'doo');
|
| +
|
| + // If we put a number in the prototype, then the spec says it should be
|
| + // copied on concat.
|
| + array_proto["123"] = 'baz';
|
| + assertEquals(a[123], 'baz');
|
| +
|
| + c = a.concat(b);
|
| + assertEquals(pos + 2, c.length);
|
| + assertEquals("baz", c[123]);
|
| + assertEquals("undefined", typeof(c[pos - 1]));
|
| + assertEquals("foo", c[pos]);
|
| + assertEquals("bar", c[pos + 1]);
|
| +
|
| + // When we take the number off the prototype it disappears from a, but
|
| + // the concat put it in c itself.
|
| + array_proto["123"] = undefined;
|
| + assertEquals("undefined", typeof(a[123]));
|
| + assertEquals("baz", c[123]);
|
| +
|
| + // If the element of prototype is shadowed, the element on the instance
|
| + // should be copied, but not the one on the prototype.
|
| + array_proto[123] = 'baz';
|
| + a[123] = 'xyz';
|
| + assertEquals('xyz', a[123]);
|
| + c = a.concat(b);
|
| + assertEquals('xyz', c[123]);
|
| +
|
| + // Non-numeric properties on the prototype or the array shouldn't get
|
| + // copied.
|
| + array_proto.moe = 'joe';
|
| + a.ben = 'jerry';
|
| + assertEquals(a["moe"], 'joe');
|
| + assertEquals(a["ben"], 'jerry');
|
| + c = a.concat(b);
|
| + // ben was not copied
|
| + assertEquals("undefined", typeof(c.ben));
|
| +
|
| + // When we take moe off the prototype it disappears from all arrays.
|
| + array_proto.moe = undefined;
|
| + assertEquals("undefined", typeof(c.moe));
|
| +
|
| + // Negative indices don't get concated.
|
| + a[-1] = 'minus1';
|
| + assertEquals("minus1", a[-1]);
|
| + assertEquals("undefined", typeof(a[0xffffffff]));
|
| + c = a.concat(b);
|
| + assertEquals("undefined", typeof(c[-1]));
|
| + assertEquals("undefined", typeof(c[0xffffffff]));
|
| + assertEquals(c.length, a.length + 1);
|
| +
|
| +}
|
| +
|
| +poses = [140, 4000000000];
|
| while (pos = poses.shift()) {
|
| var a = new Array(pos);
|
| assertEquals(pos, a.length);
|
| @@ -91,7 +166,7 @@ while (pos = poses.shift()) {
|
| Array.prototype.moe = undefined;
|
| assertEquals("undefined", typeof(c.moe));
|
|
|
| - // Negative indeces don't get concated.
|
| + // Negative indices don't get concated.
|
| a[-1] = 'minus1';
|
| assertEquals("minus1", a[-1]);
|
| assertEquals("undefined", typeof(a[0xffffffff]));
|
|
|