summaryrefslogtreecommitdiffstats
path: root/js/src/tests/non262/Array/frozen-dense-array.js
blob: cdb86daa3b5f60cda0839f9f4f115de32ca85a56 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/*
 * Any copyright is dedicated to the Public Domain.
 * http://creativecommons.org/licenses/publicdomain/
 * Author: Emilio Cobos Álvarez <ecoal95@gmail.com>
 */
var BUGNUMBER = 1310744;
var summary = "Dense array properties shouldn't be modified when they're frozen";

print(BUGNUMBER + ": " + summary);

var a = Object.freeze([4, 5, 1]);

function assertArrayIsExpected() {
  assertEq(a.length, 3);
  assertEq(a[0], 4);
  assertEq(a[1], 5);
  assertEq(a[2], 1);
}

assertThrowsInstanceOf(() => a.reverse(), TypeError);
assertThrowsInstanceOf(() => a.shift(), TypeError);
assertThrowsInstanceOf(() => a.unshift(0), TypeError);
assertThrowsInstanceOf(() => a.sort(function() {}), TypeError);
assertThrowsInstanceOf(() => a.pop(), TypeError);
assertThrowsInstanceOf(() => a.fill(0), TypeError);
assertThrowsInstanceOf(() => a.splice(0, 1, 1), TypeError);
assertThrowsInstanceOf(() => a.push("foo"), TypeError);
assertThrowsInstanceOf(() => { "use strict"; a.length = 5; }, TypeError);
assertThrowsInstanceOf(() => { "use strict"; a[2] = "foo"; }, TypeError);
assertThrowsInstanceOf(() => { "use strict"; delete a[0]; }, TypeError);
assertThrowsInstanceOf(() => a.splice(Math.a), TypeError);

// Shouldn't throw, since this is not strict mode, but shouldn't change the
// value of the property.
a.length = 5;
a[2] = "foo";
assertEq(delete a[0], false);

assertArrayIsExpected();

if (typeof reportCompare === "function")
  reportCompare(true, true);