summaryrefslogtreecommitdiffstats
path: root/js/src/tests/non262/TypedArray/object-defineproperty.js
blob: b19f76b845a149338a4efb24be06aeaba1ef30de (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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
var obj = new Int32Array(2);
obj[0] = 100;

var throws = [
    // Disallow accessors
    {get: undefined},
    {set: undefined},
    {get: undefined, set: undefined},
    {get: function() {}},
    {set: function() {}},
    {get: function() {}, set: function() {}},

    {configurable: false},
    {enumerable: false},
    {writable: false},

    {configurable: false, writable: true},
    {enumerable: false, configurable: false},

    {configurable: false, value: 15}
];

for (var desc of throws) {
    assertThrowsInstanceOf(function() { Object.defineProperty(obj, 0, desc); }, TypeError);
    assertThrowsInstanceOf(function() { Object.defineProperties(obj, {0: desc}); }, TypeError);
}

Object.defineProperty(obj, 0, {});
Object.defineProperty(obj, 0, {configurable: true});
Object.defineProperty(obj, 0, {enumerable: true});
Object.defineProperty(obj, 0, {writable: true});

assertEq(obj[0], 100);

Object.defineProperty(obj, 0, {configurable: true, value: 15});
assertEq(obj[0], 15);
Object.defineProperty(obj, 0, {enumerable: true, value: 16});
assertEq(obj[0], 16);
Object.defineProperty(obj, 0, {writable: true, value: 17});
assertEq(obj[0], 17);
Object.defineProperty(obj, 0, {value: 18});
assertEq(obj[0], 18);

var desc = Object.getOwnPropertyDescriptor(obj, 0);
assertEq(desc.configurable, true);
assertEq(desc.enumerable, true);
assertEq(desc.writable, true);
assertEq(desc.value, 18);
assertEq('get' in desc, false);
assertEq('set' in desc, false);

Object.defineProperties(obj, {0: {value: 20}, 1: {value: 42}});
assertEq(obj[0], 20);
assertEq(obj[1], 42);

anyTypedArrayConstructors.forEach(constructor => {
    var obj = new constructor(4);
    obj[0] = 100;
    obj[1] = 200;

    for (var v of [20, 300, -10, Math.pow(2, 32), -Math.pow(2, 32), NaN]) {
        Object.defineProperty(obj, 0, {value: v});
        obj[1] = v;
        assertEq(obj[0], obj[1]);
    }
});

reportCompare(true, true, "test");