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

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
parent 5cb97c29
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.
/*---
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"
);
// 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);
// 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"
);
// 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"
);
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