mirror of
https://github.com/tc39/test262.git
synced 2025-07-26 07:25:15 +02:00
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();
|
||||||
|
});
|
20
test/language/subclassing/Object/regular-subclassing.js
Normal file
20
test/language/subclassing/Object/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.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'
|
||||||
|
);
|
21
test/language/subclassing/Object/replacing-prototype.js
Normal file
21
test/language/subclassing/Object/replacing-prototype.js
Normal file
@ -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…
x
Reference in New Issue
Block a user