From bc51cfa0e01a1e1b5ab8fe94ccdb9d3c9fee848a Mon Sep 17 00:00:00 2001 From: Leonardo Balter Date: Wed, 29 Jul 2015 20:58:17 -0400 Subject: [PATCH] Add tests for Reflect.ownKeys --- test/built-ins/Reflect/ownKeys/length.js | 17 ++++++ test/built-ins/Reflect/ownKeys/name.js | 22 ++++++++ test/built-ins/Reflect/ownKeys/ownKeys.js | 17 ++++++ .../ownKeys/return-abrupt-from-result.js | 26 +++++++++ .../return-array-with-own-keys-only.js | 28 ++++++++++ .../Reflect/ownKeys/return-empty-array.js | 21 ++++++++ .../ownKeys/return-non-enumerable-keys.js | 37 +++++++++++++ .../ownKeys/return-on-corresponding-order.js | 54 +++++++++++++++++++ .../ownKeys/target-is-not-object-throws.js | 28 ++++++++++ .../ownKeys/target-is-symbol-throws.js | 17 ++++++ 10 files changed, 267 insertions(+) create mode 100644 test/built-ins/Reflect/ownKeys/length.js create mode 100644 test/built-ins/Reflect/ownKeys/name.js create mode 100644 test/built-ins/Reflect/ownKeys/ownKeys.js create mode 100644 test/built-ins/Reflect/ownKeys/return-abrupt-from-result.js create mode 100644 test/built-ins/Reflect/ownKeys/return-array-with-own-keys-only.js create mode 100644 test/built-ins/Reflect/ownKeys/return-empty-array.js create mode 100644 test/built-ins/Reflect/ownKeys/return-non-enumerable-keys.js create mode 100644 test/built-ins/Reflect/ownKeys/return-on-corresponding-order.js create mode 100644 test/built-ins/Reflect/ownKeys/target-is-not-object-throws.js create mode 100644 test/built-ins/Reflect/ownKeys/target-is-symbol-throws.js diff --git a/test/built-ins/Reflect/ownKeys/length.js b/test/built-ins/Reflect/ownKeys/length.js new file mode 100644 index 0000000000..b0abccab77 --- /dev/null +++ b/test/built-ins/Reflect/ownKeys/length.js @@ -0,0 +1,17 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 26.1.11 +description: > + Reflect.ownKeys.length value and property descriptor +includes: [propertyHelper.js] +---*/ + +assert.sameValue( + Reflect.ownKeys.length, 1, + 'The value of `Reflect.ownKeys.length` is `1`' +); + +verifyNotEnumerable(Reflect.ownKeys, 'length'); +verifyNotWritable(Reflect.ownKeys, 'length'); +verifyConfigurable(Reflect.ownKeys, 'length'); diff --git a/test/built-ins/Reflect/ownKeys/name.js b/test/built-ins/Reflect/ownKeys/name.js new file mode 100644 index 0000000000..6b31647c34 --- /dev/null +++ b/test/built-ins/Reflect/ownKeys/name.js @@ -0,0 +1,22 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 26.1.11 +description: > + Reflect.ownKeys.name value and property descriptor +info: > + 26.1.11 Reflect.ownKeys ( target ) + + 17 ECMAScript Standard Built-in Objects + +includes: [propertyHelper.js] +---*/ + +assert.sameValue( + Reflect.ownKeys.name, 'ownKeys', + 'The value of `Reflect.ownKeys.name` is `"ownKeys"`' +); + +verifyNotEnumerable(Reflect.ownKeys, 'name'); +verifyNotWritable(Reflect.ownKeys, 'name'); +verifyConfigurable(Reflect.ownKeys, 'name'); diff --git a/test/built-ins/Reflect/ownKeys/ownKeys.js b/test/built-ins/Reflect/ownKeys/ownKeys.js new file mode 100644 index 0000000000..4f217021b6 --- /dev/null +++ b/test/built-ins/Reflect/ownKeys/ownKeys.js @@ -0,0 +1,17 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 26.1.11 +description: > + Reflect.ownKeys is configurable, writable and not enumerable. +info: > + 26.1.11 Reflect.ownKeys ( target ) + + 17 ECMAScript Standard Built-in Objects + +includes: [propertyHelper.js] +---*/ + +verifyNotEnumerable(Reflect, 'ownKeys'); +verifyWritable(Reflect, 'ownKeys'); +verifyConfigurable(Reflect, 'ownKeys'); diff --git a/test/built-ins/Reflect/ownKeys/return-abrupt-from-result.js b/test/built-ins/Reflect/ownKeys/return-abrupt-from-result.js new file mode 100644 index 0000000000..9d972d556b --- /dev/null +++ b/test/built-ins/Reflect/ownKeys/return-abrupt-from-result.js @@ -0,0 +1,26 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 26.1.11 +description: > + Return abrupt result from target.[[OwnPropertyKeys]]() +info: > + 26.1.11 Reflect.ownKeys ( target ) + + ... + 2. Let keys be target.[[OwnPropertyKeys]](). + 3. ReturnIfAbrupt(keys). + ... +features: [Proxy] +---*/ + +var o = {}; +var p = new Proxy(o, { + ownKeys: function() { + throw new Test262Error(); + } +}); + +assert.throws(Test262Error, function() { + Reflect.ownKeys(p); +}); diff --git a/test/built-ins/Reflect/ownKeys/return-array-with-own-keys-only.js b/test/built-ins/Reflect/ownKeys/return-array-with-own-keys-only.js new file mode 100644 index 0000000000..040431b18c --- /dev/null +++ b/test/built-ins/Reflect/ownKeys/return-array-with-own-keys-only.js @@ -0,0 +1,28 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 26.1.11 +description: > + Returns target's own property keys only, ignore prototype keys. +info: > + 26.1.11 Reflect.ownKeys ( target ) + + ... + 2. Let keys be target.[[OwnPropertyKeys]](). + 3. ReturnIfAbrupt(keys). + 4. Return CreateArrayFromList(keys). +includes: [compareArray.js] +---*/ + +var proto = { + foo: 1 +}; + +var o = Object.create(proto); +o.p1 = 42; +o.p2 = 43; +o.p3 = 44; +assert( + compareArray(Reflect.ownKeys(o), ['p1', 'p2', 'p3']), + 'return object own keys' +); diff --git a/test/built-ins/Reflect/ownKeys/return-empty-array.js b/test/built-ins/Reflect/ownKeys/return-empty-array.js new file mode 100644 index 0000000000..6d102a6374 --- /dev/null +++ b/test/built-ins/Reflect/ownKeys/return-empty-array.js @@ -0,0 +1,21 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 26.1.11 +description: > + Returns empty array when target has now own properties. +info: > + 26.1.11 Reflect.ownKeys ( target ) + + ... + 2. Let keys be target.[[OwnPropertyKeys]](). + 3. ReturnIfAbrupt(keys). + 4. Return CreateArrayFromList(keys). +includes: [compareArray.js] +---*/ + +assert(compareArray(Reflect.ownKeys({}), [])); + +var o = {d: 42}; +delete o.d; +assert(compareArray(Reflect.ownKeys(o), [])); diff --git a/test/built-ins/Reflect/ownKeys/return-non-enumerable-keys.js b/test/built-ins/Reflect/ownKeys/return-non-enumerable-keys.js new file mode 100644 index 0000000000..06f759e589 --- /dev/null +++ b/test/built-ins/Reflect/ownKeys/return-non-enumerable-keys.js @@ -0,0 +1,37 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 26.1.11 +description: > + Returns target's own non enumerable property keys. +info: > + 26.1.11 Reflect.ownKeys ( target ) + + ... + 2. Let keys be target.[[OwnPropertyKeys]](). + 3. ReturnIfAbrupt(keys). + 4. Return CreateArrayFromList(keys). +includes: [compareArray.js] +---*/ + +assert( + compareArray(Reflect.ownKeys([]), ['length']), + 'return non enumerable `length` from empty array' +); + +assert( + compareArray(Reflect.ownKeys([,,2]), ['2', 'length']), + 'return array keys' +); + +var o = {}; +Object.defineProperty(o, 'p1', { + value: 42, + enumerable: false +}); +Object.defineProperty(o, 'p2', { + get: function() {}, + enumerable: false +}); + +assert(compareArray(Reflect.ownKeys(o), ['p1', 'p2'])); diff --git a/test/built-ins/Reflect/ownKeys/return-on-corresponding-order.js b/test/built-ins/Reflect/ownKeys/return-on-corresponding-order.js new file mode 100644 index 0000000000..ac99881788 --- /dev/null +++ b/test/built-ins/Reflect/ownKeys/return-on-corresponding-order.js @@ -0,0 +1,54 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 26.1.11 +description: > + Returns keys in their corresponding order. +info: > + 26.1.11 Reflect.ownKeys ( target ) + + ... + 2. Let keys be target.[[OwnPropertyKeys]](). + 3. ReturnIfAbrupt(keys). + 4. Return CreateArrayFromList(keys). + + 9.1.12 [[OwnPropertyKeys]] ( ) + + 1. Let keys be a new empty List. + 2. For each own property key P of O that is an integer index, in ascending + numeric index order + a. Add P as the last element of keys. + 3. For each own property key P of O that is a String but is not an integer + index, in property creation order + a. Add P as the last element of keys. + 4. For each own property key P of O that is a Symbol, in property creation + order + a. Add P as the last element of keys. + 5. Return keys. +features: [Symbol] +---*/ + + +var o = {}; +o.p1 = 42; +o.p2 = 43; + +var s1 = Symbol('1'); +var s2 = Symbol('a'); +o[s1] = 44; +o[s2] = 45; + +o[2] = 46; +o[0] = 47; +o[1] = 48; + +var result = Reflect.ownKeys(o); + +assert.sameValue(result.length, 7); +assert.sameValue(result[0], '0'); +assert.sameValue(result[1], '1'); +assert.sameValue(result[2], '2'); +assert.sameValue(result[3], 'p1'); +assert.sameValue(result[4], 'p2'); +assert.sameValue(result[5], s1); +assert.sameValue(result[6], s2); diff --git a/test/built-ins/Reflect/ownKeys/target-is-not-object-throws.js b/test/built-ins/Reflect/ownKeys/target-is-not-object-throws.js new file mode 100644 index 0000000000..1109b85ac5 --- /dev/null +++ b/test/built-ins/Reflect/ownKeys/target-is-not-object-throws.js @@ -0,0 +1,28 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 26.1.11 +description: > + Throws a TypeError if target is not an Object. +info: > + 26.1.11 Reflect.ownKeys ( target ) + + 1. If Type(target) is not Object, throw a TypeError exception. + ... +---*/ + +assert.throws(TypeError, function() { + Reflect.ownKeys(1); +}); + +assert.throws(TypeError, function() { + Reflect.ownKeys(null); +}); + +assert.throws(TypeError, function() { + Reflect.ownKeys(undefined); +}); + +assert.throws(TypeError, function() { + Reflect.ownKeys(''); +}); diff --git a/test/built-ins/Reflect/ownKeys/target-is-symbol-throws.js b/test/built-ins/Reflect/ownKeys/target-is-symbol-throws.js new file mode 100644 index 0000000000..ac1d72d804 --- /dev/null +++ b/test/built-ins/Reflect/ownKeys/target-is-symbol-throws.js @@ -0,0 +1,17 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +es6id: 26.1.11 +description: > + Throws a TypeError if target is a Symbol +info: > + 26.1.11 Reflect.ownKeys ( target ) + + 1. If Type(target) is not Object, throw a TypeError exception. + ... +features: [Symbol] +---*/ + +assert.throws(TypeError, function() { + Reflect.ownKeys(Symbol(1)); +});