mirror of
https://github.com/tc39/test262.git
synced 2025-04-08 19:35:28 +02:00
Add tests for Subclassing the built-in Function Object
This commit is contained in:
parent
cde62d08d8
commit
1bcc056914
27
test/language/subclassing/Function/instance-length.js
Normal file
27
test/language/subclassing/Function/instance-length.js
Normal file
@ -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');
|
39
test/language/subclassing/Function/instance-name.js
Normal file
39
test/language/subclassing/Function/instance-name.js
Normal file
@ -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');
|
20
test/language/subclassing/Function/regular-subclassing.js
Normal file
20
test/language/subclassing/Function/regular-subclassing.js
Normal file
@ -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);
|
35
test/language/subclassing/Function/super-must-be-called.js
Normal file
35
test/language/subclassing/Function/super-must-be-called.js
Normal file
@ -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…
x
Reference in New Issue
Block a user