Merge & refactor bound function "length" property descriptor tests

This commit is contained in:
Alexey Shvayka 2020-08-18 22:54:19 +03:00 committed by Rick Waldron
parent 897a05954f
commit f80d7e7777
7 changed files with 30 additions and 113 deletions

View File

@ -1,14 +0,0 @@
// Copyright (c) 2012 Ecma International. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es5id: 15.3.4.5-13.b-1
description: Function.prototype.bind, bound fn has a 'length' own property
---*/
function foo() {}
var o = {};
var bf = foo.bind(o);
assert(bf.hasOwnProperty('length'), 'bf.hasOwnProperty("length") !== true');

View File

@ -1,17 +0,0 @@
// Copyright (c) 2012 Ecma International. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es5id: 15.3.4.5-15-1
description: Function.prototype.bind, 'length' is a data valued own property
---*/
function foo() {}
var o = {};
var bf = foo.bind(o);
var desc = Object.getOwnPropertyDescriptor(bf, 'length');
assert.sameValue(desc.hasOwnProperty('value'), true, 'desc.hasOwnProperty("value")');
assert.sameValue(desc.hasOwnProperty('get'), false, 'desc.hasOwnProperty("get")');
assert.sameValue(desc.hasOwnProperty('set'), false, 'desc.hasOwnProperty("set")');

View File

@ -1,19 +0,0 @@
// Copyright (c) 2012 Ecma International. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es5id: 15.3.4.5-15-2
description: >
Function.prototype.bind, 'length' is a data valued own property
---*/
function foo() {}
var o = {};
var bf = foo.bind(o);
var desc = Object.getOwnPropertyDescriptor(bf, 'length');
assert.sameValue(desc.value, 0, 'desc.value');
assert.sameValue(desc.enumerable, false, 'desc.enumerable');
assert.sameValue(desc.writable, false, 'desc.writable');
assert.sameValue(desc.configurable, true, 'desc.configurable');

View File

@ -1,18 +0,0 @@
// Copyright (c) 2012 Ecma International. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es5id: 15.3.4.5-15-3
description: >
Function.prototype.bind - The [[Writable]] attribute of length
property in F set as false
includes: [propertyHelper.js]
---*/
function foo() {}
var obj = foo.bind({});
var flength = obj.length;
assert(obj.hasOwnProperty("length"));
verifyNotWritable(obj, "length", null, 100);
assert.sameValue(obj.length, flength);

View File

@ -1,24 +0,0 @@
// Copyright (c) 2012 Ecma International. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es5id: 15.3.4.5-15-4
description: >
Function.prototype.bind - The [[Enumerable]] attribute of length
property in F set as false
---*/
var canEnumerable = false;
var hasProperty = false;
function foo() {}
var obj = foo.bind({});
hasProperty = obj.hasOwnProperty("length");
for (var prop in obj) {
if (prop === "length") {
canEnumerable = true;
}
}
assert(hasProperty, 'hasProperty !== true');
assert.sameValue(canEnumerable, false, 'canEnumerable');

View File

@ -1,21 +0,0 @@
// Copyright (c) 2012 Ecma International. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es5id: 15.3.4.5-15-5
description: >
Function.prototype.bind - The [[Configurable]] attribute of length
property in F set as true
---*/
var canConfigurable = false;
var hasProperty = false;
function foo() {}
var obj = foo.bind({});
hasProperty = obj.hasOwnProperty("length");
delete obj.length;
canConfigurable = !obj.hasOwnProperty("length");
assert(hasProperty, 'hasProperty !== true');
assert(canConfigurable, 'canConfigurable !== true');

View File

@ -0,0 +1,30 @@
// Copyright (c) 2012 Ecma International. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-function.prototype.bind
description: >
"length" property of a bound function has correct descriptor.
info: |
Function.prototype.bind ( thisArg, ...args )
[...]
8. Perform ! SetFunctionLength(F, L).
[...]
SetFunctionLength ( F, length )
[...]
4. Return ! DefinePropertyOrThrow(F, "length", PropertyDescriptor { [[Value]]:
length, [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }).
includes: [propertyHelper.js]
---*/
function fn() {}
verifyProperty(fn.bind(null), "length", {
value: 0,
writable: false,
enumerable: false,
configurable: true,
});