mirror of https://github.com/tc39/test262.git
Add tests for Object.prototype extensibility and its immutable prototype
Object.prototype is extensible and an immutable prototype exotic object, it's [[Prototype]] value is null Ref tc39/ecma262#308
This commit is contained in:
parent
5cb97c293b
commit
df2d760d60
|
@ -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.
|
||||
/*---
|
||||
id: sec-properties-of-the-object-prototype-object
|
||||
description: >
|
||||
Object.prototype is still extensible and may have extensions prevented
|
||||
info: >
|
||||
19.1.3 Properties of the Object Prototype Object
|
||||
|
||||
The value of the [[Prototype]] internal slot of the Object prototype object is
|
||||
null and the initial value of the [[Extensible]] internal slot is true.
|
||||
---*/
|
||||
|
||||
assert(
|
||||
Object.isExtensible(Object.prototype),
|
||||
"Object.prototype is extensible"
|
||||
);
|
||||
|
||||
assert.sameValue(
|
||||
Object.preventExtensions(Object.prototype),
|
||||
Object.prototype,
|
||||
"Object.prototype may have extensions prevented"
|
||||
);
|
||||
|
||||
assert.sameValue(
|
||||
Object.isExtensible(Object.prototype),
|
||||
false,
|
||||
"Object.prototype is not extensible after a preventExtensions operation"
|
||||
);
|
|
@ -0,0 +1,14 @@
|
|||
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
id: sec-properties-of-the-object-prototype-object
|
||||
description: >
|
||||
The value of the [[Prototype]] internal slot of Object.prototype is null
|
||||
info: >
|
||||
19.1.3 Properties of the Object Prototype Object
|
||||
|
||||
The value of the [[Prototype]] internal slot of the Object prototype object is
|
||||
null and the initial value of the [[Extensible]] internal slot is true.
|
||||
---*/
|
||||
|
||||
assert.sameValue(Object.getPrototypeOf(Object.prototype), null);
|
|
@ -0,0 +1,52 @@
|
|||
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
id: sec-immutable-prototype-exotic-objects-setprototypeof-v
|
||||
description: >
|
||||
Object.prototype's [[SetPrototypeOf]] returns false if value is not the same
|
||||
info: >
|
||||
9.4.7.1 [[SetPrototypeOf]] (V)
|
||||
|
||||
...
|
||||
2. Let current be the value of the [[Prototype]] internal slot of O.
|
||||
3. If SameValue(V, current), return true.
|
||||
4. Return false.
|
||||
|
||||
19.1.3 Properties of the Object Prototype Object
|
||||
|
||||
The value of the [[Prototype]] internal slot of the Object prototype object is
|
||||
null and the initial value of the [[Extensible]] internal slot is true.
|
||||
features: [Reflect.setPrototypeOf]
|
||||
---*/
|
||||
|
||||
var ObjProto = Object.prototype;
|
||||
|
||||
assert.throws(TypeError, function() {
|
||||
Object.setPrototypeOf(ObjProto, {});
|
||||
}, "Object.setPrototypeOf(ObjProto, {}) throws a TypeError");
|
||||
|
||||
assert.throws(TypeError, function() {
|
||||
Object.setPrototypeOf(ObjProto, Array.prototype);
|
||||
}, "Object.setPrototypeOf(ObjProto, Array.prototype) throws a TypeError");
|
||||
|
||||
assert.throws(TypeError, function() {
|
||||
Object.setPrototypeOf(ObjProto, ObjProto);
|
||||
}, "Object.setPrototypeOf(ObjProto, ObjProto) throws a TypeError");
|
||||
|
||||
assert.sameValue(
|
||||
Reflect.setPrototypeOf(ObjProto, {}),
|
||||
false,
|
||||
"Reflect.setPrototypeOf(ObjProto, {}) returns false"
|
||||
);
|
||||
|
||||
assert.sameValue(
|
||||
Reflect.setPrototypeOf(ObjProto, Array.prototype),
|
||||
false,
|
||||
"Reflect.setPrototypeOf(ObjProto, Array.prototype) returns false"
|
||||
);
|
||||
|
||||
assert.sameValue(
|
||||
Reflect.setPrototypeOf(ObjProto, ObjProto),
|
||||
false,
|
||||
"Reflect.setPrototypeOf(ObjProto, ObjProto) returns false"
|
||||
);
|
|
@ -0,0 +1,44 @@
|
|||
// Copyright (C) 2016 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
id: sec-immutable-prototype-exotic-objects-setprototypeof-v
|
||||
description: >
|
||||
Object.prototype's [[SetPrototypeOf]] returns true if value is same
|
||||
info: >
|
||||
9.4.7.1 [[SetPrototypeOf]] (V)
|
||||
|
||||
...
|
||||
2. Let current be the value of the [[Prototype]] internal slot of O.
|
||||
3. If SameValue(V, current), return true.
|
||||
4. Return false.
|
||||
|
||||
19.1.3 Properties of the Object Prototype Object
|
||||
|
||||
The value of the [[Prototype]] internal slot of the Object prototype object is
|
||||
null and the initial value of the [[Extensible]] internal slot is true.
|
||||
features: [Reflect.setPrototypeOf]
|
||||
---*/
|
||||
|
||||
var ObjProto = Object.prototype;
|
||||
|
||||
assert.sameValue(
|
||||
Object.setPrototypeOf(ObjProto, null),
|
||||
ObjProto,
|
||||
"Object.setPrototypeOf(ObjProto, null) returns the Object.prototype"
|
||||
);
|
||||
|
||||
assert(
|
||||
Object.isExtensible(ObjProto),
|
||||
"Object.prototype is still extensible after a setPrototypeOf operation - #1"
|
||||
);
|
||||
|
||||
assert.sameValue(
|
||||
Reflect.setPrototypeOf(ObjProto, null),
|
||||
true,
|
||||
"Reflect.setPrototypeOf(ObjProto, null) returns true"
|
||||
);
|
||||
|
||||
assert(
|
||||
Object.isExtensible(ObjProto),
|
||||
"Object.prototype is still extensible after a setPrototypeOf operation - #2"
|
||||
);
|
Loading…
Reference in New Issue