mirror of https://github.com/tc39/test262.git
84 lines
2.0 KiB
JavaScript
84 lines
2.0 KiB
JavaScript
// Copyright (C) 2022 Chengzhong Wu. All rights reserved.
|
|
// This code is governed by the BSD license found in the LICENSE file.
|
|
/*---
|
|
esid: sec-wrappedfunctioncreate
|
|
description: >
|
|
The value of WrappedFunction.name is copied from the target function
|
|
info: |
|
|
WrappedFunctionCreate ( callerRealm: a Realm Record, Target: a function object, )
|
|
|
|
...
|
|
7. Let result be CopyNameAndLength(wrapped, Target).
|
|
...
|
|
|
|
CopyNameAndLength ( F: a function object, Target: a function object, prefix: a String, optional argCount: a Number, )
|
|
|
|
...
|
|
6. Let targetName be ? Get(Target, "name").
|
|
7. If Type(targetName) is not String, set targetName to the empty String.
|
|
8. Perform ! SetFunctionName(F, targetName, prefix).
|
|
|
|
SetFunctionName ( F, name [ , prefix ] )
|
|
|
|
...
|
|
6. Return ! DefinePropertyOrThrow(F, "name", PropertyDescriptor { [[Value]]: name, [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }).
|
|
|
|
includes: [propertyHelper.js]
|
|
features: [ShadowRealm]
|
|
---*/
|
|
|
|
assert.sameValue(
|
|
typeof ShadowRealm.prototype.evaluate,
|
|
'function',
|
|
'This test must fail if ShadowRealm.prototype.evaluate is not a function'
|
|
);
|
|
|
|
const r = new ShadowRealm();
|
|
|
|
let wrapped = r.evaluate(`
|
|
function fn() {}
|
|
fn;
|
|
`);
|
|
verifyProperty(wrapped, "name", {
|
|
value: "fn",
|
|
enumerable: false,
|
|
writable: false,
|
|
configurable: true,
|
|
});
|
|
|
|
// The name property is an accessor.
|
|
wrapped = r.evaluate(`
|
|
function fn() {}
|
|
Object.defineProperty(fn, 'name', {
|
|
get: () => "bar",
|
|
enumerable: false,
|
|
configurable: true,
|
|
});
|
|
fn;
|
|
`);
|
|
verifyProperty(wrapped, "name", {
|
|
value: "bar",
|
|
enumerable: false,
|
|
writable: false,
|
|
configurable: true,
|
|
});
|
|
|
|
// The value of fn.name is not a string.
|
|
for (const name of [null, undefined, 0, '1n', false, NaN, Infinity, 'Symbol()', '[]', '{}']) {
|
|
wrapped = r.evaluate(`
|
|
function fn() {}
|
|
Object.defineProperty(fn, 'name', {
|
|
value: ${String(name)},
|
|
enumerable: false,
|
|
configurable: true,
|
|
});
|
|
fn;
|
|
`);
|
|
verifyProperty(wrapped, "name", {
|
|
value: "",
|
|
enumerable: false,
|
|
writable: false,
|
|
configurable: true,
|
|
});
|
|
}
|