mirror of
				https://github.com/tc39/test262.git
				synced 2025-10-31 11:44:31 +01:00 
			
		
		
		
	Add coverage for non object values of the Properties arg of Object.create (#2238)
Fixes #2237
This commit is contained in:
		
							parent
							
								
									26a2268436
								
							
						
					
					
						commit
						d02fe7db38
					
				| @ -0,0 +1,35 @@ | ||||
| // Copyright (C) 2019 Leo Balter. All rights reserved.
 | ||||
| // This code is governed by the BSD license found in the LICENSE file.
 | ||||
| 
 | ||||
| /*--- | ||||
| esid: sec-object.create | ||||
| description: > | ||||
|   The Properties argument is cast to an object if it's a BigInt value | ||||
| info: | | ||||
|   Object.create ( O, Properties ) | ||||
| 
 | ||||
|   3. If Properties is not undefined, then | ||||
|     a. Return ? ObjectDefineProperties(obj, Properties). | ||||
| 
 | ||||
|   Runtime Semantics: ObjectDefineProperties ( O, Properties ) | ||||
| 
 | ||||
|   2. Let props be ? ToObject(Properties). | ||||
|   3. Let keys be ? props.[[OwnPropertyKeys]](). | ||||
|   ... | ||||
|   // All enumerable keys are added to the created object.
 | ||||
| features: [BigInt] | ||||
| ---*/ | ||||
| 
 | ||||
| var proto = {}; | ||||
| 
 | ||||
| var obj; | ||||
| obj = Object.create(proto, 1n); | ||||
| assert.sameValue(Object.getPrototypeOf(obj), proto, 'Properties is 1n: prototype is set'); | ||||
| assert.sameValue(Object.getOwnPropertyNames(obj).length, 0, 'Properties is 1n: no keys set'); | ||||
| assert.sameValue(Object.getOwnPropertySymbols(obj).length, 0, 'Properties is 1n: no symbol keys set'); | ||||
| 
 | ||||
| obj = undefined; | ||||
| obj = Object.create(proto, 0n); | ||||
| assert.sameValue(Object.getPrototypeOf(obj), proto, 'Properties is 0n: prototype is set'); | ||||
| assert.sameValue(Object.getOwnPropertyNames(obj).length, 0, 'Properties is 0n: no keys set'); | ||||
| assert.sameValue(Object.getOwnPropertySymbols(obj).length, 0, 'Properties is 0n: no symbol keys set'); | ||||
| @ -0,0 +1,35 @@ | ||||
| // Copyright (C) 2019 Leo Balter. All rights reserved.
 | ||||
| // This code is governed by the BSD license found in the LICENSE file.
 | ||||
| 
 | ||||
| /*--- | ||||
| esid: sec-object.create | ||||
| description: > | ||||
|   Throws a TypeError if the Properties argument is a non-empty string | ||||
| info: | | ||||
|   Object.create ( O, Properties ) | ||||
| 
 | ||||
|   3. If Properties is not undefined, then | ||||
|     a. Return ? ObjectDefineProperties(obj, Properties). | ||||
| 
 | ||||
|   Runtime Semantics: ObjectDefineProperties ( O, Properties ) | ||||
| 
 | ||||
|   2. Let props be ? ToObject(Properties). | ||||
|   3. Let keys be ? props.[[OwnPropertyKeys]](). | ||||
|   4. Let descriptors be a new empty List. | ||||
|   5. For each element nextKey of keys in List order, do | ||||
|     a. Let propDesc be ? props.[[GetOwnProperty]](nextKey). | ||||
|     b. If propDesc is not undefined and propDesc.[[Enumerable]] is true, then | ||||
|       i. Let descObj be ? Get(props, nextKey). | ||||
|       ii. Let desc be ? ToPropertyDescriptor(descObj). | ||||
| 
 | ||||
|   ToPropertyDescriptor ( Obj ) | ||||
| 
 | ||||
|   1. If Type(Obj) is not Object, throw a TypeError exception. | ||||
| ---*/ | ||||
| 
 | ||||
| // The first nextKey is 'h' and its OwnProperty in the String object is enumerable
 | ||||
| // Get(props, nextKey) is an equivalent of Object('hello')[nextKey]
 | ||||
| // The first descObj will be 'h', so it will throw in ToPropertyDescriptor
 | ||||
| assert.throws(TypeError, function() { | ||||
|   Object.create({}, 'hello'); | ||||
| }); | ||||
| @ -0,0 +1,21 @@ | ||||
| // Copyright (C) 2019 Leo Balter. All rights reserved.
 | ||||
| // This code is governed by the BSD license found in the LICENSE file.
 | ||||
| 
 | ||||
| /*--- | ||||
| esid: sec-object.create | ||||
| description: > | ||||
|   Throws a TypeError if the Properties argument is null | ||||
| info: | | ||||
|   Object.create ( O, Properties ) | ||||
| 
 | ||||
|   3. If Properties is not undefined, then | ||||
|     a. Return ? ObjectDefineProperties(obj, Properties). | ||||
| 
 | ||||
|   Runtime Semantics: ObjectDefineProperties ( O, Properties ) | ||||
| 
 | ||||
|   2. Let props be ? ToObject(Properties). | ||||
| ---*/ | ||||
| 
 | ||||
| assert.throws(TypeError, function() { | ||||
|   Object.create({}, null); | ||||
| }); | ||||
							
								
								
									
										59
									
								
								test/built-ins/Object/create/properties-arg-to-object.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								test/built-ins/Object/create/properties-arg-to-object.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,59 @@ | ||||
| // Copyright (C) 2019 Leo Balter. All rights reserved.
 | ||||
| // This code is governed by the BSD license found in the LICENSE file.
 | ||||
| 
 | ||||
| /*--- | ||||
| esid: sec-object.create | ||||
| description: > | ||||
|   The Properties argument is cast to an object if not undefined | ||||
| info: | | ||||
|   Object.create ( O, Properties ) | ||||
| 
 | ||||
|   3. If Properties is not undefined, then | ||||
|     a. Return ? ObjectDefineProperties(obj, Properties). | ||||
| 
 | ||||
|   Runtime Semantics: ObjectDefineProperties ( O, Properties ) | ||||
| 
 | ||||
|   2. Let props be ? ToObject(Properties). | ||||
|   3. Let keys be ? props.[[OwnPropertyKeys]](). | ||||
|   ... | ||||
|   // All enumerable keys are added to the created object.
 | ||||
| features: [Symbol] | ||||
| ---*/ | ||||
| 
 | ||||
| var proto = {}; | ||||
| 
 | ||||
| var obj; | ||||
| obj = Object.create(proto, true); | ||||
| assert.sameValue(Object.getPrototypeOf(obj), proto, 'Properties is true: prototype is set'); | ||||
| assert.sameValue(Object.getOwnPropertyNames(obj).length, 0, 'Properties is true: no keys set'); | ||||
| assert.sameValue(Object.getOwnPropertySymbols(obj).length, 0, 'Properties is true: no symbol keys set'); | ||||
| 
 | ||||
| obj = undefined; | ||||
| obj = Object.create(proto, false); | ||||
| assert.sameValue(Object.getPrototypeOf(obj), proto, 'Properties is false: prototype is set'); | ||||
| assert.sameValue(Object.getOwnPropertyNames(obj).length, 0, 'Properties is false: no keys set'); | ||||
| assert.sameValue(Object.getOwnPropertySymbols(obj).length, 0, 'Properties is false: no symbol keys set'); | ||||
| 
 | ||||
| obj = undefined; | ||||
| obj = Object.create(proto, 1); | ||||
| assert.sameValue(Object.getPrototypeOf(obj), proto, 'Properties is 1: prototype is set'); | ||||
| assert.sameValue(Object.getOwnPropertyNames(obj).length, 0, 'Properties is 1: no keys set'); | ||||
| assert.sameValue(Object.getOwnPropertySymbols(obj).length, 0, 'Properties is 1: no symbol keys set'); | ||||
| 
 | ||||
| obj = undefined; | ||||
| obj = Object.create(proto, NaN); | ||||
| assert.sameValue(Object.getPrototypeOf(obj), proto, 'Properties is NaN: prototype is set'); | ||||
| assert.sameValue(Object.getOwnPropertyNames(obj).length, 0, 'Properties is NaN: no keys set'); | ||||
| assert.sameValue(Object.getOwnPropertySymbols(obj).length, 0, 'Properties is NaN: no symbol keys set'); | ||||
| 
 | ||||
| obj = undefined; | ||||
| obj = Object.create(proto, ''); | ||||
| assert.sameValue(Object.getPrototypeOf(obj), proto, 'Properties is the empty string: prototype is set'); | ||||
| assert.sameValue(Object.getOwnPropertyNames(obj).length, 0, 'Properties is the empty string: no keys set'); | ||||
| assert.sameValue(Object.getOwnPropertySymbols(obj).length, 0, 'Properties is the empty string: no symbol keys set'); | ||||
| 
 | ||||
| obj = undefined; | ||||
| obj = Object.create(proto, Symbol('s')); | ||||
| assert.sameValue(Object.getPrototypeOf(obj), proto, 'Properties is symbol: prototype is set'); | ||||
| assert.sameValue(Object.getOwnPropertyNames(obj).length, 0, 'Properties is symbol: no keys set'); | ||||
| assert.sameValue(Object.getOwnPropertySymbols(obj).length, 0, 'Properties is symbol: no symbol keys set'); | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user