mirror of https://github.com/tc39/test262.git
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);
|
||||
});
|
|
@ -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…
Reference in New Issue