mirror of https://github.com/tc39/test262.git
179 lines
3.8 KiB
JavaScript
179 lines
3.8 KiB
JavaScript
// Copyright (C) 2017 the V8 project authors. All rights reserved.
|
|
// This code is governed by the BSD license found in the LICENSE file.
|
|
/*---
|
|
esid: prod-PropertyDefinition
|
|
description: >
|
|
computed __proto__ property key is assigned to an own property
|
|
info: |
|
|
12.2.6 Object Initializer
|
|
|
|
PropertyDefinition[Yield, Await] :
|
|
PropertyName[?Yield, ?Await] : AssignmentExpression[+In, ?Yield, ?Await]
|
|
|
|
PropertyName[Yield, Await] :
|
|
LiteralPropertyName
|
|
ComputedPropertyName[?Yield, ?Await]
|
|
|
|
ComputedPropertyName[Yield, Await] :
|
|
[ AssignmentExpression[+In, ?Yield, ?Await] ]
|
|
|
|
B.3.1__proto__ Property Names in Object Initializers
|
|
|
|
...
|
|
5. If propKey is the String value "__proto__" and if IsComputedPropertyKey(propKey)
|
|
is false, then
|
|
a. If Type(propValue) is either Object or Null, then
|
|
i. Return object.[[SetPrototypeOf]](propValue).
|
|
b. Return NormalCompletion(empty).
|
|
features: [Symbol]
|
|
---*/
|
|
|
|
var obj;
|
|
var sample = {};
|
|
|
|
obj = {
|
|
['__proto__']: sample
|
|
};
|
|
assert.sameValue(
|
|
Object.getPrototypeOf(obj),
|
|
Object.prototype,
|
|
'does not change the object prototype (ordinary object)'
|
|
);
|
|
assert(
|
|
obj.hasOwnProperty('__proto__'),
|
|
'computed __proto__ property is set as an own property (ordinary object)'
|
|
);
|
|
assert.sameValue(
|
|
obj.__proto__,
|
|
sample,
|
|
'value is properly defined (ordinary object)'
|
|
);
|
|
|
|
obj = {
|
|
['__proto__']: null
|
|
};
|
|
assert.sameValue(
|
|
Object.getPrototypeOf(obj),
|
|
Object.prototype,
|
|
'does not change the object prototype (null)'
|
|
);
|
|
assert(
|
|
obj.hasOwnProperty('__proto__'),
|
|
'computed __proto__ property is set as an own property (null)'
|
|
);
|
|
assert.sameValue(
|
|
obj.__proto__,
|
|
null,
|
|
'value is properly defined (null)'
|
|
);
|
|
|
|
obj = {
|
|
['__proto__']: undefined
|
|
};
|
|
assert.sameValue(
|
|
Object.getPrototypeOf(obj),
|
|
Object.prototype,
|
|
'does not change the object prototype (undefined)'
|
|
);
|
|
assert(
|
|
obj.hasOwnProperty('__proto__'),
|
|
'computed __proto__ property is set as an own property (undefined)'
|
|
);
|
|
assert.sameValue(
|
|
obj.__proto__,
|
|
undefined,
|
|
'value is properly defined (undefined)'
|
|
);
|
|
|
|
var func = function() {};
|
|
obj = {
|
|
['__proto__']: func
|
|
};
|
|
assert.sameValue(
|
|
Object.getPrototypeOf(obj),
|
|
Object.prototype,
|
|
'does not change the object prototype (func)'
|
|
);
|
|
assert(
|
|
obj.hasOwnProperty('__proto__'),
|
|
'computed __proto__ property is set as an own property (func)'
|
|
);
|
|
assert.sameValue(
|
|
obj.__proto__,
|
|
func,
|
|
'value is properly defined (func)'
|
|
);
|
|
|
|
var symbol = Symbol('Leo');
|
|
obj = {
|
|
['__proto__']: symbol
|
|
};
|
|
assert.sameValue(
|
|
Object.getPrototypeOf(obj),
|
|
Object.prototype,
|
|
'does not change the object prototype (symbol)'
|
|
);
|
|
assert(
|
|
obj.hasOwnProperty('__proto__'),
|
|
'computed __proto__ property is set as an own property (symbol)'
|
|
);
|
|
assert.sameValue(
|
|
obj.__proto__,
|
|
symbol,
|
|
'value is properly defined (symbol)'
|
|
);
|
|
|
|
obj = {
|
|
['__proto__']: 42
|
|
};
|
|
assert.sameValue(
|
|
Object.getPrototypeOf(obj),
|
|
Object.prototype,
|
|
'does not change the object prototype (number)'
|
|
);
|
|
assert(
|
|
obj.hasOwnProperty('__proto__'),
|
|
'computed __proto__ property is set as an own property (number)'
|
|
);
|
|
assert.sameValue(
|
|
obj.__proto__,
|
|
42,
|
|
'value is properly defined (number)'
|
|
);
|
|
|
|
obj = {
|
|
['__proto__']: ''
|
|
};
|
|
assert.sameValue(
|
|
Object.getPrototypeOf(obj),
|
|
Object.prototype,
|
|
'does not change the object prototype (string)'
|
|
);
|
|
assert(
|
|
obj.hasOwnProperty('__proto__'),
|
|
'computed __proto__ property is set as an own property (string)'
|
|
);
|
|
assert.sameValue(
|
|
obj.__proto__,
|
|
'',
|
|
'value is properly defined (string)'
|
|
);
|
|
|
|
obj = {
|
|
['__proto__']: false
|
|
};
|
|
assert.sameValue(
|
|
Object.getPrototypeOf(obj),
|
|
Object.prototype,
|
|
'does not change the object prototype (boolean)'
|
|
);
|
|
assert(
|
|
obj.hasOwnProperty('__proto__'),
|
|
'computed __proto__ property is set as an own property (boolean)'
|
|
);
|
|
assert.sameValue(
|
|
obj.__proto__,
|
|
false,
|
|
'value is properly defined (boolean)'
|
|
);
|