mirror of
				https://github.com/tc39/test262.git
				synced 2025-10-31 11:44:31 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			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)'
 | |
| );
 |