Add tests for Subclassing the built-in Object

This commit is contained in:
Leonardo Balter 2016-01-06 16:48:38 -05:00
parent 7a87731d9c
commit cde62d08d8
4 changed files with 126 additions and 0 deletions

View File

@ -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();
});

View File

@ -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();
});

View 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'
);

View 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');