mirror of https://github.com/tc39/test262.git
Add tests for Subclassing the built-in Object
This commit is contained in:
parent
7a87731d9c
commit
cde62d08d8
|
@ -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');
|
Loading…
Reference in New Issue