blob: 34f63e646527e7068340b5a2a1ad1fa6bd187f08 [file] [log] [blame]
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: true},
{enumerable: false},
{writable: false},
{configurable: true, writable: true},
{enumerable: false, configurable: false},
{configurable: true, 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: false});
Object.defineProperty(obj, 0, {enumerable: true});
Object.defineProperty(obj, 0, {writable: true});
assertEq(obj[0], 100);
Object.defineProperty(obj, 0, {configurable: false, 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, false);
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);
const constructors = [
Int8Array,
Uint8Array,
Uint8ClampedArray,
Int16Array,
Uint16Array,
Int32Array,
Uint32Array,
Float32Array,
Float64Array ];
if (typeof SharedArrayBuffer != "undefined")
constructors.push(sharedConstructor(Int8Array),
sharedConstructor(Uint8Array),
sharedConstructor(Int16Array),
sharedConstructor(Uint16Array),
sharedConstructor(Int32Array),
sharedConstructor(Uint32Array),
sharedConstructor(Float32Array),
sharedConstructor(Float64Array));
constructors.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");