Skip to content
Snippets Groups Projects
Commit cde62d08 authored by Leonardo Balter's avatar Leonardo Balter
Browse files

Add tests for Subclassing the built-in Object

parent 7a87731d
No related branches found
No related tags found
No related merge requests found
// 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();
});
// 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();
});
// 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'
);
// 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% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment