summaryrefslogtreecommitdiffstats
path: root/js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys')
-rw-r--r--js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/BigInt/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/BigInt/integer-indexes-and-string-and-symbol-keys-.js50
-rw-r--r--js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/BigInt/integer-indexes-and-string-keys.js43
-rw-r--r--js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/BigInt/integer-indexes.js38
-rw-r--r--js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/BigInt/not-enumerable-keys.js37
-rw-r--r--js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/BigInt/shell.js42
-rw-r--r--js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/integer-indexes-and-string-and-symbol-keys-.js50
-rw-r--r--js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/integer-indexes-and-string-keys.js43
-rw-r--r--js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/integer-indexes-resizable-array-buffer-auto.js70
-rw-r--r--js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/integer-indexes-resizable-array-buffer-fixed.js61
-rw-r--r--js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/integer-indexes.js38
-rw-r--r--js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/not-enumerable-keys.js37
-rw-r--r--js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/shell.js124
14 files changed, 633 insertions, 0 deletions
diff --git a/js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/BigInt/browser.js b/js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/BigInt/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/BigInt/browser.js
diff --git a/js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/BigInt/integer-indexes-and-string-and-symbol-keys-.js b/js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/BigInt/integer-indexes-and-string-and-symbol-keys-.js
new file mode 100644
index 0000000000..4aa72e5416
--- /dev/null
+++ b/js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/BigInt/integer-indexes-and-string-and-symbol-keys-.js
@@ -0,0 +1,50 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-integer-indexed-exotic-objects-ownpropertykeys
+description: >
+ Return integer index + non numeric string keys
+info: |
+ 9.4.5.6 [[OwnPropertyKeys]] ()
+
+ ...
+ 3. Let len be the value of O's [[ArrayLength]] internal slot.
+ 4. For each integer i starting with 0 such that i < len, in ascending order,
+ a. Add ! ToString(i) as the last element of keys.
+ ...
+includes: [testBigIntTypedArray.js, compareArray.js]
+features: [BigInt, Reflect, Symbol, TypedArray]
+---*/
+
+var s1 = Symbol("1");
+var s2 = Symbol("2");
+
+TypedArray.prototype[3] = 42;
+TypedArray.prototype.bar = 42;
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ var sample1 = new TA([42n, 42n, 42n]);
+ sample1[s1] = 42;
+ sample1[s2] = 42;
+ sample1.test262 = 42;
+ sample1.ecma262 = 42;
+ var result1 = Reflect.ownKeys(sample1);
+ assert(
+ compareArray(result1, ["0", "1", "2", "test262", "ecma262", s1, s2]),
+ "result1"
+ );
+
+ var sample2 = new TA(4).subarray(2);
+ sample2[s1] = 42;
+ sample2[s2] = 42;
+ sample2.test262 = 42;
+ sample2.ecma262 = 42;
+ var result2 = Reflect.ownKeys(sample2);
+ assert(
+ compareArray(result2, ["0", "1", "test262", "ecma262", s1, s2]),
+ "result2"
+ );
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/BigInt/integer-indexes-and-string-keys.js b/js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/BigInt/integer-indexes-and-string-keys.js
new file mode 100644
index 0000000000..5867283bf8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/BigInt/integer-indexes-and-string-keys.js
@@ -0,0 +1,43 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-integer-indexed-exotic-objects-ownpropertykeys
+description: >
+ Return integer index + non numeric string keys
+info: |
+ 9.4.5.6 [[OwnPropertyKeys]] ()
+
+ ...
+ 3. Let len be the value of O's [[ArrayLength]] internal slot.
+ 4. For each integer i starting with 0 such that i < len, in ascending order,
+ a. Add ! ToString(i) as the last element of keys.
+ ...
+includes: [testBigIntTypedArray.js, compareArray.js]
+features: [BigInt, Reflect, TypedArray]
+---*/
+
+TypedArray.prototype[3] = 42;
+TypedArray.prototype.bar = 42;
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ var sample1 = new TA([42n, 42n, 42n]);
+ sample1.test262 = 42;
+ sample1.ecma262 = 42;
+ var result1 = Reflect.ownKeys(sample1);
+ assert(
+ compareArray(result1, ["0", "1", "2", "test262", "ecma262"]),
+ "result1"
+ );
+
+ var sample2 = new TA(4).subarray(2);
+ sample2.test262 = 42;
+ sample2.ecma262 = 42;
+ var result2 = Reflect.ownKeys(sample2);
+ assert(
+ compareArray(result2, ["0", "1", "test262", "ecma262"]),
+ "result2"
+ );
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/BigInt/integer-indexes.js b/js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/BigInt/integer-indexes.js
new file mode 100644
index 0000000000..596d2d59a1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/BigInt/integer-indexes.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-integer-indexed-exotic-objects-ownpropertykeys
+description: >
+ Return keys
+info: |
+ 9.4.5.6 [[OwnPropertyKeys]] ()
+
+ ...
+ 3. Let len be the value of O's [[ArrayLength]] internal slot.
+ 4. For each integer i starting with 0 such that i < len, in ascending order,
+ a. Add ! ToString(i) as the last element of keys.
+ ...
+includes: [testBigIntTypedArray.js, compareArray.js]
+features: [BigInt, Reflect, TypedArray]
+---*/
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ var sample1 = new TA([42n, 42n, 42n]);
+ var result1 = Reflect.ownKeys(sample1);
+ assert(compareArray(result1, ["0", "1", "2"]), "result1");
+
+ var sample2 = new TA(4);
+ var result2 = Reflect.ownKeys(sample2);
+ assert(compareArray(result2, ["0", "1", "2", "3"]), "result2");
+
+ var sample3 = new TA(4).subarray(2);
+ var result3 = Reflect.ownKeys(sample3);
+ assert(compareArray(result3, ["0", "1"]), "result3");
+
+ var sample4 = new TA();
+ var result4 = Reflect.ownKeys(sample4);
+ assert(compareArray(result4, []), "result4");
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/BigInt/not-enumerable-keys.js b/js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/BigInt/not-enumerable-keys.js
new file mode 100644
index 0000000000..06439e1441
--- /dev/null
+++ b/js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/BigInt/not-enumerable-keys.js
@@ -0,0 +1,37 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-integer-indexed-exotic-objects-ownpropertykeys
+description: >
+ List not-enumerable own keys
+info: |
+ 9.4.5.6 [[OwnPropertyKeys]] ()
+
+ ...
+ 3. Let len be the value of O's [[ArrayLength]] internal slot.
+ 4. For each integer i starting with 0 such that i < len, in ascending order,
+ a. Add ! ToString(i) as the last element of keys.
+ ...
+includes: [testBigIntTypedArray.js, compareArray.js]
+features: [BigInt, Reflect, Symbol, TypedArray]
+---*/
+
+var s = Symbol("1");
+
+testWithBigIntTypedArrayConstructors(function(TA) {
+ var sample = new TA();
+
+ Object.defineProperty(sample, s, {
+ value: 42,
+ enumerable: false
+ });
+ Object.defineProperty(sample, "test262", {
+ value: 42,
+ enumerable: false
+ });
+ var result = Reflect.ownKeys(sample);
+ assert(compareArray(result, ["test262", s]));
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/BigInt/shell.js b/js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/BigInt/shell.js
new file mode 100644
index 0000000000..90ee9c114d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/BigInt/shell.js
@@ -0,0 +1,42 @@
+// GENERATED, DO NOT EDIT
+// file: testBigIntTypedArray.js
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: |
+ Collection of functions used to assert the correctness of BigInt TypedArray objects.
+defines:
+ - TypedArray
+ - testWithBigIntTypedArrayConstructors
+---*/
+
+/**
+ * The %TypedArray% intrinsic constructor function.
+ */
+var TypedArray = Object.getPrototypeOf(Int8Array);
+
+/**
+ * Calls the provided function for every typed array constructor.
+ *
+ * @param {typedArrayConstructorCallback} f - the function to call for each typed array constructor.
+ * @param {Array} selected - An optional Array with filtered typed arrays
+ */
+function testWithBigIntTypedArrayConstructors(f, selected) {
+ /**
+ * Array containing every BigInt typed array constructor.
+ */
+ var constructors = selected || [
+ BigInt64Array,
+ BigUint64Array
+ ];
+
+ for (var i = 0; i < constructors.length; ++i) {
+ var constructor = constructors[i];
+ try {
+ f(constructor);
+ } catch (e) {
+ e.message += " (Testing with " + constructor.name + ".)";
+ throw e;
+ }
+ }
+}
diff --git a/js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/browser.js b/js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/browser.js
diff --git a/js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/integer-indexes-and-string-and-symbol-keys-.js b/js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/integer-indexes-and-string-and-symbol-keys-.js
new file mode 100644
index 0000000000..ebf707791b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/integer-indexes-and-string-and-symbol-keys-.js
@@ -0,0 +1,50 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-integer-indexed-exotic-objects-ownpropertykeys
+description: >
+ Return integer index + non numeric string keys
+info: |
+ 9.4.5.6 [[OwnPropertyKeys]] ()
+
+ ...
+ 3. Let len be the value of O's [[ArrayLength]] internal slot.
+ 4. For each integer i starting with 0 such that i < len, in ascending order,
+ a. Add ! ToString(i) as the last element of keys.
+ ...
+includes: [testTypedArray.js, compareArray.js]
+features: [Reflect, Symbol, TypedArray]
+---*/
+
+var s1 = Symbol("1");
+var s2 = Symbol("2");
+
+TypedArray.prototype[3] = 42;
+TypedArray.prototype.bar = 42;
+
+testWithTypedArrayConstructors(function(TA) {
+ var sample1 = new TA([42, 42, 42]);
+ sample1[s1] = 42;
+ sample1[s2] = 42;
+ sample1.test262 = 42;
+ sample1.ecma262 = 42;
+ var result1 = Reflect.ownKeys(sample1);
+ assert(
+ compareArray(result1, ["0", "1", "2", "test262", "ecma262", s1, s2]),
+ "result1"
+ );
+
+ var sample2 = new TA(4).subarray(2);
+ sample2[s1] = 42;
+ sample2[s2] = 42;
+ sample2.test262 = 42;
+ sample2.ecma262 = 42;
+ var result2 = Reflect.ownKeys(sample2);
+ assert(
+ compareArray(result2, ["0", "1", "test262", "ecma262", s1, s2]),
+ "result2"
+ );
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/integer-indexes-and-string-keys.js b/js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/integer-indexes-and-string-keys.js
new file mode 100644
index 0000000000..00532ce8b2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/integer-indexes-and-string-keys.js
@@ -0,0 +1,43 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-integer-indexed-exotic-objects-ownpropertykeys
+description: >
+ Return integer index + non numeric string keys
+info: |
+ 9.4.5.6 [[OwnPropertyKeys]] ()
+
+ ...
+ 3. Let len be the value of O's [[ArrayLength]] internal slot.
+ 4. For each integer i starting with 0 such that i < len, in ascending order,
+ a. Add ! ToString(i) as the last element of keys.
+ ...
+includes: [testTypedArray.js, compareArray.js]
+features: [Reflect, TypedArray]
+---*/
+
+TypedArray.prototype[3] = 42;
+TypedArray.prototype.bar = 42;
+
+testWithTypedArrayConstructors(function(TA) {
+ var sample1 = new TA([42, 42, 42]);
+ sample1.test262 = 42;
+ sample1.ecma262 = 42;
+ var result1 = Reflect.ownKeys(sample1);
+ assert(
+ compareArray(result1, ["0", "1", "2", "test262", "ecma262"]),
+ "result1"
+ );
+
+ var sample2 = new TA(4).subarray(2);
+ sample2.test262 = 42;
+ sample2.ecma262 = 42;
+ var result2 = Reflect.ownKeys(sample2);
+ assert(
+ compareArray(result2, ["0", "1", "test262", "ecma262"]),
+ "result2"
+ );
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/integer-indexes-resizable-array-buffer-auto.js b/js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/integer-indexes-resizable-array-buffer-auto.js
new file mode 100644
index 0000000000..a2ae71b171
--- /dev/null
+++ b/js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/integer-indexes-resizable-array-buffer-auto.js
@@ -0,0 +1,70 @@
+// |reftest| skip -- resizable-arraybuffer is not supported
+// Copyright (C) 2021 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-integer-indexed-exotic-objects-ownpropertykeys
+description: returned keys reflect resized ArrayBuffer for a dynamically-sized TypedArray
+info: |
+ 9.4.5.6 [[OwnPropertyKeys]] ()
+
+ ...
+ 3. Let getBufferByteLength be !
+ MakeIdempotentArrayBufferByteLengthGetter(SeqCst).
+ 4. Let len be IntegerIndexedObjectLength(O, getBufferByteLength).
+ 5. For each integer i starting with 0 such that i < len, in ascending order,
+ a. Add ! ToString(i) as the last element of keys.
+ ...
+includes: [testTypedArray.js]
+features: [Reflect, TypedArray, resizable-arraybuffer]
+---*/
+
+// If the host chooses to throw as allowed by the specification, the observed
+// behavior will be identical to the case where `ArrayBuffer.prototype.resize`
+// has not been implemented. The following assertion prevents this test from
+// passing in runtimes which have not implemented the method.
+assert.sameValue(typeof ArrayBuffer.prototype.resize, "function");
+
+testWithTypedArrayConstructors(function(TA) {
+ var BPE = TA.BYTES_PER_ELEMENT;
+ var ab = new ArrayBuffer(BPE * 4, {maxByteLength: BPE * 5});
+ var array = new TA(ab, BPE);
+ var expected = "0,1,2";
+
+ assert.sameValue(Reflect.ownKeys(array).join(","), expected, "initial");
+
+ try {
+ ab.resize(BPE * 5);
+ expected = "0,1,2,3";
+ } catch (_) {}
+
+ assert.sameValue(Reflect.ownKeys(array).join(","), expected, "following grow");
+
+ try {
+ ab.resize(BPE * 3);
+ expected = "0,1";
+ } catch (_) {}
+
+ assert.sameValue(
+ Reflect.ownKeys(array).join(","), expected, "following shrink (within bounds)"
+ );
+
+ try {
+ ab.resize(BPE);
+ expected = "";
+ } catch (_) {}
+
+ assert.sameValue(
+ Reflect.ownKeys(array).join(","), expected, "following shrink (on boundary)"
+ );
+
+ try {
+ ab.resize(0);
+ expected = "";
+ } catch (_) {}
+
+ assert.sameValue(
+ Reflect.ownKeys(array).join(","), expected, "following shrink (out of bounds)"
+ );
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/integer-indexes-resizable-array-buffer-fixed.js b/js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/integer-indexes-resizable-array-buffer-fixed.js
new file mode 100644
index 0000000000..0c0b90db6d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/integer-indexes-resizable-array-buffer-fixed.js
@@ -0,0 +1,61 @@
+// |reftest| skip -- resizable-arraybuffer is not supported
+// Copyright (C) 2021 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-integer-indexed-exotic-objects-ownpropertykeys
+description: returned keys reflect resized ArrayBuffer for a fixed-sized TypedArray
+info: |
+ 9.4.5.6 [[OwnPropertyKeys]] ()
+
+ ...
+ 3. Let getBufferByteLength be !
+ MakeIdempotentArrayBufferByteLengthGetter(SeqCst).
+ 4. Let len be IntegerIndexedObjectLength(O, getBufferByteLength).
+ 5. For each integer i starting with 0 such that i < len, in ascending order,
+ a. Add ! ToString(i) as the last element of keys.
+ ...
+includes: [testTypedArray.js]
+features: [Reflect, TypedArray, resizable-arraybuffer]
+---*/
+
+// If the host chooses to throw as allowed by the specification, the observed
+// behavior will be identical to the case where `ArrayBuffer.prototype.resize`
+// has not been implemented. The following assertion prevents this test from
+// passing in runtimes which have not implemented the method.
+assert.sameValue(typeof ArrayBuffer.prototype.resize, "function");
+
+testWithTypedArrayConstructors(function(TA) {
+ var BPE = TA.BYTES_PER_ELEMENT;
+ var ab = new ArrayBuffer(BPE * 4, {maxByteLength: BPE * 5});
+ var array = new TA(ab, BPE, 2);
+
+ assert.sameValue(Reflect.ownKeys(array).join(","), "0,1", "initial");
+
+ try {
+ ab.resize(BPE * 5);
+ } catch (_) {}
+
+ assert.sameValue(Reflect.ownKeys(array).join(","), "0,1", "following grow");
+
+ try {
+ ab.resize(BPE * 3);
+ } catch (_) {}
+
+ assert.sameValue(
+ Reflect.ownKeys(array).join(","), "0,1", "following shrink (within bounds)"
+ );
+
+ var expected;
+ try {
+ ab.resize(BPE * 2);
+ expected = "";
+ } catch (_) {
+ expected = "0,1";
+ }
+
+ assert.sameValue(
+ Reflect.ownKeys(array).join(","), expected, "following shrink (out of bounds)"
+ );
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/integer-indexes.js b/js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/integer-indexes.js
new file mode 100644
index 0000000000..b731decd95
--- /dev/null
+++ b/js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/integer-indexes.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-integer-indexed-exotic-objects-ownpropertykeys
+description: >
+ Return keys
+info: |
+ 9.4.5.6 [[OwnPropertyKeys]] ()
+
+ ...
+ 3. Let len be the value of O's [[ArrayLength]] internal slot.
+ 4. For each integer i starting with 0 such that i < len, in ascending order,
+ a. Add ! ToString(i) as the last element of keys.
+ ...
+includes: [testTypedArray.js, compareArray.js]
+features: [Reflect, TypedArray]
+---*/
+
+testWithTypedArrayConstructors(function(TA) {
+ var sample1 = new TA([42, 42, 42]);
+ var result1 = Reflect.ownKeys(sample1);
+ assert(compareArray(result1, ["0", "1", "2"]), "result1");
+
+ var sample2 = new TA(4);
+ var result2 = Reflect.ownKeys(sample2);
+ assert(compareArray(result2, ["0", "1", "2", "3"]), "result2");
+
+ var sample3 = new TA(4).subarray(2);
+ var result3 = Reflect.ownKeys(sample3);
+ assert(compareArray(result3, ["0", "1"]), "result3");
+
+ var sample4 = new TA();
+ var result4 = Reflect.ownKeys(sample4);
+ assert(compareArray(result4, []), "result4");
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/not-enumerable-keys.js b/js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/not-enumerable-keys.js
new file mode 100644
index 0000000000..9c78932877
--- /dev/null
+++ b/js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/not-enumerable-keys.js
@@ -0,0 +1,37 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-integer-indexed-exotic-objects-ownpropertykeys
+description: >
+ List not-enumerable own keys
+info: |
+ 9.4.5.6 [[OwnPropertyKeys]] ()
+
+ ...
+ 3. Let len be the value of O's [[ArrayLength]] internal slot.
+ 4. For each integer i starting with 0 such that i < len, in ascending order,
+ a. Add ! ToString(i) as the last element of keys.
+ ...
+includes: [testTypedArray.js, compareArray.js]
+features: [Reflect, Symbol, TypedArray]
+---*/
+
+var s = Symbol("1");
+
+testWithTypedArrayConstructors(function(TA) {
+ var sample = new TA();
+
+ Object.defineProperty(sample, s, {
+ value: 42,
+ enumerable: false
+ });
+ Object.defineProperty(sample, "test262", {
+ value: 42,
+ enumerable: false
+ });
+ var result = Reflect.ownKeys(sample);
+ assert(compareArray(result, ["test262", s]));
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/shell.js b/js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/shell.js
new file mode 100644
index 0000000000..e9580b3113
--- /dev/null
+++ b/js/src/tests/test262/built-ins/TypedArrayConstructors/internals/OwnPropertyKeys/shell.js
@@ -0,0 +1,124 @@
+// GENERATED, DO NOT EDIT
+// file: testTypedArray.js
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: |
+ Collection of functions used to assert the correctness of TypedArray objects.
+defines:
+ - typedArrayConstructors
+ - floatArrayConstructors
+ - intArrayConstructors
+ - TypedArray
+ - testWithTypedArrayConstructors
+ - testWithAtomicsFriendlyTypedArrayConstructors
+ - testWithNonAtomicsFriendlyTypedArrayConstructors
+ - testTypedArrayConversions
+---*/
+
+/**
+ * Array containing every typed array constructor.
+ */
+var typedArrayConstructors = [
+ Float64Array,
+ Float32Array,
+ Int32Array,
+ Int16Array,
+ Int8Array,
+ Uint32Array,
+ Uint16Array,
+ Uint8Array,
+ Uint8ClampedArray
+];
+
+var floatArrayConstructors = typedArrayConstructors.slice(0, 2);
+var intArrayConstructors = typedArrayConstructors.slice(2, 7);
+
+/**
+ * The %TypedArray% intrinsic constructor function.
+ */
+var TypedArray = Object.getPrototypeOf(Int8Array);
+
+/**
+ * Callback for testing a typed array constructor.
+ *
+ * @callback typedArrayConstructorCallback
+ * @param {Function} Constructor the constructor object to test with.
+ */
+
+/**
+ * Calls the provided function for every typed array constructor.
+ *
+ * @param {typedArrayConstructorCallback} f - the function to call for each typed array constructor.
+ * @param {Array} selected - An optional Array with filtered typed arrays
+ */
+function testWithTypedArrayConstructors(f, selected) {
+ var constructors = selected || typedArrayConstructors;
+ for (var i = 0; i < constructors.length; ++i) {
+ var constructor = constructors[i];
+ try {
+ f(constructor);
+ } catch (e) {
+ e.message += " (Testing with " + constructor.name + ".)";
+ throw e;
+ }
+ }
+}
+
+/**
+ * Calls the provided function for every non-"Atomics Friendly" typed array constructor.
+ *
+ * @param {typedArrayConstructorCallback} f - the function to call for each typed array constructor.
+ * @param {Array} selected - An optional Array with filtered typed arrays
+ */
+function testWithNonAtomicsFriendlyTypedArrayConstructors(f) {
+ testWithTypedArrayConstructors(f, [
+ Float64Array,
+ Float32Array,
+ Uint8ClampedArray
+ ]);
+}
+
+/**
+ * Calls the provided function for every "Atomics Friendly" typed array constructor.
+ *
+ * @param {typedArrayConstructorCallback} f - the function to call for each typed array constructor.
+ * @param {Array} selected - An optional Array with filtered typed arrays
+ */
+function testWithAtomicsFriendlyTypedArrayConstructors(f) {
+ testWithTypedArrayConstructors(f, [
+ Int32Array,
+ Int16Array,
+ Int8Array,
+ Uint32Array,
+ Uint16Array,
+ Uint8Array,
+ ]);
+}
+
+/**
+ * Helper for conversion operations on TypedArrays, the expected values
+ * properties are indexed in order to match the respective value for each
+ * TypedArray constructor
+ * @param {Function} fn - the function to call for each constructor and value.
+ * will be called with the constructor, value, expected
+ * value, and a initial value that can be used to avoid
+ * a false positive with an equivalent expected value.
+ */
+function testTypedArrayConversions(byteConversionValues, fn) {
+ var values = byteConversionValues.values;
+ var expected = byteConversionValues.expected;
+
+ testWithTypedArrayConstructors(function(TA) {
+ var name = TA.name.slice(0, -5);
+
+ return values.forEach(function(value, index) {
+ var exp = expected[name][index];
+ var initial = 0;
+ if (exp === 0) {
+ initial = 1;
+ }
+ fn(TA, value, exp, initial);
+ });
+ });
+}