mirror of https://github.com/tc39/test262.git
47 lines
1.4 KiB
JavaScript
47 lines
1.4 KiB
JavaScript
// Copyright (C) 2020 Alexey Shvayka. All rights reserved.
|
|
// This code is governed by the BSD license found in the LICENSE file.
|
|
|
|
/*---
|
|
author: André Bargull
|
|
esid: sec-arraysetlength
|
|
description: >
|
|
[[Value]] is coerced to number before current descriptor's [[Writable]] check.
|
|
info: |
|
|
ArraySetLength ( A, Desc )
|
|
|
|
[...]
|
|
3. Let newLen be ? ToUint32(Desc.[[Value]]).
|
|
4. Let numberLen be ? ToNumber(Desc.[[Value]]).
|
|
[...]
|
|
7. Let oldLenDesc be OrdinaryGetOwnProperty(A, "length").
|
|
[...]
|
|
12. If oldLenDesc.[[Writable]] is false, return false.
|
|
features: [Symbol, Symbol.toPrimitive, Reflect, Reflect.set]
|
|
includes: [compareArray.js]
|
|
---*/
|
|
|
|
var array = [1, 2, 3];
|
|
var hints = [];
|
|
var length = {};
|
|
length[Symbol.toPrimitive] = function(hint) {
|
|
hints.push(hint);
|
|
Object.defineProperty(array, "length", {writable: false});
|
|
return 0;
|
|
};
|
|
|
|
assert.throws(TypeError, function() {
|
|
"use strict";
|
|
array.length = length;
|
|
}, '`"use strict"; array.length = length` throws a TypeError exception');
|
|
assert.compareArray(hints, ["number", "number"], 'The value of hints is expected to be ["number", "number"]');
|
|
|
|
|
|
array = [1, 2, 3];
|
|
hints = [];
|
|
|
|
assert(
|
|
!Reflect.set(array, "length", length),
|
|
'The value of !Reflect.set(array, "length", length) is expected to be true'
|
|
);
|
|
assert.compareArray(hints, ["number", "number"], 'The value of hints is expected to be ["number", "number"]');
|