mirror of
https://github.com/tc39/test262.git
synced 2025-07-27 07:54:41 +02:00
Merge pull request #468 from bocoup/subclassing
Subclassing built-in objects
This commit is contained in:
commit
4d418a9fe7
@ -0,0 +1,26 @@
|
|||||||
|
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 22.1.1
|
||||||
|
description: >
|
||||||
|
Constructor calling super() with 2+ arguments creates an Array object
|
||||||
|
info: >
|
||||||
|
22.1.1 The Array Constructor
|
||||||
|
|
||||||
|
The Array 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 exotic Array behaviour must include a super call to the
|
||||||
|
Array constructor to initialize subclass instances that are exotic Array
|
||||||
|
objects.
|
||||||
|
includes: [compareArray.js]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class Sub extends Array {
|
||||||
|
constructor(a, b) {
|
||||||
|
super(a, b);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var sub = new Sub(42, 'foo');
|
||||||
|
|
||||||
|
assert(compareArray(sub, [42, 'foo']));
|
@ -0,0 +1,25 @@
|
|||||||
|
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 22.1.1
|
||||||
|
description: >
|
||||||
|
Constructor calling super() with a single argument creates an Array object
|
||||||
|
info: >
|
||||||
|
22.1.1 The Array Constructor
|
||||||
|
|
||||||
|
The Array 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 exotic Array behaviour must include a super call to the
|
||||||
|
Array constructor to initialize subclass instances that are exotic Array
|
||||||
|
objects.
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class Sub extends Array {
|
||||||
|
constructor(a) {
|
||||||
|
super(a);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var sub = new Sub(42);
|
||||||
|
|
||||||
|
assert.sameValue(sub.length, 42);
|
@ -0,0 +1,37 @@
|
|||||||
|
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 22.1.4.1
|
||||||
|
description: >
|
||||||
|
Instances has the own property length
|
||||||
|
info: >
|
||||||
|
22.1.4.1 length
|
||||||
|
|
||||||
|
The length property of an Array instance is a data property whose value is
|
||||||
|
always numerically greater than the name of every configurable own property
|
||||||
|
whose name is an array index.
|
||||||
|
|
||||||
|
The length property initially has the attributes { [[Writable]]: true,
|
||||||
|
[[Enumerable]]: false, [[Configurable]]: false }.
|
||||||
|
includes: [propertyHelper.js]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class Ar extends Array {}
|
||||||
|
|
||||||
|
var arr = new Ar('foo', 'bar');
|
||||||
|
|
||||||
|
assert.sameValue(arr[0], 'foo');
|
||||||
|
assert.sameValue(arr[1], 'bar');
|
||||||
|
|
||||||
|
var arrDesc = Object.getOwnPropertyDescriptor(arr, 'length');
|
||||||
|
|
||||||
|
assert.sameValue(arrDesc.writable, true);
|
||||||
|
assert.sameValue(arrDesc.enumerable, false);
|
||||||
|
assert.sameValue(arrDesc.configurable, false);
|
||||||
|
|
||||||
|
assert.sameValue(arr[1], 'bar');
|
||||||
|
|
||||||
|
arr.length = 1;
|
||||||
|
|
||||||
|
assert.sameValue(arr[0], 'foo');
|
||||||
|
assert.sameValue(arr[1], undefined);
|
@ -0,0 +1,33 @@
|
|||||||
|
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 22.1.1
|
||||||
|
description: Subclassing Array
|
||||||
|
info: >
|
||||||
|
22.1.1 The Array Constructor
|
||||||
|
|
||||||
|
The Array constructor is designed to be subclassable. It may be used as the
|
||||||
|
value of an extends clause of a class definition. (...)
|
||||||
|
includes: [compareArray.js]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class Sub extends Array {}
|
||||||
|
|
||||||
|
var a1 = new Sub(42, 'foo');
|
||||||
|
|
||||||
|
assert.sameValue(a1.length, 2);
|
||||||
|
assert.sameValue(a1[0], 42);
|
||||||
|
assert.sameValue(a1[1], 'foo');
|
||||||
|
|
||||||
|
a1.push(true);
|
||||||
|
assert.sameValue(a1.length, 3, 'Array#push updates the length property');
|
||||||
|
assert.sameValue(a1[0], 42);
|
||||||
|
assert.sameValue(a1[1], 'foo');
|
||||||
|
assert.sameValue(a1[2], true, 'Adds new item');
|
||||||
|
|
||||||
|
var a2 = new Sub(7);
|
||||||
|
assert.sameValue(a2.length, 7);
|
||||||
|
|
||||||
|
var a3 = new Sub();
|
||||||
|
assert(compareArray(a3, []));
|
||||||
|
assert.sameValue(a3.length, 0);
|
@ -0,0 +1,32 @@
|
|||||||
|
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 22.1.1
|
||||||
|
description: Super need to be called to initialize internals
|
||||||
|
info: >
|
||||||
|
22.1.1 The Array Constructor
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
The Array 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 exotic Array behaviour must include a super call to the
|
||||||
|
Array constructor to initialize subclass instances that are exotic Array
|
||||||
|
objects.
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class A extends Array {
|
||||||
|
constructor() {}
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.throws(ReferenceError, function() {
|
||||||
|
new A();
|
||||||
|
});
|
||||||
|
|
||||||
|
class A2 extends Array {
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
new A2();
|
@ -0,0 +1,31 @@
|
|||||||
|
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 24.1.2
|
||||||
|
description: Subclassing the ArrayBuffer object
|
||||||
|
info: >
|
||||||
|
24.1.2 The ArrayBuffer Constructor
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
The ArrayBuffer 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 ArrayBuffer behaviour must include a
|
||||||
|
super call to the ArrayBuffer constructor to create and initialize subclass
|
||||||
|
instances with the internal state necessary to support the
|
||||||
|
ArrayBuffer.prototype built-in methods.
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class AB extends ArrayBuffer {}
|
||||||
|
|
||||||
|
var ab = new AB(4);
|
||||||
|
|
||||||
|
var sliced = ab.slice(0, 1);
|
||||||
|
|
||||||
|
assert(sliced instanceof AB);
|
||||||
|
assert(sliced instanceof ArrayBuffer);
|
||||||
|
assert.notSameValue(ab, sliced);
|
||||||
|
|
||||||
|
assert.throws(RangeError, function() {
|
||||||
|
new AB();
|
||||||
|
});
|
@ -0,0 +1,33 @@
|
|||||||
|
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 24.1.2
|
||||||
|
description: Super need to be called to initialize internals
|
||||||
|
info: >
|
||||||
|
24.1.2 The ArrayBuffer Constructor
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
The ArrayBuffer 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 ArrayBuffer behaviour must include a
|
||||||
|
super call to the ArrayBuffer constructor to create and initialize subclass
|
||||||
|
instances with the internal state necessary to support the
|
||||||
|
ArrayBuffer.prototype built-in methods.
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class AB1 extends ArrayBuffer {
|
||||||
|
constructor() {}
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.throws(ReferenceError, function() {
|
||||||
|
new AB1(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
class AB2 extends ArrayBuffer {
|
||||||
|
constructor(length) {
|
||||||
|
super(length);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
new AB2(1);
|
@ -0,0 +1,23 @@
|
|||||||
|
// 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.3.1
|
||||||
|
description: Subclassing Function
|
||||||
|
info: >
|
||||||
|
19.3.1 The Boolean Constructor
|
||||||
|
|
||||||
|
The Boolean constructor is designed to be subclassable. It may be used as the
|
||||||
|
value of an extends clause of a class definition.
|
||||||
|
...
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class Bln extends Boolean {}
|
||||||
|
|
||||||
|
var b1 = new Bln(1);
|
||||||
|
|
||||||
|
assert.notSameValue(b1, true, 'b1 is an Boolean object');
|
||||||
|
assert.sameValue(b1.valueOf(), true);
|
||||||
|
|
||||||
|
var b2 = new Bln(0);
|
||||||
|
assert.notSameValue(b2, false, 'bln is an Boolean object');
|
||||||
|
assert.sameValue(b2.valueOf(), false);
|
@ -0,0 +1,31 @@
|
|||||||
|
// 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.3.1
|
||||||
|
description: Super need to be called to initialize Boolean internals
|
||||||
|
info: >
|
||||||
|
19.3.1 The Boolean Constructor
|
||||||
|
|
||||||
|
...
|
||||||
|
Subclass constructors that intend to inherit the specified Boolean behaviour
|
||||||
|
must include a super call to the Boolean constructor to create and initialize
|
||||||
|
the subclass instance with a [[BooleanData]] internal slot.
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class Bln extends Boolean {
|
||||||
|
constructor() {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Boolean internals are not initialized
|
||||||
|
assert.throws(ReferenceError, function() {
|
||||||
|
new Bln(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
class Bln2 extends Boolean {
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var b = new Bln2(1);
|
||||||
|
assert(b instanceof Boolean);
|
@ -0,0 +1,28 @@
|
|||||||
|
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 24.2.2
|
||||||
|
description: Subclassing the DataView object
|
||||||
|
info: >
|
||||||
|
24.2.2 The DataView Constructor
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
The DataView 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 DataView behaviour must include a super call
|
||||||
|
to the DataView constructor to create and initialize subclass instances with
|
||||||
|
the internal state necessary to support the DataView.prototype built-in
|
||||||
|
methods.
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class DV extends DataView {}
|
||||||
|
|
||||||
|
var buffer = new ArrayBuffer(1);
|
||||||
|
|
||||||
|
var dv = new DV(buffer);
|
||||||
|
assert.sameValue(dv.buffer, buffer);
|
||||||
|
|
||||||
|
assert.throws(TypeError, function() {
|
||||||
|
new DV();
|
||||||
|
});
|
@ -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: 24.2.2
|
||||||
|
description: Super need to be called to initialize internals
|
||||||
|
info: >
|
||||||
|
24.2.2 The DataView Constructor
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
The DataView 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 DataView behaviour must include a super call
|
||||||
|
to the DataView constructor to create and initialize subclass instances with
|
||||||
|
the internal state necessary to support the DataView.prototype built-in
|
||||||
|
methods.
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class DV1 extends DataView {
|
||||||
|
constructor() {}
|
||||||
|
}
|
||||||
|
|
||||||
|
var buffer = new ArrayBuffer(1);
|
||||||
|
|
||||||
|
assert.throws(ReferenceError, function() {
|
||||||
|
new DV1(buffer);
|
||||||
|
});
|
||||||
|
|
||||||
|
class DV2 extends DataView {
|
||||||
|
constructor(length) {
|
||||||
|
super(length);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
new DV2(buffer);
|
@ -0,0 +1,37 @@
|
|||||||
|
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 20.3.2
|
||||||
|
description: Subclassing the String object
|
||||||
|
info: >
|
||||||
|
20.3.2 The Date Constructor
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
The Date constructor is a single function whose behaviour is overloaded based
|
||||||
|
upon the number and types of its arguments.
|
||||||
|
|
||||||
|
The Date 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 Date behaviour must include a super call to
|
||||||
|
the Date constructor to create and initialize the subclass instance with a
|
||||||
|
[[DateValue]] internal slot.
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class D extends Date {}
|
||||||
|
|
||||||
|
var d1 = new D(1859, '10', 24);
|
||||||
|
assert.sameValue(d1.getUTCFullYear(), 1859);
|
||||||
|
assert.sameValue(d1.getUTCMonth(), 10);
|
||||||
|
assert.sameValue(d1.getUTCDate(), 24);
|
||||||
|
|
||||||
|
var d2 = new D(-3474558000000);
|
||||||
|
assert.sameValue(d2.getUTCFullYear(), 1859);
|
||||||
|
assert.sameValue(d2.getUTCMonth(), 10);
|
||||||
|
assert.sameValue(d2.getUTCDate(), 24);
|
||||||
|
|
||||||
|
var d3 = new D();
|
||||||
|
var d4 = new Date();
|
||||||
|
assert.sameValue(d3.getUTCFullYear(), d4.getUTCFullYear());
|
||||||
|
assert.sameValue(d3.getUTCMonth(), d4.getUTCMonth());
|
||||||
|
assert.sameValue(d3.getUTCDate(), d4.getUTCDate());
|
@ -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: 20.3.2
|
||||||
|
description: Super need to be called to initialize internals
|
||||||
|
info: >
|
||||||
|
20.3.2 The Date Constructor
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
The Date constructor is a single function whose behaviour is overloaded based
|
||||||
|
upon the number and types of its arguments.
|
||||||
|
|
||||||
|
The Date 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 Date behaviour must include a super call to
|
||||||
|
the Date constructor to create and initialize the subclass instance with a
|
||||||
|
[[DateValue]] internal slot.
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class D extends Date {
|
||||||
|
constructor() {}
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.throws(ReferenceError, function() {
|
||||||
|
new D();
|
||||||
|
});
|
||||||
|
|
||||||
|
class D2 extends Date {
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
new D2();
|
@ -0,0 +1,36 @@
|
|||||||
|
// 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.5.1.1
|
||||||
|
description: >
|
||||||
|
A new instance has the message property if created with a parameter
|
||||||
|
info: >
|
||||||
|
19.5.1.1 Error ( message )
|
||||||
|
|
||||||
|
...
|
||||||
|
4. If message is not undefined, then
|
||||||
|
a. Let msg be ToString(message).
|
||||||
|
b. ReturnIfAbrupt(msg).
|
||||||
|
c. Let msgDesc be the PropertyDescriptor{[[Value]]: msg, [[Writable]]: true,
|
||||||
|
[[Enumerable]]: false, [[Configurable]]: true}.
|
||||||
|
d. Let status be DefinePropertyOrThrow(O, "message", msgDesc).
|
||||||
|
...
|
||||||
|
includes: [propertyHelper.js]
|
||||||
|
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class Err extends Error {}
|
||||||
|
|
||||||
|
Err.prototype.message = 'custom-error';
|
||||||
|
|
||||||
|
var err1 = new Err('foo 42');
|
||||||
|
assert.sameValue(err1.message, 'foo 42');
|
||||||
|
assert(err1.hasOwnProperty('message'));
|
||||||
|
|
||||||
|
verifyWritable(err1, 'message');
|
||||||
|
verifyNotEnumerable(err1, 'message');
|
||||||
|
verifyConfigurable(err1, 'message');
|
||||||
|
|
||||||
|
var err2 = new Err();
|
||||||
|
assert.sameValue(err2.hasOwnProperty('message'), false);
|
||||||
|
assert.sameValue(err2.message, 'custom-error');
|
@ -0,0 +1,22 @@
|
|||||||
|
// 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.5.1
|
||||||
|
description: Subclassing the Error object
|
||||||
|
info: >
|
||||||
|
19.5.1 The Error Constructor
|
||||||
|
|
||||||
|
...
|
||||||
|
The Error constructor is designed to be subclassable. It may be used as the
|
||||||
|
alue of an extends clause of a class definition. Subclass constructors that
|
||||||
|
intend to inherit the specified Error behaviour must include a super call to
|
||||||
|
the Error constructor to create and initialize subclass instances with a
|
||||||
|
[[ErrorData]] internal slot.
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class CustomError extends Error {}
|
||||||
|
|
||||||
|
var err = new CustomError('foo 42');
|
||||||
|
|
||||||
|
assert.sameValue(err.message, 'foo 42');
|
||||||
|
assert.sameValue(err.name, 'Error');
|
@ -0,0 +1,23 @@
|
|||||||
|
// 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.5.1
|
||||||
|
description: Super need to be called to initialize internals
|
||||||
|
info: >
|
||||||
|
19.5.1 The Error Constructor
|
||||||
|
|
||||||
|
...
|
||||||
|
The Error constructor is designed to be subclassable. It may be used as the
|
||||||
|
alue of an extends clause of a class definition. Subclass constructors that
|
||||||
|
intend to inherit the specified Error behaviour must include a super call to
|
||||||
|
the Error constructor to create and initialize subclass instances with a
|
||||||
|
[[ErrorData]] internal slot.
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class CustomError extends Error {
|
||||||
|
constructor() {}
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.throws(ReferenceError, function() {
|
||||||
|
new CustomError('foo');
|
||||||
|
});
|
@ -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);
|
@ -0,0 +1,31 @@
|
|||||||
|
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 25.2.4.1
|
||||||
|
description: >
|
||||||
|
Subclassed GeneratorFunction instances `length` property
|
||||||
|
info: >
|
||||||
|
25.2.4.1 length
|
||||||
|
|
||||||
|
The value of the length property is an integer that indicates the typical
|
||||||
|
number of arguments expected by the GeneratorFunction. However, the language
|
||||||
|
permits the function to be invoked with some other number of arguments. The
|
||||||
|
behaviour of a GeneratorFunction 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]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var GeneratorFunction = Object.getPrototypeOf(function* () {}).constructor;
|
||||||
|
|
||||||
|
class GFn extends GeneratorFunction {}
|
||||||
|
|
||||||
|
var gfn = new GFn('a', 'b', 'return a + b');
|
||||||
|
|
||||||
|
assert.sameValue(gfn.length, 2);
|
||||||
|
|
||||||
|
verifyNotEnumerable(gfn, 'length');
|
||||||
|
verifyNotWritable(gfn, 'length');
|
||||||
|
verifyConfigurable(gfn, 'length');
|
@ -0,0 +1,46 @@
|
|||||||
|
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 25.2.4.2
|
||||||
|
description: Subclassed GeneratorFunction instances `name` property
|
||||||
|
info: >
|
||||||
|
25.2.4.2 name
|
||||||
|
|
||||||
|
The specification for the name property of Function instances given in
|
||||||
|
19.2.4.2 also applies to GeneratorFunction instances.
|
||||||
|
|
||||||
|
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]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var GeneratorFunction = Object.getPrototypeOf(function* () {}).constructor;
|
||||||
|
|
||||||
|
class GFn extends GeneratorFunction {}
|
||||||
|
|
||||||
|
var gfn = new GFn('a', 'b', 'return a + b');
|
||||||
|
|
||||||
|
assert.sameValue(
|
||||||
|
gfn.name, 'anonymous',
|
||||||
|
'Dynamic Functions are called anonymous'
|
||||||
|
);
|
||||||
|
|
||||||
|
verifyNotEnumerable(gfn, 'name');
|
||||||
|
verifyNotWritable(gfn, 'name');
|
||||||
|
verifyConfigurable(gfn, 'name');
|
@ -0,0 +1,38 @@
|
|||||||
|
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 25.2.4.3
|
||||||
|
description: >
|
||||||
|
Subclassed GeneratorFunction instances `prototype` property
|
||||||
|
info: >
|
||||||
|
25.2.4.3 prototype
|
||||||
|
|
||||||
|
Whenever a GeneratorFunction instance is created another ordinary object is
|
||||||
|
also created and is the initial value of the generator function’s prototype
|
||||||
|
property. The value of the prototype property is used to initialize the
|
||||||
|
[[Prototype]] internal slot of a newly created Generator object when the
|
||||||
|
generator function object is invoked using either [[Call]] or [[Construct]].
|
||||||
|
|
||||||
|
This property has the attributes { [[Writable]]: true, [[Enumerable]]: false,
|
||||||
|
[[Configurable]]: false }.
|
||||||
|
includes: [propertyHelper.js]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var GeneratorFunction = Object.getPrototypeOf(function* () {}).constructor;
|
||||||
|
|
||||||
|
class GFn extends GeneratorFunction {}
|
||||||
|
|
||||||
|
var gfn = new GFn(';');
|
||||||
|
|
||||||
|
assert.sameValue(
|
||||||
|
Object.keys(gfn.prototype).length, 0,
|
||||||
|
'prototype is a new ordinary object'
|
||||||
|
);
|
||||||
|
assert.sameValue(
|
||||||
|
gfn.prototype.hasOwnProperty('constructor'), false,
|
||||||
|
'prototype has no constructor reference'
|
||||||
|
);
|
||||||
|
|
||||||
|
verifyNotEnumerable(gfn, 'prototype');
|
||||||
|
verifyWritable(gfn, 'prototype');
|
||||||
|
verifyNotConfigurable(gfn, 'prototype');
|
@ -0,0 +1,29 @@
|
|||||||
|
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 25.2.1
|
||||||
|
description: Subclassing GeneratorFunction
|
||||||
|
info: >
|
||||||
|
25.2.1 The GeneratorFunction Constructor
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
GeneratorFunction 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 GeneratorFunction behaviour must include a super call
|
||||||
|
to the GeneratorFunction constructor to create and initialize subclass
|
||||||
|
instances with the internal slots necessary for built-in GeneratorFunction
|
||||||
|
behaviour.
|
||||||
|
...
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var GeneratorFunction = Object.getPrototypeOf(function* () {}).constructor;
|
||||||
|
|
||||||
|
class Gfn extends GeneratorFunction {}
|
||||||
|
|
||||||
|
var gfn = new Gfn('a', 'yield a; yield a * 2;');
|
||||||
|
|
||||||
|
var iter = gfn(42);
|
||||||
|
|
||||||
|
assert.sameValue(iter.next().value, 42);
|
||||||
|
assert.sameValue(iter.next().value, 84);
|
@ -0,0 +1,38 @@
|
|||||||
|
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 25.2.1
|
||||||
|
description: >
|
||||||
|
super must be called to initialize GeneratorFunction internal slots
|
||||||
|
info: >
|
||||||
|
25.2.1 The GeneratorFunction Constructor
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
GeneratorFunction 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 GeneratorFunction behaviour must include a super call
|
||||||
|
to the GeneratorFunction constructor to create and initialize subclass
|
||||||
|
instances with the internal slots necessary for built-in GeneratorFunction
|
||||||
|
behaviour.
|
||||||
|
...
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var GeneratorFunction = Object.getPrototypeOf(function* () {}).constructor;
|
||||||
|
|
||||||
|
class GFn1 extends GeneratorFunction {
|
||||||
|
constructor() {}
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.throws(ReferenceError, function() {
|
||||||
|
new GFn1();
|
||||||
|
});
|
||||||
|
|
||||||
|
class GFn2 extends GeneratorFunction {
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var fn = new GFn2();
|
||||||
|
assert(fn instanceof GeneratorFunction);
|
@ -0,0 +1,26 @@
|
|||||||
|
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 23.1.1
|
||||||
|
description: Subclassing the Map object
|
||||||
|
info: >
|
||||||
|
23.1.1 The Map Constructor
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
The Map constructor is designed to be subclassable. It may be used as the
|
||||||
|
value in an extends clause of a class definition. Subclass constructors that
|
||||||
|
intend to inherit the specified Map behaviour must include a super call to the
|
||||||
|
Map constructor to create and initialize the subclass instance with the
|
||||||
|
internal state necessary to support the Map.prototype built-in methods.
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class M extends Map {}
|
||||||
|
|
||||||
|
var map = new M([{ 'foo': 'bar' }]);
|
||||||
|
|
||||||
|
assert.sameValue(map.size, 1);
|
||||||
|
|
||||||
|
map.set('bar', 'baz');
|
||||||
|
|
||||||
|
assert.sameValue(map.size, 2);
|
@ -0,0 +1,32 @@
|
|||||||
|
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 23.1.1
|
||||||
|
description: Super need to be called to initialize internals
|
||||||
|
info: >
|
||||||
|
23.1.1 The Map Constructor
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
The Map constructor is designed to be subclassable. It may be used as the
|
||||||
|
value in an extends clause of a class definition. Subclass constructors that
|
||||||
|
intend to inherit the specified Map behaviour must include a super call to the
|
||||||
|
Map constructor to create and initialize the subclass instance with the
|
||||||
|
internal state necessary to support the Map.prototype built-in methods.
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class M1 extends Map {
|
||||||
|
constructor() {}
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.throws(ReferenceError, function() {
|
||||||
|
new M1();
|
||||||
|
});
|
||||||
|
|
||||||
|
class M2 extends Map {
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
new M2();
|
@ -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.5.6.1.1
|
||||||
|
description: >
|
||||||
|
A new instance has the message property if created with a parameter
|
||||||
|
info: >
|
||||||
|
19.5.6.1.1 NativeError ( message )
|
||||||
|
|
||||||
|
...
|
||||||
|
4. If message is not undefined, then
|
||||||
|
a. Let msg be ToString(message).
|
||||||
|
b. Let msgDesc be the PropertyDescriptor{[[Value]]: msg, [[Writable]]: true,
|
||||||
|
[[Enumerable]]: false, [[Configurable]]: true}.
|
||||||
|
c. Let status be DefinePropertyOrThrow(O, "message", msgDesc).
|
||||||
|
...
|
||||||
|
includes: [propertyHelper.js]
|
||||||
|
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class Err extends EvalError {}
|
||||||
|
|
||||||
|
Err.prototype.message = 'custom-eval-error';
|
||||||
|
|
||||||
|
var err1 = new Err('foo 42');
|
||||||
|
assert.sameValue(err1.message, 'foo 42');
|
||||||
|
assert(err1.hasOwnProperty('message'));
|
||||||
|
|
||||||
|
verifyWritable(err1, 'message');
|
||||||
|
verifyNotEnumerable(err1, 'message');
|
||||||
|
verifyConfigurable(err1, 'message');
|
||||||
|
|
||||||
|
var err2 = new Err();
|
||||||
|
assert.sameValue(err2.hasOwnProperty('message'), false);
|
||||||
|
assert.sameValue(err2.message, 'custom-eval-error');
|
@ -0,0 +1,18 @@
|
|||||||
|
// 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.5.6.1.1
|
||||||
|
description: >
|
||||||
|
The name property on a new instance
|
||||||
|
info: >
|
||||||
|
19.5.6.3.3 NativeError.prototype.name
|
||||||
|
|
||||||
|
The initial value of the name property of the prototype for a given
|
||||||
|
NativeError constructor is a string consisting of the name of the constructor
|
||||||
|
(the name used instead of NativeError).
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class Err extends EvalError {}
|
||||||
|
|
||||||
|
var err1 = new Err();
|
||||||
|
assert.sameValue(err1.name, 'EvalError');
|
@ -0,0 +1,23 @@
|
|||||||
|
// 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.5.6.1
|
||||||
|
description: Super need to be called to initialize internals
|
||||||
|
info: >
|
||||||
|
19.5.6.1 NativeError Constructors
|
||||||
|
|
||||||
|
...
|
||||||
|
Each NativeError 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 NativeError behaviour must include a
|
||||||
|
super call to the NativeError constructor to create and initialize subclass
|
||||||
|
instances with a [[ErrorData]] internal slot.
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class CustomError extends EvalError {
|
||||||
|
constructor() {}
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.throws(ReferenceError, function() {
|
||||||
|
new CustomError();
|
||||||
|
});
|
@ -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.5.6.1.1
|
||||||
|
description: >
|
||||||
|
A new instance has the message property if created with a parameter
|
||||||
|
info: >
|
||||||
|
19.5.6.1.1 NativeError ( message )
|
||||||
|
|
||||||
|
...
|
||||||
|
4. If message is not undefined, then
|
||||||
|
a. Let msg be ToString(message).
|
||||||
|
b. Let msgDesc be the PropertyDescriptor{[[Value]]: msg, [[Writable]]: true,
|
||||||
|
[[Enumerable]]: false, [[Configurable]]: true}.
|
||||||
|
c. Let status be DefinePropertyOrThrow(O, "message", msgDesc).
|
||||||
|
...
|
||||||
|
includes: [propertyHelper.js]
|
||||||
|
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class Err extends RangeError {}
|
||||||
|
|
||||||
|
Err.prototype.message = 'custom-range-error';
|
||||||
|
|
||||||
|
var err1 = new Err('foo 42');
|
||||||
|
assert.sameValue(err1.message, 'foo 42');
|
||||||
|
assert(err1.hasOwnProperty('message'));
|
||||||
|
|
||||||
|
verifyWritable(err1, 'message');
|
||||||
|
verifyNotEnumerable(err1, 'message');
|
||||||
|
verifyConfigurable(err1, 'message');
|
||||||
|
|
||||||
|
var err2 = new Err();
|
||||||
|
assert.sameValue(err2.hasOwnProperty('message'), false);
|
||||||
|
assert.sameValue(err2.message, 'custom-range-error');
|
@ -0,0 +1,18 @@
|
|||||||
|
// 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.5.6.1.1
|
||||||
|
description: >
|
||||||
|
The name property on a new instance
|
||||||
|
info: >
|
||||||
|
19.5.6.3.3 NativeError.prototype.name
|
||||||
|
|
||||||
|
The initial value of the name property of the prototype for a given
|
||||||
|
NativeError constructor is a string consisting of the name of the constructor
|
||||||
|
(the name used instead of NativeError).
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class Err extends RangeError {}
|
||||||
|
|
||||||
|
var err1 = new Err();
|
||||||
|
assert.sameValue(err1.name, 'RangeError');
|
@ -0,0 +1,23 @@
|
|||||||
|
// 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.5.6.1
|
||||||
|
description: Super need to be called to initialize internals
|
||||||
|
info: >
|
||||||
|
19.5.6.1 NativeError Constructors
|
||||||
|
|
||||||
|
...
|
||||||
|
Each NativeError 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 NativeError behaviour must include a
|
||||||
|
super call to the NativeError constructor to create and initialize subclass
|
||||||
|
instances with a [[ErrorData]] internal slot.
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class CustomError extends RangeError {
|
||||||
|
constructor() {}
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.throws(ReferenceError, function() {
|
||||||
|
new CustomError();
|
||||||
|
});
|
@ -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.5.6.1.1
|
||||||
|
description: >
|
||||||
|
A new instance has the message property if created with a parameter
|
||||||
|
info: >
|
||||||
|
19.5.6.1.1 NativeError ( message )
|
||||||
|
|
||||||
|
...
|
||||||
|
4. If message is not undefined, then
|
||||||
|
a. Let msg be ToString(message).
|
||||||
|
b. Let msgDesc be the PropertyDescriptor{[[Value]]: msg, [[Writable]]: true,
|
||||||
|
[[Enumerable]]: false, [[Configurable]]: true}.
|
||||||
|
c. Let status be DefinePropertyOrThrow(O, "message", msgDesc).
|
||||||
|
...
|
||||||
|
includes: [propertyHelper.js]
|
||||||
|
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class Err extends ReferenceError {}
|
||||||
|
|
||||||
|
Err.prototype.message = 'custom-reference-error';
|
||||||
|
|
||||||
|
var err1 = new Err('foo 42');
|
||||||
|
assert.sameValue(err1.message, 'foo 42');
|
||||||
|
assert(err1.hasOwnProperty('message'));
|
||||||
|
|
||||||
|
verifyWritable(err1, 'message');
|
||||||
|
verifyNotEnumerable(err1, 'message');
|
||||||
|
verifyConfigurable(err1, 'message');
|
||||||
|
|
||||||
|
var err2 = new Err();
|
||||||
|
assert.sameValue(err2.hasOwnProperty('message'), false);
|
||||||
|
assert.sameValue(err2.message, 'custom-reference-error');
|
@ -0,0 +1,18 @@
|
|||||||
|
// 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.5.6.1.1
|
||||||
|
description: >
|
||||||
|
The name property on a new instance
|
||||||
|
info: >
|
||||||
|
19.5.6.3.3 NativeError.prototype.name
|
||||||
|
|
||||||
|
The initial value of the name property of the prototype for a given
|
||||||
|
NativeError constructor is a string consisting of the name of the constructor
|
||||||
|
(the name used instead of NativeError).
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class Err extends ReferenceError {}
|
||||||
|
|
||||||
|
var err1 = new Err();
|
||||||
|
assert.sameValue(err1.name, 'ReferenceError');
|
@ -0,0 +1,23 @@
|
|||||||
|
// 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.5.6.1
|
||||||
|
description: Super need to be called to initialize internals
|
||||||
|
info: >
|
||||||
|
19.5.6.1 NativeError Constructors
|
||||||
|
|
||||||
|
...
|
||||||
|
Each NativeError 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 NativeError behaviour must include a
|
||||||
|
super call to the NativeError constructor to create and initialize subclass
|
||||||
|
instances with a [[ErrorData]] internal slot.
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class CustomError extends ReferenceError {
|
||||||
|
constructor() {}
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.throws(ReferenceError, function() {
|
||||||
|
new CustomError();
|
||||||
|
});
|
@ -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.5.6.1.1
|
||||||
|
description: >
|
||||||
|
A new instance has the message property if created with a parameter
|
||||||
|
info: >
|
||||||
|
19.5.6.1.1 NativeError ( message )
|
||||||
|
|
||||||
|
...
|
||||||
|
4. If message is not undefined, then
|
||||||
|
a. Let msg be ToString(message).
|
||||||
|
b. Let msgDesc be the PropertyDescriptor{[[Value]]: msg, [[Writable]]: true,
|
||||||
|
[[Enumerable]]: false, [[Configurable]]: true}.
|
||||||
|
c. Let status be DefinePropertyOrThrow(O, "message", msgDesc).
|
||||||
|
...
|
||||||
|
includes: [propertyHelper.js]
|
||||||
|
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class Err extends SyntaxError {}
|
||||||
|
|
||||||
|
Err.prototype.message = 'custom-syntax-error';
|
||||||
|
|
||||||
|
var err1 = new Err('foo 42');
|
||||||
|
assert.sameValue(err1.message, 'foo 42');
|
||||||
|
assert(err1.hasOwnProperty('message'));
|
||||||
|
|
||||||
|
verifyWritable(err1, 'message');
|
||||||
|
verifyNotEnumerable(err1, 'message');
|
||||||
|
verifyConfigurable(err1, 'message');
|
||||||
|
|
||||||
|
var err2 = new Err();
|
||||||
|
assert.sameValue(err2.hasOwnProperty('message'), false);
|
||||||
|
assert.sameValue(err2.message, 'custom-syntax-error');
|
@ -0,0 +1,18 @@
|
|||||||
|
// 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.5.6.1.1
|
||||||
|
description: >
|
||||||
|
The name property on a new instance
|
||||||
|
info: >
|
||||||
|
19.5.6.3.3 NativeError.prototype.name
|
||||||
|
|
||||||
|
The initial value of the name property of the prototype for a given
|
||||||
|
NativeError constructor is a string consisting of the name of the constructor
|
||||||
|
(the name used instead of NativeError).
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class Err extends SyntaxError {}
|
||||||
|
|
||||||
|
var err1 = new Err();
|
||||||
|
assert.sameValue(err1.name, 'SyntaxError');
|
@ -0,0 +1,23 @@
|
|||||||
|
// 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.5.6.1
|
||||||
|
description: Super need to be called to initialize internals
|
||||||
|
info: >
|
||||||
|
19.5.6.1 NativeError Constructors
|
||||||
|
|
||||||
|
...
|
||||||
|
Each NativeError 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 NativeError behaviour must include a
|
||||||
|
super call to the NativeError constructor to create and initialize subclass
|
||||||
|
instances with a [[ErrorData]] internal slot.
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class CustomError extends SyntaxError {
|
||||||
|
constructor() {}
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.throws(ReferenceError, function() {
|
||||||
|
new CustomError();
|
||||||
|
});
|
@ -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.5.6.1.1
|
||||||
|
description: >
|
||||||
|
A new instance has the message property if created with a parameter
|
||||||
|
info: >
|
||||||
|
19.5.6.1.1 NativeError ( message )
|
||||||
|
|
||||||
|
...
|
||||||
|
4. If message is not undefined, then
|
||||||
|
a. Let msg be ToString(message).
|
||||||
|
b. Let msgDesc be the PropertyDescriptor{[[Value]]: msg, [[Writable]]: true,
|
||||||
|
[[Enumerable]]: false, [[Configurable]]: true}.
|
||||||
|
c. Let status be DefinePropertyOrThrow(O, "message", msgDesc).
|
||||||
|
...
|
||||||
|
includes: [propertyHelper.js]
|
||||||
|
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class Err extends TypeError {}
|
||||||
|
|
||||||
|
Err.prototype.message = 'custom-type-error';
|
||||||
|
|
||||||
|
var err1 = new Err('foo 42');
|
||||||
|
assert.sameValue(err1.message, 'foo 42');
|
||||||
|
assert(err1.hasOwnProperty('message'));
|
||||||
|
|
||||||
|
verifyWritable(err1, 'message');
|
||||||
|
verifyNotEnumerable(err1, 'message');
|
||||||
|
verifyConfigurable(err1, 'message');
|
||||||
|
|
||||||
|
var err2 = new Err();
|
||||||
|
assert.sameValue(err2.hasOwnProperty('message'), false);
|
||||||
|
assert.sameValue(err2.message, 'custom-type-error');
|
@ -0,0 +1,18 @@
|
|||||||
|
// 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.5.6.1.1
|
||||||
|
description: >
|
||||||
|
The name property on a new instance
|
||||||
|
info: >
|
||||||
|
19.5.6.3.3 NativeError.prototype.name
|
||||||
|
|
||||||
|
The initial value of the name property of the prototype for a given
|
||||||
|
NativeError constructor is a string consisting of the name of the constructor
|
||||||
|
(the name used instead of NativeError).
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class Err extends TypeError {}
|
||||||
|
|
||||||
|
var err1 = new Err();
|
||||||
|
assert.sameValue(err1.name, 'TypeError');
|
@ -0,0 +1,23 @@
|
|||||||
|
// 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.5.6.1
|
||||||
|
description: Super need to be called to initialize internals
|
||||||
|
info: >
|
||||||
|
19.5.6.1 NativeError Constructors
|
||||||
|
|
||||||
|
...
|
||||||
|
Each NativeError 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 NativeError behaviour must include a
|
||||||
|
super call to the NativeError constructor to create and initialize subclass
|
||||||
|
instances with a [[ErrorData]] internal slot.
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class CustomError extends TypeError {
|
||||||
|
constructor() {}
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.throws(ReferenceError, function() {
|
||||||
|
new CustomError();
|
||||||
|
});
|
@ -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.5.6.1.1
|
||||||
|
description: >
|
||||||
|
A new instance has the message property if created with a parameter
|
||||||
|
info: >
|
||||||
|
19.5.6.1.1 NativeError ( message )
|
||||||
|
|
||||||
|
...
|
||||||
|
4. If message is not undefined, then
|
||||||
|
a. Let msg be ToString(message).
|
||||||
|
b. Let msgDesc be the PropertyDescriptor{[[Value]]: msg, [[Writable]]: true,
|
||||||
|
[[Enumerable]]: false, [[Configurable]]: true}.
|
||||||
|
c. Let status be DefinePropertyOrThrow(O, "message", msgDesc).
|
||||||
|
...
|
||||||
|
includes: [propertyHelper.js]
|
||||||
|
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class Err extends URIError {}
|
||||||
|
|
||||||
|
Err.prototype.message = 'custom-uri-error';
|
||||||
|
|
||||||
|
var err1 = new Err('foo 42');
|
||||||
|
assert.sameValue(err1.message, 'foo 42');
|
||||||
|
assert(err1.hasOwnProperty('message'));
|
||||||
|
|
||||||
|
verifyWritable(err1, 'message');
|
||||||
|
verifyNotEnumerable(err1, 'message');
|
||||||
|
verifyConfigurable(err1, 'message');
|
||||||
|
|
||||||
|
var err2 = new Err();
|
||||||
|
assert.sameValue(err2.hasOwnProperty('message'), false);
|
||||||
|
assert.sameValue(err2.message, 'custom-uri-error');
|
@ -0,0 +1,18 @@
|
|||||||
|
// 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.5.6.1.1
|
||||||
|
description: >
|
||||||
|
The name property on a new instance
|
||||||
|
info: >
|
||||||
|
19.5.6.3.3 NativeError.prototype.name
|
||||||
|
|
||||||
|
The initial value of the name property of the prototype for a given
|
||||||
|
NativeError constructor is a string consisting of the name of the constructor
|
||||||
|
(the name used instead of NativeError).
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class Err extends URIError {}
|
||||||
|
|
||||||
|
var err1 = new Err();
|
||||||
|
assert.sameValue(err1.name, 'URIError');
|
@ -0,0 +1,23 @@
|
|||||||
|
// 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.5.6.1
|
||||||
|
description: Super need to be called to initialize internals
|
||||||
|
info: >
|
||||||
|
19.5.6.1 NativeError Constructors
|
||||||
|
|
||||||
|
...
|
||||||
|
Each NativeError 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 NativeError behaviour must include a
|
||||||
|
super call to the NativeError constructor to create and initialize subclass
|
||||||
|
instances with a [[ErrorData]] internal slot.
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class CustomError extends URIError {
|
||||||
|
constructor() {}
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.throws(ReferenceError, function() {
|
||||||
|
new CustomError();
|
||||||
|
});
|
@ -0,0 +1,23 @@
|
|||||||
|
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 20.1.1
|
||||||
|
description: Subclassing the Number object
|
||||||
|
info: >
|
||||||
|
20.1.1 The Number Constructor
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
The Number 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 Number behaviour must include a super call to
|
||||||
|
the Number constructor to create and initialize the subclass instance with a
|
||||||
|
[[NumberData]] internal slot.
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class N extends Number {}
|
||||||
|
|
||||||
|
var n = new N(42);
|
||||||
|
|
||||||
|
assert.sameValue(n.toFixed(2), '42.00');
|
||||||
|
assert.sameValue(n.toExponential(2), '4.20e+1');
|
@ -0,0 +1,32 @@
|
|||||||
|
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 20.1.1
|
||||||
|
description: Super need to be called to initialize internals
|
||||||
|
info: >
|
||||||
|
20.1.1 The Number Constructor
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
The Number 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 Number behaviour must include a super call to
|
||||||
|
the Number constructor to create and initialize the subclass instance with a
|
||||||
|
[[NumberData]] internal slot.
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class N extends Number {
|
||||||
|
constructor() {}
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.throws(ReferenceError, function() {
|
||||||
|
new N();
|
||||||
|
});
|
||||||
|
|
||||||
|
class N2 extends Number {
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
new N2();
|
@ -0,0 +1,45 @@
|
|||||||
|
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 9.2.2
|
||||||
|
description: Throws a ReferenceError if constructor result is undefined
|
||||||
|
info: >
|
||||||
|
9.2.2 [[Construct]] ( argumentsList, newTarget)
|
||||||
|
|
||||||
|
...
|
||||||
|
11. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
|
||||||
|
...
|
||||||
|
13. If result.[[type]] is return, then
|
||||||
|
a. If Type(result.[[value]]) is Object, return
|
||||||
|
NormalCompletion(result.[[value]]).
|
||||||
|
...
|
||||||
|
c. If result.[[value]] is not undefined, throw a TypeError exception.
|
||||||
|
...
|
||||||
|
15. Return envRec.GetThisBinding().
|
||||||
|
|
||||||
|
8.1.1.3.4 GetThisBinding ()
|
||||||
|
|
||||||
|
...
|
||||||
|
3. If envRec.[[thisBindingStatus]] is "uninitialized", throw a ReferenceError
|
||||||
|
exception.
|
||||||
|
...
|
||||||
|
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class Obj extends Object {
|
||||||
|
constructor() {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Obj2 extends Object {
|
||||||
|
constructor() {}
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.throws(ReferenceError, function() {
|
||||||
|
new Obj();
|
||||||
|
});
|
||||||
|
|
||||||
|
assert.throws(ReferenceError, function() {
|
||||||
|
new Obj2();
|
||||||
|
});
|
@ -0,0 +1,40 @@
|
|||||||
|
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 9.2.2
|
||||||
|
description: The Type of the return value must be an Object
|
||||||
|
info: >
|
||||||
|
9.2.2 [[Construct]] ( argumentsList, newTarget)
|
||||||
|
|
||||||
|
...
|
||||||
|
11. Let result be OrdinaryCallEvaluateBody(F, argumentsList).
|
||||||
|
...
|
||||||
|
13. If result.[[type]] is return, then
|
||||||
|
a. If Type(result.[[value]]) is Object, return
|
||||||
|
NormalCompletion(result.[[value]]).
|
||||||
|
...
|
||||||
|
c. If result.[[value]] is not undefined, throw a TypeError exception.
|
||||||
|
...
|
||||||
|
|
||||||
|
6.1.7.2 Object Internal Methods and Internal Slots
|
||||||
|
|
||||||
|
...
|
||||||
|
If any specified use of an internal method of an exotic object is not
|
||||||
|
supported by an implementation, that usage must throw a TypeError exception
|
||||||
|
when attempted.
|
||||||
|
|
||||||
|
6.1.7.3 Invariants of the Essential Internal Methods
|
||||||
|
|
||||||
|
[[Construct]] ( )
|
||||||
|
- The Type of the return value must be Object.
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class Obj extends Object {
|
||||||
|
constructor() {
|
||||||
|
return 42;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.throws(TypeError, function() {
|
||||||
|
var obj = new Obj();
|
||||||
|
});
|
@ -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.1.1
|
||||||
|
description: Subclassing Object
|
||||||
|
info: >
|
||||||
|
19.1.1 The Object Constructor
|
||||||
|
|
||||||
|
The Object constructor is designed to be subclassable. It may be used as the
|
||||||
|
value of an extends clause of a class definition.
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class Obj extends Object {}
|
||||||
|
|
||||||
|
var obj = new Obj();
|
||||||
|
|
||||||
|
assert.notSameValue(
|
||||||
|
Object.getPrototypeOf(obj), Object.prototype,
|
||||||
|
'returns the class prototype'
|
||||||
|
);
|
@ -0,0 +1,21 @@
|
|||||||
|
// 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.1.1
|
||||||
|
description: Subclassing Object replacing a prototype method
|
||||||
|
info: >
|
||||||
|
19.1.1 The Object Constructor
|
||||||
|
|
||||||
|
The Object constructor is designed to be subclassable. It may be used as the
|
||||||
|
value of an extends clause of a class definition.
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class Obj extends Object {
|
||||||
|
valueOf() {
|
||||||
|
return 42;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var obj = new Obj();
|
||||||
|
|
||||||
|
assert.sameValue(obj.valueOf(), 42, 'Replaces prototype');
|
@ -0,0 +1,34 @@
|
|||||||
|
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 25.4.3
|
||||||
|
description: Subclassing the Promise object
|
||||||
|
info: >
|
||||||
|
25.4.3 The Promise Constructor
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
The Promise constructor is designed to be subclassable. It may be used as the
|
||||||
|
value in an extends clause of a class definition. Subclass constructors that
|
||||||
|
intend to inherit the specified Promise behaviour must include a super call
|
||||||
|
to the Promise constructor to create and initialize the subclass instance with
|
||||||
|
the internal state necessary to support the Promise and Promise.prototype
|
||||||
|
built-in methods.
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class Prom extends Promise {}
|
||||||
|
|
||||||
|
assert.throws(TypeError, function() {
|
||||||
|
new Prom();
|
||||||
|
});
|
||||||
|
|
||||||
|
var calledExecutor = false;
|
||||||
|
|
||||||
|
var prom1 = new Prom(function(resolve) {
|
||||||
|
calledExecutor = true;
|
||||||
|
assert.sameValue(arguments.length, 2);
|
||||||
|
assert(arguments[0] === Promise.resolve);
|
||||||
|
assert(arguments[1] === Promise.reject);
|
||||||
|
});
|
||||||
|
|
||||||
|
assert(calledExecutor);
|
@ -0,0 +1,33 @@
|
|||||||
|
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 25.4.3
|
||||||
|
description: Super need to be called to initialize internals
|
||||||
|
info: >
|
||||||
|
25.4.3 The Promise Constructor
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
The Promise constructor is designed to be subclassable. It may be used as the
|
||||||
|
value in an extends clause of a class definition. Subclass constructors that
|
||||||
|
intend to inherit the specified Promise behaviour must include a super call
|
||||||
|
to the Promise constructor to create and initialize the subclass instance with
|
||||||
|
the internal state necessary to support the Promise and Promise.prototype
|
||||||
|
built-in methods.
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class Prom1 extends Promise {
|
||||||
|
constructor() {}
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.throws(ReferenceError, function() {
|
||||||
|
new Prom1();
|
||||||
|
});
|
||||||
|
|
||||||
|
class Prom2 extends Promise {
|
||||||
|
constructor(exec) {
|
||||||
|
super(exec);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
new Prom2(function() {});
|
@ -0,0 +1,32 @@
|
|||||||
|
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 14.5.14
|
||||||
|
description: The Proxy Object is not subclasseable without a prototype
|
||||||
|
info: >
|
||||||
|
14.5.14 Runtime Semantics: ClassDefinitionEvaluation
|
||||||
|
|
||||||
|
5. If ClassHeritageopt is not present, then
|
||||||
|
...
|
||||||
|
6. Else
|
||||||
|
...
|
||||||
|
e. If superclass is null, then
|
||||||
|
...
|
||||||
|
f. Else if IsConstructor(superclass) is false, throw a TypeError exception.
|
||||||
|
g. Else
|
||||||
|
...
|
||||||
|
ii. Let protoParent be Get(superclass, "prototype").
|
||||||
|
iii. ReturnIfAbrupt(protoParent).
|
||||||
|
iv. If Type(protoParent) is neither Object nor Null, throw a TypeError exception.
|
||||||
|
|
||||||
|
26.2.1 The Proxy Constructor
|
||||||
|
|
||||||
|
The Proxy constructor is the %Proxy% intrinsic object and the initial value of
|
||||||
|
the Proxy property of the global object. When called as a constructor it
|
||||||
|
creates and initializes a new proxy exotic object. Proxy is not intended to be
|
||||||
|
called as a function and will throw an exception when called in that manner.
|
||||||
|
---*/
|
||||||
|
|
||||||
|
assert.throws(TypeError, function() {
|
||||||
|
class P extends Proxy {}
|
||||||
|
});
|
@ -0,0 +1,26 @@
|
|||||||
|
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 21.2.6.1
|
||||||
|
description: Instances has the own property lastIndex
|
||||||
|
info: >
|
||||||
|
21.2.6.1 lastIndex
|
||||||
|
|
||||||
|
The value of the lastIndex property specifies the String index at which to
|
||||||
|
start the next match. It is coerced to an integer when used (see 21.2.5.2.2).
|
||||||
|
This property shall have the attributes { [[Writable]]: true, [[Enumerable]]:
|
||||||
|
false, [[Configurable]]: false }.
|
||||||
|
includes: [propertyHelper.js]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class RE extends RegExp {}
|
||||||
|
|
||||||
|
var re = new RE('39?');
|
||||||
|
|
||||||
|
re.exec('TC39');
|
||||||
|
|
||||||
|
assert.sameValue(re.lastIndex, 0);
|
||||||
|
|
||||||
|
verifyWritable(re, 'lastIndex');
|
||||||
|
verifyNotEnumerable(re, 'lastIndex');
|
||||||
|
verifyNotConfigurable(re, 'lastIndex');
|
@ -0,0 +1,23 @@
|
|||||||
|
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 21.2.3
|
||||||
|
description: Subclassing the RegExp object
|
||||||
|
info: >
|
||||||
|
21.2.3 The RegExp Constructor
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
The RegExp 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 RegExp behaviour must include a super call to
|
||||||
|
the RegExp constructor to create and initialize subclass instances with the
|
||||||
|
necessary internal slots.
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class RE extends RegExp {}
|
||||||
|
|
||||||
|
var re = new RE(39);
|
||||||
|
|
||||||
|
assert.sameValue(re.test('TC39'), true);
|
||||||
|
assert.sameValue(re.test('42'), false);
|
@ -0,0 +1,32 @@
|
|||||||
|
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 21.2.3
|
||||||
|
description: Super need to be called to initialize internals
|
||||||
|
info: >
|
||||||
|
21.2.3 The RegExp Constructor
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
The RegExp 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 RegExp behaviour must include a super call to
|
||||||
|
the RegExp constructor to create and initialize subclass instances with the
|
||||||
|
necessary internal slots.
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class RE1 extends RegExp {
|
||||||
|
constructor() {}
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.throws(ReferenceError, function() {
|
||||||
|
new RE1();
|
||||||
|
});
|
||||||
|
|
||||||
|
class RE2 extends RegExp {
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
new RE2();
|
@ -0,0 +1,26 @@
|
|||||||
|
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 23.2.1
|
||||||
|
description: Subclassing the Set object
|
||||||
|
info: >
|
||||||
|
23.2.1 The Set Constructor
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
The Set constructor is designed to be subclassable. It may be used as the
|
||||||
|
value in an extends clause of a class definition. Subclass constructors that
|
||||||
|
intend to inherit the specified Set behaviour must include a super call to the
|
||||||
|
Set constructor to create and initialize the subclass instance with the
|
||||||
|
internal state necessary to support the Set.prototype built-in methods.
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class S extends Set {}
|
||||||
|
|
||||||
|
var set = new S([{}, {}]);
|
||||||
|
|
||||||
|
assert.sameValue(set.size, 2);
|
||||||
|
|
||||||
|
set.add({});
|
||||||
|
|
||||||
|
assert.sameValue(set.size, 3);
|
@ -0,0 +1,32 @@
|
|||||||
|
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 23.2.1
|
||||||
|
description: Super need to be called to initialize internals
|
||||||
|
info: >
|
||||||
|
23.2.1 The Set Constructor
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
The Set constructor is designed to be subclassable. It may be used as the
|
||||||
|
value in an extends clause of a class definition. Subclass constructors that
|
||||||
|
intend to inherit the specified Set behaviour must include a super call to the
|
||||||
|
Set constructor to create and initialize the subclass instance with the
|
||||||
|
internal state necessary to support the Set.prototype built-in methods.
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class S1 extends Set {
|
||||||
|
constructor() {}
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.throws(ReferenceError, function() {
|
||||||
|
new S1();
|
||||||
|
});
|
||||||
|
|
||||||
|
class S2 extends Set {
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
new S2();
|
@ -0,0 +1,30 @@
|
|||||||
|
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 21.1.4
|
||||||
|
description: Instances has the own property length
|
||||||
|
info: >
|
||||||
|
21.1.4 Properties of String Instances
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
String instances have a length property, and a set of enumerable properties
|
||||||
|
with integer indexed names.
|
||||||
|
includes: [propertyHelper.js]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class S extends String {}
|
||||||
|
|
||||||
|
var s1 = new S();
|
||||||
|
assert.sameValue(s1.length, 0);
|
||||||
|
|
||||||
|
verifyNotWritable(s1, 'length');
|
||||||
|
verifyNotEnumerable(s1, 'length');
|
||||||
|
verifyNotConfigurable(s1, 'length');
|
||||||
|
|
||||||
|
var s2 = new S('test262');
|
||||||
|
assert.sameValue(s2.length, 7);
|
||||||
|
|
||||||
|
verifyNotWritable(s2, 'length');
|
||||||
|
verifyNotEnumerable(s2, 'length');
|
||||||
|
verifyNotConfigurable(s2, 'length');
|
@ -0,0 +1,22 @@
|
|||||||
|
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 21.1.1
|
||||||
|
description: Subclassing the String object
|
||||||
|
info: >
|
||||||
|
21.1.1 The String Constructor
|
||||||
|
|
||||||
|
...
|
||||||
|
The String 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 String behaviour must include a super call to
|
||||||
|
the String constructor to create and initialize the subclass instance with a
|
||||||
|
[[StringData]] internal slot.
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class S extends String {}
|
||||||
|
|
||||||
|
var s = new S(' test262 ');
|
||||||
|
|
||||||
|
assert.sameValue(s.trim(), 'test262');
|
||||||
|
|
@ -0,0 +1,31 @@
|
|||||||
|
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 21.1.1
|
||||||
|
description: Super need to be called to initialize internals
|
||||||
|
info: >
|
||||||
|
21.1.1 The String Constructor
|
||||||
|
|
||||||
|
...
|
||||||
|
The String 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 String behaviour must include a super call to
|
||||||
|
the String constructor to create and initialize the subclass instance with a
|
||||||
|
[[StringData]] internal slot.
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class S1 extends String {
|
||||||
|
constructor() {}
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.throws(ReferenceError, function() {
|
||||||
|
new S1();
|
||||||
|
});
|
||||||
|
|
||||||
|
class S2 extends String {
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
new S2();
|
@ -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.4.1
|
||||||
|
description: Symbol subclass called with the new operator throws on super()
|
||||||
|
info: >
|
||||||
|
19.4.1 The Symbol Constructor
|
||||||
|
|
||||||
|
...
|
||||||
|
The Symbol constructor is not intended to be used with the new operator or to
|
||||||
|
be subclassed. It may be used as the value of an extends clause of a class
|
||||||
|
definition but a super call to the Symbol constructor will cause an exception.
|
||||||
|
|
||||||
|
19.4.1.1 Symbol ( [ description ] )
|
||||||
|
|
||||||
|
...
|
||||||
|
1. If NewTarget is not undefined, throw a TypeError exception.
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class S1 extends Symbol {}
|
||||||
|
|
||||||
|
assert.throws(TypeError, function() {
|
||||||
|
new S1();
|
||||||
|
});
|
||||||
|
|
||||||
|
class S2 extends Symbol {
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.throws(TypeError, function() {
|
||||||
|
new S2();
|
||||||
|
});
|
||||||
|
|
@ -0,0 +1,16 @@
|
|||||||
|
// 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.4.1
|
||||||
|
description: Symbol can be used as the value of an extends
|
||||||
|
info: >
|
||||||
|
19.4.1 The Symbol Constructor
|
||||||
|
|
||||||
|
...
|
||||||
|
The Symbol constructor is not intended to be used with the new operator or to
|
||||||
|
be subclassed. It may be used as the value of an extends clause of a class
|
||||||
|
definition but a super call to the Symbol constructor will cause an exception.
|
||||||
|
...
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class S extends Symbol {}
|
@ -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: 22.2.4
|
||||||
|
description: Subclassing TypedArrays
|
||||||
|
info: >
|
||||||
|
22.2.4 The TypedArray Constructors
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
The TypedArray constructors are designed to be subclassable. They may be used
|
||||||
|
as the value of an extends clause of a class definition. Subclass constructors
|
||||||
|
that intend to inherit the specified TypedArray behaviour must include a super
|
||||||
|
call to the TypedArray constructor to create and initialize the subclass
|
||||||
|
instance with the internal state necessary to support the
|
||||||
|
%TypedArray%.prototype built-in methods.
|
||||||
|
---*/
|
||||||
|
|
||||||
|
[
|
||||||
|
Int8Array,
|
||||||
|
Uint8Array,
|
||||||
|
Uint8ClampedArray,
|
||||||
|
Int16Array,
|
||||||
|
Uint16Array,
|
||||||
|
Int32Array,
|
||||||
|
Uint32Array,
|
||||||
|
Float32Array,
|
||||||
|
Float64Array
|
||||||
|
].forEach(function(Constructor) {
|
||||||
|
class Typed extends Constructor {}
|
||||||
|
|
||||||
|
var arr = new Typed(2);
|
||||||
|
|
||||||
|
assert.sameValue(arr.length, 2);
|
||||||
|
});
|
@ -0,0 +1,45 @@
|
|||||||
|
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 22.2.4
|
||||||
|
description: Super need to be called to initialize internals
|
||||||
|
info: >
|
||||||
|
22.2.4 The TypedArray Constructors
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
The TypedArray constructors are designed to be subclassable. They may be used
|
||||||
|
as the value of an extends clause of a class definition. Subclass constructors
|
||||||
|
that intend to inherit the specified TypedArray behaviour must include a super
|
||||||
|
call to the TypedArray constructor to create and initialize the subclass
|
||||||
|
instance with the internal state necessary to support the
|
||||||
|
%TypedArray%.prototype built-in methods.
|
||||||
|
---*/
|
||||||
|
|
||||||
|
[
|
||||||
|
Int8Array,
|
||||||
|
Uint8Array,
|
||||||
|
Uint8ClampedArray,
|
||||||
|
Int16Array,
|
||||||
|
Uint16Array,
|
||||||
|
Int32Array,
|
||||||
|
Uint32Array,
|
||||||
|
Float32Array,
|
||||||
|
Float64Array
|
||||||
|
].forEach(function(Constructor) {
|
||||||
|
class Typed extends Constructor {
|
||||||
|
constructor() {}
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.throws(ReferenceError, function() {
|
||||||
|
new Typed();
|
||||||
|
});
|
||||||
|
|
||||||
|
class TypedWithSuper extends Constructor {
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
new TypedWithSuper();
|
||||||
|
});
|
@ -0,0 +1,28 @@
|
|||||||
|
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 23.3.1
|
||||||
|
description: Subclassing the WeakMap object
|
||||||
|
info: >
|
||||||
|
23.3.1 The WeakMap Constructor
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
The WeakMap constructor is designed to be subclassable. It may be used as the
|
||||||
|
value in an extends clause of a class definition. Subclass constructors that
|
||||||
|
intend to inherit the specified WeakMap behaviour must include a super call to
|
||||||
|
the WeakMap constructor to create and initialize the subclass instance with
|
||||||
|
the internal state necessary to support the WeakMap.prototype built-in
|
||||||
|
methods.
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class WM extends WeakMap {}
|
||||||
|
|
||||||
|
var map = new WM();
|
||||||
|
var obj = {};
|
||||||
|
|
||||||
|
assert.sameValue(map.has(obj), false);
|
||||||
|
|
||||||
|
map.set(obj, 42);
|
||||||
|
assert.sameValue(map.has(obj), true);
|
||||||
|
assert.sameValue(map.get(obj), 42);
|
@ -0,0 +1,33 @@
|
|||||||
|
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 23.3.1
|
||||||
|
description: Super need to be called to initialize internals
|
||||||
|
info: >
|
||||||
|
23.3.1 The WeakMap Constructor
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
The WeakMap constructor is designed to be subclassable. It may be used as the
|
||||||
|
value in an extends clause of a class definition. Subclass constructors that
|
||||||
|
intend to inherit the specified WeakMap behaviour must include a super call to
|
||||||
|
the WeakMap constructor to create and initialize the subclass instance with
|
||||||
|
the internal state necessary to support the WeakMap.prototype built-in
|
||||||
|
methods.
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class M1 extends WeakMap {
|
||||||
|
constructor() {}
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.throws(ReferenceError, function() {
|
||||||
|
new M1();
|
||||||
|
});
|
||||||
|
|
||||||
|
class M2 extends WeakMap {
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
new M2();
|
@ -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: 23.4.1
|
||||||
|
description: Subclassing the WeakSet object
|
||||||
|
info: >
|
||||||
|
23.4.1 The WeakSet Constructor
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
The WeakSet constructor is designed to be subclassable. It may be used as the
|
||||||
|
value in an extends clause of a class definition. Subclass constructors that
|
||||||
|
intend to inherit the specified WeakSet behaviour must include a super call to
|
||||||
|
the WeakSet constructor to create and initialize the subclass instance with
|
||||||
|
the internal state necessary to support the WeakSet.prototype built-in
|
||||||
|
methods.
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class WS extends WeakSet {}
|
||||||
|
|
||||||
|
var set = new WS();
|
||||||
|
var obj = {};
|
||||||
|
|
||||||
|
assert.sameValue(set.has(obj), false);
|
||||||
|
|
||||||
|
set.add(obj);
|
||||||
|
assert.sameValue(set.has(obj), true);
|
@ -0,0 +1,33 @@
|
|||||||
|
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
es6id: 23.4.1
|
||||||
|
description: Super need to be called to initialize internals
|
||||||
|
info: >
|
||||||
|
23.4.1 The WeakSet Constructor
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
The WeakSet constructor is designed to be subclassable. It may be used as the
|
||||||
|
value in an extends clause of a class definition. Subclass constructors that
|
||||||
|
intend to inherit the specified WeakSet behaviour must include a super call to
|
||||||
|
the WeakSet constructor to create and initialize the subclass instance with
|
||||||
|
the internal state necessary to support the WeakSet.prototype built-in
|
||||||
|
methods.
|
||||||
|
---*/
|
||||||
|
|
||||||
|
class WS1 extends WeakSet {
|
||||||
|
constructor() {}
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.throws(ReferenceError, function() {
|
||||||
|
new WS1();
|
||||||
|
});
|
||||||
|
|
||||||
|
class WS2 extends WeakSet {
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
new WS2();
|
Loading…
x
Reference in New Issue
Block a user