diff options
Diffstat (limited to 'js/src/jit-test/tests/basic/non-extensible-elements2.js')
-rw-r--r-- | js/src/jit-test/tests/basic/non-extensible-elements2.js | 279 |
1 files changed, 279 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/basic/non-extensible-elements2.js b/js/src/jit-test/tests/basic/non-extensible-elements2.js new file mode 100644 index 0000000000..dd31b81ce5 --- /dev/null +++ b/js/src/jit-test/tests/basic/non-extensible-elements2.js @@ -0,0 +1,279 @@ +load(libdir + "asserts.js"); + +function testPopSimple() { + var a = [4, 3, 2, 1, 0]; + Object.preventExtensions(a); + for (var i = 0; i < 5; i++) + assertEq(a.pop(), i); + assertEq(a.length, 0); + + a = [1, 2, 3]; + Object.seal(a); + for (var i = 0; i < 10; i++) + assertThrowsInstanceOf(() => a.pop(), TypeError); + assertEq(a.toString(), "1,2,3"); + + a = [1, 2, 3]; + Object.freeze(a); + for (var i = 0; i < 10; i++) + assertThrowsInstanceOf(() => a.pop(), TypeError); + assertEq(a.toString(), "1,2,3"); +} +testPopSimple(); + +function testPopHoles() { + var a = [1, , 3]; + Object.preventExtensions(a); + assertEq(a.pop(), 3); + assertEq(a.pop(), undefined); + assertEq(a.pop(), 1); + assertEq(a.length, 0); + + a = [1, ,]; + Object.seal(a); + assertEq(a.pop(), undefined); + for (var i = 0; i < 10; i++) + assertThrowsInstanceOf(() => a.pop(), TypeError); + assertEq(a.toString(), "1"); + + a = [1, ,]; + Object.freeze(a); + for (var i = 0; i < 10; i++) + assertThrowsInstanceOf(() => a.pop(), TypeError); + assertEq(a.toString(), "1,"); +} +testPopHoles(); + +function testPushSimple() { + var a = [1, 2, 3]; + Object.preventExtensions(a); + for (var i = 0; i < 10; i++) + assertThrowsInstanceOf(() => a.push(4), TypeError); + assertEq(a.length, 3); + assertEq(a.toString(), "1,2,3"); + + a = [1, 2, 3]; + Object.seal(a); + for (var i = 0; i < 10; i++) + assertThrowsInstanceOf(() => a.push(4), TypeError); + assertEq(a.toString(), "1,2,3"); + + a = [1, 2, 3]; + Object.freeze(a); + for (var i = 0; i < 10; i++) + assertThrowsInstanceOf(() => a.push(4), TypeError); + assertEq(a.toString(), "1,2,3"); +} +testPushSimple(); + +function testPushHoles() { + var a = [,,,]; + Object.preventExtensions(a); + for (var i = 0; i < 10; i++) + assertThrowsInstanceOf(() => a.push(4), TypeError); + assertEq(a.length, 3); + assertEq(a.toString(), ",,"); + + a = [,,,]; + Object.seal(a); + for (var i = 0; i < 10; i++) + assertThrowsInstanceOf(() => a.push(4), TypeError); + assertEq(a.toString(), ",,"); + + a = [,,,]; + Object.freeze(a); + for (var i = 0; i < 10; i++) + assertThrowsInstanceOf(() => a.push(4), TypeError); + assertEq(a.toString(), ",,"); +} +testPushHoles(); + +function testReverseSimple() { + var a = [1, 2, 3]; + Object.preventExtensions(a); + a.reverse(); + assertEq(a.toString(), "3,2,1"); + + a = [1, 2, 3]; + Object.seal(a); + a.reverse(); + assertEq(a.toString(), "3,2,1"); + + a = [1, 2, 3]; + Object.freeze(a); + assertThrowsInstanceOf(() => a.reverse(), TypeError); + assertEq(a.toString(), "1,2,3"); +} +testReverseSimple(); + +function testReverseHoles() { + var a = [1, 2, , 4]; + Object.preventExtensions(a); + assertThrowsInstanceOf(() => a.reverse(), TypeError); + assertEq(a.toString(), "4,,,1"); + + a = [1, 2, , 4]; + Object.seal(a); + assertThrowsInstanceOf(() => a.reverse(), TypeError); + assertEq(a.toString(), "4,2,,1"); + + a = [1, 2, , 4]; + Object.freeze(a); + assertThrowsInstanceOf(() => a.reverse(), TypeError); + assertEq(a.toString(), "1,2,,4"); +} +testReverseHoles(); + +function testShiftSimple() { + var a = [1, 2, 3]; + Object.preventExtensions(a); + assertEq(a.shift(), 1); + assertEq(a.toString(), "2,3"); + for (var i = 0; i < 10; i++) + a.shift(); + assertEq(a.length, 0); + + a = [1, 2, 3]; + Object.seal(a); + for (var i = 0; i < 10; i++) + assertThrowsInstanceOf(() => a.shift(), TypeError); + assertEq(a.toString(), "3,3,3"); + + a = [1, 2, 3]; + Object.freeze(a); + for (var i = 0; i < 10; i++) + assertThrowsInstanceOf(() => a.shift(), TypeError); + assertEq(a.toString(), "1,2,3"); +} +testShiftSimple(); +testShiftSimple(); + +function testShiftHoles() { + var a = [1, 2, , 4]; + Object.preventExtensions(a); + for (var i = 0; i < 10; i++) + assertThrowsInstanceOf(() => a.shift(), TypeError); + assertEq(a.toString(), ",,,4"); + + a = [1, 2, , 4]; + Object.seal(a); + for (var i = 0; i < 10; i++) + assertThrowsInstanceOf(() => a.shift(), TypeError); + assertEq(a.toString(), "2,2,,4"); + + a = [1, 2, , 4]; + Object.freeze(a); + for (var i = 0; i < 10; i++) + assertThrowsInstanceOf(() => a.shift(), TypeError); + assertEq(a.toString(), "1,2,,4"); +} +testShiftHoles(); +testShiftHoles(); + +function testUnshiftSimple() { + var a = [1, 2, 3]; + Object.preventExtensions(a); + assertThrowsInstanceOf(() => a.unshift(0), TypeError); + assertEq(a.toString(), "1,2,3"); + + a = [1, 2, 3]; + Object.seal(a); + assertThrowsInstanceOf(() => a.unshift(0), TypeError); + assertEq(a.toString(), "1,2,3"); + + a = [1, 2, 3]; + Object.freeze(a); + assertThrowsInstanceOf(() => a.unshift(0), TypeError); + assertEq(a.toString(), "1,2,3"); +} +testUnshiftSimple(); + +function testUnshiftHoles() { + var a = [,,,]; + Object.preventExtensions(a); + assertThrowsInstanceOf(() => a.unshift(0), TypeError); + assertEq(a.toString(), ",,"); + + a = [,,,]; + Object.seal(a); + assertThrowsInstanceOf(() => a.unshift(0), TypeError); + assertEq(a.toString(), ",,"); + + a = [,,,]; + Object.freeze(a); + assertThrowsInstanceOf(() => a.unshift(0), TypeError); + assertEq(a.toString(), ",,"); +} +testUnshiftHoles(); + +function testSpliceDelete() { + var a = [1, 2, 3]; + Object.preventExtensions(a); + a.splice(1, 2); + assertEq(a.toString(), "1"); + + a = [1, 2, 3]; + Object.seal(a); + assertThrowsInstanceOf(() => a.splice(1, 2), TypeError); + assertEq(a.toString(), "1,2,3"); + + a = [1, 2, 3]; + Object.freeze(a); + assertThrowsInstanceOf(() => a.splice(1, 2), TypeError); + assertEq(a.toString(), "1,2,3"); +} +testSpliceDelete(); + +function testSpliceAdd() { + var a = [1, 2, 3]; + Object.preventExtensions(a); + assertThrowsInstanceOf(() => a.splice(2, 1, 4, 5), TypeError); + assertEq(a.toString(), "1,2,4"); + + a = [1, 2, 3]; + Object.seal(a); + assertThrowsInstanceOf(() => a.splice(2, 1, 4, 5), TypeError); + assertEq(a.toString(), "1,2,4"); + + a = [1, 2, 3]; + Object.freeze(a); + assertThrowsInstanceOf(() => a.splice(2, 1, 4, 5), TypeError); + assertEq(a.toString(), "1,2,3"); +} +testSpliceAdd(); + +function testSortSimple() { + var a = [3, 1, 2]; + Object.preventExtensions(a); + a.sort(); + assertEq(a.toString(), "1,2,3"); + + a = [3, 1, 2]; + Object.seal(a); + a.sort(); + assertEq(a.toString(), "1,2,3"); + + a = [3, 1, 2]; + Object.freeze(a); + assertThrowsInstanceOf(() => a.sort(), TypeError); + assertEq(a.toString(), "3,1,2"); +} +testSortSimple(); + +function testSortHoles() { + var a = [, , 3, 1, 2]; + Object.preventExtensions(a); + assertThrowsInstanceOf(() => a.sort(), TypeError); + assertEq(a.toString(), ",,3,1,2"); + + a = [, , 3, 1, 2]; + Object.seal(a); + assertThrowsInstanceOf(() => a.sort(), TypeError); + assertEq(a.toString(), ",,3,1,2"); + + a = [, , 3, 1, 2]; + Object.freeze(a); + assertThrowsInstanceOf(() => a.sort(), TypeError); + assertEq(a.toString(), ",,3,1,2"); +} +testSortHoles(); |