| Index: test/mjsunit/array-methods-read-only-length.js
|
| diff --git a/test/mjsunit/array-push-unshift-read-only-length.js b/test/mjsunit/array-methods-read-only-length.js
|
| similarity index 58%
|
| rename from test/mjsunit/array-push-unshift-read-only-length.js
|
| rename to test/mjsunit/array-methods-read-only-length.js
|
| index 67aa39787aaf8b6f1b0febc15f4d7394782587a6..925ef1f67fe2047fe78297d7e27031a7c8a2487a 100644
|
| --- a/test/mjsunit/array-push-unshift-read-only-length.js
|
| +++ b/test/mjsunit/array-methods-read-only-length.js
|
| @@ -4,14 +4,12 @@
|
|
|
| // Flags: --allow-natives-syntax
|
|
|
| -function test(mode) {
|
| +function testAdd(mode) {
|
| var a = [];
|
| Object.defineProperty(a, "length", { writable : false});
|
|
|
| function check(f) {
|
| - try {
|
| - f(a);
|
| - } catch(e) { }
|
| + assertThrows(function() { f(a) }, TypeError);
|
| assertFalse(0 in a);
|
| assertEquals(0, a.length);
|
| }
|
| @@ -37,11 +35,67 @@ function test(mode) {
|
| check(unshift);
|
| %OptimizeFunctionOnNextCall(unshift);
|
| check(unshift);
|
| +
|
| + function splice(a) {
|
| + a.splice(0, 0, 3);
|
| + }
|
| +
|
| + check(splice);
|
| + check(splice);
|
| + check(splice);
|
| + %OptimizeFunctionOnNextCall(splice);
|
| + check(splice);
|
| }
|
|
|
| -test("fast properties");
|
| +testAdd("fast properties");
|
| +
|
| +testAdd("normalized");
|
| +
|
| +function testRemove(mode) {
|
| + var a = [1, 2, 3];
|
| + Object.defineProperty(a, "length", { writable : false});
|
| +
|
| + function check(f) {
|
| + assertThrows(function() { f(a) }, TypeError);
|
| + assertEquals(3, a.length);
|
| + }
|
| +
|
| + if (mode == "fast properties") %ToFastProperties(a);
|
|
|
| -test("normalized");
|
| + function pop(a) {
|
| + a.pop();
|
| + }
|
| +
|
| + check(pop);
|
| + check(pop);
|
| + check(pop);
|
| + %OptimizeFunctionOnNextCall(pop);
|
| + check(pop);
|
| +
|
| + function shift(a) {
|
| + a.shift();
|
| + }
|
| +
|
| + check(shift);
|
| + check(shift);
|
| + check(shift);
|
| + %OptimizeFunctionOnNextCall(shift);
|
| + check(shift);
|
| +
|
| + function splice(a) {
|
| + a.splice(0, 1);
|
| + }
|
| +
|
| + check(splice);
|
| + check(splice);
|
| + check(splice);
|
| + %OptimizeFunctionOnNextCall(splice);
|
| + check(splice);
|
| +}
|
| +
|
| +testRemove("fast properties");
|
| +
|
| +testRemove("normalized");
|
|
|
| var b = [];
|
| Object.defineProperty(b.__proto__, "0", {
|
| @@ -97,11 +151,6 @@ try {
|
| b.unshift(3, 4, 5);
|
| } catch(e) { }
|
|
|
| -// TODO(ulan): According to the ECMA-262 unshift should throw an exception
|
| -// when moving b[0] to b[3] (see 15.4.4.13 step 6.d.ii). This is difficult
|
| -// to do with our current implementation of SmartMove() in src/array.js and
|
| -// it will regress performance. Uncomment the following line once acceptable
|
| -// solution is found:
|
| -// assertFalse(2 in b);
|
| -// assertFalse(3 in b);
|
| -// assertEquals(2, b.length);
|
| +assertFalse(2 in b);
|
| +assertFalse(3 in b);
|
| +assertEquals(2, b.length);
|
|
|