summaryrefslogtreecommitdiffstats
path: root/js/src/tests/test262/built-ins/Object/groupBy
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/tests/test262/built-ins/Object/groupBy')
-rw-r--r--js/src/tests/test262/built-ins/Object/groupBy/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/groupBy/callback-arg.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/groupBy/callback-throws.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/groupBy/emptyList.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/groupBy/evenOdd.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/groupBy/groupLength.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/groupBy/invalid-callback.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/groupBy/invalid-iterable.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/groupBy/invalid-property-key.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/groupBy/iterator-next-throws.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/groupBy/length.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/groupBy/name.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/groupBy/null-prototype.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/groupBy/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/groupBy/toPropertyKey.js38
15 files changed, 400 insertions, 0 deletions
diff --git a/js/src/tests/test262/built-ins/Object/groupBy/browser.js b/js/src/tests/test262/built-ins/Object/groupBy/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/groupBy/browser.js
diff --git a/js/src/tests/test262/built-ins/Object/groupBy/callback-arg.js b/js/src/tests/test262/built-ins/Object/groupBy/callback-arg.js
new file mode 100644
index 0000000000..945639607b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/groupBy/callback-arg.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2023 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.groupby
+description: Object.groupBy calls function with correct arguments
+info: |
+ Object.groupBy ( items, callbackfn )
+
+ ...
+ GroupBy ( items, callbackfn, coercion )
+
+ 6. Repeat,
+
+ e. Let key be Completion(Call(callbackfn, undefined, « value, 𝔽(k) »)).
+ ...
+features: [array-grouping]
+---*/
+
+
+const arr = [-0, 0, 1, 2, 3];
+
+let calls = 0;
+
+Object.groupBy(arr, function (n, i) {
+ calls++;
+ assert.sameValue(n, arr[i], "selected element aligns with index");
+ assert.sameValue(arguments.length, 2, "only two arguments are passed");
+ return null;
+});
+
+assert.sameValue(calls, 5, 'called for all 5 elements');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/groupBy/callback-throws.js b/js/src/tests/test262/built-ins/Object/groupBy/callback-throws.js
new file mode 100644
index 0000000000..3aa4030f17
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/groupBy/callback-throws.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2023 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.groupby
+description: Object.groupBy throws when callback throws
+info: |
+ Object.groupBy ( items, callbackfn )
+
+ ...
+ GroupBy ( items, callbackfn, coercion )
+
+ 6. Repeat,
+ e. Let key be Completion(Call(callbackfn, undefined, « value, 𝔽(k) »)).
+ f. IfAbruptCloseIterator(key, iteratorRecord).
+ ...
+features: [array-grouping]
+---*/
+
+assert.throws(Test262Error, function() {
+ const array = [1];
+ Object.groupBy(array, function() {
+ throw new Test262Error('throw in callback');
+ })
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/groupBy/emptyList.js b/js/src/tests/test262/built-ins/Object/groupBy/emptyList.js
new file mode 100644
index 0000000000..74f2f2d18c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/groupBy/emptyList.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2023 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.groupby
+description: Callback is not called and object is not populated if the iterable is empty
+info: |
+ Object.groupBy ( items, callbackfn )
+
+ ...
+ GroupBy ( items, callbackfn, coercion )
+
+ 6. Repeat,
+ c. If next is false, then
+ i. Return groups.
+ ...
+features: [array-grouping]
+---*/
+
+const original = [];
+
+const obj = Object.groupBy(original, function () {
+ throw new Test262Error('callback function should not be called')
+});
+
+assert.notSameValue(original, obj, 'Object.groupBy returns an object');
+assert.sameValue(Object.keys(obj).length, 0);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/groupBy/evenOdd.js b/js/src/tests/test262/built-ins/Object/groupBy/evenOdd.js
new file mode 100644
index 0000000000..b28522b1cb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/groupBy/evenOdd.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2023 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.groupby
+description: Object.groupBy populates object with correct keys and values
+info: |
+ Object.groupBy ( items, callbackfn )
+ ...
+includes: [compareArray.js]
+features: [array-grouping]
+---*/
+
+const array = [1, 2, 3];
+
+const obj = Object.groupBy(array, function (i) {
+ return i % 2 === 0 ? 'even' : 'odd';
+});
+
+assert.compareArray(Object.keys(obj), ['odd', 'even']);
+assert.compareArray(obj['even'], [2]);
+assert.compareArray(obj['odd'], [1, 3]);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/groupBy/groupLength.js b/js/src/tests/test262/built-ins/Object/groupBy/groupLength.js
new file mode 100644
index 0000000000..2ab88b9a0d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/groupBy/groupLength.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2023 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.groupby
+description: Callback can return numbers that are converted to property keys
+info: |
+ Object.groupBy ( items, callbackfn )
+
+ ...
+ GroupBy ( items, callbackfn, coercion )
+
+ 6. Repeat,
+ c. If next is false, then
+ i. Return groups.
+ ...
+includes: [compareArray.js]
+features: [array-grouping]
+---*/
+
+const arr = ['hello', 'test', 'world'];
+
+const obj = Object.groupBy(arr, function (i) { return i.length; });
+
+assert.compareArray(Object.keys(obj), ['4', '5']);
+assert.compareArray(obj['5'], ['hello', 'world']);
+assert.compareArray(obj['4'], ['test']);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/groupBy/invalid-callback.js b/js/src/tests/test262/built-ins/Object/groupBy/invalid-callback.js
new file mode 100644
index 0000000000..a8b54d33bd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/groupBy/invalid-callback.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2023 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.groupby
+description: Object.groupBy called with non-callable throws TypeError
+info: |
+ Object.groupBy ( items, callbackfn )
+
+ ...
+ GroupBy ( items, callbackfn, coercion )
+
+ 2. If IsCallable(callbackfn) is false, throw a TypeError exception.
+ ...
+features: [array-grouping]
+---*/
+
+
+assert.throws(TypeError, function() {
+ Object.groupBy([], null)
+}, "null callback throws TypeError");
+
+assert.throws(TypeError, function() {
+ Object.groupBy([], undefined)
+}, "undefined callback throws TypeError");
+
+assert.throws(TypeError, function() {
+ Object.groupBy([], {})
+}, "object callback throws TypeError");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/groupBy/invalid-iterable.js b/js/src/tests/test262/built-ins/Object/groupBy/invalid-iterable.js
new file mode 100644
index 0000000000..b5839b7f92
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/groupBy/invalid-iterable.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2023 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.groupby
+description: Object.groupBy with a nullish Symbol.iterator throws
+info: |
+ Object.groupBy ( items, callbackfn )
+
+ ...
+ GroupBy ( items, callbackfn, coercion )
+
+ 4. Let iteratorRecord be ? GetIterator(items).
+
+ ...
+features: [array-grouping]
+---*/
+
+const throws = function () {
+ throw new Test262Error('callback function should not be called')
+};
+
+function makeIterable(obj, iteratorFn) {
+ obj[Symbol.iterator] = iteratorFn;
+ return obj;
+}
+
+assert.throws(TypeError, function () {
+ Object.groupBy(makeIterable({}, undefined), throws);
+}, 'undefined Symbol.iterator');
+
+assert.throws(TypeError, function () {
+ Object.groupBy(makeIterable({}, null), throws);
+}, 'null Symbol.iterator');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/groupBy/invalid-property-key.js b/js/src/tests/test262/built-ins/Object/groupBy/invalid-property-key.js
new file mode 100644
index 0000000000..badc3b9137
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/groupBy/invalid-property-key.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2023 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.groupby
+description: Object.groupBy errors when callback return value cannot be converted to a property key.
+info: |
+ Object.groupBy ( items, callbackfn )
+
+ ...
+ GroupBy ( items, callbackfn, coercion )
+
+ 6. Repeat,
+ g. If coercion is property, then
+ i. Set key to Completion(ToPropertyKey(key)).
+ ii. IfAbruptCloseIterator(key, iteratorRecord).
+
+ ...
+features: [array-grouping]
+---*/
+
+assert.throws(Test262Error, function () {
+ const array = [1];
+ Object.groupBy(array, function () {
+ return {
+ toString() {
+ throw new Test262Error('not a property key');
+ }
+ };
+ })
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/groupBy/iterator-next-throws.js b/js/src/tests/test262/built-ins/Object/groupBy/iterator-next-throws.js
new file mode 100644
index 0000000000..01d981a0ab
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/groupBy/iterator-next-throws.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2023 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.groupby
+description: Object.groupBy throws when iterator next throws
+info: |
+ Object.groupBy ( items, callbackfn )
+
+ ...
+
+ GroupBy ( items, callbackfn, coercion )
+
+ 6. Repeat,
+ b. Let next be ? IteratorStep(iteratorRecord).
+
+ ...
+features: [array-grouping, Symbol.iterator]
+---*/
+
+const throwingIterator = {
+ [Symbol.iterator]: function () {
+ return this;
+ },
+ next: function next() {
+ throw new Test262Error('next() method was called');
+ }
+};
+
+assert.throws(Test262Error, function () {
+ Object.groupBy(throwingIterator, function () {
+ return 'key';
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/groupBy/length.js b/js/src/tests/test262/built-ins/Object/groupBy/length.js
new file mode 100644
index 0000000000..311ba7d028
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/groupBy/length.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2023 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.groupby
+description: Object.groupBy property length descriptor
+info: |
+ Object.groupBy ( items, callbackfn )
+
+ ...
+
+ 17 ECMAScript Standard Built-in Objects
+
+ ...
+
+includes: [propertyHelper.js]
+features: [array-grouping]
+---*/
+
+verifyProperty(Object.groupBy, "length", {
+ value: 2,
+ enumerable: false,
+ writable: false,
+ configurable: true
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/groupBy/name.js b/js/src/tests/test262/built-ins/Object/groupBy/name.js
new file mode 100644
index 0000000000..6ccfac61d1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/groupBy/name.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2023 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.groupby
+description: Object.groupBy property name descriptor
+info: |
+ Object.groupBy ( items, callbackfn )
+
+ ...
+
+ 17 ECMAScript Standard Built-in Objects
+
+ ...
+
+includes: [propertyHelper.js]
+features: [array-grouping]
+---*/
+
+verifyProperty(Object.groupBy, "name", {
+ value: "groupBy",
+ enumerable: false,
+ writable: false,
+ configurable: true
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/groupBy/null-prototype.js b/js/src/tests/test262/built-ins/Object/groupBy/null-prototype.js
new file mode 100644
index 0000000000..d524ef734a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/groupBy/null-prototype.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2023 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.groupby
+description: Object.groupBy returns a null prototype object
+info: |
+ Object.groupBy ( items, callbackfn )
+
+ ...
+
+ 2. Let obj be OrdinaryObjectCreate(null).
+ ...
+ 4. Return obj.
+
+ ...
+features: [array-grouping]
+---*/
+
+const array = [1, 2, 3];
+
+const obj = Object.groupBy(array, function (i) {
+ return i % 2 === 0 ? 'even' : 'odd';
+});
+
+assert.sameValue(Object.getPrototypeOf(obj), null);
+assert.sameValue(obj.hasOwnProperty, undefined);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/groupBy/shell.js b/js/src/tests/test262/built-ins/Object/groupBy/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/groupBy/shell.js
diff --git a/js/src/tests/test262/built-ins/Object/groupBy/toPropertyKey.js b/js/src/tests/test262/built-ins/Object/groupBy/toPropertyKey.js
new file mode 100644
index 0000000000..e24e36b98a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/groupBy/toPropertyKey.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2023 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.groupby
+description: Object.groupBy coerces return value with ToPropertyKey
+info: |
+ Object.groupBy ( items, callbackfn )
+
+ ...
+
+ GroupBy ( items, callbackfn, coercion )
+
+ 6. Repeat,
+ g. If coercion is property, then
+ i. Set key to Completion(ToPropertyKey(key)).
+ ii. IfAbruptCloseIterator(key, iteratorRecord).
+
+ ...
+includes: [compareArray.js]
+features: [array-grouping]
+---*/
+
+let calls = 0;
+const stringable = {
+ toString: function toString() {
+ return 1;
+ }
+}
+
+const array = [1, '1', stringable];
+
+const obj = Object.groupBy(array, function (v) { return v; });
+
+assert.compareArray(Object.keys(obj), ['1']);
+assert.compareArray(obj['1'], [1, '1', stringable]);
+
+reportCompare(0, 0);