mirror of https://github.com/tc39/test262.git
Add tests for Subclassing the built-in Function Object
This commit is contained in:
parent
cde62d08d8
commit
1bcc056914
|
@ -0,0 +1,27 @@
|
|||
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
es6id: 19.2.4.1
|
||||
description: Subclassed Function instances has length and name properties
|
||||
info: >
|
||||
19.2.4.1 length
|
||||
|
||||
The value of the length property is an integer that indicates the typical
|
||||
number of arguments expected by the function. However, the language permits
|
||||
the function to be invoked with some other number of arguments. The behaviour
|
||||
of a function when invoked on a number of arguments other than the number
|
||||
specified by its length property depends on the function. This property has
|
||||
the attributes { [[Writable]]: false, [[Enumerable]]: false,
|
||||
[[Configurable]]: true }.
|
||||
includes: [propertyHelper.js]
|
||||
---*/
|
||||
|
||||
class Fn extends Function {}
|
||||
|
||||
var fn = new Fn('a', 'b', 'return a + b');
|
||||
|
||||
assert.sameValue(fn.length, 2);
|
||||
|
||||
verifyNotEnumerable(fn, 'length');
|
||||
verifyNotWritable(fn, 'length');
|
||||
verifyConfigurable(fn, 'length');
|
|
@ -0,0 +1,39 @@
|
|||
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
es6id: 19.2.4.2
|
||||
description: Subclassed Function instances has length and name properties
|
||||
info: >
|
||||
19.2.4.2 name
|
||||
|
||||
The value of the name property is an String that is descriptive of the
|
||||
function. The name has no semantic significance but is typically a variable or
|
||||
property name that is used to refer to the function at its point of definition
|
||||
in ECMAScript code. This property has the attributes { [[Writable]]: false,
|
||||
[[Enumerable]]: false, [[Configurable]]: true }.
|
||||
|
||||
Anonymous functions objects that do not have a contextual name associated with
|
||||
them by this specification do not have a name own property but inherit the
|
||||
name property of %FunctionPrototype%.
|
||||
|
||||
19.2.1.1.1 RuntimeSemantics: CreateDynamicFunction(constructor, newTarget,
|
||||
kind, args)
|
||||
|
||||
...
|
||||
29. Perform SetFunctionName(F, "anonymous").
|
||||
...
|
||||
includes: [propertyHelper.js]
|
||||
---*/
|
||||
|
||||
class Fn extends Function {}
|
||||
|
||||
var fn = new Fn('a', 'b', 'return a + b');
|
||||
|
||||
assert.sameValue(
|
||||
fn.name, 'anonymous',
|
||||
'Dynamic Functions are called anonymous'
|
||||
);
|
||||
|
||||
verifyNotEnumerable(fn, 'name');
|
||||
verifyNotWritable(fn, 'name');
|
||||
verifyConfigurable(fn, 'name');
|
|
@ -0,0 +1,20 @@
|
|||
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
es6id: 19.2.1
|
||||
description: Subclassing Function
|
||||
info: >
|
||||
19.2.1 The Function Constructor
|
||||
|
||||
...
|
||||
|
||||
The Function constructor is designed to be subclassable. It may be used as the
|
||||
value of an extends clause of a class definition.
|
||||
...
|
||||
---*/
|
||||
|
||||
class Fn extends Function {}
|
||||
|
||||
var fn = new Fn('a', 'return a * 2');
|
||||
|
||||
assert.sameValue(fn(42), 84);
|
|
@ -0,0 +1,35 @@
|
|||
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
es6id: 19.2.1
|
||||
description: >
|
||||
super must be called to initialize Function internal slots
|
||||
info: >
|
||||
19.2.1 The Function Constructor
|
||||
|
||||
...
|
||||
|
||||
The Function constructor is designed to be subclassable. It may be used as the
|
||||
value of an extends clause of a class definition. Subclass constructors that
|
||||
intend to inherit the specified Function behaviour must include a super call
|
||||
to the Function constructor to create and initialize a subclass instances with
|
||||
the internal slots necessary for built-in function behaviour.
|
||||
...
|
||||
---*/
|
||||
|
||||
class Fn extends Function {
|
||||
constructor() {}
|
||||
}
|
||||
|
||||
assert.throws(ReferenceError, function() {
|
||||
new Fn();
|
||||
});
|
||||
|
||||
class Fn2 extends Function {
|
||||
constructor() {
|
||||
super();
|
||||
}
|
||||
}
|
||||
|
||||
var fn = new Fn2();
|
||||
assert(fn instanceof Function);
|
Loading…
Reference in New Issue